From 45ebf67583fb4ab6be9c437c39b78ae254407654 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 12 三月 2026 17:17:57 +0800
Subject: [PATCH] 优化主生产计划表单产品相关

---
 src/views/productionPlan/productionPlan/index.vue |   98 +++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 82 insertions(+), 16 deletions(-)

diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index d3fb161..79925a4 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -234,19 +234,27 @@
                     placeholder="璇疯緭鍏ュ鎴峰悕绉�" />
         </el-form-item>
         <el-form-item label="浜у搧鍚嶇О"
-                      prop="productName">
-          <el-input v-model="form.productName"
-                    placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�" />
+                      prop="productMaterialId">
+          <el-tree-select v-model="form.productMaterialId"
+                          placeholder="璇烽�夋嫨"
+                          clearable
+                          :data="productOptions"
+                          :render-after-expand="false"
+                          filterable
+                          @change="handleProductChange"
+                          style="width: 100%" />
         </el-form-item>
+
         <el-form-item label="浜у搧瑙勬牸"
-                      prop="specification">
-          <el-input v-model="form.specification"
-                    placeholder="璇疯緭鍏ヤ骇鍝佽鏍�" />
-        </el-form-item>
-        <el-form-item label="鐗╂枡缂栫爜"
-                      prop="materialCode">
-          <el-input v-model="form.materialCode"
-                    placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" />
+                      prop="productMaterialSkuId">
+          <el-select v-model="form.productMaterialSkuId"
+                     @change="handleChangeSpecification"
+                     placeholder="璇烽�夋嫨">
+            <el-option v-for="item in specificationOptions"
+                       :key="item.skuId"
+                       :label="item.specification"
+                       :value="item.skuId" />
+          </el-select>
         </el-form-item>
         <el-form-item label="鍧楁暟"
                       prop="quantity">
@@ -335,6 +343,7 @@
     productionPlanCombine,
   } from "@/api/productionPlan/productionPlan.js";
   import PIMTable from "./components/PIMTable.vue";
+  import {modelListPage, productTreeList} from "@/api/basicData/newProduct.js";
 
   const { proxy } = getCurrentInstance();
 
@@ -557,11 +566,15 @@
   // 鏂板/缂栬緫鐩稿叧
   const dialogVisible = ref(false);
   const operationType = ref("add"); // add | edit
+  const productOptions = ref([])
+  const specificationOptions = ref([])
   const formRef = ref(null);
   const form = reactive({
     id: undefined,
     applyNo: "",
     customerName: "",
+    productMaterialId: undefined,
+    productMaterialSkuId: undefined,
     productName: "",
     specification: "",
     materialCode: "",
@@ -581,12 +594,11 @@
     customerName: [
       { required: true, message: "璇疯緭鍏ュ鎴峰悕绉�", trigger: "blur" },
     ],
-    productName: [{ required: true, message: "璇疯緭鍏ヤ骇鍝佸悕绉�", trigger: "blur" }],
-    specification: [
-      { required: true, message: "璇疯緭鍏ヤ骇鍝佽鏍�", trigger: "blur" },
+    productMaterialSkuId: [
+      { required: true, message: "璇烽�夋嫨浜у搧瑙勬牸", trigger: "change" },
     ],
-    materialCode: [
-      { required: true, message: "璇疯緭鍏ョ墿鏂欑紪鐮�", trigger: "blur" },
+    productMaterialId: [
+      { required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
     ],
   });
 
@@ -612,6 +624,53 @@
     // 闄愬埗鍥涗綅灏忔暟
     mergeForm.totalAssignedQuantity = Number(value.toFixed(4));
   };
+
+  const fetchProductOptions = () => {
+    return productTreeList().then(res => {
+      productOptions.value = convertIdToValue(res.data);
+      return res;
+    });
+  }
+
+  const convertIdToValue = (data) => {
+    return data.map((item) => {
+      const newItem = {
+        value: `config_${item.configId}`, // 浣跨敤config_鍓嶇紑纭繚鍞竴鎬�
+        label: item.configName,
+        disabled: item.materialList.length === 0,
+      };
+      if (item.materialList && item.materialList.length > 0) {
+        newItem.children = item.materialList.map(material => ({
+          value: material.id, // 浣跨敤material鐨刬d浣滀负value
+          label: material.materialName, // 浣跨敤materialName浣滀负label
+        }));
+      }
+
+      return newItem;
+    });
+  }
+
+  const handleProductChange = (value) => {
+    form.productMaterialSkuId = undefined
+    fetchSpecificationOptions(value)
+  }
+
+  const fetchSpecificationOptions = (materialId) => {
+    specificationOptions.value = []
+    if (materialId) {
+      modelListPage({ materialId: materialId}).then(res => {
+        specificationOptions.value = res.data;
+      });
+    }
+  }
+
+  const handleChangeSpecification = (value) => {
+    form.materialCode = undefined
+    const selectedModel = specificationOptions.value.find((item) => item.id === value)
+    if (selectedModel) {
+      form.materialCode = selectedModel.materialCode
+    }
+  }
 
   // 鐢熸垚妯℃嫙杩涘害璇︽儏鏁版嵁
   const generateProgressDetails = status => {
@@ -950,6 +1009,8 @@
       applyNo: "",
       customerName: "",
       productName: "",
+      productMaterialId: undefined,
+      productMaterialSkuId: undefined,
       specification: "",
       materialCode: "",
       quantity: 0,
@@ -964,6 +1025,7 @@
       remarkTwo: "",
     });
     dialogVisible.value = true;
+    fetchProductOptions();
   };
 
   // 缂栬緫
@@ -974,6 +1036,8 @@
       applyNo: row.applyNo || "",
       customerName: row.customerName || "",
       productName: row.productName || "",
+      productMaterialId: row.productMaterialId || undefined,
+      productMaterialSkuId: row.productMaterialSkuId || undefined,
       specification: row.specification || "",
       materialCode: row.materialCode || "",
       quantity: row.quantity || 0,
@@ -988,6 +1052,8 @@
       remarkTwo: row.remarkTwo || "",
     });
     dialogVisible.value = true;
+    fetchProductOptions();
+    fetchSpecificationOptions(row.productMaterialId);
   };
 
   // 鍒犻櫎

--
Gitblit v1.9.3