From 7e1c5eb99eda42ff9d54b7ecf1bbab9920dc17e6 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期一, 20 四月 2026 11:23:36 +0800
Subject: [PATCH] feat(采购/销售台账): 将价格和数量精度从2位改为3位小数

---
 src/views/procurementManagement/procurementLedger/index.vue |   43 +++++++++-----
 src/views/salesManagement/salesLedger/index.vue             |   81 ++++++++++++++++++--------
 src/utils/summarizeTable.js                                 |    8 +-
 3 files changed, 87 insertions(+), 45 deletions(-)

diff --git a/src/utils/summarizeTable.js b/src/utils/summarizeTable.js
index 1ad480d..d2f9acb 100644
--- a/src/utils/summarizeTable.js
+++ b/src/utils/summarizeTable.js
@@ -41,13 +41,13 @@
   return sums;
 };
 // 涓嶅惈绋庢�讳环璁$畻
-const calculateTaxExclusiveTotalPrice = (taxInclusiveTotalPrice, taxRate) => {
+const calculateTaxExclusiveTotalPrice = (taxInclusiveTotalPrice, taxRate, precision = 2) => {
   const taxRateDecimal = taxRate / 100;
-  return (taxInclusiveTotalPrice / (1 + taxRateDecimal)).toFixed(2);
+  return (taxInclusiveTotalPrice / (1 + taxRateDecimal)).toFixed(precision);
 };
 // 鍚◣鎬讳环璁$畻
-const calculateTaxIncludeTotalPrice = (taxInclusiveUnitPrice, quantity) => {
-  return (taxInclusiveUnitPrice * quantity).toFixed(2);
+const calculateTaxIncludeTotalPrice = (taxInclusiveUnitPrice, quantity, precision = 2) => {
+  return (taxInclusiveUnitPrice * quantity).toFixed(precision);
 };
 // 瀵煎嚭鍑芥暟渚涘叾浠栨枃浠朵娇鐢�
 export {
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 6bde887..83616a3 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -599,7 +599,7 @@
             <el-form-item label="鍚◣鍗曚环(鍏�)锛�"
                           prop="taxInclusiveUnitPrice">
               <el-input-number v-model="productForm.taxInclusiveUnitPrice"
-                               :precision="2"
+                               :precision="3"
                                :step="0.1"
                                :min="0"
                                clearable
@@ -612,7 +612,7 @@
                           prop="quantity">
               <el-input-number :step="0.1"
                                clearable
-                               :precision="2"
+                               :precision="3"
                                :min="0"
                                style="width: 100%"
                                v-model="productForm.quantity"
@@ -626,7 +626,7 @@
             <el-form-item label="鍚◣鎬讳环(鍏�)锛�"
                           prop="taxInclusiveTotalPrice">
               <el-input-number v-model="productForm.taxInclusiveTotalPrice"
-                               :precision="2"
+                               :precision="3"
                                :step="0.1"
                                :min="0"
                                clearable
@@ -638,7 +638,7 @@
             <el-form-item label="涓嶅惈绋庢�讳环(鍏�)锛�"
                           prop="taxExclusiveTotalPrice">
               <el-input-number v-model="productForm.taxExclusiveTotalPrice"
-                               :precision="2"
+                               :precision="3"
                                :step="0.1"
                                :min="0"
                                clearable
@@ -665,7 +665,7 @@
             <el-form-item label="搴撳瓨棰勮鏁伴噺锛�"
                           prop="warnNum">
               <el-input-number v-model="productForm.warnNum"
-                               :precision="2"
+                               :precision="3"
                                :step="0.1"
                                :min="0"
                                clearable
@@ -1067,7 +1067,7 @@
   };
 
   const formattedNumber = (row, column, cellValue) => {
-    return parseFloat(cellValue).toFixed(2);
+    return parseFloat(cellValue).toFixed(3);
   };
   // 鏌ヨ鍒楄〃
   /** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -1191,6 +1191,9 @@
       {
         ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
         futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+        taxInclusiveUnitPrice: { decimalPlaces: 3 },
+        taxInclusiveTotalPrice: { decimalPlaces: 3 },
+        taxExclusiveTotalPrice: { decimalPlaces: 3 },
       }
     );
   };
@@ -1254,7 +1257,9 @@
   };
   // 涓昏〃鍚堣鏂规硶
   const summarizeMainTable = param => {
-    return proxy.summarizeTable(param, ["contractAmount"]);
+    return proxy.summarizeTable(param, ["contractAmount"], {
+      contractAmount: { decimalPlaces: 3 },
+    });
   };
   // 瀛愯〃鍚堣鏂规硶
   const summarizeProTable = param => {
@@ -1262,7 +1267,11 @@
       "taxInclusiveUnitPrice",
       "taxInclusiveTotalPrice",
       "taxExclusiveTotalPrice",
-    ]);
+    ], {
+      taxInclusiveUnitPrice: { decimalPlaces: 3 },
+      taxInclusiveTotalPrice: { decimalPlaces: 3 },
+      taxExclusiveTotalPrice: { decimalPlaces: 3 },
+    });
   };
   // 鎵撳紑寮规
   const openForm = async (type, row) => {
@@ -1726,14 +1735,16 @@
     productForm.value.taxInclusiveTotalPrice =
       proxy.calculateTaxIncludeTotalPrice(
         productForm.value.taxInclusiveUnitPrice,
-        productForm.value.quantity
+        productForm.value.quantity,
+        3
       );
     if (productForm.value.taxRate) {
       // 涓嶅惈绋庢�讳环璁$畻
       productForm.value.taxExclusiveTotalPrice =
         proxy.calculateTaxExclusiveTotalPrice(
           productForm.value.taxInclusiveTotalPrice,
-          productForm.value.taxRate
+          productForm.value.taxRate,
+          3
         );
     }
   };
@@ -1764,7 +1775,7 @@
         productForm.value.taxInclusiveUnitPrice = (
           Number(productForm.value.taxInclusiveTotalPrice) /
           Number(productForm.value.quantity)
-        ).toFixed(2);
+        ).toFixed(3);
         // 纭繚缁撴灉涓嶄负璐熸暟
         if (Number(productForm.value.taxInclusiveUnitPrice) < 0) {
           productForm.value.taxInclusiveUnitPrice = "0";
@@ -1775,7 +1786,7 @@
         productForm.value.quantity = (
           Number(productForm.value.taxInclusiveTotalPrice) /
           Number(productForm.value.taxInclusiveUnitPrice)
-        ).toFixed(2);
+        ).toFixed(3);
         // 纭繚缁撴灉涓嶄负璐熸暟
         if (Number(productForm.value.quantity) < 0) {
           productForm.value.quantity = "0";
@@ -1785,7 +1796,7 @@
       productForm.value.taxExclusiveTotalPrice = (
         Number(productForm.value.taxInclusiveTotalPrice) /
         (1 + taxRate / 100)
-      ).toFixed(2);
+      ).toFixed(3);
       // 纭繚缁撴灉涓嶄负璐熸暟
       if (Number(productForm.value.taxExclusiveTotalPrice) < 0) {
         productForm.value.taxExclusiveTotalPrice = "0";
@@ -1795,7 +1806,7 @@
       productForm.value.taxInclusiveTotalPrice = (
         Number(productForm.value.taxExclusiveTotalPrice) *
         (1 + taxRate / 100)
-      ).toFixed(2);
+      ).toFixed(3);
       // 纭繚缁撴灉涓嶄负璐熸暟
       if (Number(productForm.value.taxInclusiveTotalPrice) < 0) {
         productForm.value.taxInclusiveTotalPrice = "0";
@@ -1805,7 +1816,7 @@
         productForm.value.taxInclusiveUnitPrice = (
           Number(productForm.value.taxInclusiveTotalPrice) /
           Number(productForm.value.quantity)
-        ).toFixed(2);
+        ).toFixed(3);
         // 纭繚缁撴灉涓嶄负璐熸暟
         if (Number(productForm.value.taxInclusiveUnitPrice) < 0) {
           productForm.value.taxInclusiveUnitPrice = "0";
@@ -1816,7 +1827,7 @@
         productForm.value.quantity = (
           Number(productForm.value.taxInclusiveTotalPrice) /
           Number(productForm.value.taxInclusiveUnitPrice)
-        ).toFixed(2);
+        ).toFixed(3);
         // 纭繚缁撴灉涓嶄负璐熸暟
         if (Number(productForm.value.quantity) < 0) {
           productForm.value.quantity = "0";
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 0031f12..d203f32 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -87,7 +87,7 @@
                   </div>
                 </template>
               </el-table-column>
-              <el-table-column label="鏁伴噺" prop="quantity" />
+              <el-table-column label="鏁伴噺" prop="quantity" :formatter="formattedNumber" />
               <el-table-column label="绋庣巼(%)" prop="taxRate" />
               <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
               <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
@@ -317,7 +317,7 @@
 				<el-table-column prop="status" label="瀹℃壒鐘舵��" width="120" align="center" />
 				<el-table-column prop="totalAmount" label="鎶ヤ环閲戦(鍏�)" width="160" align="right">
 					<template #default="scope">
-						{{ Number(scope.row.totalAmount ?? 0).toFixed(2) }}
+						{{ Number(scope.row.totalAmount ?? 0).toFixed(3) }}
 					</template>
 				</el-table-column>
 				<el-table-column fixed="right" label="鎿嶄綔" width="120" align="center">
@@ -386,14 +386,14 @@
 					<el-col :span="12">
 						<el-form-item label="鍚◣鍗曚环(鍏�)锛�" prop="taxInclusiveUnitPrice">
 							<el-input-number :step="0.01" :min="0" v-model="productForm.taxInclusiveUnitPrice" style="width: 100%"
-															 :precision="2"
+															 :precision="3"
 															 placeholder="璇疯緭鍏�" clearable @change="calculateFromUnitPrice" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
 						<el-form-item label="鏁伴噺锛�" prop="quantity">
 							<el-input-number  :step="0.1" :min="0" v-model="productForm.quantity" placeholder="璇疯緭鍏�" clearable
-																:precision="2"
+																:precision="3"
 																@change="calculateFromQuantity" style="width: 100%" />
 						</el-form-item>
 					</el-col>
@@ -936,7 +936,7 @@
 	});
 };
 const formattedNumber = (row, column, cellValue) => {
-	return parseFloat(cellValue).toFixed(2);
+	return parseFloat(cellValue).toFixed(3);
 };
 // 鑾峰彇tree瀛愭暟鎹�
 const getModels = (value) => {
@@ -1048,7 +1048,11 @@
 		"contractAmount",
 		"taxInclusiveTotalPrice",
 		"taxExclusiveTotalPrice",
-	]);
+	], {
+		contractAmount: { decimalPlaces: 3 },
+		taxInclusiveTotalPrice: { decimalPlaces: 3 },
+		taxExclusiveTotalPrice: { decimalPlaces: 3 },
+	});
 };
 // 瀛愯〃鍚堣鏂规硶
 const summarizeChildrenTable = (param) => {
@@ -1056,8 +1060,29 @@
 		"taxInclusiveUnitPrice",
 		"taxInclusiveTotalPrice",
 		"taxExclusiveTotalPrice",
-	]);
+	], {
+		taxInclusiveUnitPrice: { decimalPlaces: 3 },
+		taxInclusiveTotalPrice: { decimalPlaces: 3 },
+		taxExclusiveTotalPrice: { decimalPlaces: 3 },
+	});
 };
+// 鍒ゆ柇鏄惁鑳界紪杈�
+const canEditLedger = (row) => {
+	// 濡傛灉鏄淮鎶や汉锛屽垯鍙互缂栬緫
+	return Number(row.entryPerson) === Number(userStore.id);
+};
+
+// 鍒ゆ柇鏄惁鑳藉垹闄�
+const canDeleteLedger = (row) => {
+	// 濡傛灉鏄淮鎶や汉锛屽垯鍙互鍒犻櫎
+	return Number(row.entryPerson) === Number(userStore.id);
+};
+
+// 鍒ゆ柇鏄惁鏄淮鎶や汉锛堢敤浜庢潈闄愭牎楠岋級
+const isMaintainer = (row) => {
+	return row.entryPerson === userStore.id;
+};
+
 // 鎵撳紑寮规
 const openForm = async (type, row) => {
 	if (type === "edit" && row && !canEditLedger(row)) {
@@ -1176,8 +1201,8 @@
 		const quantity = Number(p.quantity ?? 0) || 0;
 		const unitPrice = Number(p.unitPrice ?? 0) || 0;
 		const taxRate = "13"; // 榛樿 13%锛屼究浜庣洿鎺ユ彁浜わ紙濡傞渶鍙湪浜у搧涓嚜琛屼慨鏀癸級
-		const taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
-		const taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(taxInclusiveTotalPrice, taxRate);
+		const taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(3);
+		const taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(taxInclusiveTotalPrice, taxRate, 3);
 		return {
 			// 鍙拌处瀛楁
 			productCategory: p.product || p.productName || "",
@@ -1185,7 +1210,7 @@
 			unit: p.unit || "",
 			quantity: quantity,
 			taxRate: taxRate,
-			taxInclusiveUnitPrice: unitPrice.toFixed(2),
+			taxInclusiveUnitPrice: unitPrice.toFixed(3),
 			taxInclusiveTotalPrice: taxInclusiveTotalPrice,
 			taxExclusiveTotalPrice: taxExclusiveTotalPrice,
 			invoiceType: "澧炴櫘绁�",
@@ -1825,7 +1850,7 @@
 	const total = products.reduce((sum, product) => {
 		return sum + (parseFloat(product.quantity) || 0);
 	}, 0);
-	return total.toFixed(2);
+	return total.toFixed(3);
 };
 
 // 璁$畻浜у搧鎬婚噾棰�
@@ -1834,7 +1859,7 @@
 	const total = products.reduce((sum, product) => {
 		return sum + (parseFloat(product.taxInclusiveTotalPrice) || 0);
 	}, 0);
-	return total.toFixed(2);
+	return total.toFixed(3);
 };
 
 // 鐢ㄤ簬鎵撳嵃鐨勮绠楀嚱鏁�
@@ -1843,7 +1868,7 @@
 	const total = products.reduce((sum, product) => {
 		return sum + (parseFloat(product.quantity) || 0);
 	}, 0);
-	return total.toFixed(2);
+	return total.toFixed(3);
 };
 
 const getTotalAmountForPrint = (products) => {
@@ -1851,7 +1876,7 @@
 	const total = products.reduce((sum, product) => {
 		return sum + (parseFloat(product.taxInclusiveTotalPrice) || 0);
 	}, 0);
-	return total.toFixed(2);
+	return total.toFixed(3);
 };
 
 const mathNum = () => {
@@ -1866,14 +1891,16 @@
 	productForm.value.taxInclusiveTotalPrice =
 		proxy.calculateTaxIncludeTotalPrice(
 			productForm.value.taxInclusiveUnitPrice,
-			productForm.value.quantity
+			productForm.value.quantity,
+			3
 		);
 	if (productForm.value.taxRate) {
 		// 涓嶅惈绋庢�讳环璁$畻
 		productForm.value.taxExclusiveTotalPrice =
 			proxy.calculateTaxExclusiveTotalPrice(
 				productForm.value.taxInclusiveTotalPrice,
-				productForm.value.taxRate
+				productForm.value.taxRate,
+				3
 			);
 	}
 };
@@ -1892,14 +1919,15 @@
 	isCalculating.value = true;
 	
 	// 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
-	productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(2);
+	productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(3);
 	
 	// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
 	if (productForm.value.taxRate) {
 		productForm.value.taxExclusiveTotalPrice =
 			proxy.calculateTaxExclusiveTotalPrice(
 				totalPrice,
-				productForm.value.taxRate
+				productForm.value.taxRate,
+				3
 			);
 	}
 	
@@ -1927,10 +1955,10 @@
 	// 鍏堣绠楀惈绋庢�讳环 = 涓嶅惈绋庢�讳环 / (1 - 绋庣巼/100)
 	const taxRateDecimal = taxRate / 100;
 	const inclusiveTotalPrice = exclusiveTotalPrice / (1 - taxRateDecimal);
-	productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(2);
+	productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(3);
 	
 	// 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
-	productForm.value.taxInclusiveUnitPrice = (inclusiveTotalPrice / quantity).toFixed(2);
+	productForm.value.taxInclusiveUnitPrice = (inclusiveTotalPrice / quantity).toFixed(3);
 	
 	isCalculating.value = false;
 };
@@ -1953,14 +1981,15 @@
 	isCalculating.value = true;
 	
 	// 璁$畻鍚◣鎬讳环
-	productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
+	productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(3);
 	
 	// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
 	if (productForm.value.taxRate) {
 		productForm.value.taxExclusiveTotalPrice =
 			proxy.calculateTaxExclusiveTotalPrice(
 				productForm.value.taxInclusiveTotalPrice,
-				productForm.value.taxRate
+				productForm.value.taxRate,
+				3
 			);
 	}
 	
@@ -1985,14 +2014,15 @@
 	isCalculating.value = true;
 	
 	// 璁$畻鍚◣鎬讳环
-	productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
+	productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(3);
 	
 	// 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
 	if (productForm.value.taxRate) {
 		productForm.value.taxExclusiveTotalPrice =
 			proxy.calculateTaxExclusiveTotalPrice(
 				productForm.value.taxInclusiveTotalPrice,
-				productForm.value.taxRate
+				productForm.value.taxRate,
+				3
 			);
 	}
 	
@@ -2020,7 +2050,8 @@
 	productForm.value.taxExclusiveTotalPrice =
 		proxy.calculateTaxExclusiveTotalPrice(
 			inclusiveTotalPrice,
-			taxRate
+			taxRate,
+			3
 		);
 	
 	isCalculating.value = false;

--
Gitblit v1.9.3