From 3851ebd7bc2984596325a2e04e489212f6532f9c Mon Sep 17 00:00:00 2001 From: yueli Date: Tue, 22 Sep 2026 14:09:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(inbound):=20=E5=AF=BC=E5=85=A5=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E5=8D=95=E6=94=B9=E4=B8=BA=E5=8D=95=E4=BB=B7=E4=BC=98?= =?UTF-8?q?=E5=85=88=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=A4=9A=E5=8F=91/?= =?UTF-8?q?=E5=B0=91=E5=8F=91=E6=97=B6=E5=8D=95=E4=BB=B7=E8=A2=AB=E6=91=8A?= =?UTF-8?q?=E8=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原逻辑是总价优先(hasTotalPrice 分支在前):用「申请单总价 ÷ 本次入库数量」 反算单价。但申请单的 total_price 是「申请数量」的钱,实际入库数量未必相同 —— 厂家怕出问题多发(申请 100 个、实发 104 个)是常态,用总价除以实际数量 会把单价摊薄或抬高。 改为单价优先、总价仅作兜底,总价由「单价 × 实际入库数量」得出。与后端 buy_service 的补价口径一致。 顺带修一处隐患:导入新单前清掉 postTaxTotalManuallySet / postTaxTotalInput。 此前若上一单手工改过含税总价,这两个 ref 会残留,updatePrices 末尾会拿着 旧总价回头覆盖新导入的价格 —— 连续导入两张单时必现。 影响面:库管本就拿不到价格(接口剥离),此段对其一直是空转;受影响的是有 价格权限的角色在页面上导入采购单时的计算口径。 --- inventory-web/src/views/stock/inbound/buy.vue | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/inventory-web/src/views/stock/inbound/buy.vue b/inventory-web/src/views/stock/inbound/buy.vue index ac37286..2084f9e 100644 --- a/inventory-web/src/views/stock/inbound/buy.vue +++ b/inventory-web/src/views/stock/inbound/buy.vue @@ -1943,14 +1943,21 @@ const confirmPurchaseImport = () => { form.tax_rate = Number(po.tax_rate) } - if (hasTotalPrice) { - // 优先: 含税总价 → 调用 post_total 逻辑反算单价 - postTaxTotalInput.value = Number(po.total_price) - onPostTaxTotalChange(postTaxTotalInput.value) - } else if (hasUnitPrice) { - // 备选: 含税单价 → 反算不含税 + // 导入新单前清掉上一单残留的"手工总价"标记,否则 updatePrices 末尾会用旧值回头覆盖 + postTaxTotalManuallySet.value = false + postTaxTotalInput.value = undefined + + if (hasUnitPrice) { + // ★ 单价优先。申请单的 total_price 是「申请数量」的钱,而实际入库数量未必相同 + // —— 厂家怕出问题多发(申请 100 个、实发 104 个)是常态。用总价去除以实际 + // 入库数量会把单价摊薄或抬高,必须一律以单价为准,总价由「单价 × 实际入库数量」得出。 + // 含税单价 → 反算不含税 form.post_tax_unit_price = Number(po.unit_price) updatePrices('post') + } else if (hasTotalPrice) { + // 兜底:申请单只有总价、没有单价时,才按总价反算 + postTaxTotalInput.value = Number(po.total_price) + onPostTaxTotalChange(postTaxTotalInput.value) } if (po.supplier_link) { form.detail_link = po.supplier_link