Middle+
Как бихте проектирали приложение за паркиране на автомобили във Vue.js?
sobes.tech AI
Отговор от AI
Щях да използвам компонентен подход във Vue.js.
Архитектура:
- App.vue: Основен компонент. Съдържа роутера и основните оформления.
- Views: Страници (
ParkingLotsPage.vue,ParkingLotDetailsPage.vue). - Components: Повторно използваеми компоненти (
ParkingLotCard.vue,SlotStatus.vue,VehicleForm.vue). - Stores: Pinia за управление на състоянието (списък с паркинги, заетост на места).
- Services: Модули за работа с API (получаване на данни за паркинги, регистрация/освобождаване на места).
Състояние (Pinia):
parkingLots: Масив от обекти за паркинги.selectedParkingLot: Текущо избрано паркинг.loading: Статус на зареждане.
// stores/parking.js
import { defineStore } from 'pinia';
export const useParkingStore = defineStore('parking', {
state: () => ({
parkingLots: [],
selectedParkingLot: null,
loading: false,
}),
actions: {
async fetchParkingLots() {
this.loading = true;
// Имитация на API заявка
await new Promise(resolve => setTimeout(resolve, 1000));
this.parkingLots = [
{ id: 1, name: 'Паркинг 1', capacity: 100, occupied: 50 },
{ id: 2, name: 'Паркинг 2', capacity: 200, occupied: 120 },
];
this.loading = false;
},
selectParkingLot(lotId) {
this.selectedParkingLot = this.parkingLots.find(lot => lot.id === lotId);
},
// Допълнителни действия за регистрация/освобождаване
},
});
Маршрутизиране (Vue Router):
/parking-lots: Списък с паркинги./parking-lots/:id: Детайли за конкретен паркинг.
// 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, // предава параметрите като props
},
];
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes,
});
export default router;
Компоненти:
- ParkingLotsPage.vue:
- Взема списъка с паркинги от Pinia.
- Показва
ParkingLotCardза всеки паркинг.
- ParkingLotCard.vue:
- Приема обект на паркинг като
prop. - Показва името, капацитета и заетостта.
- Бутон за преминаване към детайлите.
- Приема обект на паркинг като
- ParkingLotDetailsPage.vue:
- Взема
idот параметрите на маршрута. - Използва го за избор на паркинг от Pinia или зареждане на детайли.
- Показва схемата на паркинга (може да се реализира с множество
SlotStatusкомпоненти). - Форма за регистрация/освобождаване (
VehicleForm.vue).
- Взема
- SlotStatus.vue:
- Приема статуса на слот (свободен/зает).
- Показва съответния цвят/икона.
- VehicleForm.vue:
- Форма за въвеждане на номер на автомобил и избор на действие (влизане/излизане).
- Изпраща данните към Pinia/Service.
Стил:
- Използвайте SCSS или CSS модули за компонентен стил.
- Прилагайте flexbox или grid за разположение.
Допълнителни възможности:
- Реално взаимодействие с бекенд чрез API.
- Регистрация на потребители и техните автомобили.
- История на паркирането.
- Система за известия.
- Платежна система.
Това е базовата структура. Детайлите за изпълнение зависят от конкретните изисквания и мащаба на приложението.