From ff1e38350372a20b673c211b88843c48d96b48ca Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 19 三月 2026 10:16:33 +0800
Subject: [PATCH] 工艺路线和BOM修改

---
 src/views/productionManagement/processRoute/Edit.vue |  174 ++++++++++++++++++++++++++-------------------------------
 1 files changed, 80 insertions(+), 94 deletions(-)

diff --git a/src/views/productionManagement/processRoute/Edit.vue b/src/views/productionManagement/processRoute/Edit.vue
index 53d8395..4ce5098 100644
--- a/src/views/productionManagement/processRoute/Edit.vue
+++ b/src/views/productionManagement/processRoute/Edit.vue
@@ -8,21 +8,25 @@
                :model="formState"
                label-position="top"
                ref="formRef">
-        <el-form-item label="浜у搧鍚嶇О"
-                      prop="productModelId"
+        <el-form-item label="浜у搧绫诲瀷"
+                      prop="dictCode"
                       :rules="[
                 {
                 required: true,
-                message: '璇烽�夋嫨浜у搧',
+                message: '璇烽�夋嫨浜у搧绫诲瀷',
                 trigger: 'change',
               }
             ]">
-          <el-button type="primary"
-                     @click="showProductSelectDialog = true">
-            {{ formState.productName && formState.productModelName 
-              ? `${formState.productName} - ${formState.productModelName}` 
-              : '閫夋嫨浜у搧' }}
-          </el-button>
+          <el-select v-model="formState.dictCode"
+                     placeholder="璇烽�夋嫨浜у搧绫诲瀷"
+                     clearable
+                     style="width: 100%"
+                     @change="handleProductTypeChange">
+            <el-option v-for="item in productTypeOptions"
+                       :key="item.dictCode"
+                       :label="item.dictLabel"
+                       :value="item.dictCode" />
+          </el-select>
         </el-form-item>
         <el-form-item label="BOM"
                       prop="bomId"
@@ -36,7 +40,7 @@
           <el-select v-model="formState.bomId"
                      placeholder="璇烽�夋嫨BOM"
                      clearable
-                     :disabled="!formState.productModelId || bomOptions.length === 0"
+                     :disabled="!formState.dictCode || bomOptions.length === 0"
                      style="width: 100%">
             <el-option v-for="item in bomOptions"
                        :key="item.id"
@@ -50,10 +54,7 @@
                     type="textarea" />
         </el-form-item>
       </el-form>
-      <!-- 浜у搧閫夋嫨寮圭獥 -->
-      <ProductSelectDialog v-model="showProductSelectDialog"
-                           @confirm="handleProductSelect"
-                           single />
+
       <template #footer>
         <div class="dialog-footer">
           <el-button type="primary"
@@ -75,8 +76,8 @@
     watch,
   } from "vue";
   import { update } from "@/api/productionManagement/processRoute.js";
-  import { getByModel } from "@/api/productionManagement/productBom.js";
-  import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
+  import { listPage } from "@/api/productionManagement/productBom.js";
+  import { getDicts } from "@/api/system/dict/data.js";
 
   const props = defineProps({
     visible: {
@@ -94,10 +95,8 @@
 
   // 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
   const formState = ref({
-    productId: undefined,
-    productModelId: undefined,
-    productName: "",
-    productModelName: "",
+    dictCode: undefined,
+    dictLabel: "",
     bomId: undefined,
     description: "",
   });
@@ -111,10 +110,48 @@
     },
   });
 
-  const showProductSelectDialog = ref(false);
+  const productTypeOptions = ref([]);
   const bomOptions = ref([]);
 
   let { proxy } = getCurrentInstance();
