日期: 2026-07-28
状态: 已确认
范围: web-admin 库位管理 + 货架列表字段小幅 enrichment(无新批量出库 API)
参考 Demo:docs/demos/storage-facility-batch-outbound-demo.html(方案 B)
当前库位管理中,储物格点击仅打开「储物格明细」弹窗,出库须在弹窗「在库物品」操作列逐条完成,大批量出库效率低。
目标:在货架界面直接勾选占用储物格,工具栏一键批量出库,减少进出弹窗次数。
非目标:
| 项 | 决策 |
|---|---|
| 交互形态 | 方案 B:占用格左上角常驻勾选框 |
| 点格 vs 点框 | 勾选框切换选中;格子其它区域仍打开储物格明细 |
| 二次确认 | 需要:确认框列出已选格子编码 + 物品名称 |
| 全选 | 不要,仅逐格勾选 |
| 出库实现 | 方案 1:前端串行调用现有 fetchRemoveOccupancy |
| 占用 ID | 货架列表 enrichment 增加 storedOccupancyId |
slotStatus === '占用' 且存在在库占用)左上角常驻勾选框;空格不显示勾选框、不可选。@click.stop:切换选中;点格子其它区域:handleOpenOccupancyDialog(现有行为)。--primary / #ecfdf5 / #a7f3d0)。@click.stop。顺序(符合列表工具栏「已选在前」约定):
type="primary",N=0 时禁用;执行中 loading)不提供「全选占用」「清空选择」独立按钮(取消勾选即可;切换节点会清空选择)。
ElMessageBox.confirm(与现有单条出库确认一致),正文列出每项:格子编码 + 物品名称(无名称则物品编码);条目过多时正文可截断并注明「等共 N 项」。现有 enrich_slots_with_stored_cell_products 仅附带展示字段,不含占用记录 id。
单条出库接口 PUT /web/admin/storage-slot-occupancies/{occupancy_id}/remove 需要 occupancy id。
改动:enrichment 时写入 storedOccupancyId = occ.id(当前 occupancy_status == stored 的那条;一格一物)。
前端选中结构示例:
{ slotId, occupancyId, slotCode, itemName }
仅当 storedOccupancyId 存在时允许勾选。
selectedMap(key=slotId)await fetchRemoveOccupancy(occupancyId)| 文件 | 改动 |
|---|---|
backend/app/crud/storage_occupancy.py |
enrich_slots_with_stored_cell_products 增加 storedOccupancyId |
web-admin/src/views/operations/storage-facility/index.vue |
勾选 UI、工具栏、确认与串行出库、选中态样式、生命周期清理 |
docs/demos/storage-facility-batch-outbound-demo.html |
参考用 Demo(非上线依赖) |
storedOccupancyId。