This commit is contained in:
2026-08-17 19:13:41 +08:00
parent 16a271f7e0
commit c6a1bcf611
5 changed files with 64 additions and 7 deletions
@@ -19,7 +19,8 @@ test('maps the first-leg aggregate list fields without loading detail rows', ()
assert.match(storeSource, /row\.cargoes/)
assert.match(storeSource, /chargeableWeightKg: null/)
assert.match(storeSource, /chargeableVolumeCbm: null/)
assert.match(storeSource, /orders\.value = orderResult\.value\.records\.map\(mapFirstLegOrderRow\)/)
assert.match(storeSource, /orderResult\.value\.records\.map\(mapFirstLegOrderRow\)/)
assert.match(storeSource, /orderResult\.value\.records\.map\(\(item\) => mapUnifiedOrderRow\(item, warehouses\.value\)\)/)
})
test('declares the documented merchant warehouse and first-leg endpoints', () => {
@@ -69,6 +70,7 @@ test('declares the final C02 row and detail contract in the API adapter', () =>
assert.match(unifiedApiSource, /orderId: number \| string/)
assert.match(unifiedApiSource, /mainStatus: ApiUnifiedOrderMainStatus/)
assert.match(unifiedApiSource, /nextAction: string \| null/)
assert.match(unifiedApiSource, /customerRemark: string \| null/)
assert.match(unifiedApiSource, /loadingVersion: number/)
assert.match(unifiedApiSource, /pickingVersion: number/)
assert.match(unifiedApiSource, /summary: MerchantUnifiedOrderRow/)
@@ -103,6 +105,7 @@ test('maps C02 rows by orderId and leaves absent transport details unknown', ()
assert.match(storeSource, /summary\?\.loading\?\.loadingVersion/)
assert.match(storeSource, /summary\?\.loading\?\.pickingVersion/)
assert.match(storeSource, /summary\?\.inboundId == null \? '' : String\(summary\.inboundId\)/)
assert.match(storeSource, /customerRemark: summary\.customerRemark \?\? ''/)
})
test('sends backend-required channel, pricing, customs, destination and cargo fields', () => {
+37 -5
View File
@@ -357,7 +357,7 @@ function mapUnifiedOrderRow(summary: MerchantUnifiedOrderRow, warehouses: Platfo
shipper: '', consigneePartyId: '', consigneePartySnapshot: null, consignee: '', expressCompanyName: summary.expressCompany ?? '',
trackingNumber: summary.delivery?.trackingNo ?? '', skuNos: summary.skuNos ?? [], totalNetWeightKg: summary.totalNetWeightKg ?? null,
totalQuantity: summary.totalQuantity ?? null, chargeableVolumeCbm: null,
inboundedAt: summary.inboundedAt ?? '', businessDate: '', priority: 'NORMAL', customerRemark: '', operatorName: '',
inboundedAt: summary.inboundedAt ?? '', businessDate: summary.businessDate ?? '', priority: 'NORMAL', customerRemark: summary.customerRemark ?? '', operatorName: '',
status: summary.mainStatus, version: 0, items: [], timeline: [], businessSummary: businessSummary(summary),
createdAt: summary.createdAt, updatedAt: summary.updatedAt, tradeTerm: '', destinationCountryCode: '',
destinationWarehouseId: summary.destinationWarehouseId == null ? '' : String(summary.destinationWarehouseId),
@@ -411,6 +411,7 @@ function mapUnifiedOrderDetail(detail: MerchantUnifiedOrderDetail, warehouses: P
type OrderListReadResult =
| { source: 'first-leg'; records: MerchantFirstLegOrderRow[] }
| { source: 'unified'; records: MerchantUnifiedOrderRow[]; drafts: MerchantFirstLegOrderRow[] }
interface ClientOrderReadQuery extends MerchantUnifiedOrderQuery {
draftOnly?: boolean
@@ -427,9 +428,35 @@ function legacyQuery(query: ClientOrderReadQuery, status?: ApiFirstLegStatus) {
}
async function getOrdersForClient(query: ClientOrderReadQuery = {}): Promise<OrderListReadResult> {
const status = query.draftOnly ? 'DRAFT' : undefined
const response = await getMerchantFirstLegOrders(legacyQuery(query, status))
return { source: 'first-leg', records: response.records }
if (query.draftOnly) {
const response = await getMerchantFirstLegOrders(legacyQuery(query, 'DRAFT'))
return { source: 'first-leg', records: response.records }
}
const unifiedQuery: MerchantUnifiedOrderQuery = {
keyword: query.keyword,
orderNo: query.orderNo,
mainStatus: query.mainStatus,
receivingWarehouseId: query.receivingWarehouseId,
destinationWarehouseId: query.destinationWarehouseId,
createdFrom: query.createdFrom,
createdTo: query.createdTo,
page: query.page,
size: query.size,
}
try {
const [response, draftResponse] = await Promise.all([
getMerchantUnifiedOrders(unifiedQuery),
query.includeDrafts
? getMerchantFirstLegOrders(legacyQuery(query, 'DRAFT'))
: Promise.resolve({ records: [] as MerchantFirstLegOrderRow[] }),
])
return { source: 'unified', records: response.records, drafts: draftResponse.records }
} catch (error) {
if (!isUnifiedOrderQueryUnavailable(error)) throw error
const response = await getMerchantFirstLegOrders(legacyQuery(query))
return { source: 'first-leg', records: response.records }
}
}
function mapWarehouse(item: MerchantWarehouse): ClientWarehouse {
@@ -495,7 +522,12 @@ export const useFirstLegOrdersStore = defineStore('client-first-leg-orders', ()
const [orderResult, warehouseResult] = await Promise.allSettled([getOrdersForClient(query), loadWarehouseType('DOMESTIC', true)])
if (warehouseResult.status === 'rejected' && !warehouseLoadError.value) warehouseLoadError.value = warehouseResult.reason instanceof Error ? warehouseResult.reason.message : '公共仓库数据加载失败'
if (orderResult.status === 'fulfilled') {
orders.value = orderResult.value.records.map(mapFirstLegOrderRow)
orders.value = orderResult.value.source === 'unified'
? [
...orderResult.value.drafts.map(mapFirstLegOrderRow),
...orderResult.value.records.map((item) => mapUnifiedOrderRow(item, warehouses.value)),
]
: orderResult.value.records.map(mapFirstLegOrderRow)
} else {
loadError.value = orderResult.reason instanceof Error ? orderResult.reason.message : '订单数据加载失败'
}