diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs index 4b77e69..db01a44 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs @@ -21,3 +21,24 @@ test('新建退货预报使用加宽的双列表单弹窗', () => { assert.match(view, /title="新建退货预报" width="1120px"/) assert.match(view, /return-create-form \{ display:grid; grid-template-columns:repeat\(2,minmax\(0,1fr\)\)/) }) + +test('退货列表和详情使用客户可读仓库、状态与时间', () => { + assert.match(view, /function operationWarehouseLabel\(warehouseId: string\)/) + assert.match(view, /return warehouse \? warehouseLabel\(warehouse\) : '未关联'/) + assert.match(view, /PENDING_RECEIPT: '待签收'/) + assert.match(view, /PARTIALLY_RECEIVED: '部分签收'/) + assert.match(view, /COMPLETED: '已完成'/) + assert.match(view, /function formatDateTime\(value\?: string \| null\)/) + assert.match(view, /\{\{ operationWarehouseLabel\(row\.overseasWarehouseId\) \}\}/) + assert.match(view, /\{\{ statusLabel\(row\.status\) \}\}/) + assert.match(view, /\{\{ formatDateTime\(row\.createdAt\) \}\}/) + assert.doesNotMatch(view, / { + const mainTable = view.slice(view.indexOf('', view.indexOf('/) + assert.match(createTable, /^/) +}) diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue index e385c89..8eba9ad 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue @@ -3,7 +3,7 @@ import { computed, onMounted, reactive, ref } from 'vue' import { ElMessage } from 'element-plus' import { Plus, Search } from '@lucide/vue' import { getMerchantWarehouses, type MerchantWarehouse } from '@/modules/first-leg/api/firstLeg' -import { createReturnOrder, getReturnOrder, listReturnOrders, type ReturnOrderDetail, type ReturnOrderSummary } from '../api/returnOrders' +import { createReturnOrder, getReturnOrder, listReturnOrders, type ReturnOrderDetail, type ReturnOrderSummary, type ReturnReceipt } from '../api/returnOrders' const loading = ref(false) const creating = ref(false) @@ -32,6 +32,10 @@ const duplicateSkuIds = computed(() => { }) function resetForm() { Object.assign(form, { overseasWarehouseId: '', warehouseContactName: '', warehouseContactPhone: '', customerReferenceNo: '', remark: '', needRelabel: false, items: [emptySku()] }) } function warehouseLabel(warehouse: MerchantWarehouse) { return `${warehouse.warehouseName} · ${warehouse.warehouseCode}` } +function operationWarehouseLabel(warehouseId: string) { + const warehouse = operationWarehouses.value.find(item => String(item.id) === String(warehouseId)) + return warehouse ? warehouseLabel(warehouse) : '未关联' +} function selectOperationWarehouse() { const warehouse = operationWarehouses.value.find(item => String(item.id) === form.overseasWarehouseId) form.warehouseContactName = warehouse?.contactName || '' @@ -53,7 +57,7 @@ async function loadOperationWarehouses() { function openCreate() { resetForm() showCreate.value = true - void loadOperationWarehouses() + if (!operationWarehouses.value.length && !operationWarehousesLoading.value) void loadOperationWarehouses() } function addItem() { form.items.push(emptySku()) } function removeItem(index: number) { if (form.items.length > 1) form.items.splice(index, 1) } @@ -75,7 +79,17 @@ async function submit() { } finally { creating.value = false } } function statusType(status: string) { return status === 'COMPLETED' ? 'success' : status === 'PARTIALLY_RECEIVED' ? 'warning' : 'info' } -onMounted(load) +function statusLabel(status: string) { + return ({ PENDING_RECEIPT: '待签收', PARTIALLY_RECEIVED: '部分签收', COMPLETED: '已完成' } as Record)[status] ?? '未知状态' +} +function startedByLabel(startedBy: ReturnReceipt['startedBy']) { return startedBy === 'SKU' ? 'SKU 查询' : '退货单号' } +function formatDateTime(value?: string | null) { + if (!value) return '—' + const date = new Date(value) + if (Number.isNaN(date.getTime())) return '—' + return new Intl.DateTimeFormat('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }).format(date) +} +onMounted(() => { void Promise.all([load(), loadOperationWarehouses()]) })