From b285a5f5a84067121e8f17803021a3b67d2c9235 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 23 五月 2026 10:47:41 +0800
Subject: [PATCH] 天津宝东 1.销售台账、销售报价添加每件数量字段

---
 src/views/salesManagement/salesLedger/index.vue    |   73 ++++++++++++++++++++++++++++++++----
 src/views/salesManagement/salesQuotation/index.vue |   12 ++++++
 2 files changed, 77 insertions(+), 8 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index c98c18e..1c41617 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -158,6 +158,8 @@
               </el-table-column>
               <el-table-column label="鏁伴噺"
                                prop="quantity" />
+              <el-table-column label="姣忎欢鏁伴噺"
+                               prop="singleQuantity" />
               <el-table-column label="寰呭彂璐ф暟閲�"
                                prop="noQuantity" />
               <el-table-column label="绋庣巼(%)"
@@ -448,6 +450,8 @@
                            prop="unit" />
           <el-table-column label="鏁伴噺"
                            prop="quantity" />
+          <el-table-column label="姣忎欢鏁伴噺"
+                           prop="singleQuantity" />
           <el-table-column label="绋庣巼(%)"
                            prop="taxRate" />
           <el-table-column label="鍚◣鍗曚环(鍏�)"
@@ -678,6 +682,21 @@
                                clearable
                                :precision="2"
                                @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="singleQuantity">
+              <el-input-number :step="1"
+                               :min="1"
+                               v-model="productForm.singleQuantity"
+                               placeholder="璇疯緭鍏�"
+                               clearable
+                               :precision="0"
+                               @change="calculateFromSingleQuantity"
                                style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -1118,6 +1137,7 @@
       specificationModel: "",
       unit: "",
       quantity: "",
+      singleQuantity: 1,
       taxInclusiveUnitPrice: "",
       taxRate: "",
       taxInclusiveTotalPrice: "",
@@ -2450,6 +2470,7 @@
 
     const totalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice);
     const quantity = parseFloat(productForm.value.quantity);
