fix(inbound): 导入采购单改为单价优先,修复多发/少发时单价被摊薄

原逻辑是总价优先(hasTotalPrice 分支在前):用「申请单总价 ÷ 本次入库数量」
反算单价。但申请单的 total_price 是「申请数量」的钱,实际入库数量未必相同
—— 厂家怕出问题多发(申请 100 个、实发 104 个)是常态,用总价除以实际数量
会把单价摊薄或抬高。

改为单价优先、总价仅作兜底,总价由「单价 × 实际入库数量」得出。与后端
buy_service 的补价口径一致。

顺带修一处隐患:导入新单前清掉 postTaxTotalManuallySet / postTaxTotalInput。
此前若上一单手工改过含税总价,这两个 ref 会残留,updatePrices 末尾会拿着
旧总价回头覆盖新导入的价格 —— 连续导入两张单时必现。

影响面:库管本就拿不到价格(接口剥离),此段对其一直是空转;受影响的是有
价格权限的角色在页面上导入采购单时的计算口径。
This commit is contained in:
yueli
2026-09-22 14:09:09 +08:00
parent d99396ecb1
commit 3851ebd7bc

View File

@ -1943,14 +1943,21 @@ const confirmPurchaseImport = () => {
form.tax_rate = Number(po.tax_rate) form.tax_rate = Number(po.tax_rate)
} }
if (hasTotalPrice) { // 导入新单前清掉上一单残留的"手工总价"标记,否则 updatePrices 末尾会用旧值回头覆盖
// 优先: 含税总价 → 调用 post_total 逻辑反算单价 postTaxTotalManuallySet.value = false
postTaxTotalInput.value = Number(po.total_price) postTaxTotalInput.value = undefined
onPostTaxTotalChange(postTaxTotalInput.value)
} else if (hasUnitPrice) { if (hasUnitPrice) {
// 备选: 含税单价 → 反算不含税 // ★ 单价优先。申请单的 total_price 是「申请数量」的钱,而实际入库数量未必相同
// —— 厂家怕出问题多发(申请 100 个、实发 104 个)是常态。用总价去除以实际
// 入库数量会把单价摊薄或抬高,必须一律以单价为准,总价由「单价 × 实际入库数量」得出。
// 含税单价 → 反算不含税
form.post_tax_unit_price = Number(po.unit_price) form.post_tax_unit_price = Number(po.unit_price)
updatePrices('post') updatePrices('post')
} else if (hasTotalPrice) {
// 兜底:申请单只有总价、没有单价时,才按总价反算
postTaxTotalInput.value = Number(po.total_price)
onPostTaxTotalChange(postTaxTotalInput.value)
} }
if (po.supplier_link) { if (po.supplier_link) {
form.detail_link = po.supplier_link form.detail_link = po.supplier_link