From 47385d46f20b816d0948c80d534261723e895209 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Wed, 7 Oct 2026 19:44:44 +0800 Subject: [PATCH] fix(orders): retain nullable palletizing facts in customer summaries --- src/modules/cross-border/api/businessOrders.ts | 2 +- .../cross-border/businessOrders.test.mjs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/modules/cross-border/api/businessOrders.ts b/src/modules/cross-border/api/businessOrders.ts index 39c3905..5bb7ee3 100644 --- a/src/modules/cross-border/api/businessOrders.ts +++ b/src/modules/cross-border/api/businessOrders.ts @@ -79,7 +79,7 @@ export interface TransportSummary { orderNo: string transportType: string transportMode?: string - palletRequired?: string + palletRequired?: string | null origin: string destination: string containerType: string | null diff --git a/src/modules/cross-border/businessOrders.test.mjs b/src/modules/cross-border/businessOrders.test.mjs index 3a36ecb..01d11f0 100644 --- a/src/modules/cross-border/businessOrders.test.mjs +++ b/src/modules/cross-border/businessOrders.test.mjs @@ -1,11 +1,29 @@ import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import test from 'node:test' +import { runInNewContext } from 'node:vm' +import ts from 'typescript' const api = readFileSync(new URL('./api/businessOrders.ts', import.meta.url), 'utf8') const routes = readFileSync(new URL('./routes.ts', import.meta.url), 'utf8') const view = readFileSync(new URL('./components/BusinessOrdersView.vue', import.meta.url), 'utf8') +test('renders unknown pallet service and container type as dashes while preserving explicit values', () => { + const helpers = view.slice(view.indexOf('function read('), view.indexOf('function idempotencyKey(')) + const compiled = ts.transpileModule(helpers, { compilerOptions: { target: ts.ScriptTarget.ES2022 } }).outputText + const { displayCell, yesNo, text } = runInNewContext(`${compiled}\n({ displayCell, yesNo, text })`) + assert.equal(displayCell({ palletRequired: null }, 'palletRequired'), '—') + assert.equal(displayCell({ palletRequired: 'NO' }, 'palletRequired'), '否') + assert.equal(displayCell({ palletRequired: 'YES' }, 'palletRequired'), '是') + assert.equal(displayCell({ containerType: null }, 'containerType'), '—') + assert.equal(displayCell({ containerType: '40HQ' }, 'containerType'), '40HQ') + assert.equal(yesNo(null), '—') + assert.equal(text(null), '—') + assert.match(api, /palletRequired\?: string \| null/) + const create = api.slice(api.indexOf('export interface TransportCreate'), api.indexOf('export interface TransportUpdate')) + assert.doesNotMatch(create, /palletRequired\?: string \| null/) +}) + test('shows merchant-owned arrangement facts without a pool request or editable status control', () => { assert.match(api, /fleetArrangement: import\('\.\.\/fleetArrangement'\)\.FleetArrangement \| null/) assert.match(view, /aria-label="承运安排"/)