+    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
 
     if (!totalPrice || !quantity || quantity <= 0) {
       return;
@@ -2457,8 +2478,8 @@
 
     isCalculating.value = true;
 
-    // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
-    productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(2);
+    // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / (鏁伴噺 * 姣忎欢鏁伴噺)
+    productForm.value.taxInclusiveUnitPrice = (totalPrice / (quantity * singleQuantity)).toFixed(2);
 
     // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
     if (productForm.value.taxRate) {
@@ -2485,6 +2506,7 @@
     );
     const quantity = parseFloat(productForm.value.quantity);
     const taxRate = parseFloat(productForm.value.taxRate);
+    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
 
     if (!exclusiveTotalPrice || !quantity || quantity <= 0 || !taxRate) {
       return;
@@ -2497,9 +2519,9 @@
     const inclusiveTotalPrice = exclusiveTotalPrice / (1 - taxRateDecimal);
     productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(2);
 
-    // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺
+    // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / (鏁伴噺 * 姣忎欢鏁伴噺)
     productForm.value.taxInclusiveUnitPrice = (
-      inclusiveTotalPrice / quantity
+      inclusiveTotalPrice / (quantity * singleQuantity)
     ).toFixed(2);
 
     isCalculating.value = false;
@@ -2515,6 +2537,7 @@
 
     const quantity = parseFloat(productForm.value.quantity);
     const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
+    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
 
     if (!quantity || quantity <= 0 || !unitPrice) {
       return;
@@ -2522,8 +2545,8 @@
 
     isCalculating.value = true;
 
-    // 璁$畻鍚◣鎬讳环
-    productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
+    // 璁$畻鍚◣鎬讳环 = 鍗曚环 * 鏁伴噺 * 姣忎欢鏁伴噺
+    productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity * singleQuantity).toFixed(2);
 
     // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
     if (productForm.value.taxRate) {
@@ -2547,6 +2570,7 @@
 
     const quantity = parseFloat(productForm.value.quantity);
     const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
+    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
 
     if (!quantity || quantity <= 0 || !unitPrice) {
       return;
@@ -2554,8 +2578,41 @@
 
     isCalculating.value = true;
 
-    // 璁$畻鍚◣鎬讳环
-    productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
+    // 璁$畻鍚◣鎬讳环 = 鍗曚环 * 鏁伴噺 * 姣忎欢鏁伴噺
+    productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity * singleQuantity).toFixed(2);
+
+    // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
+    if (productForm.value.taxRate) {
+      productForm.value.taxExclusiveTotalPrice =
+        proxy.calculateTaxExclusiveTotalPrice(
+          productForm.value.taxInclusiveTotalPrice,
+          productForm.value.taxRate
+        );
+    }
+
+    isCalculating.value = false;
+  };
+
+  // 鏍规嵁姣忎欢鏁伴噺鍙樺寲璁$畻鎬讳环
+  const calculateFromSingleQuantity = () => {
+    if (!productForm.value.taxRate) {
+      proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+      return;
+    }
+    if (isCalculating.value) return;
+
+    const quantity = parseFloat(productForm.value.quantity);
+    const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
+    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
+
+    if (!quantity || quantity <= 0 || !unitPrice) {
+      return;
+    }
+
+    isCalculating.value = true;
+
+    // 璁$畻鍚◣鎬讳环 = 鍗曚环 * 鏁伴噺 * 姣忎欢鏁伴噺
+    productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity * singleQuantity).toFixed(2);
 
     // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环
     if (productForm.value.taxRate) {
diff --git a/src/views/salesManagement/salesQuotation/index.vue b/src/views/salesManagement/salesQuotation/index.vue
index fce764f..700a29a 100644
--- a/src/views/salesManagement/salesQuotation/index.vue
+++ b/src/views/salesManagement/salesQuotation/index.vue
@@ -212,6 +212,13 @@
                 </el-form-item>
               </template>
             </el-table-column>
+            <el-table-column prop="singleQuantity" label="姣忎欢鏁伴噺" width="120">
+              <template #default="scope">
+                <el-form-item :prop="`products.${scope.$index}.singleQuantity`" class="product-table-form-item">
+                  <el-input-number v-model="scope.row.singleQuantity" :min="1" :precision="0" style="width: 100%" />
+                </el-form-item>
+              </template>
+            </el-table-column>
             <el-table-column prop="unitPrice" label="鍗曚环">
               <template #default="scope">
                 <el-form-item :prop="`products.${scope.$index}.unitPrice`" class="product-table-form-item">
@@ -277,6 +284,7 @@
           <el-table-column prop="product" label="浜у搧鍚嶇О" />
           <el-table-column prop="specification" label="瑙勬牸鍨嬪彿" />
           <el-table-column prop="unit" label="鍗曚綅" />
+          <el-table-column prop="singleQuantity" label="姣忎欢鏁伴噺" />
           <el-table-column prop="unitPrice" label="鍗曚环">
             <template #default="scope">
               楼{{ scope.row.unitPrice.toFixed(2) }}
@@ -526,6 +534,7 @@
       productModelId: product.productModelId || '',
       specification: product.specification || '',
       quantity: product.quantity || 0,
+      singleQuantity: product.singleQuantity || 1,
       unit: product.unit || '',
       unitPrice: product.unitPrice || 0,
       amount: product.amount || 0
@@ -588,6 +597,7 @@
       productModelId: resolvedProductModelId,
       specification: product.specification || '',
       quantity: product.quantity || 0,
+      singleQuantity: product.singleQuantity || 1,
       unit: product.unit || '',
       unitPrice: product.unitPrice || 0,
       amount: product.amount || 0,
@@ -651,6 +661,7 @@
     productName: '',
     productModelId: '',
     quantity: 1,
+    singleQuantity: 1,
     unit: '',
     unitPrice: 0,
     amount: 0,
@@ -757,6 +768,7 @@
           productModelId: product.productModelId || '',
           specification: product.specification || '',
           quantity: product.quantity || 0,
+          singleQuantity: product.singleQuantity || 1,
           unit: product.unit || '',
           unitPrice: product.unitPrice || 0,
           amount: product.amount || 0

--
Gitblit v1.9.3