From f8ebbd96109c73551e49f2113a3716686d130af0 Mon Sep 17 00:00:00 2001
From: ouyangxq <775153912@qq.com>
Date: Fri, 11 Sep 2026 11:19:47 +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
---
AGENTS.md | 6 +++---
README.md | 4 ++--
data/demo-data.js | 8 ++++----
pages.json | 2 +-
pages/history/history.vue | 2 +-
pages/home/home.vue | 15 +++++++++-----
pages/module/module.vue | 15 ++++++++++----
pages/picking/picking.vue | 2 +-
tests/dropship-palletization.test.mjs | 2 +-
tests/page-contract.test.mjs | 28 +++++++++++++++++++--------
10 files changed, 54 insertions(+), 30 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
index 65e88fb..4092cae 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -8,7 +8,7 @@
## 开发与发布边界
-- 当前已有 uni-app Vue 3 页面、`uni_modules/`、`vite.config.js`、`.env.example` 和 H5 同源代理配置。真实作业包括一件代发合托和集装箱拣货;项目仍没有根级依赖清单、仓库内 npm 构建命令或可核实的 Android 构建命令。H5 已使用 HBuilderX 5.15 自带编译器和 `cli.exe launch web` 验证,具体命令见 `README.md`。现有 Node.js 内置测试仅覆盖页面契约与本地状态规则。
+- 当前已有 uni-app Vue 3 页面、`uni_modules/`、`vite.config.js`、`.env.example` 和 H5 同源代理配置。首页当前只展示“入库 → 一件代发合托”“出库 → 出库拣货”和“查询 → 库位查询”,其余能力保留源码与路由但不展示;项目仍没有根级依赖清单、仓库内 npm 构建命令或可核实的 Android 构建命令。H5 已使用 HBuilderX 5.15 自带编译器和 `cli.exe launch web` 验证,具体命令见 `README.md`。现有 Node.js 内置测试仅覆盖页面契约与本地状态规则。
- PDA 采用 uni-app 开发并支持在线更新;Android 硬件扫描已确认使用广播模式并已接入:Action=`android.intent.action.SCANRESULT`、字符串 Extra=`value`。设备型号不构成开发、发布或验收门禁;继续通过设备适配层接入,不绑定单一厂商 SDK。
- 正式作业已确认为在线模式:断网不能开始正式拣货、提交、完成任务或推进 `LOADED`,不实现离线业务提交队列;恢复网络后提示员工刷新重试。
- H5 调试使用 HBuilderX 5.15 自带的 uni-app Vue 3 编译器;Android 发布流程仍待明确后补充准确的依赖版本、打包命令,并同步更新 `README.md` 与本文件。
@@ -53,7 +53,7 @@
| 部分拣货布局与库位展示 | `pages/picking/picking.vue`、`styles/pda.scss` | 库位为空时不渲染空标签或残留分隔符;部分拣货数量必须小于需求且不超过服务端库存/库位可用量,合同 `tests/partial-layout.test.mjs`、`tests/picking-location-display.test.mjs` |
| Android APK/WGT 在线更新 | `App.vue`、`utils/app-update.js`、`.env.example`、`manifest.json` | `VITE_PDA_UPDATE_URL` 使用国内独立 HTTPS 通道;合同 `tests/app-update.test.mjs`,H5 不执行更新逻辑 |
| 登录与会话 | `pages/login/`、`stores/session.js` | 远程鉴权适配和会话清理 |
-| 工作台与模块入口 | `pages/home/`、`pages/module/`、`pages/operation/` | `data/demo-data.js` 与页面禁用规则 |
+| 工作台与模块入口 | `pages/home/`、`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 托盘或系统发新托盘,全部归托后逐托封托;公网前缀 `/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 |
@@ -70,7 +70,7 @@
| 验收域 | PDA 范围与代码入口 | 验收首读 |
|---|---|---|---|
-| 作业全链路 | 登录、工作台、一件代发扫码清点/归托/封托、集装箱扫码拣货、装柜证据、草稿持久化、批量提交、异常和在线更新 | `pages/login/`、`pages/home/`、`pages/dropship-tasks/`、`pages/dropship-palletization/`、`pages/picking/`、`stores/session.js`、`stores/picking.js`、`utils/scan-broadcast.js`、`pages.json` | 按业务选择 `../../docs/订单与客户/`、`../../docs/入库测量与计费/`、`../../docs/国内货柜履约/` 和 `README.md` 的契约与验收规则 |
+| 作业全链路 | 登录、工作台、一件代发扫码清点/归托/封托、出库扫码拣货、装柜证据、草稿持久化、批量提交、异常和在线更新 | `pages/login/`、`pages/home/`、`pages/dropship-tasks/`、`pages/dropship-palletization/`、`pages/picking/`、`stores/session.js`、`stores/picking.js`、`utils/scan-broadcast.js`、`pages.json` | 按业务选择 `../../docs/订单与客户/`、`../../docs/入库测量与计费/`、`../../docs/国内货柜履约/` 和 `README.md` 的契约与验收规则 |
作业边界:PDA 不承担客户工作台或后台配置;服务端状态、权限、幂等和 `LOADED` 门禁是验收事实来源。发布采用既定 uni-app 在线更新安排。
diff --git a/README.md b/README.md
index e07f3b2..581186c 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
国内货柜履约装柜取证已具备接口适配基础:拣货页展示空仓、半仓、满仓、锁仓和带锁码照五类证据,经 File 服务上传取得真实 `fileId`,并展示待上传、上传中、失败、成功和重试状态。产品已确认 PDA 只能现场拍照,Admin 可人工上传;每类至少 1 张有效照片、同类型可多张追加,错误或重复照片只作废不硬删除。当前页面和上传队列仍按会话内单类型记录设计,尚未完整达到“多图追加+作废审计”契约。
-登录后默认进入首页,不再直接进入拣货。首页采用入库、出库、库内作业、查询四个分组的三列宫格,不设置常驻底部导航;作业记录收纳在左上角功能菜单,个人中心从右上角人员入口进入。第一版本只有“出库 → 集装箱拣货”可点击并具备完整本地状态交互,其余业务入口统一置灰并禁用,保留在界面中用于确认后续信息架构。
+登录后默认进入首页,不再直接进入拣货。首页当前只展示“入库 → 一件代发合托”“出库 → 出库拣货”和“查询 → 库位查询”;其余业务入口保留在数据、页面和路由中,通过 `visible` 隐藏,不从源码删除。作业记录收纳在左上角功能菜单,个人中心从右上角人员入口进入。
## 页面与状态结构
@@ -19,7 +19,7 @@
- `pages/history/history`:本次会话的作业记录;
- `pages/profile/profile`:人员、班次、仓库信息及退出登录;
- `pages/scanner-test/scanner-test`:Android 硬件扫描广播诊断页;
-- `pages/picking/picking`:集装箱拣货完整交互。
+- `pages/picking/picking`:出库拣货完整交互。
登录会话集中在 `stores/session.js` 并持久化到设备,拣货会话集中在 `stores/picking.js`。认证请求由 `api/http.js` 统一处理:Access Token 临近过期时使用 Refresh Token 轮换;并发请求共享一次刷新;401 刷新成功后只重放一次;Refresh Token 明确失效时清理会话和作业草稿并返回登录页,网络或服务异常不会误清会话。产品契约要求未提交拣货草稿持久化到设备,并绑定作业员、任务和柜次,其他账号不能继承;成功提交或明确放弃后才清理。页面头部与底部主导航位于 `components/`,演示账号、模块和任务数据位于 `data/demo-data.js`,跨页面 PDA 视觉规则位于 `styles/pda.scss`。
diff --git a/data/demo-data.js b/data/demo-data.js
index d3309fe..822f80f 100644
--- a/data/demo-data.js
+++ b/data/demo-data.js
@@ -8,13 +8,13 @@ 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: '扫描到货单并确认实收数量' },
{ name: '商品上架', icon: '上', description: '按推荐库位完成商品上架' },
{ name: '入库质检', icon: '检', description: '登记质检结果与异常信息' }
] },
{ key: 'outbound', name: '出库', icon: '出', description: '拣货、复核与装箱', meta: '3 个待办', operations: [
- { name: '一件代发合托', icon: '托', description: '逐箱清点并生成或绑定 DP 托盘', available: true },
- { name: '集装箱拣货', icon: '拣', description: '按箱号扫描并确认拣货', available: true },
+ { name: '出库拣货', icon: '拣', description: '按箱号扫描并确认拣货', available: true, visible: true },
{ name: '出库复核', icon: '核', description: '复核拣货商品与出库数量' },
{ name: '装箱交接', icon: '装', description: '完成装箱并登记交接信息' }
] },
@@ -25,7 +25,7 @@ export const MODULES = [
] },
{ key: 'query', name: '查询', icon: '查', description: '商品、库位与任务查询', meta: '3 个静态页面', operations: [
{ name: '商品查询', icon: '品', description: '扫描 SKU 查询库存与库位' },
- { name: '库位查询', icon: '位', description: '查看库位状态与在库商品' },
+ { name: '库位查询', icon: '位', description: '查看库位状态与在库商品', available: true, visible: true },
{ name: '任务查询', icon: '单', description: '按单号查询现场任务进度' }
] }
]
@@ -41,7 +41,7 @@ export const OPERATION_PROTOTYPES = {
'库存调整': { subtitle: '登记差异原因并提交审核', scanLabel: '调整单 / 商品码', scanPlaceholder: '扫描调整单或 SKU', prefix: 'ADJ', titles: ['盘亏差异调整', '破损库存状态调整'], meta: '需要组长复核', location: '异常区 E-01', quantity: '3 SKU · 差异 8 件', action: '查看处理' },
'商品查询': { subtitle: '查询商品库存、批次与所在库位', scanLabel: 'SKU / 条码', scanPlaceholder: '扫描商品条码或输入 SKU', prefix: 'SKU', titles: ['EL-38201 电容 100μF/25V', 'ME-55010 M8 不锈钢螺栓'], meta: '可用库存', location: 'A-03-12', quantity: '可用 1,280 件', action: '查看详情' },
'库位查询': { subtitle: '查看库位容量、状态与在库商品', scanLabel: '库位码', scanPlaceholder: '扫描或输入库位编码', prefix: 'LOC', titles: ['A-03-12 标准货架位', 'B-01-08 重型货架位'], meta: '库位状态:正常', location: 'A 区 03 通道', quantity: '占用 72% · 4 SKU', action: '查看详情' },
- '任务查询': { subtitle: '按业务单号查询现场执行进度', scanLabel: '任务号 / 业务单号', scanPlaceholder: '扫描或输入任务、订单编号', prefix: 'TSK', titles: ['SO-78542 集装箱拣货', 'ASN-260728-018 到货收货'], meta: '今日现场任务', location: '仓库 A', quantity: '进度 6 / 8', action: '查看进度' }
+ '任务查询': { subtitle: '按业务单号查询现场执行进度', scanLabel: '任务号 / 业务单号', scanPlaceholder: '扫描或输入任务、订单编号', prefix: 'TSK', titles: ['SO-78542 出库拣货', 'ASN-260728-018 到货收货'], meta: '今日现场任务', location: '仓库 A', quantity: '进度 6 / 8', action: '查看进度' }
}
export const DEMO_PICKING_ITEMS = Array.from({ length: 10 }, (_, index) => {
diff --git a/pages.json b/pages.json
index 80ca699..e3c44d2 100644
--- a/pages.json
+++ b/pages.json
@@ -10,7 +10,7 @@
{ "path": "pages/history/history", "style": { "navigationStyle": "custom", "navigationBarTitleText": "作业记录", "backgroundColor": "#F5F7FA" } },
{ "path": "pages/profile/profile", "style": { "navigationStyle": "custom", "navigationBarTitleText": "个人中心", "backgroundColor": "#F5F7FA" } },
{ "path": "pages/scanner-test/scanner-test", "style": { "navigationStyle": "custom", "navigationBarTitleText": "广播扫码测试", "backgroundColor": "#F5F7FA" } },
- { "path": "pages/picking/picking", "style": { "navigationStyle": "custom", "navigationBarTitleText": "集装箱拣货", "backgroundColor": "#F5F7FA" } }
+ { "path": "pages/picking/picking", "style": { "navigationStyle": "custom", "navigationBarTitleText": "出库拣货", "backgroundColor": "#F5F7FA" } }
],
"globalStyle": {
"navigationBarTextStyle": "white",
diff --git a/pages/history/history.vue b/pages/history/history.vue
index a40977b..ac5c77c 100644
--- a/pages/history/history.vue
+++ b/pages/history/history.vue
@@ -1,5 +1,5 @@
- {{ overview.completedCount }}今日完成{{ overview.pendingBoxCount }}待处理最近作业▤暂无作业记录完成的现场任务会显示在这里✓集装箱拣货 · {{ containerReference(entry.box) }}已完成
+ {{ overview.completedCount }}今日完成{{ overview.pendingBoxCount }}待处理最近作业▤暂无作业记录完成的现场任务会显示在这里✓出库拣货 · {{ containerReference(entry.box) }}已完成