134 lines
3.6 KiB
JavaScript
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)
|
|
}
|
|
}
|
|
})
|