# PDA 拣货静态页面设计 ## 目标 在 `apps/pda-uniapp` 中将 `docs/悦/PDA拣货/pda-picking.html` 转换为可运行在 Android PDA 上的 uni-app 页面。原型是唯一视觉和交互依据;实现保留原型文案、布局、颜色、页面密度、演示数据和本地状态流。 本次不接后端、不实现真实鉴权、不接厂商扫描 SDK、不实现持久化或离线队列。 ## 实现方案 采用单页面作业流:登录态与拣货态均由 `pages/index/index.vue` 承载,使用 Vue 本地响应式状态切换,而不拆成多个路由。原因如下: - 原型本身是连续的单页状态机,登录后立即进入同一作业上下文。 - 本阶段没有后端、深链、权限路由或跨页面数据恢复需求。 - 单页面可避免箱号、货品状态和弹层状态在路由之间同步,保持改动小而聚焦。 为避免页面文件承担过多重复结构,可将货品卡片和通用弹层拆成局部业务组件;演示数据与状态转换仍由页面统一管理。当前不引入状态管理库或新依赖。 ## 页面结构 ### 登录态 - 蓝色渐变背景、系统标识、`柏悦物流 · PDA拣货` 标题和副标题。 - 工号、密码、作业仓库三个字段。 - 普通登录按钮和三个演示账号快捷登录按钮。 - 空工号、空密码和账号密码错误使用原型文案提示。 - 登录成功后显示欢迎提示并进入拣货态;退出后清空登录表单与作业状态。 ### 拣货态 - 顶部蓝色作业栏:页面标题、仓库、退出、当前箱号、订单号和人员身份。 - `pages.json` 将首页设置为 `navigationStyle: "custom"`,不显示当前标题为 `uni-app` 的原生导航栏,避免与原型作业栏重复;页面自行处理状态栏安全区。 - 箱号选择器:显示全部演示箱号与订单号,切换时重置当前箱的未提交本地操作。 - 扫码区:输入或扫描 SKU 后回车确认;匹配当前箱中待拣 SKU 时标记已拣,错误码显示失败提示。登录进入拣货态、成功或失败扫码、确认拣出、撤销以及关闭任一弹层后,都应把焦点恢复到扫码输入框;打开需要输入数量的部分拣货弹层时,焦点临时交给数量输入框。成功扫码后清空输入值,无效码和重复扫描已处理 SKU 时保留明确错误反馈,并在反馈后继续接收下一次扫描。 - 箱号与订单信息卡。 - 拣货进度、货品列表、集装箱完成/待拣统计和底部提交栏。 - 底部提交栏固定在可视区域底部,并避让 Android 导航栏安全区。 - 提交按钮初始禁用;当所有货品均已处理时启用并显示“提交拣货完成”;当至少存在一件已拣或部分拣货、同时仍有待拣货品时启用并显示“提交拣货完成(N件待拣将视为未拣)”;仅发生部分跳拣且仍有待拣货品时保持禁用。 ### 货品状态 每个货品使用以下本地状态之一: - `pending`:待拣,提供确认拣出、部分拣货、跳拣。 - `picked`:已拣,显示完成标签与撤销入口。 - `partial`:部分拣货,显示实际数量、目标数量与撤销入口。 - `skipped`:跳拣或提交时自动未拣,显示原因与撤销入口。 待拣货品排在已处理货品之前。进度按已拣、部分拣和跳拣的已处理数量计算。 ## 弹层与反馈 - 跳拣弹层:单选原型中的五个原因,未选择时禁止确认并提示。 - 部分拣货弹层:显示 SKU、描述、总量、单位、快捷比例和数量输入;数量必须大于 0 且小于需求总量。 - 集装箱列表弹层:分别展示已完成与待拣箱,允许从待拣列表切换箱号。 - 完成弹层:展示已拣、部分拣、跳拣/未拣统计,并提供返回查看和下一箱。 - 短反馈沿用原型顶部提示条及成功、警告、错误配色。 Android 系统返回键按以下优先级处理:关闭当前弹层,关闭箱号下拉;若处于拣货态且无覆盖层,则调用与“退出”按钮相同的重置流程返回登录态;登录态交由系统退出页面。 ## 本地数据与状态 保留原型中的三个箱号、订单号、货品、库位、单位、演示账号和跳拣原因。页面维护: - 当前用户与仓库; - 当前箱号索引; - 当前箱内各 SKU 状态; - 部分拣货数量; - 已完成箱号集合; - 当前下拉、弹层、目标货品和提示条状态; - 扫码输入值。 提交时,未处理货品按原型标记为“未拣出(提交时自动标记)”,保存当前箱的最终演示状态并更新集装箱统计。刷新、退出或重启应用后允许数据重置,因为本阶段没有持久化要求。 ## 视觉与响应式 - 颜色遵循原型:主色 `#1a73e8`、成功 `#0d9488`、危险 `#dc2626`、警告 `#f59e0b`、页面背景 `#f5f7fa`。 - 保留 12px 圆角、浅阴影、蓝色当前货品边线、状态色和卡片密度。 - 使用 uni-app 支持的 `rpx`、百分比和安全区变量适配 Android PDA,以 `360 × 640 dp` 为主要检查尺寸,兼容约 `320–480 dp` 宽度。 - 不引入新字体、图片生成素材、第三方图标库或新的视觉语言。 - 图标优先使用简单 CSS/文本符号或现有静态资源,避免依赖网页专属 SVG 注入方式。 - 本阶段不使用网络、震动、相机或存储能力,因此实现时移除 `manifest.json` 中手工声明的 `VIBRATE` 和 `ACCESS_NETWORK_STATE` 权限;未来接入对应能力时再按明确用途恢复最小权限。 ## 边界状态 - 登录加载态:当前纯本地操作无需异步加载,不添加虚假等待动画。 - 空态:保留“该箱号暂无拣货任务”“暂无已拣完成的集装箱”“所有集装箱已拣完成”等原型语义。 - 错误态:覆盖登录校验、空扫码、无效 SKU、未选跳拣原因、无效部分数量和最后一箱提示。 - 重复操作:已处理货品不再匹配扫码;撤销后恢复为待拣。 - 权限态:本阶段没有服务端权限;人员角色仅作演示展示,不据此隐藏功能。 - 软键盘:输入区与部分拣货输入不得被键盘永久遮挡,关闭弹层后恢复扫码输入上下文。 ## 验证 仓库当前没有项目根级依赖清单、可核实的构建脚本或自动化测试设施,因此不新增或编造测试命令。实现后进行以下可核实检查: 1. 静态检查 `pages.json`、Vue 模板、脚本和样式是否符合现有 uni-app 结构。 2. 若当前环境可用 HBuilderX/uni-app 运行能力,则以 Android App 方式运行;否则明确记录未执行构建。 3. 在常见 PDA 尺寸核对登录、主作业、弹层、底部固定栏和软键盘遮挡。 4. 手工走通快捷登录、箱号切换、有效/无效/重复扫码、确认拣出、部分拣货、跳拣、撤销、提前提交、完整提交和下一箱,并核对每次关键操作后的扫码焦点。 5. 检查提交按钮在初始、仅部分跳拣、存在已拣且仍有待拣、全部处理四种状态下的启用状态和文案。 6. 检查系统返回对弹层、下拉、拣货态和登录态的处理,并确认返回登录态时执行完整状态重置。 7. 检查首页未出现重复原生导航栏,并确认 Android 配置不再手工声明当前未使用的网络与震动权限。 真实扫描速度、连续扫描、低电量、断网、前后台切换、厂商扫描头和正式打包发布不属于本次静态实现的可验证范围,需在设备与工具链确定后补测。