Files
Frobot-OTA-Server-UI/src/stores/dashboard.js
2026-04-23 15:05:23 +08:00

134 lines
3.6 KiB
JavaScript

import { defineStore } from 'pinia'
import {
assignRelease,
createRelease,
deleteAssignment,
deleteRelease,
deleteVehicle,
fetchAssignments,
fetchReleases,
fetchVehicles,
registerVehicle,
updateAssignment,
updateRelease,
updateVehicle
} from '../services/api'
export const useDashboardStore = defineStore('dashboard', {
state: () => ({
releases: [],
vehicles: [],
assignments: [],
loading: false,
releaseLoading: false,
vehicleLoading: false,
assignmentLoading: false
}),
getters: {
latestRelease(state) {
return state.releases[0]?.manifest ?? null
},
onlineVehicles(state) {
return state.vehicles.filter((item) => item.online).length
},
waitingTasks(state) {
return state.assignments.filter((item) => item.taskStatus === 'WAITING_CONFIRM').length
},
successTasks(state) {
return state.assignments.filter((item) => item.taskStatus === 'SUCCESS').length
}
},
actions: {
async loadAll() {
this.loading = true
this.releaseLoading = true
this.vehicleLoading = true
this.assignmentLoading = true
try {
const [releases, vehicles, assignments] = await Promise.all([
fetchReleases(),
fetchVehicles(),
fetchAssignments()
])
this.releases = releases
this.vehicles = vehicles
this.assignments = assignments
} finally {
this.loading = false
this.releaseLoading = false
this.vehicleLoading = false
this.assignmentLoading = false
}
},
async loadReleases() {
this.releaseLoading = true
try {
this.releases = await fetchReleases()
} finally {
this.releaseLoading = false
}
},
async loadVehicles() {
this.vehicleLoading = true
try {
this.vehicles = await fetchVehicles()
} finally {
this.vehicleLoading = false
}
},
async loadAssignments() {
this.assignmentLoading = true
try {
this.assignments = await fetchAssignments()
} finally {
this.assignmentLoading = false
}
},
async submitRelease(payload) {
await createRelease(payload)
await this.loadReleases()
},
async saveRelease(originalReleaseVersion, payload) {
await updateRelease(originalReleaseVersion, payload)
await this.loadReleases()
},
async removeRelease(releaseVersion) {
await deleteRelease(releaseVersion)
await this.loadReleases()
},
async submitVehicle(payload) {
await registerVehicle(payload)
await this.loadVehicles()
},
async saveVehicle(originalVehicleId, payload) {
await updateVehicle(originalVehicleId, payload)
await this.loadVehicles()
},
async removeVehicle(vehicleId) {
await deleteVehicle(vehicleId)
await this.loadVehicles()
},
async submitAssignment(releaseVersion, vehicleIds) {
await assignRelease(releaseVersion, vehicleIds)
await this.loadAssignments()
},
async saveAssignment(vehicleId, releaseVersion) {
await updateAssignment(vehicleId, releaseVersion)
await this.loadAssignments()
},
async removeAssignment(vehicleId) {
await deleteAssignment(vehicleId)
await this.loadAssignments()
},
getReleaseByVersion(releaseVersion) {
return this.releases.find((item) => item.manifest.releaseVersion === releaseVersion)
},
getVehicleById(vehicleId) {
return this.vehicles.find((item) => item.vehicleId === vehicleId)
},
getTaskByVehicleId(vehicleId) {
return this.assignments.find((item) => item.vehicleId === vehicleId)
}
}
})