import type { MerchantTransportFragment } from '../api/unifiedOrders' const labels: Readonly> = { 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> = { 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 ? '承运轨迹' : '—', }))) }