From b401f28ff6adc15cfe733fabc4629a144cfb3548 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 22 八月 2026 19:16:40 +0800
Subject: [PATCH] fix: 发货数量精度计算修复

---
 src/views/salesManagement/salesLedger/index.vue |   63 +++++++++++++++++++++----------
 1 files changed, 42 insertions(+), 21 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 693c97b..c7e9df7 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -24,6 +24,18 @@
                     prefix-icon="Search"
                     @change="handleQuery" />
         </el-form-item>
+        <el-form-item label="鍙戣揣鐘舵�侊細">
+          <el-select v-model="searchForm.shippingStatus"
+                     placeholder="璇烽�夋嫨"
+                     clearable
+                     style="width: 160px"
+                     @change="handleQuery">
+            <el-option label="鏈彂璐�"
+                       value="鏈彂璐�" />
+            <el-option label="宸插彂璐�"
+                       value="宸插彂璐�" />
+          </el-select>
+        </el-form-item>
         <el-form-item label="褰曞叆鏃ユ湡锛�">
           <el-date-picker v-model="searchForm.entryDate"
                           value-format="YYYY-MM-DD"
@@ -940,6 +952,8 @@
                            value="蹇��" />
                 <el-option label="璐ц溅"
                            value="璐ц溅" />
+                <el-option label="鑷彁"
+                           value="鑷彁" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -972,7 +986,8 @@
         </el-row>
         <el-row :gutter="30"
                 >
-          <el-col :span="24">
+          <el-col :span="24"
+                  v-if="deliveryForm.type !== '鑷彁'">
             <el-form-item label="蹇�掑崟鍙凤細"
                           prop="expressNumber">
               <el-input v-model="deliveryForm.expressNumber"
@@ -1031,8 +1046,6 @@
                     <el-input-number v-model="scope.row.deliveryQuantity"
                                      :min="0"
                                      :max="getDeliveryBatchDeliveryMax(scope.row)"
-                                     :precision="2"
-                                     :step="0.01"
                                      controls-position="right"
                                      @change="handleDeliveryBatchQuantityChange(scope.row)"
                                      style="width: 100%;" />
@@ -1089,6 +1102,7 @@
     tableAmountFormatter,
     formatDecimal,
     buildAmountSummaryFormat,
+    roundAmount,
   } from "@/utils/numberFormat";
   import ImageUpload from "@/components/AttachmentUpload/image/index.vue";
   import { getCurrentDate } from "@/utils/index.js";
@@ -1127,6 +1141,8 @@
     searchForm: {
       customerName: "", // 瀹㈡埛鍚嶇О
       salesContractNo: "", // 閿�鍞悎鍚岀紪鍙�
+      projectName: "", // 椤圭洰鍚嶇О
+      shippingStatus: "", // 鍙戣揣鐘舵�侊紙鏈彂璐�/宸插彂璐э級
       entryDate: null, // 褰曞叆鏃ユ湡
       entryDateStart: undefined,
       entryDateEnd: undefined,
@@ -1229,10 +1245,10 @@
       item?.qualifiedUnLockedQuantity ??
       item?.qualifiedQuantity ??
       item?.stockQuantity;
-    return quantity ?? 0;
+    return roundAmount(quantity ?? 0);
   };
   const formatDeliveryBatchSalesOrderNo = item =>
