From d336a25aae76f8baf8a8a5dfce18521b9a7d0f03 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 28 三月 2026 10:25:03 +0800
Subject: [PATCH] fix: 含税总价计算错误

---
 src/views/salesManagement/salesLedger/index.vue |  105 ++++++++++++++++++++++++++--------------------------
 1 files changed, 53 insertions(+), 52 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 9ec8ef2..f4643a5 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -35,30 +35,30 @@
           :bound-route-name="processFlowSelectBoundRouteName"
           @confirm="handleProcessFlowSelectConfirm"
         />
-        <div>
-          <el-button type="primary" @click="openForm('add')">
-            鏂板鍙拌处
-          </el-button>
-		  <el-button type="primary"  @click="handleBulkDelivery">
-            鍙戣揣
-          </el-button>
-          <el-button type="primary" plain @click="handleImport">瀵煎叆</el-button>
-          <el-button @click="handleOut">瀵煎嚭</el-button>
-          <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
-          <el-dropdown @command="handlePrintCommand">
-            <el-button type="primary" plain>
-              鎵撳嵃鍗曟嵁<el-icon class="el-icon--right"><ArrowDown /></el-icon>
-            </el-button>
-            <template #dropdown>
-              <el-dropdown-menu>
-                <el-dropdown-item command="finishedProcessCard">鐢熶骇娴佺▼鍗★紙鎴愬搧锛�</el-dropdown-item>
-                <el-dropdown-item command="salesOrder">閿�鍞鍗�</el-dropdown-item>
-                <el-dropdown-item command="salesDeliveryNote">閿�鍞彂璐у崟</el-dropdown-item>
-              </el-dropdown-menu>
-            </template>
-          </el-dropdown>
-          <el-button type="primary" plain @click="handlePrintLabel">鎵撳嵃鏍囩</el-button>
-        </div>
+			<el-space wrap>
+					<el-button type="primary" @click="openForm('add')">鏂板鍙拌处</el-button>
+					<el-button type="primary" @click="handleBulkDelivery">鍙戣揣</el-button>
+					<el-button type="primary" plain @click="handleImport">瀵煎叆</el-button>
+					<el-button @click="handleOut">瀵煎嚭</el-button>
+
+					<el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
+
+					<el-dropdown @command="handlePrintCommand">
+						<el-button type="primary" plain>
+							鎵撳嵃鍗曟嵁<el-icon class="el-icon--right">
+								<ArrowDown />
+							</el-icon>
+						</el-button>
+						<template #dropdown>
+							<el-dropdown-menu>
+								<el-dropdown-item command="finishedProcessCard">鐢熶骇娴佺▼鍗★紙鎴愬搧锛�</el-dropdown-item>
+								<el-dropdown-item command="salesOrder">閿�鍞鍗�</el-dropdown-item>
+								<el-dropdown-item command="salesDeliveryNote">閿�鍞彂璐у崟</el-dropdown-item>
+							</el-dropdown-menu>
+						</template>
+					</el-dropdown>
+					<el-button type="primary" plain @click="handlePrintLabel">鎵撳嵃鏍囩</el-button>
+				</el-space>
       </div>
       <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
         :expand-row-keys="expandedRowKeys" :row-key="(row) => row.id" :row-class-name="tableRowClassName" show-summary style="width: 100%"
@@ -580,7 +580,7 @@
 								style="width: 100%"
 								placeholder="璇疯緭鍏�"
 								clearable
-								@change="recalcAreaTotals"
+								@change="() => { recalcAreaTotals(); calculateFromUnitPrice(true); }"
 							/>
 						</el-form-item>
 					</el-col>
