# 袋码绑定托盘(免先录批次) - 前端联调方案 ## 涉及页面 - 赋码管理(袋码列表)→ 工具栏「绑定托盘」按钮 + 「袋码绑定托盘」弹窗 ## 口径变更 原「绑定托盘」要求所选袋码先录入生产批次,否则提示「请先录入生产批次,再绑定托盘」。现去掉该前置限制,按勾选袋码的批次状态分流: | 所选袋码 | 可选托盘 | 绑定结果 | |---|---|---| | 均已录入同一批次 | 该批次的托盘 | 仅绑定托盘(与改造前一致) | | 均未录入批次 | 该品种可用的全部托盘(临时托盘 + 正式托盘) | 绑到临时托盘:袋码保持未录入批次;绑到某批次的正式托盘:先自动把袋码补录进该批次,再绑定 | | 混合(部分已录批次、部分未录) | — | 前端拦截,提示分开操作 | **解绑不回退批次**:袋码因绑托盘而补录进批次后,后续「解绑托盘」只解除托盘关系,批次归属保留,与「编辑批次取消勾选托盘不回退状态」口径一致。 ## API | 方法 | 路径 | 说明 | |---|---|---| | GET | /mes/pro/pallet/bindable-list | **新增**:袋码绑定托盘时的可选目标托盘列表(临时托盘 + 正式托盘,排除已作废) | | PUT | /mes/pro/bag-code/bind-pallet | 复用,请求与响应结构不变 | **请求参数(新增接口):** | 参数 | 类型 | 必填 | 说明 | |---|---|---|---| | itemId | Long | 否 | 袋码品种编号。传入后仅返回该品种的托盘,以及尚未确定品种的预生成临时托盘(`item_id` 为空,绑定袋码时回填品种) | **响应:** `MesProPalletRespVO` 数组,关键字段: | 字段 | 类型 | 说明 | |---|---|---| | id | Long | 托盘编号(提交绑定用) | | code | String | 正式托盘码;临时托盘为空 | | tempCode | String | 临时托盘码;`code` 为空时用它展示 | | batchId / batchCode | Long / String | 已绑定的生产批次;临时托盘为空 | | itemId / itemName | Long / String | 品种 | | bagCount | Integer | 已装袋数 | | capacity | Integer | 可装袋数 | | status | Integer | 托盘状态(字典 `mes_pro_pallet_status`),已排除作废(20) | ## 接口调用时序 1. 用户勾选袋码,点击「绑定托盘」。 2. 按勾选袋码的批次状态选择托盘数据源: - 都已录入同一批次 → `GET /mes/pro/pallet/simple-list?batchId=` - 都未录入批次 → `GET /mes/pro/pallet/bindable-list?itemId=`,`itemId` 取所选袋码的品种 3. 提交 `PUT /mes/pro/bag-code/bind-pallet`,body 为 `{ palletId, ids }`。 ## 字段展示规则 | 字段 | 展示位置 | 说明 | |---|---|---| | batchCode | 弹窗「生产批次」输入框(只读) | 已录入批次显示批次号;未录入批次显示「未录入批次」 | | bagCount | 弹窗「绑定袋数」输入框(只读) | 本次勾选的袋码数量 | | code / tempCode | 托盘下拉选项 | 正式托盘取 `code`,临时托盘回退到 `tempCode` | | batchCode | 托盘下拉选项 | 未录入批次场景下显示「批次 xxx」或「临时托盘」,便于在混合列表中分辨 | ## 业务规则说明 | 场景 | 规则 | |---|---| | 袋码已录入批次,托盘同批次 | 允许 | | 袋码已录入批次,托盘跨批次 | 拒绝:袋码与托盘不属于同一生产批次,不允许绑定 | | 袋码未录入批次 + 临时托盘 | 允许;袋码保持未录入批次,后续「录入批次」时按既有级联逻辑把该临时托盘升为正式托盘码 | | 袋码未录入批次 + 某批次正式托盘 | 允许;后端先复用「录入批次」逻辑把袋码补录进该批次,再绑定托盘 | | 袋码未录入批次 + 非生产中批次 / 未补录批次 | 拒绝:生产批次不是生产中状态,不允许生成袋码/托盘码;或生产批次尚未补录正式信息 | | 袋码未录入批次 + 品种与批次不一致 | 拒绝:袋码/托盘必须与批次品种一致 | | 托盘未绑定批次 + 袋码已录入批次 | 拒绝:所选袋码已录入生产批次,请改选该批次下的托盘 | | 解绑托盘 | 只解除托盘关系,批次归属不回退 | ## 注意事项 - 「补录批次 + 绑定托盘」在同一事务内完成,任一步校验失败整体回滚,不会出现袋码已进批次但未绑托盘。 - 未录入批次场景下托盘下拉可能较长,请保持 `showSearch` 并按袋码品种传 `itemId` 收窄范围。 - `bindable-list` 已排除作废托盘;`simple-list` 未排除,原有的前端作废过滤需保留。 - 袋码与托盘必须同品种:`bindable-list` 按 `itemId` 过滤,但后端仍会二次校验,前端不必据此做硬拦截。