From ad02451065ea7d39930d683b6a66ff7136c6dfdf Mon Sep 17 00:00:00 2001 From: liuyihe <2513762445@qq.com> Date: Mon, 14 Sep 2026 12:01:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/first-leg/api/firstLeg.ts | 21 +++++- .../views/ReturnOrdersView.test.mjs | 8 +-- .../views/ReturnOrdersView.vue | 22 +++--- .../views/WarehouseServiceView.vue | 71 ++++++++++++------- .../views/relabelAttachments.test.mjs | 9 +-- .../views/warehouseTransferForm.test.mjs | 10 +++ 6 files changed, 97 insertions(+), 44 deletions(-) diff --git a/src/modules/first-leg/api/firstLeg.ts b/src/modules/first-leg/api/firstLeg.ts index 5273066..800fba0 100644 --- a/src/modules/first-leg/api/firstLeg.ts +++ b/src/modules/first-leg/api/firstLeg.ts @@ -456,15 +456,32 @@ export interface MerchantPriceEstimate { } export function getMerchantWarehouses(params: MerchantWarehouseQuery = {}) { - return apiRequest>({ + const request = apiRequest>({ method: 'GET', url: '/merchant/v1/warehouses', params: { page: 1, size: 200, status: 'ACTIVE', ...params }, }) + if (params.warehouseType !== 'OVERSEAS') return request + return request.then(async (result) => { + const usableRecords = result.records.filter((item) => item.status === 'ACTIVE' && item.warehouseType === 'OVERSEAS') + if (usableRecords.length > 0) return { ...result, records: usableRecords } + const fallback = await apiRequest>({ + method: 'GET', + url: '/platform/v1/warehouse-admin', + params: { page: params.page || 1, size: params.size || 200, tenantId: 0, warehouseType: 'OVERSEAS', status: 'ACTIVE' }, + }) + return { + ...fallback, + records: fallback.records.filter((item) => item.status === 'ACTIVE' && item.warehouseType === 'OVERSEAS'), + } + }) } export function getMerchantWarehouseDetail(id: number | string) { - return apiRequest({ method: 'GET', url: `/merchant/v1/warehouses/${id}` }) + return apiRequest({ method: 'GET', url: `/merchant/v1/warehouses/${id}` }).catch(async () => { + const fallback = await apiRequest({ method: 'GET', url: `/platform/v1/warehouse-admin/${encodeURIComponent(id)}`, params: { tenantId: 0 } }) + return fallback + }) } export function getMerchantPricingChannels(originWarehouseId: number | string) { diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs index 4b77e69..435e98b 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs @@ -4,15 +4,15 @@ import test from 'node:test' const view = readFileSync(new URL('./ReturnOrdersView.vue', import.meta.url), 'utf8') -test('新建退货预报选择中转仓后带出联系人和电话', () => { +test('新建退货预报选择海外仓后带出联系人和电话', () => { assert.match(view, /@change="selectOperationWarehouse"/) assert.match(view, /warehouseContactName = warehouse\?\.contactName \|\| ''/) assert.match(view, /warehouseContactPhone = warehouse\?\.contactPhone \|\| ''/) - assert.match(view, /label="中转仓联系人"/) - assert.match(view, /label="中转仓联系电话"/) + assert.match(view, /label="海外仓联系人"/) + assert.match(view, /label="海外仓联系电话"/) assert.match(view, /:readonly="Boolean\(selectedOperationWarehouse\?\.contactName\)"/) assert.match(view, /:readonly="Boolean\(selectedOperationWarehouse\?\.contactPhone\)"/) - assert.match(view, /该中转仓未维护,请手动填写/) + assert.match(view, /该海外仓未维护,请手动填写/) assert.match(view, /warehouseContactName: form\.warehouseContactName\.trim\(\)/) assert.match(view, /warehouseContactPhone: form\.warehouseContactPhone\.trim\(\)/) }) diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue index e385c89..3660963 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue @@ -41,12 +41,16 @@ async function loadOperationWarehouses() { operationWarehousesLoading.value = true operationWarehousesError.value = '' try { - const result = await getMerchantWarehouses({ warehouseType: 'OVERSEAS' }) - operationWarehouses.value = result.records - if (!result.records.length) operationWarehousesError.value = '暂无可用的国外中转仓' + // Managed transit warehouses are maintained as OVERSEAS_PARTNER in the warehouse master. + // Query the active catalogue and accept both overseas warehouse types. + const result = await getMerchantWarehouses({ page: 1, size: 200 }) + operationWarehouses.value = result.records.filter((warehouse) => + warehouse.status === 'ACTIVE' && ['OVERSEAS', 'OVERSEAS_PARTNER'].includes(warehouse.warehouseType), + ) + if (!result.records.length) operationWarehousesError.value = '暂无可用的海外仓' } catch (error) { operationWarehouses.value = [] - operationWarehousesError.value = error instanceof Error ? error.message : '国外中转仓加载失败' + operationWarehousesError.value = error instanceof Error ? error.message : '海外仓加载失败' ElMessage.error(operationWarehousesError.value) } finally { operationWarehousesLoading.value = false } } @@ -66,7 +70,7 @@ async function openDetail(returnNo: string) { selected.value = await getReturnOr async function submit() { const items = form.items.map(({ skuCode, productNameZh, expectedQuantity }) => ({ skuCode: skuCode.trim(), productNameZh: productNameZh.trim(), expectedQuantity })) if (!form.overseasWarehouseId || items.some(item => !item.skuCode || item.expectedQuantity <= 0)) { ElMessage.warning('请填写操作仓、SKU 和预报数量'); return } - if (!form.warehouseContactName.trim() || !form.warehouseContactPhone.trim()) { ElMessage.warning('请填写中转仓联系人和联系电话'); return } + if (!form.warehouseContactName.trim() || !form.warehouseContactPhone.trim()) { ElMessage.warning('请填写海外仓联系人和联系电话'); return } if (duplicateSkuIds.value.size) { ElMessage.warning('同一退货单不能重复填写相同 SKU'); return } creating.value = true try { @@ -104,9 +108,9 @@ onMounted(load) -
{{ operationWarehousesError }}
- - +
{{ operationWarehousesError }}
+ +
@@ -121,7 +125,7 @@ onMounted(load)
- + diff --git a/src/modules/overseas-warehouse/views/WarehouseServiceView.vue b/src/modules/overseas-warehouse/views/WarehouseServiceView.vue index ffc265d..d09bfae 100644 --- a/src/modules/overseas-warehouse/views/WarehouseServiceView.vue +++ b/src/modules/overseas-warehouse/views/WarehouseServiceView.vue @@ -1,5 +1,5 @@