From e093877b02cb5725fef570ee49ca2bca31f51871 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 11 七月 2025 14:17:06 +0800
Subject: [PATCH] 1.采购台账-销售台账:金额都可以填写,填一个计算另外一个

---
 src/views/salesManagement/salesLedger/index.vue |  187 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 169 insertions(+), 18 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index c2ebd2c..b49a6d8 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -235,38 +235,39 @@
               <el-input v-model="productForm.unit" placeholder="璇疯緭鍏�" clearable />
             </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
-                @change="mathNum" style="width: 100%" />
-            </el-form-item>
-          </el-col>
+					<el-col :span="12">
+						<el-form-item label="绋庣巼(%)锛�" prop="taxRate">
+							<el-select v-model="productForm.taxRate" placeholder="璇烽�夋嫨" clearable @change="calculateFromTaxRate">
+								<el-option label="1" value="1" />
+								<el-option label="6" value="6" />
+								<el-option label="13" value="13" />
+							</el-select>
+						</el-form-item>
+					</el-col>
         </el-row>
         <el-row :gutter="30">
           <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%" placeholder="璇疯緭鍏�" clearable @change="mathNum" />
+              <el-input-number :step="0.01" :min="0" v-model="productForm.taxInclusiveUnitPrice" style="width: 100%"
+															 placeholder="璇疯緭鍏�" clearable @change="calculateFromUnitPrice" />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="绋庣巼(%)锛�" prop="taxRate">
-              <el-select v-model="productForm.taxRate" placeholder="璇烽�夋嫨" clearable @change="mathNum">
-                <el-option label="1" value="1" />
-                <el-option label="6" value="6" />
-                <el-option label="13" value="13" />
-              </el-select>
-            </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
+																@change="calculateFromQuantity" style="width: 100%" />
+						</el-form-item>
+					</el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="鍚◣鎬讳环(鍏�)锛�" prop="taxInclusiveTotalPrice">
-              <el-input v-model="productForm.taxInclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable disabled />
+              <el-input v-model="productForm.taxInclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable @change="calculateFromTotalPrice" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="涓嶅惈绋庢�讳环(鍏�)锛�" prop="taxExclusiveTotalPrice">
-              <el-input v-model="productForm.taxExclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable disabled />
+              <el-input v-model="productForm.taxExclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable @change="calculateFromExclusiveTotalPrice" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -413,6 +414,8 @@
   },
 });
 const { productForm, productRules } = toRefs(productFormData);
+// 闃叉寰幆璁$畻鐨勬爣蹇�
+const isCalculating = ref(false);
 const upload = reactive({
   // 涓婁紶鐨勫湴鍧�
   url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
@@ -808,6 +811,154 @@
       );
   }
 };
+
+// 鏍规嵁鍚◣鎬讳环璁$畻鍚◣鍗曚环鍜屾暟閲�
+const calculateFromTotalPrice = () => {
+  if (isCalculating.value) return;
+  
+  const totalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice);
+  const quantity = parseFloat(productForm.value.quantity);
+  
+  if (!totalPrice || !quantity || quantity <= 0) {
+    return;
+  }
+  
+  isCalculating.value = true;
+  
+  // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
+  productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(2);
+  
+  // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
+  if (productForm.value.taxRate) {
+    productForm.value.taxExclusiveTotalPrice =
+      proxy.calculateTaxExclusiveTotalPrice(
+        totalPrice,
+        productForm.value.taxRate
+      );
+  }
+  
+  isCalculating.value = false;
+};
+
+// 鏍规嵁涓嶅惈绋庢�讳环璁$畻鍚◣鍗曚环鍜屾暟閲�
+const calculateFromExclusiveTotalPrice = () => {
+	if (!productForm.value.taxRate) {
+		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+		return;
+	}
+  if (isCalculating.value) return;
+  
+  const exclusiveTotalPrice = parseFloat(productForm.value.taxExclusiveTotalPrice);
+  const quantity = parseFloat(productForm.value.quantity);
+  const taxRate = parseFloat(productForm.value.taxRate);
+  
+  if (!exclusiveTotalPrice || !quantity || quantity <= 0 || !taxRate) {
+    return;
+  }
+  
+  isCalculating.value = true;
+  
+  // 鍏堣绠楀惈绋庢�讳环 = 涓嶅惈绋庢�讳环 / (1 - 绋庣巼/100)
+  const taxRateDecimal = taxRate / 100;
+  const inclusiveTotalPrice = exclusiveTotalPrice / (1 - taxRateDecimal);
+  productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(2);
+  
+  // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
+  productForm.value.taxInclusiveUnitPrice = (inclusiveTotalPrice / quantity).toFixed(2);
+  
+  isCalculating.value = false;
+};
+
+// 鏍规嵁鏁伴噺鍙樺寲璁$畻鎬讳环
+const calculateFromQuantity = () => {
+	if (!productForm.value.taxRate) {
+		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+		return;
+	}
+  if (isCalculating.value) return;
+  
+  const quantity = parseFloat(productForm.value.quantity);
+  const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
+  
+  if (!quantity || quantity <= 0 || !unitPrice) {
+    return;
+  }
+  
+  isCalculating.value = true;
+  
+  // 璁$畻鍚◣鎬讳环
+  productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
+  
+  // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
+  if (productForm.value.taxRate) {
+    productForm.value.taxExclusiveTotalPrice =
+      proxy.calculateTaxExclusiveTotalPrice(
+        productForm.value.taxInclusiveTotalPrice,
+        productForm.value.taxRate
+      );
+  }
+  
+  isCalculating.value = false;
+};
+
+// 鏍规嵁鍚◣鍗曚环鍙樺寲璁$畻鎬讳环
+const calculateFromUnitPrice = () => {
+	if (!productForm.value.taxRate) {
+		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+		return;
+	}
+  if (isCalculating.value) return;
+  
+  const quantity = parseFloat(productForm.value.quantity);
+  const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
+  
+  if (!quantity || quantity <= 0 || !unitPrice) {
+    return;
+  }
+  
+  isCalculating.value = true;
+  
+  // 璁$畻鍚◣鎬讳环
+  productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
+  
+  // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
+  if (productForm.value.taxRate) {
+    productForm.value.taxExclusiveTotalPrice =
+      proxy.calculateTaxExclusiveTotalPrice(
+        productForm.value.taxInclusiveTotalPrice,
+        productForm.value.taxRate
+      );
+  }
+  
+  isCalculating.value = false;
+};
+
+// 鏍规嵁绋庣巼鍙樺寲璁$畻涓嶅惈绋庢�讳环
+const calculateFromTaxRate = () => {
+	if (!productForm.value.taxRate) {
+		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+		return;
+	}
+  if (isCalculating.value) return;
+  
+  const inclusiveTotalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice);
+  const taxRate = parseFloat(productForm.value.taxRate);
+  
+  if (!inclusiveTotalPrice || !taxRate) {
+    return;
+  }
+  
+  isCalculating.value = true;
+  
+  // 璁$畻涓嶅惈绋庢�讳环
+  productForm.value.taxExclusiveTotalPrice =
+    proxy.calculateTaxExclusiveTotalPrice(
+      inclusiveTotalPrice,
+      taxRate
+    );
+  
+  isCalculating.value = false;
+};
 /**
  * 涓嬭浇鏂囦欢
  *

--
Gitblit v1.9.3