-    item?.salesContractNo || item?.sourceOrderNo || item?.salesOrderNo || "--";
+    item?.salesContractNo || "--";
   const currentStock = ref(null);
   const fetchCurrentStock = async (productModelId) => {
     if (!productModelId) {
@@ -1240,7 +1256,7 @@
       return;
     }
     try {
-      const res = await getStockInventoryByModelId(productModelId);
+      const res = await getStockInventoryByModelId(productModelId, currentId.value);
       const rawList = Array.isArray(res?.data)
         ? res.data
         : res?.data?.records || res?.data?.rows || [];
@@ -1248,14 +1264,14 @@
       rawList.forEach(item => {
         total += Number(getDeliveryBatchQuantity(item) || 0);
       });
-      currentStock.value = total;
+      currentStock.value = roundAmount(total);
     } catch (e) {
       console.error(e);
       currentStock.value = 0;
     }
   };
   const getCurrentDeliveryRowQuantity = () => {
-    return Number(currentDeliveryRow.value?.noQuantity || 0);
+    return roundAmount(Number(currentDeliveryRow.value?.noQuantity || 0));
   };
   const getDeliveryBatchDeliveryMax = row => {
     const productQuantity = getCurrentDeliveryRowQuantity();
@@ -1267,9 +1283,8 @@
       },
       0
     );
-    const remainingProductQuantity = Math.max(
-      0,
-      productQuantity - otherBatchTotal
+    const remainingProductQuantity = roundAmount(
+      Math.max(0, productQuantity - otherBatchTotal)
     );
     return Math.max(0, Math.min(batchQuantity, remainingProductQuantity));
   };
@@ -1283,9 +1298,8 @@
       },
       0
     );
-    const remainingProductQuantity = Math.max(
-      0,
-      productQuantity - otherBatchTotal
+    const remainingProductQuantity = roundAmount(
+      Math.max(0, productQuantity - otherBatchTotal)
     );
     const currentValue = Number(row?.deliveryQuantity || 0);
 
@@ -1302,9 +1316,9 @@
       item => Number(item?.deliveryQuantity || 0) > 0
     );
   };
-  const getDeliveryBatchNoList = async productModelId => {
+  const getDeliveryBatchNoList = async (productModelId, salesLedgerId) => {
     if (!productModelId) return [];
-    const res = await getStockInventoryByModelId(productModelId);
+    const res = await getStockInventoryByModelId(productModelId, salesLedgerId);
     const rawList = Array.isArray(res?.data)
       ? res.data
       : res?.data?.records || res?.data?.rows || [];
@@ -2483,7 +2497,8 @@
 
     currentDeliveryRow.value = row;
     const batchNoList = await getDeliveryBatchNoList(
-      row.productModelId || row.modelId
+      row.productModelId || row.modelId,
+      row.salesLedgerId
     );
     deliveryForm.value = {
       shippingCarNumber: "",
@@ -2506,16 +2521,18 @@
           proxy.$modal.msgWarning("璇疯嚦灏戝~鍐欎竴涓壒鍙风殑鍙戣揣鏁伴噺");
           return;
         }
-        const totalDeliveryQuantity = selectedBatchRows.reduce(
-          (sum, item) => sum + Number(item.deliveryQuantity || 0),
-          0
+        const totalDeliveryQuantity = roundAmount(
+          selectedBatchRows.reduce(
+            (sum, item) => sum + Number(item.deliveryQuantity || 0),
+            0
+          )
         );
         const currentRowNoQuantity = Number(
           currentDeliveryRow.value?.noQuantity || 0
         );
         if (
           currentRowNoQuantity > 0 &&
-          totalDeliveryQuantity > currentRowNoQuantity
+          totalDeliveryQuantity > roundAmount(currentRowNoQuantity)
         ) {
           proxy.$modal.msgWarning("鎵瑰彿鍙戣揣鎬绘暟涓嶈兘瓒呰繃寰呭彂璐ф暟閲�");
           return;
@@ -2590,6 +2607,10 @@
     if (val === "璐ц溅") {
       deliveryForm.value.expressCompany = "";
       deliveryForm.value.expressNumber = "";
+    } else if (val === "鑷彁") {
+      deliveryForm.value.shippingCarNumber = "";
+      deliveryForm.value.expressCompany = "";
+      deliveryForm.value.expressNumber = "";
     } else {
       deliveryForm.value.shippingCarNumber = "";
     }

--
Gitblit v1.9.3