diff --git a/src/modules/order-management/inboundOrders.test.mjs b/src/modules/order-management/inboundOrders.test.mjs index 9bba715..a626746 100644 --- a/src/modules/order-management/inboundOrders.test.mjs +++ b/src/modules/order-management/inboundOrders.test.mjs @@ -55,9 +55,10 @@ test('preserves overseas API diagnostic metadata without rendering it as a busin test('renders inbound workflow statuses in Chinese and keeps desktop values on one line', () => { for (const [status, label] of [ - ['PENDING_ASSIGNMENT', '待分配'], ['PDA_PENDING', '待收货'], ['ASSIGNED', '已分配'], + ['PENDING_ASSIGNMENT', '待分配'], ['PDA_PENDING', '待入库'], ['ASSIGNED', '已分配'], ['SIGNED', '已签收'], ['PICKING', '拣货中'], ['PARTIAL_INBOUND', '部分入库'], ]) assert.match(view, new RegExp(`${status}: '${label}'`)) + assert.match(view, /COMPLETED: '全部入库'/) assert.match(view, /label="状态" width="120" show-overflow-tooltip/) assert.match(view, /\.detail-grid div \{ min-width: 0;/) assert.match(view, /\.detail-grid dd \{[^}]*overflow: hidden;[^}]*text-overflow: ellipsis;[^}]*white-space: nowrap;/) diff --git a/src/modules/order-management/views/InboundOrdersView.vue b/src/modules/order-management/views/InboundOrdersView.vue index 7627e05..2acd022 100644 --- a/src/modules/order-management/views/InboundOrdersView.vue +++ b/src/modules/order-management/views/InboundOrdersView.vue @@ -12,11 +12,11 @@ const total = ref(0) const inboundStatusOptions = [ { label: '待分配', value: 'PENDING_ASSIGNMENT' }, { label: '已分配', value: 'ASSIGNED' }, - { label: '待收货', value: 'PDA_PENDING' }, + { label: '待入库', value: 'PDA_PENDING' }, { label: '已签收', value: 'SIGNED' }, { label: '拣货中', value: 'PICKING' }, { label: '部分入库', value: 'PARTIAL_INBOUND' }, - { label: '已完成', value: 'COMPLETED' }, + { label: '全部入库', value: 'COMPLETED' }, ] const query = reactive({ page: 1, size: 20, planNo: '', inboundCode: '', destinationWarehouseCode: '', status: '', @@ -33,9 +33,9 @@ function destinationWarehouseLabel(...values: unknown[]) { function dateTime(value: unknown) { return value ? new Date(String(value)).toLocaleString('zh-CN', { hour12: false }) : '—' } function statusLabel(value: unknown) { return ({ - PENDING: '待处理', PROCESSING: '处理中', PENDING_ASSIGNMENT: '待分配', PDA_PENDING: '待收货', + PENDING: '待处理', PROCESSING: '处理中', PENDING_ASSIGNMENT: '待分配', PDA_PENDING: '待入库', ASSIGNED: '已分配', SIGNED: '已签收', PICKING: '拣货中', PARTIAL_INBOUND: '部分入库', - COMPLETED: '已完成', CANCELLED: '已取消', UNAPPOINTED: '未预约', SUCCESS: '预约成功', + COMPLETED: '全部入库', CANCELLED: '已取消', UNAPPOINTED: '未预约', SUCCESS: '预约成功', FAILED: '预约失败', SCHEDULED: '已排车', UNSCHEDULED: '未排车', } as Record)[String(value)] || text(value) } diff --git a/src/modules/overseas-warehouse/api/warehouseServices.ts b/src/modules/overseas-warehouse/api/warehouseServices.ts index 24f3de1..59506a6 100644 --- a/src/modules/overseas-warehouse/api/warehouseServices.ts +++ b/src/modules/overseas-warehouse/api/warehouseServices.ts @@ -34,12 +34,14 @@ export interface RelabelInventoryCandidate { } export interface TransferCreate { - operatingWarehouseId: string; fbaWarehouseCode?: string + operatingWarehouseId: string; fbaWarehouseCode?: string; destinationType?: 'NONE' | 'FBA' | 'PRIVATE' + destinationWarehouseId?: string; destinationWarehouseCode?: string; destinationWarehouseName?: string + privateDestinationAddress?: string; privateDestinationPostalCode?: string; privateDestinationContactName?: string; privateDestinationContactPhone?: string deliveryAddress: string; packageCount: number; volumeCbm: number; deliveryMethod: string; estimatedArrivalAt: string; estimatedShipAt?: string fbaShipmentNo?: string; trackingNo?: string; fbaBoxNos?: string; remark?: string; needRelabel: boolean; idempotencyKey: string - labelDeadline?: string; relabelContactName?: string; relabelContactPhone?: string; relabelChargeAmount?: number; relabelDeliveryMethod?: RelabelDeliveryMethod - items: Array<{ skuCode: string; productNameZh: string; packageCount: number; shippingMark?: string }> - relabelItems?: Array<{ operationType: 'CARTON_LABEL' | 'SKU_LABEL' | 'CARTON_AND_SKU'; customerCartonMarks: string[]; originalSku: string; newSku?: string; quantity: number; fbaCartonMark?: string; destinationWarehouseCode?: string; remark?: string }> + labelDeadline?: string; pickupContactName?: string; pickupContactPhone?: string; relabelContactName?: string; relabelContactPhone?: string; relabelChargeAmount?: number; relabelDeliveryMethod?: RelabelDeliveryMethod + items: Array<{ skuCode?: string; productNameZh?: string; packageCount: number; shippingMark?: string }> + relabelItems?: Array<{ operationType: 'CARTON_LABEL' | 'SKU_LABEL' | 'CARTON_AND_SKU'; customerCartonMarks: string[]; originalSku?: string; newSku?: string; quantity: number; fbaCartonMark?: string; destinationWarehouseCode?: string; remark?: string }> } export interface RelabelCreate { customerOrderNo: string; operationWarehouseId: string; labelDeadline: string; contactName: string; contactPhone: string; chargeAmount?: number @@ -60,6 +62,12 @@ export function getTransfer(transferNo: string) { export function createTransfer(payload: TransferCreate) { return overseasApiRequest>({ method: 'POST', url: '/merchant/v1/last-leg/warehouse-transfers', data: payload }) } +export function updateTransfer(transferNo: string, payload: TransferCreate) { + return overseasApiRequest>({ method: 'POST', url: `/merchant/v1/last-leg/warehouse-transfers/${encodeURIComponent(transferNo)}/save-draft`, data: payload }) +} +export function submitTransfer(transferNo: string) { + return overseasApiRequest>({ method: 'POST', url: `/merchant/v1/last-leg/warehouse-transfers/${encodeURIComponent(transferNo)}/submit` }) +} export function listRelabels(params: Record) { return overseasApiRequest>({ method: 'GET', url: '/merchant/v1/last-leg/relabel-applications', params }) } @@ -73,6 +81,9 @@ export interface TransferCartonLabel { transferNo: string; cartons: Array<{ cart export function getTransferCartonLabel(transferNo: string) { return overseasApiRequest({ method: 'GET', url: `/merchant/v1/last-leg/warehouse-transfers/${encodeURIComponent(transferNo)}/carton-label` }) } +export function downloadTransferMeasurementPhoto(transferNo: string, fileId: string | number) { + return overseasBlobRequest({ method: 'GET', url: `/merchant/v1/last-leg/warehouse-transfers/${encodeURIComponent(transferNo)}/measurement-photos/files/${encodeURIComponent(fileId)}/download` }) +} export function listRelabelInventoryCandidates(operationWarehouseId: string, inboundCode?: string) { return overseasApiRequest({ diff --git a/src/modules/overseas-warehouse/views/WarehouseServiceView.vue b/src/modules/overseas-warehouse/views/WarehouseServiceView.vue index 01bf7de..a3ef7ae 100644 --- a/src/modules/overseas-warehouse/views/WarehouseServiceView.vue +++ b/src/modules/overseas-warehouse/views/WarehouseServiceView.vue @@ -1,17 +1,18 @@