This commit is contained in:
2026-10-20 11:33:39 +08:00
parent d2f2ecf57a
commit 41a498657c
33 changed files with 909 additions and 88 deletions
@@ -75,10 +75,25 @@ function isSingleLineBusinessField(field: DetailField) { return field.label ===
const referenceValue = computed(() => lastMileOrderReference(detail.value?.order.orderNo, '订单编码待补充'))
const isReturnOrder = computed(() => detail.value?.order.orderType === 'RETURN_RELABEL')
const returnReceiptUnitLabel = computed(() => detail.value?.returnReceipt?.receipts.some(receipt => receipt.unitType === 'PARCEL') ? '包裹' : '箱')
const returnReceiptUnits = computed(() => {
const receiptTypes = new Map((detail.value?.returnReceipt?.receipts || []).map(receipt => [receipt.receiptNo, receipt.unitType]))
const counts = { parcels: 0, boxes: 0, unknown: 0 }
for (const carton of detail.value?.returnReceipt?.cartons || []) {
const type = receiptTypes.get(carton.receiptNo)
if (type === 'PARCEL') counts.parcels++
else if (type === 'BOX' || type === 'PALLET') counts.boxes++
else counts.unknown++
}
return counts
})
const returnReceiptUnitLabel = computed(() => returnReceiptUnits.value.parcels && !returnReceiptUnits.value.boxes && !returnReceiptUnits.value.unknown ? '包裹' : returnReceiptUnits.value.parcels || returnReceiptUnits.value.unknown ? '实物' : '箱')
const returnReceiptUnitSummary = computed(() => {
const { parcels, boxes, unknown } = returnReceiptUnits.value
return [parcels ? `${parcels} 包裹` : '', boxes ? `${boxes} 箱` : '', unknown ? `${unknown} 个未识别载体` : ''].filter(Boolean).join(' · ') || '0 箱'
})
const signedReturnCartons = computed(() => (detail.value?.returnReceipt?.cartons || []).map(box => {
const parcel = detail.value?.returnReceipt?.receipts.find(receipt => receipt.receiptNo === box.receiptNo && receipt.unitType === 'PARCEL')
return { ...box, length: box.length ?? parcel?.length, width: box.width ?? parcel?.width, height: box.height ?? parcel?.height, weight: box.weight ?? parcel?.weight }
const measuredUnit = detail.value?.returnReceipt?.receipts.find(receipt => receipt.receiptNo === box.receiptNo && (receipt.unitType === 'PARCEL' || receipt.unitType === 'BOX'))
return { ...box, length: box.length ?? measuredUnit?.length, width: box.width ?? measuredUnit?.width, height: box.height ?? measuredUnit?.height, weight: box.weight ?? measuredUnit?.weight }
}))
function returnCartonVolume(box: { length?: number | null; width?: number | null; height?: number | null }) {
if (box.length == null || box.width == null || box.height == null) return '—'
@@ -302,7 +317,7 @@ onMounted(load)
<el-table-column prop="boxCount" label="实收箱数" width="100" />
<el-table-column prop="receivedQuantity" label="实收数量" width="100" />
</el-table>
<h3>签收{{ returnReceiptUnitLabel }}明细({{ detail.returnReceipt.cartons?.length || 0 }} {{ returnReceiptUnitLabel }})</h3>
<h3>签收{{ returnReceiptUnitLabel }}明细({{ returnReceiptUnitSummary }})</h3>
<el-collapse v-if="detail.returnReceipt.cartons?.length">
<el-collapse-item v-for="box in signedReturnCartons" :key="box.cartonMark" :name="box.cartonMark">
<template #title><span class="return-carton-title"><span>{{ box.cartonMark }} · {{ box.countStatus === 'CONFIRMED' ? `已确认 · ${box.items.length} 种 SKU · ${box.items.reduce((sum, item) => sum + Number(item.quantity), 0)} 件` : box.countStatus === 'PENDING' ? '待清点' : '未留存箱内签收明细' }}</span><span class="return-carton-measurements">长 {{ box.length ?? '—' }} cm · 宽 {{ box.width ?? '—' }} cm · 高 {{ box.height ?? '—' }} cm · 体积 {{ returnCartonVolume(box) }} m³ · 重量 {{ box.weight ?? '—' }} kg</span></span></template>
@@ -319,7 +334,7 @@ onMounted(load)
<el-empty v-else description="暂无签收箱号明细" />
<h3>合箱记录</h3>
<el-table :data="detail.returnReceipt.packingDetails || []" size="small" border empty-text="暂无合箱记录">
<el-table-column prop="planNo" label="合箱计划" min-width="210" />
<el-table-column label="合箱计划" min-width="210"><template #default="{ row }">{{ row.planNo && row.planNo !== 'null' ? row.planNo : '—' }}</template></el-table-column>
<el-table-column prop="sourceCartonMark" label="来源箱唛" min-width="220" />
<el-table-column prop="targetCartonMark" label="目标箱唛" min-width="220" />
<el-table-column prop="skuCode" label="SKU" min-width="180" />