refactor(bom): 前端改为消费后端分配结果,删除本地分配与跨页数据污染
一、删除前端分配算法
Selection.vue 与 borrow/apply/index.vue 原先各自维护一套
rowsByBaseId 归并 + 跨行分配循环(近 80 行),现全部移除。
改为:构造 requirements → 调用 bomMatchStock → 直接 push 返回的 items。
二、缺料提示
后端返回 shortages 时,用 ElMessageBox.alert 逐项列出
「物料名:需 X,实配 Y,缺 Z」,替代原先笼统的「跳过 N 种缺货物料」。
全部满足则不弹窗,仅提示添加成功。
三、API 封装支持双签名(api/outbound.ts)
bomMatchStock(requirements | { requirements })
同时兼容旧的 bomMatchStock(childIds),未改造的调用方不受影响。
四、清除 loadStockForBom(两个页面)
该方法会把 BOM 匹配结果整体写入 stockList.value,而 stockList 同时是
「手动选单弹窗」的数据源 —— 操作过 BOM 后再打开手动选单,看到的会是
BOM 匹配结果而非库存列表。BOM 流程不再触碰 stockList 后,该交叉污染
一并消除,方法随之删除。
注:借库选单页存在逐字相同的 .find() + Math.min 缺陷,本次一并修复,
使两个 BOM 入口行为一致。
SFC 编译通过;vue-tsc 无新增错误(残留 6 处告警为既有问题)。
This commit is contained in:
@ -144,14 +144,30 @@ export function closeRequest(id: number) {
|
||||
})
|
||||
}
|
||||
|
||||
/** BOM 需求项:后端据此在 DB 层完成跨批次分配 */
|
||||
export interface BomRequirement {
|
||||
base_id: number
|
||||
required_qty: number
|
||||
name?: string
|
||||
spec_model?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* BOM 匹配库存(替代前端 while(true) 全量加载)
|
||||
* 根据 BOM 子件的 base_id 列表,服务端精确查询有库存的记录
|
||||
* BOM 库存匹配 / 分配
|
||||
*
|
||||
* 两种用法:
|
||||
* 1) 分配模式(推荐):传 { requirements },后端直接返回已分配好的库存行
|
||||
* (含 stock_id / source_table / allocated_qty)与 shortages 缺料明细,
|
||||
* 前端直接入购物车即可,不做任何分配运算。
|
||||
* 2) 查询模式(兼容旧调用):传 base_id 数组,返回全部匹配库存行。
|
||||
*/
|
||||
export function bomMatchStock(childIds: number[]) {
|
||||
export function bomMatchStock(payload: BomRequirement[] | { requirements: BomRequirement[] }) {
|
||||
const data = Array.isArray(payload)
|
||||
? { child_ids: payload } // 旧签名兼容
|
||||
: { requirements: payload.requirements || [] }
|
||||
return request({
|
||||
url: '/v1/outbound/bom-match-stock',
|
||||
method: 'post',
|
||||
data: { child_ids: childIds }
|
||||
data
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user