feat(firstleg): show actual and estimated transport nodes by loaded fragment
This commit is contained in:
@@ -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 ? '承运轨迹' : '—',
|
||||
})))
|
||||
}
|
||||
Reference in New Issue
Block a user