# 生产线扫码入库:支持袋码/托盘码/批次码 + 去掉设备编码 - 前端联调方案 ## 涉及页面 - 生产线扫码入库(`src/views/mes/pro/scan-in/index.vue`) ## 业务变更 1. **去掉设备编码**:扫码入库不再录入/展示设备编码,接口 `deviceCode` 改为非必填,前端不再传。 2. **产线、库区、库位改为下拉选择**:数据源为现有精简列表接口,不再手填编号。 3. **等待扫码区增加"扫码类型"选择**:袋码 / 托盘码 / 批次码三选一,扫码框随类型提交对应码值。 ## API ### 主接口:追溯码扫码入库 | 方法 | 路径 | 说明 | |------|------|------| | POST | /mes/pro/scan-in/inbound | 追溯码扫码入库(袋码/托盘码/批次码) | **请求参数(本次变更):** | 参数 | 类型 | 必填 | 变更 | 说明 | |------|------|------|------|------| | scanType | String | 否 | 新增 | 扫码类型:`BAG` 袋码 / `PALLET` 托盘码 / `BATCH` 批次码,不传默认 `BAG` | | deviceCode | String | 否 | 改为非必填 | 设备编码,前端不再传 | | bagCode | String | 是 | 语义扩展 | 扫码内容:袋码/托盘码/批次码的码值(含临时码) | | eventId | String | 是 | - | 事件号(建议用 `{scanType}-{时间戳}` 保证唯一) | | quantity | Number | 是 | - | 袋码场景传 1;托盘/批次场景后端忽略该值,按已装袋数/批次袋数计算 | | lineCode | String | 否 | - | 产线编码(前端下拉选择) | | locationId | Long | 是 | - | WIP 暂存库区编号(前端下拉选择) | | areaId | Long | 是 | - | WIP 暂存库位编号(前端下拉选择) | **响应新增字段:** | 字段 | 类型 | 说明 | |------|------|------| | scanType | String | 本次扫码类型(BAG/PALLET/BATCH) | **入库数量口径:** | scanType | 数量 | 说明 | |----------|------|------| | BAG | 前端传 1 | 单袋入库 | | PALLET | 托盘已装袋数 `bag_count` | 整托一次性入暂存库 | | BATCH | 批次袋数 `bag_quantity` | 整批一次性入暂存库 | **入库去重:** 袋码、托盘码、批次码均以各自 `inbound_event_id` 判断是否已入库,重复扫码返回对应"已入库"错误码,不会重复写入库存事务。 ### 下拉数据源(复用现有接口,无新增) | 用途 | 方法 | 路径 | 说明 | |------|------|------|------| | 产线 | GET | /mes/pro/line/simple-list | 返回启用产线 `{id, code, name}` | | 库区 | GET | /mes/wm/warehouse-location/simple-list | 返回库区 `{id, code, name}`;选库区后联动加载其下库位 | | 库位 | GET | /mes/wm/warehouse-area/simple-list?locationId= | 返回库位 `{id, code, name}` | ## 数据带入说明 - 产线/库区/库位:下拉选择,页面 `onMounted` 一次性加载产线、库区;选择库区后按 `locationId` 联动加载库位。 - 扫码提交:`locationId`、`areaId`、`scanType`、`bagCode` 一并带入入库接口;产线 `lineCode` 有值才传。 - 事件列表/看板:以 `scanType` 区分追溯码类型展示(历史无类型的数据默认显示"袋码")。 ## 字段展示规则 | 字段 | 展示位置 | 说明 | |------|----------|------| | 扫码类型 | 等待扫码区下拉 | 三选一:袋码/托盘码/批次码 | | 生产产线 | 扫码卡配置区 + 状态卡 | 下拉选择,可清空 | | WIP 暂存库区/库位 | 扫码卡配置区 + 状态卡 | 下拉选择,库位随库区联动禁用/启用 | | 最近入库追溯码 | 统计卡 | 展示最新一条扫码内容 | | 追溯码/类型/产线 | 最近扫码事件表 | 表格新增"类型"列,原"设备/产线"列改为"产线" | | 最近扫码类型 | 状态卡 | 展示最新事件扫码类型 | ## 注意事项 1. 后端需**执行 SQL 脚本** `sql/mysql/mes_pro_scan_event_scan_type.sql`(`mes_pro_scan_event` 增加 `scan_type` 列,`mes_pro_pallet` 增加 `inbound_event_id`/`inbound_time` 列),再**重新编译并重启**。 2. 重启前旧接口会忽略 `scanType`(按袋码处理),托盘/批次码扫码会返回"袋码不存在";前端类型下拉照常可选,功能降级为仅袋码。 3. 产线/库区/库位下拉若接口 404(后端未重启),下拉为空,需先保障后端可用。 4. 托盘、批次整托/整批入库会同步把其下未入库袋码标记为已入库,避免后续单袋扫码重复入库。