fix(stocktake): 未扫码的行不允许直接填实盘数

【问题】盘点明细抽屉列出全部在范围内的物料,其中尚未扫码的行也可以
直接在「实盘数」列填数字。填完前端发 POST /stocktake/update-quantity,
后端只会 UPDATE 已存在的草稿行、找不到就返回 404「未找到盘点记录」,
于是工人填的数字根本没保存,只弹一句「更新失败」。

【为什么不改成 UPSERT】那等于允许不扫码就填数 —— 任何人照账面抄一遍
就能"完成"盘点,扫码这道工序形同虚设,盘盈盘亏也无从查起。
所以这里保持"必须先有草稿行"的语义,改为在 UI 上把这条路堵住。

【改动】
- 前端:draft_id 为空的行不再渲染 el-input-number,改显示灰色「未扫」;
  已扫行照常可改。失败时提示改为透传后端 msg,并 fetchInventoryList()
  回滚本地被 v-model 改动的值。
- 后端:404 文案由「未找到盘点记录」改为
  「该物料尚未扫码,请先扫描条码后再修改实盘数」,作为绕过前端时的兜底。

实测:
  draft_id 已扫行=11379 → 可编辑;未扫行=None → 不可编辑
  绕过前端直接改未扫行 → 404 该物料尚未扫码,请先扫描条码后再修改实盘数
This commit is contained in:
yueli
2026-09-11 15:15:05 +08:00
parent e573185ea4
commit 04ed489ab5
2 changed files with 25 additions and 4 deletions

View File

@ -2390,7 +2390,14 @@ def update_stocktake_quantity():
draft = query.first()
if not draft:
return jsonify({'code': 404, 'msg': '未找到盘点记录'}), 404
# 该物料在本会话尚未扫码 → 没有草稿行可改。
# 前端已把未扫行的实盘数置为不可编辑,这里是兜底(例如页面未刷新、
# 或有人直接调接口)。刻意**不**在此处补建草稿 —— 一旦允许不扫码
# 就能填数,扫码这道工序就形同虚设,盘盈盘亏也无从查起。
return jsonify({
'code': 404,
'msg': '该物料尚未扫码,请先扫描条码后再修改实盘数'
}), 404
# 更新数量
draft.quantity = quantity