diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs index 77975ae..1747db8 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs @@ -35,6 +35,7 @@ test('新建退货预报使用独立路由页面,编辑仍保留加宽弹框', assert.match(view, /

新建退货预报<\/h2>/) assert.match(view, /:title="editingReturnNo \? '编辑退货预报' : '新建退货预报'" width="1120px"/) assert.match(view, /return-create-form \{ display:grid; grid-template-columns:repeat\(2,minmax\(0,1fr\)\)/) + assert.match(view, /class="return-create-actions"[\s\S]*?提交预报<\/el-button>/) }) test('退货列表和详情使用客户可读仓库、状态与时间', () => { diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue index e8737cd..014b0e2 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue @@ -253,7 +253,7 @@ onBeforeUnmount(clearPhotoUrls) -
取消提交预报
+
取消提交预报
diff --git a/src/modules/overseas-warehouse/views/WarehouseServiceView.vue b/src/modules/overseas-warehouse/views/WarehouseServiceView.vue index 94e4f5f..4907359 100644 --- a/src/modules/overseas-warehouse/views/WarehouseServiceView.vue +++ b/src/modules/overseas-warehouse/views/WarehouseServiceView.vue @@ -12,7 +12,7 @@ import { getTransferCartonLabel, submitTransfer, updateTransfer, confirmRelabelCompletion, confirmTransferMeasurement, downloadRelabelCompletionPhoto, downloadTransferMeasurementPhoto, uploadRelabelShippingLabel, uploadRelabelFile, - listDiscardCandidates, listDiscards, listRelabelInventoryCandidates, listRelabelHistoricalOrders, listRelabels, listTransfers, cancelDiscard, + listDiscards, listRelabelInventoryCandidates, listRelabelHistoricalOrders, listRelabels, listTransfers, cancelDiscard, type RelabelInventoryCandidate, type RelabelCreate, type RelabelDetail, @@ -369,8 +369,23 @@ async function selectDiscardWarehouse() { if (!form.warehouse) return discardCandidatesLoading.value = true try { - const candidates = await listDiscardCandidates() - discardCandidates.value = candidates.filter((candidate) => String(candidate.overseasWarehouseId) === form.warehouse) + const inventory = await listRelabelInventoryCandidates(form.warehouse) + const grouped = new Map() + for (const candidate of inventory) { + const orderId = String(candidate.inboundOrderId || '') + if (!orderId) continue + const current = grouped.get(orderId) || { orderId, inboundCode: candidate.inboundCode || '', inboundOrderNo: candidate.inboundOrderNo || '', overseasWarehouseId: String(candidate.overseasWarehouseId || form.warehouse), overseasWarehouseName: candidate.overseasWarehouseName || '', availablePackages: 0, skus: [] } + const packages = inventoryQuantity(candidate.availablePackages) + current.availablePackages += packages + const skuCode = String(candidate.skuCode || '').trim() + if (skuCode) { + const sku = current.skus.find((item) => item.skuCode === skuCode) + if (sku) sku.availablePackages += packages + else current.skus.push({ skuCode, productName: candidate.productNameZh || '', availablePackages: packages }) + } + grouped.set(orderId, current) + } + discardCandidates.value = [...grouped.values()].filter((candidate) => String(candidate.overseasWarehouseId) === form.warehouse) } catch (error) { ElMessage.error(error instanceof Error ? error.message : '可废弃入库单加载失败') } finally { discardCandidatesLoading.value = false } } diff --git a/src/modules/overseas-warehouse/views/warehouseDisposalForm.test.mjs b/src/modules/overseas-warehouse/views/warehouseDisposalForm.test.mjs index 6d240bc..678ee90 100644 --- a/src/modules/overseas-warehouse/views/warehouseDisposalForm.test.mjs +++ b/src/modules/overseas-warehouse/views/warehouseDisposalForm.test.mjs @@ -7,6 +7,6 @@ const view = readFileSync(new URL('./WarehouseServiceView.vue', import.meta.url) test('货物废弃先选择海外操作仓,再加载并选择该仓入库单', () => { assert.match(view, /props\.service === 'disposal'.*操作仓.*v-model="form\.warehouse".*请选择海外仓.*@change="selectDiscardWarehouse"/s) assert.match(view, /props\.service === 'disposal'.*选择入库单.*:disabled="!form\.warehouse".*请先选择操作仓/s) - assert.match(view, /async function selectDiscardWarehouse\(\).*selectedDiscardOrderId\.value = ''.*cargoRows\.value = \[\].*listDiscardCandidates\(\).*candidate\.overseasWarehouseId.*form\.warehouse/s) + assert.match(view, /async function selectDiscardWarehouse\(\).*selectedDiscardOrderId\.value = ''.*cargoRows\.value = \[\].*listRelabelInventoryCandidates\(form\.warehouse\).*grouped/s) assert.match(view, /\|\| !primaryWarehouse \|\| invalidCargo/) })