入库模块:物料搜索点击无感修复 + 类别校验白名单准入制
前端(buy/semi/product/service.vue,4 文件): 修复物料搜索"点击已聚焦 input 时内容被清空"交互 bug。 el-select 在 filterable+remote 模式下点击已聚焦的 input 时,el-select 内部 会 emit query='' 触发 remote-method,绕过 handleMaterialDropdownVisible 入口保护,直接清空 searchKeyword 和 materialOptions,导致用户被迫重写。 新增两层防御实现"编辑无感": 1) handleMaterialDropdownVisible 入口拦截:已选过物料(form.base_id 有值) 时下拉打开直接 return,不请求默认列表 2) handleSearchMaterial 内部拦截:拦截 el-select 内部 emit 的空 query, 仅在 form.base_id 有值 + safeQuery 为空 + 列表非空时 return 后端(buy/semi/product_service.py,3 文件): 入库类别校验从黑名单改为白名单准入制,彻底杜绝"成品进半成品库" 等非法组合(d94b52b 黑名单方案"成品不能进采购库"已挡不住这种组合)。 - buy_service.py: 黑名单(禁半成品/成品进采购)→ 白名单(必须含"原材料") - semi_service.py: 统一错误信息格式为"只有【半成品】才允许半成品入库!" - product_service.py: 统一错误信息格式为"只有【成品】才允许成品入库!" - 三处空 category 统一显示为"未分类" 配合前端已修复的 catch 块(e.response.data.msg 精准提取),后端新错误 信息可原样弹窗给用户。
This commit is contained in:
@ -101,10 +101,10 @@ class BuyInboundService:
|
||||
if not material.is_enabled: raise ValueError(f"物料【{material.name}】已停用")
|
||||
|
||||
# ============================================================
|
||||
# 物料类别隔离校验:采购入库禁止"半成品"/"成品"
|
||||
# 物料类别隔离校验:采购入库必须为"原材料"类目(白名单准入制)
|
||||
# ============================================================
|
||||
if material.category and ("半成品" in material.category or "成品" in material.category):
|
||||
raise ValueError(f"物料【{material.name}】类别为【{material.category}】,禁止作为采购件入库!")
|
||||
if not material.category or "原材料" not in material.category:
|
||||
raise ValueError(f"物料【{material.name}】属于【{material.category or '未分类'}】,只有【原材料】才允许采购入库!")
|
||||
|
||||
# ============================================================
|
||||
# 强制质检校验:如果物料标记为强制质检,则必须提供到检状态和检测报告
|
||||
|
||||
Reference in New Issue
Block a user