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 |  122 ++++++++++++++++++++++++++++++++--------
 1 files changed, 96 insertions(+), 26 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index f4643a5..dae908a 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -68,6 +68,7 @@
           <template #default="props">
             <el-table :data="props.row.children" border show-summary :summary-method="summarizeChildrenTable">
               <el-table-column align="center" label="搴忓彿" type="index"/>
+			<el-table-column label="妤煎眰缂栧彿" prop="floorCode" min-width="100" show-overflow-tooltip />
               <el-table-column label="浜у搧澶х被" prop="productCategory" />
               <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
               <el-table-column label="鍘氬害" prop="thickness" min-width="90">
@@ -75,6 +76,34 @@
                   {{ scope.row.thickness ?? "" }}
                 </template>
               </el-table-column>
+							<el-table-column label="瀹�(mm)" prop="width" min-width="80">
+								<template #default="scope">
+									{{ scope.row.width ?? "" }}
+								</template>
+							</el-table-column>
+							<el-table-column label="楂�(mm)" prop="height" min-width="80">
+								<template #default="scope">
+									{{ scope.row.height ?? "" }}
+								</template>
+							</el-table-column>
+							<el-table-column label="鍛ㄩ暱(cm)" prop="perimeter" min-width="90">
+								<template #default="scope">
+									{{ scope.row.perimeter ?? "" }}
+								</template>
+							</el-table-column>
+							<el-table-column label="鎬婚潰绉�(cm虏)" prop="actualTotalArea" min-width="100">
+								<template #default="scope">
+									{{ scope.row.actualTotalArea ?? "" }}
+								</template>
+							</el-table-column>
+							<el-table-column label="鍔犲伐瑕佹眰" prop="processRequirement" min-width="120"
+								show-overflow-tooltip />
+							<el-table-column label="澶囨敞" prop="remark" min-width="120" show-overflow-tooltip />
+							<el-table-column label="閲嶇" prop="heavyBox" min-width="80">
+								<template #default="scope">
+									{{ scope.row.heavyBox ?? "" }}
+								</template>
+							</el-table-column>
 							<el-table-column label="浜у搧鐘舵��"
 															 width="100px"
 															 align="center">
@@ -258,6 +287,21 @@
 					<el-table-column label="鍘氬害" prop="thickness" min-width="90">
 						<template #default="scope">
 							{{ scope.row.thickness ?? "" }}
+						</template>
+					</el-table-column>
+					<el-table-column label="瀹�(mm)" prop="width" min-width="80">
+						<template #default="scope">
+							{{ scope.row.width ?? "" }}
+						</template>
+					</el-table-column>
+					<el-table-column label="楂�(mm)" prop="height" min-width="80">
+						<template #default="scope">
+							{{ scope.row.height ?? "" }}
+						</template>
+					</el-table-column>
+					<el-table-column label="闈㈢Н(m虏)" prop="actualTotalArea" min-width="100">
+						<template #default="scope">
+							{{ scope.row.actualTotalArea ?? "" }}
 						</template>
 					</el-table-column>
 					<el-table-column label="鏁伴噺" prop="quantity" />
@@ -677,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
@@ -1049,7 +1094,7 @@
     type: "璐ц溅", // 璐ц溅, 蹇��
   },
   deliveryRules: {
-    type: [
+    type: [	
       { required: true, message: "璇烽�夋嫨鍙戣揣绫诲瀷", trigger: "change" }
     ]
   },
@@ -1075,6 +1120,7 @@
 		otherAmountSelectOptions.value = records.map((item) => ({
 			id: item.id,
 			processName: item.processName ?? "",
+			unitPrice: item.unitPrice ?? 0,
 		}));
 	} finally {
 		otherAmountSelectOptionsLoading.value = false;
@@ -1146,6 +1192,7 @@
 		return {
 			id: s.id,
 			processName: opt?.processName ?? s.processName ?? "",
+			unitPrice: opt?.unitPrice ?? s.unitPrice ?? 0,
 			quantity: Number(s.quantity ?? 0) || 0,
 		};
 	});
@@ -1201,8 +1248,10 @@
 	productForm.value.salesProductProcessList.push({
 		id: opt.id,
 		processName: opt.processName,
+		unitPrice: opt.unitPrice ?? 0,
 		quantity: 0,
 	});
+	calculateFromUnitPrice(true);
 
 	// 閫夋嫨瀹屾垚鍚庡叧闂脊绐楋紝涓嬩竴娆″彲鍐嶆鐐瑰嚮鈥滄柊澧炩�濈户缁坊鍔�
 	otherAmountAddDialogVisible.value = false;
@@ -1217,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锛�
@@ -1843,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();
@@ -2155,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 =
@@ -2242,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) {
@@ -2280,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;
 };
@@ -2304,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) {
@@ -2337,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