From f8f21b9f37d2e8705ce7540e3cdd84c034881a48 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Mon, 14 Sep 2026 17:52:00 +0800 Subject: [PATCH] refactor: remove dropship printing from PDA --- AGENTS.md | 2 +- api/pda-dropship.js | 27 +------------- data/demo-data.js | 2 +- .../dropship-palletization.vue | 37 +------------------ tests/dropship-palletization.test.mjs | 14 ++----- tests/dropship-palletizing-page.test.mjs | 5 +-- 6 files changed, 11 insertions(+), 76 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index af896c0..2f4de01 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -58,7 +58,7 @@ | 登录与会话 | `pages/login/`、`stores/session.js` | 远程鉴权适配和会话清理 | | 工作台、仓库选择与模块入口 | `pages/home/`、`components/PortalHeader.vue`、`stores/session.js`、`pages/module/`、`pages/operation/` | 左上角只提供启用国内仓选择,选择结果持久化;`data/demo-data.js` 的 `visible` 控制展示、`available` 控制可操作;隐藏能力不得删除源码或路由 | | 待处理任务、服务端就绪与领取 | `pages/tasks/tasks.vue` | `api/pda-loading.js` 的 `listLoadingOrders`、`getContainerPickingTask`、`claimContainerPickingTask`;合并任务和缺少柜号/仓库/版本的任务不可进入 | -| 一件代发 | `pages/dropship-tasks/dropship-tasks.vue`、`pages/dropship-palletization/dropship-palletization.vue` | `api/pda-dropship.js`;作为入库作业,测量审核按预计托数预生成 DP 托盘码,PDA 不展开全部托盘卡片,直接扫码并只展示当前操作托盘;全部预生成托盘码合并为每托一页的多页 A4 PDF,含 SKU 明细但不直接驱动打印机;PDA 明确执行逐箱清点并支持先扫箱或先扫托、归托、换托/移回待绑托和逐托封托;同一国内作业仓的多票可继续装入同一开放托盘,单票全部归托不等于托盘装满,实物装满后才封托;预计托数与已生成托盘数不一致时失败关闭;公网前缀 `/api/platform/v1/first-leg/pda-dropship/**` | +| 一件代发 | `pages/dropship-tasks/dropship-tasks.vue`、`pages/dropship-palletization/dropship-palletization.vue` | `api/pda-dropship.js`;作为入库作业,测量审核按预计托数预生成 DP 托盘码,由 Admin 电脑端合并打印后贴到空托盘;PDA 不承载打印,只直接扫码并展示当前操作托盘;PDA 明确执行逐箱清点并支持先扫箱或先扫托、归托、换托/移回待绑托和逐托封托;同一国内作业仓的多票可继续装入同一开放托盘,单票全部归托不等于托盘装满,实物装满后才封托;预计托数与已生成托盘数不一致时失败关闭;公网前缀 `/api/platform/v1/first-leg/pda-dropship/**` | | 业务编号展示与错误脱敏 | `utils/user-facing.js`、`tests/user-facing-identifiers.test.mjs` | 任务和作业页优先显示真实集装箱号,缺失时显示柜次号,再缺失显示“集装箱号 —”;不得展示 taskId、inboundId、orderId、loadingPlanId、containerBookingId 或长整型内部 ID,错误仍保留 code、requestId、traceId | | 拣货任务与箱码扫码 | `pages/picking/`、`stores/picking.js` | `api/pda-loading.js`、`utils/scan-broadcast.js`、`components/ScanTargetInput.vue`;服务端契约见 `../../baiyue-firstleg/firstleg/src/main/resources/openapi/phase3-pda-convergence-v1.yaml` | | 一件代发清点组托状态与草稿 | `pages/dropship-palletization/dropship-palletization.vue` | `stores/dropship-palletizing.js`、`utils/dropship-palletizing-state.js`;服务端契约见 `../../baiyue-firstleg/firstleg/src/main/resources/openapi/dropship-palletization-v1.yaml`,合同 `tests/dropship-palletizing-*.test.mjs` | diff --git a/api/pda-dropship.js b/api/pda-dropship.js index a00706c..88cc836 100644 --- a/api/pda-dropship.js +++ b/api/pda-dropship.js @@ -1,4 +1,4 @@ -import { apiDownload, apiRequest } from '@/api/http.js' +import { apiRequest } from '@/api/http.js' import { stableOperationId } from '@/utils/idempotency.js' import { session } from '@/stores/session.js' @@ -44,31 +44,6 @@ export function sealDropshipPallet(taskId, warehouseId, pallet) { return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/pallets/${encodeURIComponent(pallet.palletId)}/seal`, method: 'POST', data: { warehouseId: stableId(warehouseId), expectedVersion: pallet.version, operationId: operationId('seal', taskId, { warehouseId, palletId: pallet.palletId, version: pallet.version }) } }) } -export function downloadDropshipPalletLabel(taskId, warehouseId, palletId) { - const baseUrl = String(session.apiBase || '/api/platform/v1').replace(/\/$/, '') - const url = `${baseUrl}${ROOT}/tasks/${encodeURIComponent(taskId)}/pallets/${encodeURIComponent(palletId)}/print?warehouseId=${encodeURIComponent(stableId(warehouseId))}` - return apiDownload({ url }).then((response) => { - const contentType = response.header?.['Content-Type'] || response.header?.['content-type'] || '' - if (response.statusCode < 200 || response.statusCode >= 300 || !response.tempFilePath || (contentType && !/^application\/pdf/i.test(contentType))) { - const error = new Error('托盘码打印文件生成失败') - error.statusCode = response.statusCode - error.requestId = response.header?.['X-Request-Id'] || response.header?.['x-request-id'] - error.traceId = response.header?.['X-Trace-Id'] || response.header?.['x-trace-id'] - throw error - } - return response.tempFilePath - }) -} - -export function downloadAllDropshipPalletLabels(taskId, warehouseId) { - const baseUrl = String(session.apiBase || '/api/platform/v1').replace(/\/$/, '') - const url = `${baseUrl}${ROOT}/tasks/${encodeURIComponent(taskId)}/pallets/print?warehouseId=${encodeURIComponent(stableId(warehouseId))}` - return apiDownload({ url }).then((response) => { - const contentType = response.header?.['Content-Type'] || response.header?.['content-type'] || '' - if (response.statusCode < 200 || response.statusCode >= 300 || !response.tempFilePath || (contentType && !/^application\/pdf/i.test(contentType))) throw new Error('全部托盘码打印文件生成失败') - return response.tempFilePath - }) -} function requireValue(value, message) { if (value === null || value === undefined || value === '') throw new Error(message) diff --git a/data/demo-data.js b/data/demo-data.js index 3325658..ee8794f 100644 --- a/data/demo-data.js +++ b/data/demo-data.js @@ -8,7 +8,7 @@ export const DEMO_ACCOUNTS = [ export const MODULES = [ { key: 'inbound', name: '入库', icon: '入', description: '收货、上架与质检', meta: '3 个静态页面', operations: [ - { name: '一件代发', icon: '托', description: '完成逐箱入库后生成并打印 DP 托盘码', available: true, visible: true }, + { name: '一件代发', icon: '托', description: '扫描已由电脑端打印并贴好的 DP 托盘码', available: true, visible: true }, { name: '到货收货', icon: '收', description: '扫描到货单并确认实收数量' }, { name: '商品上架', icon: '上', description: '按推荐库位完成商品上架' }, { name: '入库质检', icon: '检', description: '登记质检结果与异常信息' } diff --git a/pages/dropship-palletization/dropship-palletization.vue b/pages/dropship-palletization/dropship-palletization.vue index 6baeef9..fb8789e 100644 --- a/pages/dropship-palletization/dropship-palletization.vue +++ b/pages/dropship-palletization/dropship-palletization.vue @@ -55,11 +55,9 @@ 2. 托盘操作直接扫描托盘码,只显示当前操作的托盘;待绑托箱扫描目标托盘后批量归托 - 已生成 {{ task.generatedPalletCount || 0 }} 个托盘码 {{ currentPallet.palletNo }}{{ currentPallet.status === 'SEALED' ? '已封托' : '当前托盘' }} {{ currentPallet.cartonCount || 0 }} 箱 · {{ currentPallet.skuCount || 0 }} SKU · {{ currentPallet.weightKg || 0 }} kg · {{ currentPallet.volumeCbm || 0 }} m³ - {{ item.boxCode }} @@ -72,7 +70,7 @@