From d48d302bd1da8047d10af89d42fb34dd9f8cdeb4 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 30 三月 2026 11:05:23 +0800
Subject: [PATCH] fix: 总金额计算缺失额外加工费用
---
src/views/salesManagement/salesLedger/index.vue | 80 ++++++++++++++++++++++++++-------------
1 files changed, 53 insertions(+), 27 deletions(-)
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 6a4f061..dae908a 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -75,7 +75,7 @@
<template #default="scope">
{{ scope.row.thickness ?? "" }}
</template>
- </el-table-column>
+ </el-table-column>
<el-table-column label="瀹�(mm)" prop="width" min-width="80">
<template #default="scope">
{{ scope.row.width ?? "" }}
@@ -721,11 +721,12 @@
<el-input-number
v-model="item.quantity"
:min="0"
- :step="0.1"
- :precision="2"
+ :step="1"
+ :precision="0"
style="width: 100%;"
placeholder="璇疯緭鍏ユ暟閲�"
:disabled="operationType === 'view'"
+ @change="calculateFromUnitPrice(true)"
/>
</div>
<el-button
@@ -1093,7 +1094,7 @@
type: "璐ц溅", // 璐ц溅, 蹇��
},
deliveryRules: {
- type: [
+ type: [
{ required: true, message: "璇烽�夋嫨鍙戣揣绫诲瀷", trigger: "change" }
]
},
@@ -1119,6 +1120,7 @@
otherAmountSelectOptions.value = records.map((item) => ({
id: item.id,
processName: item.processName ?? "",
+ unitPrice: item.unitPrice ?? 0,
}));
} finally {
otherAmountSelectOptionsLoading.value = false;
@@ -1190,6 +1192,7 @@
return {
id: s.id,
processName: opt?.processName ?? s.processName ?? "",
+ unitPrice: opt?.unitPrice ?? s.unitPrice ?? 0,
quantity: Number(s.quantity ?? 0) || 0,
};
});
@@ -1245,8 +1248,10 @@
productForm.value.salesProductProcessList.push({
id: opt.id,
processName: opt.processName,
+ unitPrice: opt.unitPrice ?? 0,
quantity: 0,
});
+ calculateFromUnitPrice(true);
// 閫夋嫨瀹屾垚鍚庡叧闂脊绐楋紝涓嬩竴娆″彲鍐嶆鐐瑰嚮鈥滄柊澧炩�濈户缁坊鍔�
otherAmountAddDialogVisible.value = false;
@@ -1261,6 +1266,7 @@
if (operationType.value === "view") return;
if (!Array.isArray(productForm.value?.salesProductProcessList)) return;
productForm.value.salesProductProcessList.splice(index, 1);
+ calculateFromUnitPrice(true);
};
// 鍙戣揣瀹℃壒浜鸿妭鐐癸紙浠垮崗鍚屽鎵� infoFormDia.vue锛�
@@ -1887,15 +1893,16 @@
recalcAreaTotals();
// 鍏朵粬閲戦鍙彁浜� {id, processName, quantity}锛堝悗绔瓧娈碉細salesProductProcessList锛�
productForm.value.salesProductProcessList = (Array.isArray(productForm.value.salesProductProcessList)
- ? productForm.value.salesProductProcessList
- : []
- )
- .map((it) => ({
- id: it?.id,
- processName: it?.processName ?? "",
- quantity: Number(it?.quantity ?? 0) || 0,
- }))
- .filter((it) => it.id !== null && it.id !== undefined && it.id !== "");
+ ? productForm.value.salesProductProcessList
+ : []
+ )
+ .map((it) => ({
+ id: it?.id,
+ processName: it?.processName ?? "",
+ unitPrice: Number(it?.unitPrice ?? 0) || 0,
+ quantity: Number(it?.quantity ?? 0) || 0,
+ }))
+ .filter((it) => it.id !== null && it.id !== undefined && it.id !== "");
if (operationType.value === "edit") {
submitProductEdit();
@@ -2199,12 +2206,15 @@
return;
}
const settlePieceArea = parseFloat(productForm.value.settlePieceArea) || 1;
- // 鍚◣鎬讳环璁$畻 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺
- productForm.value.taxInclusiveTotalPrice =
- proxy.calculateTaxIncludeTotalPrice(
- productForm.value.taxInclusiveUnitPrice * settlePieceArea,
- productForm.value.quantity
- );
+ // 鍚◣鎬讳环璁$畻 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺 + 鍏朵粬閲戦鎬诲拰
+ const basePrice = proxy.calculateTaxIncludeTotalPrice(
+ productForm.value.taxInclusiveUnitPrice * settlePieceArea,
+ productForm.value.quantity
+ );
+ const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
+ return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
+ }, 0);
+ productForm.value.taxInclusiveTotalPrice = (parseFloat(basePrice) + otherAmountTotal).toFixed(2);
if (productForm.value.taxRate) {
// 涓嶅惈绋庢�讳环璁$畻
productForm.value.taxExclusiveTotalPrice =
@@ -2286,8 +2296,12 @@
isCalculating.value = true;
- // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
- productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(2);
+ // 璁$畻鍚◣鍗曚环 = (鍚◣鎬讳环 - 鍏朵粬閲戦鎬诲拰) / 鏁伴噺
+ const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
+ return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
+ }, 0);
+ const basePrice = totalPrice - otherAmountTotal;
+ productForm.value.taxInclusiveUnitPrice = (basePrice / quantity).toFixed(2);
// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
if (productForm.value.taxRate) {
@@ -2324,8 +2338,12 @@
const inclusiveTotalPrice = exclusiveTotalPrice / (1 - taxRateDecimal);
productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(2);
- // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
- productForm.value.taxInclusiveUnitPrice = (inclusiveTotalPrice / quantity).toFixed(2);
+ // 璁$畻鍚◣鍗曚环 = (鍚◣鎬讳环 - 鍏朵粬閲戦鎬诲拰) / 鏁伴噺
+ const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
+ return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
+ }, 0);
+ const basePrice = inclusiveTotalPrice - otherAmountTotal;
+ productForm.value.taxInclusiveUnitPrice = (basePrice / quantity).toFixed(2);
isCalculating.value = false;
};
@@ -2348,8 +2366,12 @@
isCalculating.value = true;
- // 璁$畻鍚◣鎬讳环 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺
- productForm.value.taxInclusiveTotalPrice = (unitPrice * settlePieceArea * quantity).toFixed(2);
+ // 璁$畻鍚◣鎬讳环 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺 + 鍏朵粬閲戦鎬诲拰
+ const basePrice = unitPrice * settlePieceArea * quantity;
+ const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
+ return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
+ }, 0);
+ productForm.value.taxInclusiveTotalPrice = (basePrice + otherAmountTotal).toFixed(2);
// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
if (productForm.value.taxRate) {
@@ -2381,8 +2403,12 @@
isCalculating.value = true;
- // 璁$畻鍚◣鎬讳环 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺
- productForm.value.taxInclusiveTotalPrice = (unitPrice * settlePieceArea * quantity).toFixed(2);
+ // 璁$畻鍚◣鎬讳环 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺 + 鍏朵粬閲戦鎬诲拰
+ const basePrice = unitPrice * settlePieceArea * quantity;
+ const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
+ return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
+ }, 0);
+ productForm.value.taxInclusiveTotalPrice = (basePrice + otherAmountTotal).toFixed(2);
// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
if (productForm.value.taxRate) {
--
Gitblit v1.9.3