Files
pda-overseas-uniapp/README.md
T
2026-08-28 13:54:38 +08:00

5.4 KiB

柏悦物流海外版 PDA

独立的 uni-app Vue 3 App 工程,正式产品形态是安装在海外仓手持 PDA 上的 App。工程不依赖国内 PDA 源码或仓库外共享目录,可独立安装依赖、运行、编译和发布;H5 只用于浏览器调试和编译门禁,不是最终交付形态。

工作台按四期边界提供柜号级真实入仓作业和托盘管理,以及其余库内、换标和现场查询的禁用入口。登录使用国内 Auth 统一签发的双 Token;海外业务请求统一经 gateway-overseas,不得请求国内 Firstleg/Warehouse 业务接口。

本地运行与检查

Node.js 22 环境:

npm install
npm test
npm run dev:h5

开发环境可在不提交的 .env.local 中配置 VITE_PDA_DEV_USERNAME、VITE_PDA_DEV_PASSWORD,登录页会自动预填;生产 App 构建始终忽略这两个值,账号必须具备 OVERSEAS_WAREHOUSE_PDA_OPERATOR、lastleg:pda:operate 和有效海外仓绑定。

生产编译:

npm run build:h5
npm run build:app
  • build:h5 生成浏览器调试资源,用于页面和模板编译检查;
  • build:app 生成正式 App 的离线打包资源;
  • 生成可安装 APK/IPA 需使用 HBuilderX App 开发版执行云打包或配置原生离线打包环境。

正式 App 打包前必填

  1. 使用海外版所属的 DCloud 账号为本应用获取独立 AppID,写入 src/manifest.json 的 appid;不得复用国内版 AppID。
  2. 确认 Android 包名 com.baiyuelogistics.pda.overseas,如公司已有正式命名规范,在首次正式签名前修改。
  3. 配置海外版独立 Android 签名证书;证书、密码和账号信息不得提交仓库。
  4. 复制 .env.example 为本机 .env.local,配置 Auth 与海外网关地址;环境文件不提交仓库。
  5. 在目标海外 PDA 上验证扫描广播 Action=android.intent.action.SCANRESULT、Extra=value。

当前实现边界

  • 已复用并内置:登录壳、PDA 样式、扫码广播、声音反馈、导航、网络检测、图标及 uni_modules。
  • 已隔离:国内集装箱拣货、装柜证据、国内 Firstleg API、国内任务状态和国内本地草稿。
  • 入仓页面已接待卸柜候选、柜详情与账号锁柜、三类角色照片签收、current 恢复、统一箱码与既有物理托盘解析、FBA 按箱数和 OVERSEAS 逐箱收货、逐入仓码核平及整柜完成的真实 API;收货页不预列柜内入仓码,箱码解析成功后只显示本次命中的入仓码;409 会引导返回当前柜,错误会保留业务码、requestId 与 traceId。
  • 候选列表同时显示已齐全与未齐全柜,展示计划到仓时间、总订单、入仓码、已生成计划、未操作和缺入仓码数量;未齐全柜置灰但可查看服务端阻断原因,只有服务端 allPlansReady=true && operable=true 才能 prepare。
  • 托盘管理已接 /api/pda/v1/last-leg/pallet-operations/**:支持扫描查询当前仓实物托盘及库存内容,并按服务端版本执行组托、拆托、换托和解绑;不同目的仓不能合托,冻结或处理中的库存由服务端拒绝。
  • 入仓请求不手填客户、计划、分配、仓库或库位标识;身份与当前柜范围由 Token、Gateway 和服务端会话确定。页面同时支持 PDA 广播扫码与 H5 人工输入。
  • 登录、恢复和刷新会 fail-closed 校验国内/海外双 Token 的同一平台操作主体、OVERSEAS_WAREHOUSE_PDA_OPERATOR、lastleg:pda:operate 及同一冻结海外仓;并发海外 401 共享一次国内 refresh,校验完成后原子替换双 Token并将原请求或照片上传重放一次。
  • 库存盘点、商品移库、换标收货/执行/复核以及库存/库位/托盘查询仍未接入海外 PDA 前端,入口保持禁用;不会调用平台、客户或内部接口,也不会模拟成功。
  • 本地契约测试与 H5/App 资源编译不等于真实开发环境 HTTP 或 PDA 真机验收。

App 在线更新

Android App 启动后会读取 VITE_PDA_UPDATE_URL 并检查海外 PDA 的独立更新通道,员工也可在“个人中心 → 检查更新”手动触发;H5 仅展示 App 操作提示,不执行更新。更新服务接收 appid、platform、appVersion、appVersionCode、wgtVersion 查询参数,无更新返回 { "update": false },有更新返回:

{
  "update": true,
  "packageType": "wgt",
  "versionName": "0.0.2",
  "versionCode": 2,
  "downloadUrl": "https://updates.example.com/pda/overseas/0.0.2.wgt",
  "mandatory": true,
  "releaseNotes": "本次更新内容"
}

packageType 只允许 apk 或 wgt。mandatory=true 时员工不能跳过,并在下载或安装失败后提供重试;wgt 安装完成会立即重启,APK 交由 Android 安装器完成覆盖安装。正式发布要求:

  1. 海外 PDA 每次整包发布同时递增 src/manifest.json 的 versionName 与整数 versionCode,使用海外独立 AppID、包名和签名打包 APK。
  2. wgt 发布至少递增 versionName,并使用与已安装原生包兼容的 uni-app 编译器生成;新增原生模块、权限或不兼容运行时能力时必须发布 APK,不能只发 wgt。
  3. 更新清单与下载地址使用 HTTPS,先在测试设备验证可选更新、强制更新、断网重试、APK 覆盖安装、wgt 重启及扫码作业回归,再切换正式清单。
  4. 海外和国内更新记录、文件目录及发布权限保持隔离,服务端必须按请求中的 appid 拒绝跨应用更新包。