feat(firstleg): show actual and estimated transport nodes by loaded fragment

This commit is contained in:
2026-10-05 01:06:13 +08:00
parent f0777ba2db
commit e139c5c87b
7 changed files with 131 additions and 1 deletions
@@ -0,0 +1,24 @@
import type { MerchantTransportFragment } from '../api/unifiedOrders'
const labels: Readonly<Record<string, string>> = {
DEPARTED_WAREHOUSE: '已离仓', AT_ORIGIN_PORT: '已进港', LOADED_ON_VESSEL: '已装船',
DEPARTED_ORIGIN_PORT: '已开航', IN_TRANSIT: '海运途中', ARRIVED_DESTINATION_PORT: '船舶已到目的港',
DISCHARGED_FROM_VESSEL: '已卸船', PICKUP_READY: '已清关、可提柜', PICKED_UP: '已提柜', EMPTY_RETURNED: '已还柜',
}
const estimatedLabels: Readonly<Record<string, string>> = {
DEPARTED_WAREHOUSE: '预计离仓', AT_ORIGIN_PORT: '预计进港', LOADED_ON_VESSEL: '预计装船',
DEPARTED_ORIGIN_PORT: '预计开航', IN_TRANSIT: '预计海运途中', ARRIVED_DESTINATION_PORT: '预计船舶到目的港',
DISCHARGED_FROM_VESSEL: '预计卸船', PICKUP_READY: '预计可提柜', PICKED_UP: '预计提柜', EMPTY_RETURNED: '预计还柜',
}
export function customerTransportRows(fragments: MerchantTransportFragment[]) {
return fragments.flatMap((fragment, index) => fragment.nodes.map((node, nodeIndex) => ({
key: `${index}-${nodeIndex}`,
inboundCode: fragment.inboundCode || '—', cabinetNo: fragment.cabinetNo || '—',
containerNo: fragment.containerNo || '—',
nodeLabel: (node.actualAt ? labels : estimatedLabels)[node.standardNode] || '运输节点',
actualAt: node.actualAt, estimatedAt: node.estimatedAt,
location: [node.locationCode, node.locationName].filter(Boolean).join(' · ') || '—',
source: node.providerCode === 'MANUAL' ? '人工记录' : node.providerCode === 'FIRSTLEG' ? '平台记录' : node.providerCode ? '承运轨迹' : '—',
})))
}