Sobes.tech
Middle+

Kako biste projektovali aplikaciju za parking automobila na Vue.js?

sobes.tech АИ

Одговор од АИ

Koristio bih komponentni pristup u Vue.js.

Arhitektura:

  • App.vue: Korenska komponenta. Sadrži ruter i osnovne šablone.
  • Views: Stranice (ParkingLotsPage.vue, ParkingLotDetailsPage.vue).
  • Components: Ponavljajuće komponente (ParkingLotCard.vue, SlotStatus.vue, VehicleForm.vue).
  • Stores: Pinia za upravljanje stanjem (lista parkinga, popunjenost mesta).
  • Services: Moduli za rad sa API-jem (dobijanje podataka o parkingu, registracija/oslobađanje mesta).

Stanje (Pinia):

  • parkingLots: Niz objekata parkinga.
  • selectedParkingLot: Trenutno odabrani parking.
  • loading: Stanje učitavanja.
// stores/parking.js
import { defineStore } from 'pinia';

export const useParkingStore = defineStore('parking', {
  state: () => ({
    parkingLots: [],
    selectedParkingLot: null,
    loading: false,
  }),
  actions: {
    async fetchParkingLots() {
      this.loading = true;
      // Simulacija API zahteva
      await new Promise(resolve => setTimeout(resolve, 1000));
      this.parkingLots = [
        { id: 1, name: 'Parking 1', capacity: 100, occupied: 50 },
        { id: 2, name: 'Parking 2', capacity: 200, occupied: 120 },
      ];
      this.loading = false;
    },
    selectParkingLot(lotId) {
      this.selectedParkingLot = this.parkingLots.find(lot => lot.id === lotId);
    },
    // Dodatne akcije za registraciju/oslobađanje mesta
  },
});

Routing (Vue Router):

  • /parking-lots: Lista parkinga.
  • /parking-lots/:id: Detalji određenog parkinga.
// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import ParkingLotsPage from '@/views/ParkingLotsPage.vue';
import ParkingLotDetailsPage from '@/views/ParkingLotDetailsPage.vue';

const routes = [
  {
    path: '/parking-lots',
    name: 'ParkingLots',
    component: ParkingLotsPage,
  },
  {
    path: '/parking-lots/:id',
    name: 'ParkingLotDetails',
    component: ParkingLotDetailsPage,
    props: true, // prosleđivanje parametara rute kao props
  },
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes,
});

export default router;

Komponente:

  • ParkingLotsPage.vue:
    • Dobija listu parkinga iz Pinia.
    • Prikazuje ParkingLotCard za svaki parking.
  • ParkingLotCard.vue:
    • Prima objekat parkinga kao prop.
    • Prikazuje naziv, kapacitet i zauzetost.
    • Dugme za navigaciju ka detaljima parkinga.
  • ParkingLotDetailsPage.vue:
    • Dobija id iz parametara rute.
    • Koristi ga za izbor parkinga iz Pinia ili učitavanje detalja.
    • Prikazuje mapu parkinga (može se realizovati pomoću više SlotStatus komponenti).
    • Forma za registraciju/oslobađanje automobila (VehicleForm.vue).
  • SlotStatus.vue:
    • Prima status slota (slobodan/zauzet).
    • Prikazuje odgovarajuću boju/ikonu.
  • VehicleForm.vue:
    • Forma za unos registarskog broja i izbor akcije (ulaz/izlaz).
    • Šalje podatke u Pinia/Service.

Stilizacija:

  • Koristite SCSS ili CSS module za komponentno stilizovanje.
  • Primijenite flexbox ili grid za raspored elemenata.

Dodatne mogućnosti:

  • Prava komunikacija sa backendom putem API-ja.
  • Registracija korisnika i njihovih automobila.
  • Istorija parkiranja.
  • Sistem obaveštenja.
  • Sistem plaćanja.

Ovo je osnovna struktura. Detalji implementacije zavise od specifičnih zahteva i obima aplikacije.