Sobes.tech
Middle+

Kā jūs izstrādātu automašīnu stāvvietas lietotni Vue.js?

sobes.tech AI

Atbilde no AI

Es izmantotu Vue.js komponentu pieeju.

Arhitektūra:

  • App.vue: galvenais komponents. Satur routeris un galvenie izkārtojumi.
  • Views: lapu komponenti (ParkingLotsPage.vue, ParkingLotDetailsPage.vue).
  • Components: atkārtoti izmantojami komponenti (ParkingLotCard.vue, SlotStatus.vue, VehicleForm.vue).
  • Stores: Pinia stāvokļa pārvaldībai (parkošanas vietu saraksts, aizņemtsība).
  • Services: API saskarnes moduļi (datu iegūšana par parkošanu, reģistrācija/atbrīvošana).

Stāvokļa pārvaldība (Pinia):

  • parkingLots: parkošanas vietu objektu masīvs.
  • selectedParkingLot: izvēlēta parkošana.
  • loading: datu ielādes stāvoklis.
// 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 pieprasījuma imitācija
      await new Promise(resolve => setTimeout(resolve, 1000));
      this.parkingLots = [
        { id: 1, name: 'Parkošanas vieta 1', capacity: 100, occupied: 50 },
        { id: 2, name: 'Parkošanas vieta 2', capacity: 200, occupied: 120 },
      ];
      this.loading = false;
    },
    selectParkingLot(lotId) {
      this.selectedParkingLot = this.parkingLots.find(lot => lot.id === lotId);
    },
    // Papildu darbības vietu reģistrācijai/unreģistrācijai
  },
});

Maršrutēšana (Vue Router):

  • /parking-lots: parkošanas vietu saraksts.
  • /parking-lots/:id: konkrētas parkošanas detaļas.
// 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, // pārsūtīt maršruta parametrus kā props
  },
];

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

export default router;

Komponentes:

  • ParkingLotsPage.vue:
    • saņem parkošanas saraksta datus no Pinia.
    • attēlo ParkingLotCard katram parkojumam.
  • ParkingLotCard.vue:
    • pieņem parkošanas objektu kā prop.
    • attēlo nosaukumu, ietilpību un aizņemto vietu skaitu.
    • poga, kas ved uz detaļu lapu.
  • ParkingLotDetailsPage.vue:
    • saņem id no maršruta parametriem.
    • izmanto to, lai izvēlētos parkošanu no Pinia vai ielādētu detaļas.
    • attēlo parkošanas shēmu (SlotStatus komponentu izmantošana).
    • forma automašīnas reģistrācijai/unreģistrācijai (VehicleForm.vue).
  • SlotStatus.vue:
    • pieņem slota statusu (brīvs/dzēsts).
    • attēlo atbilstošu krāsu/ikonu.
  • VehicleForm.vue:
    • forma ievadīt automašīnas numuru un izvēlēties darbību (iebraukšana/izbraukšana).
    • sūta datus uz Pinia/Service.

Stila:

  • izmantot SCSS vai CSS moduļus komponentu stila veidošanai.
  • izmantot flexbox vai grid izkārtojumu elementiem.

Papildu iespējas:

  • reāla saziņa ar backend API.
  • lietotāju un viņu automašīnu reģistrācija.
  • parkošanas vēsture.
  • paziņojumu sistēma.
  • maksājumu sistēma.

Šī ir galvenā struktūra. Detalizācija ir atkarīga no konkrētajām prasībām un lietojuma mēroga.