From 4fef2b8afba85d8f2f8be70b85ffc105cfc4deda Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 13 三月 2026 11:49:12 +0800
Subject: [PATCH] 生产维护树形结构加载慢改成懒加载

---
 src/views/productionPlan/productionPlan/index.vue |   97 +++++++++++++++++++++++++++++++++++-------------
 1 files changed, 70 insertions(+), 27 deletions(-)

diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 4e0220a..88aedf3 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -248,6 +248,7 @@
                       prop="productMaterialSkuId">
           <el-select v-model="form.productMaterialSkuId"
                      @change="handleChangeSpecification"
+                     filterable
                      placeholder="璇烽�夋嫨">
             <el-option v-for="item in specificationOptions"
                        :key="item.skuId"
@@ -301,8 +302,14 @@
         </el-form-item>
         <el-form-item label="寮哄害"
                       prop="strength">
-          <el-input v-model="form.strength"
-                    placeholder="璇疯緭鍏ュ己搴�" />
+          <el-select v-model="form.strength"
+                     placeholder="璇烽�夋嫨寮哄害"
+                     style="width: 100%">
+            <el-option label="A3.5"
+                       value="A3.5" />
+            <el-option label="A5.0"
+                       value="A5.0" />
+          </el-select>
         </el-form-item>
         <el-form-item label="澶囨敞 1"
                       prop="remarkOne">
@@ -342,7 +349,11 @@
     productionPlanCombine,
   } from "@/api/productionPlan/productionPlan.js";
   import PIMTable from "./components/PIMTable.vue";
-  import { modelListPage, productTreeList } from "@/api/basicData/newProduct.js";
+  import {
+    modelListPage,
+    productTreeList,
+    productTreeListQuery,
+  } from "@/api/basicData/newProduct.js";
 
   const { proxy } = getCurrentInstance();
 
@@ -387,40 +398,46 @@
       label: "鍧楁暟",
       prop: "quantity",
       className: "quantity-cell",
