feat(dispatch): show original and remaining handover quantities
This commit is contained in:
@@ -11,7 +11,9 @@ export function normalizeHandoverStatus(value) {
|
||||
deliveries: value.deliveries.map(row => {
|
||||
const packages = Number(row.packages)
|
||||
if (!row.deliveryNo || row.packages == null || String(row.packages).trim() === '' || !Number.isSafeInteger(packages) || packages <= 0) throw new Error('交接状态中的派送箱数无效')
|
||||
return { deliveryNo: text(row.deliveryNo), status: text(row.status), packages, terminalAt: text(row.terminalAt), transport: transport(row.transport) }
|
||||
const remainingPackages = Number(row.remainingPackages)
|
||||
if (row.remainingPackages == null || String(row.remainingPackages).trim() === '' || !Number.isSafeInteger(remainingPackages) || remainingPackages < 0 || remainingPackages > packages) throw new Error('交接状态中的剩余箱数无效')
|
||||
return { deliveryNo: text(row.deliveryNo), status: text(row.status), packages, remainingPackages, terminalAt: text(row.terminalAt), transport: transport(row.transport) }
|
||||
}),
|
||||
latestHandover: value.latestHandover ? { handoverNo: text(value.latestHandover.handoverNo), handedOverAt: text(value.latestHandover.handedOverAt),
|
||||
location: text(value.latestHandover.location), previous: transport(value.latestHandover.previous), replacement: transport(value.latestHandover.replacement) } : null
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
</view>
|
||||
<text v-else class="handover-line">本排车暂无在途交接记录。</text>
|
||||
<view v-for="delivery in status.deliveries" :key="delivery.deliveryNo" class="handover-delivery">
|
||||
<text class="handover-line">{{ delivery.deliveryNo }} · {{ delivery.packages }} 箱 · {{ label(delivery) }}</text>
|
||||
<text class="handover-line">{{ delivery.deliveryNo }} · 原实发 {{ delivery.packages }} 箱 · 剩余 {{ delivery.remainingPackages }} 箱 · {{ label(delivery) }}</text>
|
||||
<text class="handover-line">{{ delivery.terminalAt ? '完成时承运' : '当前承运' }}:{{ delivery.transport.vehiclePlate || '—' }} · {{ delivery.transport.driverName || '—' }}</text>
|
||||
<text v-if="delivery.transport.driverPhone" class="handover-line">联系电话 {{ delivery.transport.driverPhone }}</text>
|
||||
</view>
|
||||
|
||||
@@ -7,8 +7,8 @@ import { session } from '../src/stores/session.js'
|
||||
|
||||
const wire = () => ({ dispatchNo: 'PC-ONE', tripNo: 'TR-ONE', tripStatus: 'IN_TRANSIT', tripRecordVersion: '90071992547409931',
|
||||
originalDeparture: { vehiclePlate: 'ORIGINAL', driverName: '原司机' },
|
||||
deliveries: [{ deliveryNo: 'DL-DONE', status: 'DELIVERED', packages: '10', terminalAt: '2026-10-03T01:00:00Z', transport: { vehiclePlate: 'ORIGINAL', driverName: '原司机' } },
|
||||
{ deliveryNo: 'DL-PENDING', status: 'WAIT_DELIVERY', packages: 20, terminalAt: null, transport: { vehiclePlate: 'NEW', driverName: '接替司机' } }], latestHandover: null })
|
||||
deliveries: [{ deliveryNo: 'DL-DONE', status: 'DELIVERED', packages: '10', remainingPackages: 0, terminalAt: '2026-10-03T01:00:00Z', transport: { vehiclePlate: 'ORIGINAL', driverName: '原司机' } },
|
||||
{ deliveryNo: 'DL-PENDING', status: 'WAIT_DELIVERY', packages: 20, remainingPackages: 16, terminalAt: null, transport: { vehiclePlate: 'NEW', driverName: '接替司机' } }], latestHandover: null })
|
||||
|
||||
test('PDA query stays a GET in the dedicated namespace and never supplies customer or warehouse', async () => {
|
||||
const calls = []; session.apiBase = '/gateway-api'; session.token = 'test-token'
|
||||
@@ -23,6 +23,8 @@ test('normalization exposes only business references and does not replace missin
|
||||
const value = normalizeHandoverStatus(data)
|
||||
assert.doesNotMatch(JSON.stringify(value), /secret-/); assert.equal(value.originalDeparture.vehiclePlate, '')
|
||||
assert.equal(value.deliveries[0].packages, 10)
|
||||
assert.equal(value.deliveries[1].remainingPackages, 16)
|
||||
for (const remainingPackages of [null, '', -1, 21, '1.5']) assert.throws(() => normalizeHandoverStatus({ ...data, deliveries: [{ ...data.deliveries[1], remainingPackages }] }), /剩余箱数无效/)
|
||||
for (const packages of [null, '', -1, 0, '1.5']) assert.throws(() => normalizeHandoverStatus({ ...data, deliveries: [{ ...data.deliveries[0], packages }] }), /箱数无效/)
|
||||
})
|
||||
test('a response for another dispatch is rejected', async () => {
|
||||
|
||||
Reference in New Issue
Block a user