+
+  // 鑾峰彇浜у搧绫诲瀷瀛楀吀
+  const getProductTypeOptions = () => {
+    getDicts("product_type")
+      .then(res => {
+        if (res.code === 200) {
+          productTypeOptions.value = res.data;
+        }
+      })
+      .catch(err => {
+        console.error("鑾峰彇浜у搧绫诲瀷瀛楀吀澶辫触锛�", err);
+      });
+  };
+
+  // 鏍规嵁浜у搧绫诲瀷鑾峰彇BOM鍒楄〃
+  const getBomListByProductType = async dictCode => {
+    if (!dictCode) {
+      bomOptions.value = [];
+      return;
+    }
+    try {
+      // 浣跨敤listPage鎺ュ彛锛屾牴鎹甦ictCode鏌ヨBOM
+      const res = await listPage({ dictCode });
+      // 澶勭悊杩斿洖鐨凚OM鏁版嵁
+      let bomList = [];
+      if (res.data && res.data.records) {
+        bomList = res.data.records;
+      }
+      bomOptions.value = bomList;
+      if (bomList.length === 0) {
+        proxy.$modal.msgError("璇ヤ骇鍝佺被鍨嬫病鏈塀OM锛岃鍏堝垱寤築OM");
+      }
+    } catch (error) {
+      // 濡傛灉鎺ュ彛杩斿洖404鎴栧叾浠栭敊璇紝璇存槑娌℃湁BOM
+      proxy.$modal.msgError("璇ヤ骇鍝佺被鍨嬫病鏈塀OM锛岃鍏堝垱寤築OM");
+      bomOptions.value = [];
+    }
+  };
 
   const closeModal = () => {
     isShow.value = false;
@@ -125,94 +162,42 @@
     if (props.record) {
       formState.value = {
         ...props.record,
-        productId: props.record.productId,
-        productModelId: props.record.productModelId,
-        productName: props.record.productName || "",
-        // 娉ㄦ剰锛歳ecord涓殑瀛楁鏄痬odel锛岄渶瑕佹槧灏勫埌productModelName
-        productModelName:
-          props.record.model || props.record.productModelName || "",
+        dictCode: props.record.dictCode,
+        dictLabel: props.record.dictLabel || "",
         bomId: props.record.bomId,
         description: props.record.description || "",
       };
-      // 濡傛灉鏈変骇鍝佸瀷鍙稩D锛屽姞杞紹OM鍒楄〃
-      if (props.record.productModelId) {
-        loadBomList(props.record.productModelId);
+      // 濡傛灉鏈変骇鍝佺被鍨嬶紝鍔犺浇BOM鍒楄〃
+      if (props.record.dictCode) {
+        getBomListByProductType(props.record.dictCode);
       }
     }
   };
 
-  // 鍔犺浇BOM鍒楄〃
-  const loadBomList = async productModelId => {
-    if (!productModelId) {
-      bomOptions.value = [];
-      return;
-    }
-    try {
-      const res = await getByModel(productModelId);
-      // 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
-      let bomList = [];
-      if (Array.isArray(res)) {
-        bomList = res;
-      } else if (res && res.data) {
-        bomList = Array.isArray(res.data) ? res.data : [res.data];
-      } else if (res && typeof res === "object") {
-        bomList = [res];
+  // 浜у搧绫诲瀷閫夋嫨澶勭悊
+  const handleProductTypeChange = async dictCode => {
+    if (dictCode) {
+      const selectedType = productTypeOptions.value.find(item => item.dictCode === dictCode);
+      if (selectedType) {
+        formState.value.dictLabel = selectedType.dictLabel;
       }
-      bomOptions.value = bomList;
-    } catch (error) {
-      console.error("鍔犺浇BOM鍒楄〃澶辫触锛�", error);
+      // 濡傛灉褰撳墠閫夋嫨鐨凚OM涓嶅湪鏂板垪琛ㄤ腑锛屽垯閲嶇疆BOM閫夋嫨
+      formState.value.bomId = undefined;
+      await getBomListByProductType(dictCode);
+      // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
+      proxy.$refs["formRef"]?.validateField("dictCode");
+    } else {
+      formState.value.dictLabel = "";
       bomOptions.value = [];
-    }
-  };
-
-  // 浜у搧閫夋嫨澶勭悊
-  const handleProductSelect = async products => {
-    if (products && products.length > 0) {
-      const product = products[0];
-      // 鍏堟煡璇OM鍒楄〃锛堝繀閫夛級
-      try {
-        const res = await getByModel(product.id);
-        // 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
-        let bomList = [];
-        if (Array.isArray(res)) {
-          bomList = res;
-        } else if (res && res.data) {
-          bomList = Array.isArray(res.data) ? res.data : [res.data];
-        } else if (res && typeof res === "object") {
-          bomList = [res];
-        }
-
-        if (bomList.length > 0) {
-          formState.value.productModelId = product.id;
-          formState.value.productName = product.productName;
-          formState.value.productModelName = product.model;
-          // 濡傛灉褰撳墠閫夋嫨鐨凚OM涓嶅湪鏂板垪琛ㄤ腑锛屽垯閲嶇疆BOM閫夋嫨
-          const currentBomExists = bomList.some(
-            bom => bom.id === formState.value.bomId
-          );
-          if (!currentBomExists) {
-            formState.value.bomId = undefined;
-          }
-          bomOptions.value = bomList;
-          showProductSelectDialog.value = false;
-          // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
-          proxy.$refs["formRef"]?.validateField("productModelId");
-        } else {
-          proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
-        }
-      } catch (error) {
-        // 濡傛灉鎺ュ彛杩斿洖404鎴栧叾浠栭敊璇紝璇存槑娌℃湁BOM
-        proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
-      }
     }
   };
 
   const handleSubmit = () => {
     proxy.$refs["formRef"].validate(valid => {
       if (valid) {
-        // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰BOM
-        if (!formState.value.productModelId) {
-          proxy.$modal.msgError("璇烽�夋嫨浜у搧");
+        // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佺被鍨嬪拰BOM
+        if (!formState.value.dictCode) {
+          proxy.$modal.msgError("璇烽�夋嫨浜у搧绫诲瀷");
           return;
         }
         if (!formState.value.bomId) {
@@ -250,6 +235,7 @@
   );
 
   onMounted(() => {
+    getProductTypeOptions();
     if (props.visible && props.record) {
       setFormData();
     }

--
Gitblit v1.9.3