+      formatData: cell => (cell ? `${cell}鍧梎 : ""),
     },
     {
       label: "鏂规暟",
       prop: "volume",
       width: "150px",
       className: "volume-cell",
+      formatData: cell => (cell ? `${cell}鏂筦 : ""),
     },
     {
       label: "宸蹭笅鍙戞柟鏁�",
       prop: "assignedQuantity",
       width: "150px",
       className: "spec-cell",
+      formatData: cell => (cell ? `${cell}鏂筦 : ""),
     },
     {
       label: "闀�",
       prop: "length",
       className: "dimension-cell",
+      formatData: cell => (cell ? `${cell}mm` : ""),
     },
     {
       label: "瀹�",
       prop: "width",
       className: "dimension-cell",
+      formatData: cell => (cell ? `${cell}mm` : ""),
     },
     {
       label: "楂�",
       prop: "height",
       className: "dimension-cell",
+      formatData: cell => (cell ? `${cell}mm` : ""),
     },
-    {
-      label: "娴佹按鍙�",
-      prop: "serialNo",
-      width: "150px",
-      className: "code-cell",
-    },
+    // {
+    //   label: "娴佹按鍙�",
+    //   prop: "serialNo",
+    //   width: "150px",
+    //   className: "code-cell",
+    // },
     {
       label: "璁″垝寮�濮嬫棩鏈�",
       prop: "startDate",
@@ -439,12 +456,12 @@
       label: "寮哄害",
       prop: "strength",
     },
-    // {
-    //   label: "鏁版嵁鏉ユ簮",
-    //   width: "100px",
-    //   prop: "dataSourceType",
-    //   formatData: cell => (cell == 1 ? "鍚屾" : "鎵嬪姩"),
-    // },
+    {
+      label: "鏁版嵁鏉ユ簮",
+      width: "100px",
+      prop: "dataSourceType",
+      formatData: cell => (cell == 1 ? "鍚屾" : "鎵嬪姩"),
+    },
     {
       label: "澶囨敞 1",
       prop: "remarkOne",
@@ -465,6 +482,9 @@
           name: "缂栬緫",
           type: "primary",
           link: true,
+          showHide: row => {
+            return row.status == 0;
+          },
           clickFun: row => {
             handleEdit(row);
           },
@@ -473,6 +493,9 @@
           name: "鍒犻櫎",
           type: "danger",
           link: true,
+          showHide: row => {
+            return row.status == 0;
+          },
           clickFun: row => {
             handleDelete(row);
           },
@@ -480,12 +503,12 @@
         {
           name: "涓嬪彂",
           type: "text",
-          disabled: row => {
+          showHide: row => {
             // 璁$畻鍓╀綑鏂规暟
             const remainingVolume =
               (row.volume || 0) - (row.assignedQuantity || 0);
             // 濡傛灉鍓╀綑鏂规暟灏忎簬绛変簬0锛岀姝㈤�夋嫨
-            return remainingVolume <= 0;
+            return remainingVolume > 0;
           },
           clickFun: row => {
             // 鍗曠嫭涓嬪彂鎿嶄綔
@@ -498,7 +521,7 @@
             mergeForm.width = row.width || 0;
             mergeForm.height = row.height || 0;
             mergeForm.totalAssignedQuantity =
-              Number(row.volume) - Number(row.assignedQuantity) || 0;
+              (Number(row.volume) - Number(row.assignedQuantity)).toFixed(4) || 0;
             mergeForm.planCompleteTime = row.planCompleteTime || "";
             sumAssignedQuantity.value = mergeForm.totalAssignedQuantity;
             // 鎵撳紑寮圭獥
@@ -626,7 +649,7 @@
   };
 
   const fetchProductOptions = () => {
-    return productTreeList().then(res => {
+    return productTreeList({ type: 2 }).then(res => {
       productOptions.value = convertIdToValue(res.data);
       return res;
     });
@@ -658,19 +681,31 @@
   const fetchSpecificationOptions = materialId => {
     specificationOptions.value = [];
     if (materialId) {
-      modelListPage({ materialId: materialId }).then(res => {
-        specificationOptions.value = res.data;
-      });
+      modelListPage({ materialId: materialId, size: -1, current: -1 }).then(
+        res => {
+          specificationOptions.value = res.data.records;
+        }
+      );
     }
   };
 
   const handleChangeSpecification = value => {
     form.materialCode = undefined;
     const selectedModel = specificationOptions.value.find(
-      item => item.id === value
+      item => item.skuId === value
     );
     if (selectedModel) {
       form.materialCode = selectedModel.materialCode;
+      // 瑙f瀽瑙勬牸瀛楃涓茶幏鍙栭暱瀹介珮
+      const specification = selectedModel.specification;
+      if (specification) {
+        const dimensions = specification.match(/^(\d+)\*(\d+)\*(\d+)$/);
+        if (dimensions && dimensions.length === 4) {
+          form.length = parseInt(dimensions[1]);
+          form.width = parseInt(dimensions[2]);
+          form.height = parseInt(dimensions[3]);
+        }
+      }
     }
   };
 
@@ -795,8 +830,9 @@
           totalAssignedQuantity: 0,
         };
       }
-      summary[category].totalAssignedQuantity +=
-        Number(row.volume) - Number(row.assignedQuantity);
+      summary[category].totalAssignedQuantity += (
+        Number(row.volume) - Number(row.assignedQuantity)
+      ).toFixed(4);
     });
 
     // 杞崲涓烘暟缁勬牸寮�
@@ -857,7 +893,9 @@
   // 鎷夊彇鏁版嵁鎸夐挳鎿嶄綔
   const getLoadProdData = () => {
     loadProdData()
-      .then(res => {})
+      .then(res => {
+        getList();
+      })
       .catch(() => {});
   };
   const sumAssignedQuantity = ref(0);
@@ -874,7 +912,7 @@
         sum +
         (row.volume == null
           ? 0
-          : Number(row.volume) - Number(row.assignedQuantity))
+          : (Number(row.volume) - Number(row.assignedQuantity)).toFixed(4))
       );
     }, 0);
     sumAssignedQuantity.value = totalAssignedQuantity;
@@ -897,6 +935,10 @@
 
   // 澶勭悊鍚堝苟涓嬪彂鎻愪氦
   const handleMergeSubmit = () => {
+    if (mergeForm.totalAssignedQuantity === 0) {
+      ElMessage.warning("璇疯緭鍏ョ敓浜ф柟鏁�");
+      return;
+    }
     console.log(sumAssignedQuantity.value, "sumAssignedQuantity");
     // 璁$畻褰撳墠閫変腑琛岀殑鎬绘柟鏁�
     const totalVolume = selectedRows.value.reduce((sum, row) => {
@@ -917,6 +959,7 @@
           getList();
           isShowNewModal.value = false;
           // 鍙互閫夋嫨鍒锋柊鍒楄〃鎴栧叾浠栨搷浣�
+          getList();
         } else {
           ElMessage.error(res.message || "涓嬪彂澶辫触");
         }

--
Gitblit v1.9.3