import { http, unwrapApiResponse, type ApiEnvelope } from '@/shared/api/http' import type { PageResult } from './overseasMasterData' export interface VehicleDelivery { deliveryNo: string; dispatchNo: string; tripNo: string; bolNo: string | null; customerName: string | null destinationType: string; destinationWarehouseCode: string | null; destinationWarehouseName: string | null deliveryAddress: string | null; plannedDeliveryAt: string | null; status: string; relationship: 'PLANNED' | 'DEPARTED' } export interface VehicleAssignmentChange { tripNo: string; recordVersion: string; occurredAt: string; reason: string | null previousVehiclePlate: string | null; vehiclePlate: string | null; previousDriverName: string | null; driverName: string | null relationship: 'REPLACED_OUT' | 'REPLACED_IN' | 'DRIVER_CHANGED'; dispatchNos: string[] } type Numeric = string | number type WirePage = { records: T[]; page: Numeric; size: Numeric; total: Numeric; pages: Numeric } type WireChange = Omit & { recordVersion: Numeric } function integer(value: Numeric) { const number = Number(value) if (value == null || value === '' || !Number.isSafeInteger(number) || number < 0) throw new Error('车辆履约接口返回无效分页数值') return number } function page(value: WirePage, normalize: (row: W) => T): PageResult { return { records: value.records.map(normalize), page: integer(value.page), size: integer(value.size), total: integer(value.total), pages: integer(value.pages) } } const base = (vehicleId: string) => `/platform/v1/last-leg/fleet/vehicles/${encodeURIComponent(vehicleId)}` export async function listVehicleDeliveries(vehicleId: string, currentPage = 1, size = 10) { const result = unwrapApiResponse(await http.get>, ApiEnvelope>>(`${base(vehicleId)}/deliveries`, { params: { page: currentPage, size } })) return page(result, row => row) } export async function listVehicleAssignmentChanges(vehicleId: string, currentPage = 1, size = 10) { const result = unwrapApiResponse(await http.get>, ApiEnvelope>>(`${base(vehicleId)}/assignment-history`, { params: { page: currentPage, size } })) return page(result, row => ({ ...row, recordVersion: String(row.recordVersion) })) }