diff --git a/src/api/fulfillment.js b/src/api/fulfillment.js index 0a82511..729bb73 100644 --- a/src/api/fulfillment.js +++ b/src/api/fulfillment.js @@ -2,6 +2,7 @@ import { overseasRequest } from './overseas.js' const DISPATCH_BASE = '/pda/v1/last-leg/dispatches' const OUTBOUND_BASE = '/pda/v1/last-leg/outbound-tasks' +const CARGO_DISCARD_BASE = '/pda/v1/last-leg/cargo-discards' const encoded = (value) => encodeURIComponent(String(value || '').trim()) @@ -128,3 +129,34 @@ export function outboundPickPayload(item, position, packages) { export function completeOutboundTask(taskNo, request) { return overseasRequest('POST', `${OUTBOUND_BASE}/${encoded(taskNo)}/complete`, request) } + +export function normalizeCargoDiscardTask(value) { + const task = value || {} + return { + ...task, + discardNo: String(task?.discardNo || ''), + palletNo: String(task?.palletNo || ''), + status: String(task?.status || 'PENDING'), + skus: asList(task?.skus).map((sku) => ({ + ...sku, + itemId: String(sku?.itemId || ''), + skuCode: String(sku?.skuCode || ''), + productName: String(sku?.productName || ''), + plannedPackages: count(sku?.plannedPackages), + actualPackages: sku?.actualPackages == null ? null : count(sku.actualPackages), + status: String(sku?.status || 'PENDING') + })) + } +} + +export async function listCargoDiscardTasks() { + return asList(await overseasRequest('GET', CARGO_DISCARD_BASE)).map(normalizeCargoDiscardTask) +} + +export async function resolveCargoDiscardPallet(palletNo) { + return normalizeCargoDiscardTask(await overseasRequest('POST', `${CARGO_DISCARD_BASE}/resolve`, { palletNo })) +} + +export async function confirmCargoDiscard(discardNo, palletNo, lines) { + return normalizeCargoDiscardTask(await overseasRequest('POST', `${CARGO_DISCARD_BASE}/${encoded(discardNo)}/pallets/${encoded(palletNo)}/confirm`, { lines })) +} diff --git a/src/data/overseas-workbench.js b/src/data/overseas-workbench.js index 60b9292..d99c613 100644 --- a/src/data/overseas-workbench.js +++ b/src/data/overseas-workbench.js @@ -8,7 +8,7 @@ export const MODULES = [ ] }, { key: 'outbound', name: '出库履约', nameKey: 'modules.outbound.name', icon: '出', description: '排车拣货、出库任务与发车闭环', descriptionKey: 'modules.outbound.description', operations: [ { key: 'dispatchPicking', name: '排车拣货', nameKey: 'modules.dispatchPicking.name', icon: '车', iconType: 'paperplane', description: '按排车任务扫描托盘拣货,完成门禁后执行发车', descriptionKey: 'modules.dispatchPicking.description', available: true, route: '/pages/dispatch/dispatch' }, - { key: 'outboundPicking', name: '出库作业', nameKey: 'modules.outboundPicking.name', icon: '拣', iconType: 'checkbox', description: '处理出库与一件代发任务,扫码核平后完成', descriptionKey: 'modules.outboundPicking.description', available: true, route: '/pages/outbound/outbound' } + { key: 'outboundPicking', name: '出库作业', nameKey: 'modules.outboundPicking.name', icon: '拣', iconType: 'checkbox', description: '处理普通出库、一件代发和废弃订单,按托盘扫码完成', descriptionKey: 'modules.outboundPicking.description', available: true, route: '/pages/outbound/outbound' } ] }, { key: 'inventory', name: '库内作业', nameKey: 'modules.inventory.name', icon: '库', description: '商品移库与托盘管理', descriptionKey: 'modules.inventory.description', operations: [ { key: 'move', name: '商品移库', nameKey: 'modules.move.name', icon: '移', iconType: 'loop', description: '扫描来源与目标库位完成移库', descriptionKey: 'modules.move.description', available: true, route: '/pages/move/move' }, diff --git a/src/pages/outbound/outbound.vue b/src/pages/outbound/outbound.vue index b1dd1c8..63bf4a5 100644 --- a/src/pages/outbound/outbound.vue +++ b/src/pages/outbound/outbound.vue @@ -6,8 +6,8 @@ 出库任务一件代发扫描托盘码可整托出库;扫描排车业务号会转入“排车拣货” 当前任务出库作业详情 - - + + 任务号直接恢复;进入任务后扫描 DP 托盘码,将一次拣取该托全部未拣箱件。 @@ -19,7 +19,8 @@ - 暂无出库任务可刷新列表,或扫描任务号恢复未完成作业。 + 暂无出库任务可刷新列表,或扫描任务号恢复未完成作业。 + 废弃订单{{ discardOrderCount }} 个订单 + + {{ successMessage }} @@ -50,7 +57,7 @@