42 lines
3.3 KiB
TypeScript
42 lines
3.3 KiB
TypeScript
import type { LocalTransportDetail, LocalTransportStatus } from './types'
|
|
|
|
export const truckStatusLabels: Record<LocalTransportStatus, string> = {
|
|
PENDING_REVIEW: '待审核', WAITING_INBOUND: '待取货', RECEIVING: '待取货', WAITING_CONSOLIDATION: '待取货',
|
|
PALLET_OVERAGE_REVIEW: '待取货', PARTIALLY_ALLOCATED: '待取货', ALLOCATED: '待取货',
|
|
PENDING_DISPATCH: '待取货', DISPATCHED: '待取货', IN_TRANSIT: '派送中', COMPLETED: '已完成', REJECTED: '已拒绝', CANCELLED: '已取消',
|
|
}
|
|
export const truckCommandLabels = {
|
|
review: '审核并生成排车', arrange: '补建排车单', 'receive-pallets': '登记实收', 'review-pallet-overage': '超托审核', 'allocate-pallets': '分配托盘',
|
|
'prepare-dispatch': '确认待派车', dispatch: '确认已派车', 'start-transit': '确认发运', complete: '确认完成', cancel: '取消订单',
|
|
} as const
|
|
export type TruckCommand = keyof typeof truckCommandLabels
|
|
export interface TruckCommandBase { version: number; idempotencyKey: string; remark?: string }
|
|
export type TruckOperation =
|
|
| { command: 'review'; payload: TruckCommandBase & { decision: 'APPROVE' | 'REJECT'; warehouseId?: string } }
|
|
| { command: 'arrange'; payload: TruckCommandBase & { warehouseId: string } }
|
|
| { command: 'review-pallet-overage'; payload: TruckCommandBase & { decision: 'APPROVE' | 'REJECT' } }
|
|
| { command: 'receive-pallets'; payload: TruckCommandBase & { actualPalletCount: number; packageCount?: number; palletPackageCounts?: number[] } }
|
|
| { command: 'allocate-pallets'; payload: TruckCommandBase & { palletIds: string[] } }
|
|
| { command: 'prepare-dispatch' | 'dispatch' | 'start-transit' | 'complete'; payload: TruckCommandBase }
|
|
| { command: 'cancel'; payload: TruckCommandBase & { status: 'CANCELLED' } }
|
|
|
|
/** 拼车来源只读;原单只保留审核入口,排车后的执行动作统一在排车任务完成。 */
|
|
export function availableTruckCommands(order: Pick<LocalTransportDetail, 'status' | 'fleetArrangement'>): TruckCommand[] {
|
|
if (order.fleetArrangement) return []
|
|
if (order.status === 'PENDING_REVIEW') return ['review', 'cancel']
|
|
return order.status === 'PENDING_DISPATCH' ? ['arrange', 'cancel'] : []
|
|
}
|
|
|
|
export const truckCommandHints: Record<TruckCommand, string> = {
|
|
review: '核对基础资料后进入排车审核。审核通过后,取货照片、派送中和送达照片均在排车单中完成。',
|
|
arrange: '选择真实 A 海外仓,补建本土卡车排车单。',
|
|
'receive-pallets': '按实际收货填写截至本次的累计实收托数。首次实收确定本单托数,后续超出已确认托数需要超托审核。',
|
|
'review-pallet-overage': '通过后将超收托盘纳入本单;拒绝后将超收托盘标记为拒收,按原已确认托数继续。',
|
|
'allocate-pallets': '选择本单已实收且未分配的托盘,可分批分配;全部已接收托盘分配完成后才能进入待派车。',
|
|
'prepare-dispatch': '确认全部已接收托盘已分配完成,将本单交由调度安排车辆。',
|
|
dispatch: '请在车辆安排已实际完成后确认,本单将进入已派车。',
|
|
'start-transit': '请在车辆已实际发运后确认,本单将进入运输中。',
|
|
complete: '请在运输及交付已实际完成后确认。确认完成后不能撤回。',
|
|
cancel: '取消后本单不能继续履约,请填写取消原因。',
|
|
}
|