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