4.1 KiB
PDA 作业端
面向仓库现场人员的移动作业应用。
技术方案:使用 uni-app Vue 3 开发,页面采用 Vue 3 兼容的 Options API,适配仓库 PDA 设备。
当前静态原型范围:人员登录、模块化工作台、入库/出库/库存/查询入口、作业记录、个人中心,以及出库模块内的箱号选择、扫码输入、整单拣货、部分拣货、异常原因、撤销和完成提交。
登录后默认进入首页,不再直接进入拣货。首页采用入库、出库、库内作业、查询四个分组的三列宫格,不设置常驻底部导航;作业记录收纳在左上角功能菜单,个人中心从右上角人员入口进入。第一版本只有“出库 → 集装箱拣货”可点击并具备完整本地状态交互,其余业务入口统一置灰并禁用,保留在界面中用于确认后续信息架构。
页面与状态结构
pages/login/login:登录与作业仓库选择,是应用首屏;pages/home/home:按业务分组的具体作业入口;pages/module/module:入库、出库、库存、查询四类业务入口;pages/operation/operation:非拣货业务共用的静态任务页;pages/history/history:本次会话的作业记录;pages/profile/profile:人员、班次、仓库信息及退出登录;pages/scanner-test/scanner-test:Android 硬件扫描广播诊断页;pages/picking/picking:集装箱拣货完整交互。
登录会话集中在 stores/session.js,拣货会话集中在 stores/picking.js;两者都是内存态,不写入设备。退出登录会同时清理当前人员和全部拣货草稿。页面头部与底部主导航位于 components/,演示账号、模块和任务数据位于 data/demo-data.js,跨页面 PDA 视觉规则位于 styles/pda.scss。
拣货原型会在本次登录会话内按箱保存本地草稿和最近扫码结果。切换存在进度的箱号、带待拣项提交以及退出登录均需要明确确认;待拣项提交还必须选择未完成原因。上述状态不持久化到设备,退出登录后会主动清理,不能视为正式离线队列或服务端提交机制。
拣货页面和本地交互以 ../../docs/悦/PDA拣货/pda-picking.html 为依据。Android App 端通过统一适配层接收 android.intent.action.SCANRESULT 广播,并从字符串 Extra value 读取硬件扫描结果;拣货页的扫码框仅显示广播值和当前接收目标样式,不获取输入焦点或弹出软键盘,页面隐藏或销毁时会注销接收器。当前不接后端接口、不实现真实鉴权、不绑定厂商 SDK,也不持久化演示状态。
扫码输入统一使用 components/ScanTargetInput.vue 展示和选择目标,组件本身不注册广播。每个业务页面只在 onShow 注册一次广播、在 onHide/onUnload 注销,并通过页面内的 activeScanField 将广播值路由到当前选中的字段。多输入框页面应由用户点击切换蓝色“当前扫码”目标,避免多个输入框或隐藏页面同时消费同一次扫描。
声音反馈统一由 utils/audio-feedback.js 管理,内部复用一个 uni.createInnerAudioContext(),连续调用时会停止上一段声音,业务页面不要自行创建播放器:
import { playSuccessSound, playErrorSound } from '@/utils/audio-feedback.js'
playSuccessSound()
playErrorSound()
应用需要主动停止或释放播放器时,可分别调用 stopFeedbackSound() 和 destroyFeedbackSound()。
自动检查
项目未引入 npm 依赖,状态规则和页面契约使用 Node.js 内置测试运行器:
node --test tests/*.test.mjs
当前环境验证使用 Node.js 22。测试同时约束 Vue 3 入口、页面契约和本地拣货状态规则。项目尚无 HBuilderX CLI、可核实的 Android 构建命令或自动化 UI 测试设施。
仍需真机验证
- Android PDA 的状态栏、导航栏和软键盘避让;
- 硬件扫描头的输入方式、连续扫描和重复码反馈;
- 低电量、前后台切换、断网重连和正式打包发布。
一期需要确认是否与管理后台头程订单及仓库任务同步上线。