fix: 采购价格上限按数量计算总价 (#181)

This commit is contained in:
chengma
2026-08-12 14:43:18 +08:00
parent 8c7be7bd07
commit 253be7cb61
24 changed files with 203 additions and 106 deletions
+27
View File
@@ -229,6 +229,32 @@
var form = document.querySelector("[data-purchase-form]");
if (!openButtons.length || !form) return;
var submitButton = form.querySelector("[data-purchase-submit]");
function updateTotalPrice(row) {
var input = row.querySelector("[data-unit-price-input]");
var output = row.querySelector("[data-total-price-output]");
var quantity = Number(row.getAttribute("data-purchase-quantity"));
if (!input || !output || !Number.isInteger(quantity) || quantity <= 0) return;
var raw = input.value.trim();
var match = /^(\d+)(?:\.(\d{1,2}))?$/.exec(raw);
if (!match) {
output.textContent = "—";
return;
}
var fraction = (match[2] || "").padEnd(2, "0");
var unitCent = Number(match[1]) * 100 + Number(fraction || "0");
var totalCent = unitCent * quantity;
if (!Number.isSafeInteger(totalCent) || totalCent <= 0) {
output.textContent = "—";
return;
}
output.textContent = "¥" + Math.floor(totalCent / 100) + "." + String(totalCent % 100).padStart(2, "0");
}
form.querySelectorAll("[data-purchase-row]").forEach(function (row) {
var input = row.querySelector("[data-unit-price-input]");
if (input) input.addEventListener("input", function () { updateTotalPrice(row); });
});
openButtons.forEach(function (openButton) {
openButton.addEventListener("click", function () {
var selected = {};
@@ -247,6 +273,7 @@
row.querySelectorAll("input").forEach(function (input) {
input.disabled = !enabled;
});
if (enabled) updateTotalPrice(row);
if (enabled) shown += 1;
});
var empty = form.querySelector("[data-purchase-empty]");