d99396ecb12e07379f184a78a3ff4eab269860ef
库管角色没有 inbound_purchase:unit_price / total_price 权限,采购单接口 (api/v1/purchase.py:46-53)会把价格字段整个 pop 掉,前端导入时因此带不出价 —— buy.vue 的 hasUnitPrice / hasTotalPrice 双双落空,两个分支都不进,入库 成本被记成 0。 而前端 buy.vue:1936 的注释写得很清楚:"无论前端是否对当前角色显示价格,导入 都应把采购单价格带入(隐藏字段,用于成本)"。前端想带、后端不给,价格就断在 中间——不是谁写错了,是两边对"隐藏"的理解不同。 改为在落库前从采购申请单补回:价格不经过前端,库管依旧看不到采购价,权限 边界不变,但成本可追溯。仅在前端未带价时补,有权限的角色手动填过价则尊重 提交值。采购申请单的 unit_price 存的是**含税**单价(见 purchase/index.vue 列名"含税单价"),需反算不含税。 顺带清理 buy_service.py:221 的函数内局部 import —— 局部 import 会让 Python 把 PurchaseRequest 视为本函数的局部变量,导致位于其之前的引用抛 UnboundLocalError(本次新增的补价逻辑正踩到这个,测试时暴露)。改用文件顶部 的全局导入。 实测:测试申请单 含税 12.5 / 税率 13%,以库管身份提交且**故意不带任何价格 字段**,落库结果 税前 11.0619 (=12.5/1.13) / 含税 12.5 / 总价 110.6195 / 税率 13.00,全部正确;响应体经 filter_item_by_permissions 后仍不含价格字段, 权限边界未变。 另:已有 6 条历史入库单(走采购申请但单价为 0)已按「单价 × 实际入库数量」 回填,不回填总价。
Description
No description provided
Languages
Python
70.2%
CSS
14.9%
Vue
7.6%
HTML
4.2%
TypeScript
3.1%