装箱编号 — 多码凑箱模式 UI 展示

基于 boxing_page.dart 实际代码还原 | 源文件:lib/pages/boxing_page.dart (2312行)

初始状态
已扫码识别
已装入多项
编辑/删除已装入项
排产号切换
自动同步转运
场景1:初始等待扫码
装箱编号
多码凑箱 P2
当前箱号
已装入本箱(0项)
(空)
📷 请扫描执行卡二维码
数量
等待扫码

状态栏颜色含义

蓝色 — 空闲/等待扫码
橙色 — 提交中/同步中
绿色 — 操作成功
红色 — 错误(无效码/提交失败)
黄色 — 网络异常
琥珀 — 警告(重复箱号)

多码凑箱模式 UI 结构

┌──────────────────────────────────────────┐ │ AppBar: "装箱编号" + [多码凑箱] 模式按钮 (P2) │ ├──────────────────────────────────────────┤ │ [提示条区域] │ │ - 橙色同步条:正在同步转运数据... │ │ - 黄色警告条:自动装箱失败的警告信息 │ │ - 蓝色通知条:排产号已切换 │ │ - 琥珀警告条:箱号已存在 │ ├──────────────────────────────────────────┤ │ 当前箱号: [ N ] ← 顶部大号输入框 │ │ ─────────────────────────────────────── │ │ W00009 已有3箱 最大箱号3 [详情 →] │ │ │ │ 已装入本箱(N项) │ │ ┌──────────────────────────────────────┐ │ │ │ 26BW0011 WO-001 80/80 ✏️ 🗑 │ │ │ │ 26BW0012 WO-002 60/60 ✏️ 🗑 │ │ │ │ 26BW0013 WO-003 40/40 ✏️ 🗑 │ │ │ └──────────────────────────────────────┘ │ │ ─────────────────────────────────────── │ │ [✓ 26BW0014 WO-004 50件] ← 扫码显示区 │ │ │ │ 数量 │ │ [ 50 ] [确认] │ ├──────────────────────────────────────────┤ │ [ 完成本箱 ] ← 全宽按钮 │ ├──────────────────────────────────────────┤ │ ● 等待扫码 / 请继续扫码或完成本箱 │ └──────────────────────────────────────────┘

核心业务流程

多码凑箱流程(_buildManyToOneBody): 1. 扫码 → 解析总排号 → 调用 fetchBoxInfo API │ ▼ 2. 判断排产号上下文(decideMultiCodePaichanContext) ├─ firstScan → 自动填入箱号 (maxBoxNo+1) ├─ samePaichan → 保持当前箱号 └─ switchedPaichan → 清空已装入列表,重置箱号 (maxBoxNo+1) │ ▼ 3. 自动填充剩余数量 → 等待用户确认 ├─ 修改箱号 → 清除编辑/删除状态 └─ 修改数量 → 实时校验是否超额 │ ▼ 4. 点击 [确认] → saveBoxRecord API ├─ 成功 → 添加到 _manyToOnePackedItems │ phase 回到 waiting │ 状态: "装箱成功,请继续扫码" └─ 失败 → 显示错误状态 │ ▼ 5. 继续扫码 / 完成本箱 ├─ 继续扫码 → 回到步骤1 └─ 完成本箱 → 清空已装入列表 箱号 +1,回到初始状态

与单码装箱模式的差异

关键代码引用

提示条(Alert Bars)触发条件