@@ -1649,8 +1649,9 @@
 	productData.value = products.map((p) => {
 		const quantity = Number(p.quantity ?? 0) || 0;
 		const unitPrice = Number(p.unitPrice ?? 0) || 0;
+		const settlePieceArea = Number(p.settlePieceArea ?? 0) || 1;
 		const taxRate = "13"; // 榛樿 13%锛屼究浜庣洿鎺ユ彁浜わ紙濡傞渶鍙湪浜у搧涓嚜琛屼慨鏀癸級
-		const taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
+		const taxInclusiveTotalPrice = (unitPrice * settlePieceArea * quantity).toFixed(2);
 		const taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(taxInclusiveTotalPrice, taxRate);
 		return {
 			// 鍙拌处瀛楁
@@ -2153,10 +2154,11 @@
 	if (!productForm.value.quantity) {
 		return;
 	}
-	// 鍚◣鎬讳环璁$畻
+	const settlePieceArea = parseFloat(productForm.value.settlePieceArea) || 1;
+	// 鍚◣鎬讳环璁$畻 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺
 	productForm.value.taxInclusiveTotalPrice =
 		proxy.calculateTaxIncludeTotalPrice(
-			productForm.value.taxInclusiveUnitPrice,
+			productForm.value.taxInclusiveUnitPrice * settlePieceArea,
 			productForm.value.quantity
 		);
 	if (productForm.value.taxRate) {
@@ -2219,15 +2221,12 @@
 	const computed = Number(computedPieceArea.toFixed(5));
 
 	productForm.value.actualPieceArea = computed;
-
-	// settlePieceArea锛氳嫢鐢ㄦ埛鏈~鍐�/涓�0锛屽垯榛樿浣跨敤瀹介珮璁$畻鍊�
-	const settlePieceRaw = Number(productForm.value.settlePieceArea ?? 0) || 0;
-	if (!settlePieceRaw) {
-		productForm.value.settlePieceArea = computed;
-	}
+	productForm.value.settlePieceArea = computed;
 
 	recalcPerimeterFromWidthHeight();
 	recalcAreaTotals();
+	// 闈㈢Н鏇存柊鍚庯紝閲嶆柊璁$畻鍚◣鎬讳环 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺
+	calculateFromUnitPrice(true);
 };
 
 // 鏍规嵁鍚◣鎬讳环璁$畻鍚◣鍗曚环鍜屾暟閲�
@@ -2294,19 +2293,20 @@
 		return;
 	}
 	if (isCalculating.value) return;
-	
+
 	const quantity = parseFloat(productForm.value.quantity);
 	const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
-	
+	const settlePieceArea = parseFloat(productForm.value.settlePieceArea) || 1;
+
 	if (!quantity || quantity <= 0 || !unitPrice) {
 		return;
 	}
-	
+
 	isCalculating.value = true;
-	
-	// 璁$畻鍚◣鎬讳环
-	productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
-	
+
+	// 璁$畻鍚◣鎬讳环 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺
+	productForm.value.taxInclusiveTotalPrice = (unitPrice * settlePieceArea * quantity).toFixed(2);
+
 	// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
 	if (productForm.value.taxRate) {
 		productForm.value.taxExclusiveTotalPrice =
@@ -2315,30 +2315,31 @@
 				productForm.value.taxRate
 			);
 	}
-	
+
 	isCalculating.value = false;
 };
 
 // 鏍规嵁鍚◣鍗曚环鍙樺寲璁$畻鎬讳环
-const calculateFromUnitPrice = () => {
+const calculateFromUnitPrice = (silent = false) => {
 	if (!productForm.value.taxRate) {
-		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+		if (!silent) proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
 		return;
 	}
 	if (isCalculating.value) return;
-	
+
 	const quantity = parseFloat(productForm.value.quantity);
 	const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
-	
+	const settlePieceArea = parseFloat(productForm.value.settlePieceArea) || 1;
+
 	if (!quantity || quantity <= 0 || !unitPrice) {
 		return;
 	}
-	
+
 	isCalculating.value = true;
-	
-	// 璁$畻鍚◣鎬讳环
-	productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
-	
+
+	// 璁$畻鍚◣鎬讳环 = 鍗曚环 * 缁撶畻闈㈢Н * 鏁伴噺
+	productForm.value.taxInclusiveTotalPrice = (unitPrice * settlePieceArea * quantity).toFixed(2);
+
 	// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
 	if (productForm.value.taxRate) {
 		productForm.value.taxExclusiveTotalPrice =
@@ -2347,7 +2348,7 @@
 				productForm.value.taxRate
 			);
 	}
-	
+
 	isCalculating.value = false;
 };
 

--
Gitblit v1.9.3