From 04ed489ab583f6dc67cc53738e3454484e119e15 Mon Sep 17 00:00:00 2001 From: yueli Date: Fri, 11 Sep 2026 15:15:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(stocktake):=20=E6=9C=AA=E6=89=AB=E7=A0=81?= =?UTF-8?q?=E7=9A=84=E8=A1=8C=E4=B8=8D=E5=85=81=E8=AE=B8=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=A1=AB=E5=AE=9E=E7=9B=98=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题】盘点明细抽屉列出全部在范围内的物料,其中尚未扫码的行也可以 直接在「实盘数」列填数字。填完前端发 POST /stocktake/update-quantity, 后端只会 UPDATE 已存在的草稿行、找不到就返回 404「未找到盘点记录」, 于是工人填的数字根本没保存,只弹一句「更新失败」。 【为什么不改成 UPSERT】那等于允许不扫码就填数 —— 任何人照账面抄一遍 就能"完成"盘点,扫码这道工序形同虚设,盘盈盘亏也无从查起。 所以这里保持"必须先有草稿行"的语义,改为在 UI 上把这条路堵住。 【改动】 - 前端:draft_id 为空的行不再渲染 el-input-number,改显示灰色「未扫」; 已扫行照常可改。失败时提示改为透传后端 msg,并 fetchInventoryList() 回滚本地被 v-model 改动的值。 - 后端:404 文案由「未找到盘点记录」改为 「该物料尚未扫码,请先扫描条码后再修改实盘数」,作为绕过前端时的兜底。 实测: draft_id 已扫行=11379 → 可编辑;未扫行=None → 不可编辑 绕过前端直接改未扫行 → 404 该物料尚未扫码,请先扫描条码后再修改实盘数 --- inventory-backend/app/api/v1/inbound/stock.py | 9 ++++++++- .../src/views/stock/stocktake/index.vue | 20 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/inventory-backend/app/api/v1/inbound/stock.py b/inventory-backend/app/api/v1/inbound/stock.py index 7dc29b0..0b612b4 100644 --- a/inventory-backend/app/api/v1/inbound/stock.py +++ b/inventory-backend/app/api/v1/inbound/stock.py @@ -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 diff --git a/inventory-web/src/views/stock/stocktake/index.vue b/inventory-web/src/views/stock/stocktake/index.vue index fac26a3..4247277 100644 --- a/inventory-web/src/views/stock/stocktake/index.vue +++ b/inventory-web/src/views/stock/stocktake/index.vue @@ -454,9 +454,16 @@ {{ row.stock_qty }} +