From bc9fa0faa3ee2f91f5872abd6354955af026ade5 Mon Sep 17 00:00:00 2001 From: liuyihe <2513762445@qq.com> Date: Thu, 24 Sep 2026 08:55:38 +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/data/overseas-workbench.js | 3 +- src/pages/relabel/relabel.vue | 16 +++++++- .../warehouse-transfer/warehouse-transfer.vue | 38 +++++++++++++++---- src/stores/warehouse-work.js | 2 + tests/relabel-active-task.test.mjs | 27 +++++++++++++ tests/warehouse-transfer-api.test.mjs | 28 +++++++++++++- tests/warehouse-workflows.test.mjs | 3 +- tests/workbench-availability.test.mjs | 5 ++- 8 files changed, 107 insertions(+), 15 deletions(-) diff --git a/src/data/overseas-workbench.js b/src/data/overseas-workbench.js index 77d37f4..60b9292 100644 --- a/src/data/overseas-workbench.js +++ b/src/data/overseas-workbench.js @@ -1,7 +1,8 @@ export const MODULES = [ { key: 'inbound', name: '入仓作业', nameKey: 'modules.inbound.name', icon: '入', description: '处理拆柜收货与客户退货实收入仓', descriptionKey: 'modules.inbound.description', operations: [ { key: 'receiving', name: '拆柜收货', nameKey: 'modules.receiving.name', icon: '卸', iconType: 'download', description: '三类照片签收,箱码定位入仓码后按目的类型收货', descriptionKey: 'modules.receiving.description', available: true }, - { key: 'warehouseTransfer', name: '仓储转运测量', nameKey: 'modules.warehouseTransfer.name', icon: '转', iconType: 'compose', description: '回填箱规、箱数并完成托盘打托', descriptionKey: 'modules.warehouseTransfer.description', available: true, route: '/pages/warehouse-transfer/warehouse-transfer' }, + { key: 'warehouseTransferList', name: '仓储转运测量列表', nameKey: 'modules.warehouseTransferList.name', icon: '列', iconType: 'list', description: '查看待测量的仓储转运单', descriptionKey: 'modules.warehouseTransferList.description', available: true, route: '/pages/warehouse-transfer/warehouse-transfer?mode=list' }, + { key: 'warehouseTransferWork', name: '转运测量作业', nameKey: 'modules.warehouseTransferWork.name', icon: '转', iconType: 'compose', description: '进入转运单详情完成测量、打托和拍照', descriptionKey: 'modules.warehouseTransferWork.description', available: true, route: '/pages/warehouse-transfer/warehouse-transfer?mode=work' }, { key: 'returnReceipt', name: '退货入库', nameKey: 'modules.returnReceipt.name', icon: '退', iconType: 'undo', description: '扫描退货单或 SKU,按本包实收数量生成退货库存', descriptionKey: 'modules.returnReceipt.description', available: true, route: '/pages/return-receipt/return-receipt' }, { key: 'returnPacking', name: '退货合箱', nameKey: 'modules.returnPacking.name', icon: '合', iconType: 'folder-add', description: '选择同客户已签收退货单,按 SKU 数量生成新箱', descriptionKey: 'modules.returnPacking.description', available: true, route: '/pages/return-packing/return-packing' } ] }, diff --git a/src/pages/relabel/relabel.vue b/src/pages/relabel/relabel.vue index e407ffb..8e9cecd 100644 --- a/src/pages/relabel/relabel.vue +++ b/src/pages/relabel/relabel.vue @@ -292,6 +292,18 @@ uni.redirectTo({ url: `/pages/relabel/relabel?op=relabelExecute&task=${encodeURIComponent(active.relabelNo)}` }) } finally { this.busy = false } }, + async confirmStartTask(item) { + if (this.busy) return false + this.busy = true + try { + return await new Promise((resolve) => uni.showModal({ + title: '开始贴标作业', + content: `是否开始贴标作业?\n贴标申请:${item.relabelNo}`, + confirmText: '是', cancelText: '否', + success: (result) => resolve(result.confirm), fail: () => resolve(false) + })) + } finally { this.busy = false } + }, async openExecution(item) { if (this.busy || this.stage === 'review') return if (this.stage === 'execute') { @@ -300,8 +312,10 @@ } const active = this.candidates.find((candidate) => candidate.taskStatus === 'PROCESSING' && candidate.claimedByCurrentOperator === true) if (active && active.relabelNo !== item.relabelNo) return this.promptActiveTask(active) - this.taskCode = item.relabelNo if (item.taskStatus === 'PROCESSING' && item.claimedByCurrentOperator) return uni.redirectTo({ url: `/pages/relabel/relabel?op=relabelExecute&task=${encodeURIComponent(item.relabelNo)}` }) + const confirmed = await this.confirmStartTask(item) + if (!confirmed) return + this.taskCode = item.relabelNo const payload = { relabelNo: item.relabelNo }; const key = warehouseIdempotencyKey('relabel', 'claim', payload); let claimed = false await this.run('claim', async () => { this.applyCurrent(await claimRelabelTask(item.relabelNo, { idempotencyKey: key.value })); releaseWarehouseKey('relabel', key.signature); claimed = true }, true, key) if (claimed) uni.redirectTo({ url: `/pages/relabel/relabel?op=relabelExecute&task=${encodeURIComponent(item.relabelNo)}` }) diff --git a/src/pages/warehouse-transfer/warehouse-transfer.vue b/src/pages/warehouse-transfer/warehouse-transfer.vue index d7a0ecf..f8afaad 100644 --- a/src/pages/warehouse-transfer/warehouse-transfer.vue +++ b/src/pages/warehouse-transfer/warehouse-transfer.vue @@ -1,24 +1,28 @@