From 98e0d9f527eab7fd48927327c2ac27c2b9caa781 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 15 十月 2026 17:08:24 +0800
Subject: [PATCH] fix: 生产订单退料精度计算

---
 src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue |   42 ++++++++++++++++++++++++++++++------------
 1 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue b/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
index 3373374..6f22c91 100644
--- a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
+++ b/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
@@ -149,10 +149,18 @@
     updateMaterialPickingLedger,
   } from "@/api/productionManagement/productionOrder.js";
 
+  const toNumber = val => {
+    const n = Number(val);
+    return Number.isFinite(n) ? n : 0;
+  };
+
+  // 淇濈暀6浣嶅皬鏁�
+  const roundQuantity = val => Math.round(toNumber(val) * 1e6) / 1e6;
+
   const stripTrailingZeros = val => {
     const str = String(val ?? "");
     if (str.includes(".")) {
-      return parseFloat(str).toString();
+      return roundQuantity(str).toString();
     }
     return str;
   };
@@ -177,9 +185,11 @@
   const returnSummaryDialogVisible = ref(false);
   const returnSummaryList = ref([]);
   const calcReturnQty = item =>
-    Number(item.pickQuantity || 0) +
-    Number(item.feedingQty || 0) -
-    Number(item.actualQty || 0);
+    roundQuantity(
+      toNumber(item.pickQuantity) +
+        toNumber(item.feedingQty) -
+        toNumber(item.actualQty)
+    );
   const canOpenReturnSummary = computed(() =>
     materialDetailTableData.value.some(
       item => item.returned !== true && calcReturnQty(item) > 0
@@ -192,13 +202,21 @@
     materialDetailTableData.value = [];
     try {
       const res = await listMaterialPickingDetail(props.orderRow.id);
-      materialDetailTableData.value = (res.data || []).map(item => ({
-        ...item,
-        actualQty:
-          item.actualQty ??
-          Number(item.pickQuantity || 0) + Number(item.feedingQty || 0),
-        returnQty: item.returnQty ?? 0,
-      }));
+      materialDetailTableData.value = (res.data || []).map(item => {
+        const row = {
+          ...item,
+          actualQty:
+            item.actualQty ??
+            roundQuantity(
+              toNumber(item.pickQuantity) + toNumber(item.feedingQty)
+            ),
+        };
+        row.returnQty =
+          row.returned === true
+            ? roundQuantity(item.returnQty)
+            : calcReturnQty(row);
+        return row;
+      });
     } finally {
       materialDetailLoading.value = false;
     }
@@ -252,7 +270,7 @@
         unit: item.unit || "",
         returnQtyTotal: 0,
       };
-      old.returnQtyTotal += returnQty;
+      old.returnQtyTotal = roundQuantity(old.returnQtyTotal + returnQty);
       map.set(key, old);
     });
     return Array.from(map.values());

--
Gitblit v1.9.3