usePlVehicleViewDetail.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { personnelApi, vehicleApi, type VehicleDetail, type VehiclePersonnelRow } from '@/api/pl'
  2. import type { VehiclePersonnelViewRow } from '@/components/business/pl-vehicle-personnel-view-list/index.vue'
  3. export interface VehicleViewBundle {
  4. detail: VehicleDetail
  5. personnelList: VehiclePersonnelViewRow[]
  6. }
  7. export async function loadPersonnelWithCerts(
  8. personnelList: VehiclePersonnelRow[]
  9. ): Promise<VehiclePersonnelViewRow[]> {
  10. return Promise.all(
  11. personnelList.map(async person => {
  12. if (!person.personnelId) {
  13. return { ...person, certList: [] } as VehiclePersonnelViewRow
  14. }
  15. try {
  16. const res = await personnelApi.get(person.personnelId)
  17. const detail = ((res.data ?? res) || {}) as { certList?: VehiclePersonnelViewRow['certList'] }
  18. return {
  19. ...person,
  20. certList: detail.certList || []
  21. } as VehiclePersonnelViewRow
  22. } catch {
  23. return { ...person, certList: [] } as VehiclePersonnelViewRow
  24. }
  25. })
  26. )
  27. }
  28. export async function loadVehicleViewBundle(vehicleId: string): Promise<VehicleViewBundle> {
  29. const res = await vehicleApi.get(vehicleId)
  30. const detail = ((res.data ?? res) || {}) as VehicleDetail
  31. const personnelList = await loadPersonnelWithCerts(detail.personnelList || [])
  32. return { detail, personnelList }
  33. }
  34. export async function loadVehicleViewBundles(vehicleIds: string[]): Promise<VehicleViewBundle[]> {
  35. if (!vehicleIds.length) return []
  36. return Promise.all(vehicleIds.map(id => loadVehicleViewBundle(id)))
  37. }