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 }} 个订单
@@ -41,6 +42,12 @@
完成出库任务尚有 {{ remainingPackages }} 箱未拣,不能完成出库。出库任务已完成,不可重复提交。全部计划货物已扫描核平,服务端将再次校验库存门禁。
+
+ 废弃订单{{ discardCurrent.discardNo }}
+ 扫描该废弃订单对应的托盘,再填写每个 SKU 的实际废弃数量。
+ 托盘 {{ discardTask.palletNo }}{{ discardTask.status === 'COMPLETED' ? '已完成' : '待废弃' }}{{ sku.skuCode || '—' }}{{ sku.productName || '—' }} · 计划 {{ sku.plannedPackages }} 箱实际废弃数量最多 {{ sku.plannedPackages }} 箱
+
+
{{ successMessage }}
@@ -50,7 +57,7 @@