Sobes.tech
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.
  • Регистрация на потребители и техните автомобили.
  • История на паркирането.
  • Система за известия.
  • Платежна система.

Това е базовата структура. Детайлите за изпълнение зависят от конкретните изисквания и мащаба на приложението.