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
ParkingLotCardza svaki parking.
- ParkingLotCard.vue:
- Prima objekat parkinga kao
prop. - Prikazuje naziv, kapacitet i zauzetost.
- Dugme za navigaciju ka detaljima parkinga.
- Prima objekat parkinga kao
- ParkingLotDetailsPage.vue:
- Dobija
idiz parametara rute. - Koristi ga za izbor parkinga iz Pinia ili učitavanje detalja.
- Prikazuje mapu parkinga (može se realizovati pomoću više
SlotStatuskomponenti). - Forma za registraciju/oslobađanje automobila (
VehicleForm.vue).
- Dobija
- 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.