From b7b7b53debb680d528864dc6be30277f766ae2e3 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 23 一月 2026 14:34:57 +0800
Subject: [PATCH] fix: 产品结构详情限制最外层只能选一个当前产品不能多个

---
 src/views/productionManagement/productStructure/Detail/index.vue |   33 +++++++++++++++++++++++++--------
 1 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/src/views/productionManagement/productStructure/Detail/index.vue b/src/views/productionManagement/productStructure/Detail/index.vue
index 09044b2..cdb32ae 100644
--- a/src/views/productionManagement/productStructure/Detail/index.vue
+++ b/src/views/productionManagement/productStructure/Detail/index.vue
@@ -178,6 +178,7 @@
   const ProductSelectDialog = defineAsyncComponent(
     () => import("@/views/basicData/product/ProductSelectDialog.vue")
   );
+  const emit = defineEmits(["update:router"]);
   const form = ref();
 
   const route = useRoute();
@@ -233,11 +234,11 @@
     if (isOrderPage.value) {
       // 璁㈠崟鎯呭喌锛氫娇鐢ㄨ鍗曠殑浜у搧缁撴瀯鎺ュ彛
       const { data } = await listProcessBom({ orderId: routeOrderId.value });
-      dataValue.dataList = data || [];
+      dataValue.dataList = (data as any) || [];
     } else {
       // 闈炶鍗曟儏鍐碉細浣跨敤鍘熸潵鐨勬帴鍙�
       const { data } = await queryList(routeId.value);
-      dataValue.dataList = data || [];
+      dataValue.dataList = (data as any) || [];
       // 涓烘墍鏈夐」鍙婂叾瀛愰」璁剧疆name灞炴��
       const setNameRecursively = items => {
         items.forEach(item => {
@@ -256,8 +257,8 @@
   };
 
   const fetchProcessOptions = async () => {
-    const { data } = await list(routeId.value);
-    dataValue.processOptions = data;
+    const { data } = await list();
+    dataValue.processOptions = data as any;
   };
 
   const handleProduct = row => {
@@ -265,6 +266,16 @@
       ElMessage.error("鍙兘閫夋嫨涓�涓骇鍝�");
     }
     const productData = row[0];
+
+    // 鏍¢獙锛氫笉鑳藉湪鏈�澶栧眰閫夋嫨璺熷綋鍓嶄骇鍝佷竴鏍风殑浜у搧
+    const isTopLevel = dataValue.dataList.some(item => item.tempId === dataValue.currentRowName);
+    if (isTopLevel) {
+      if (productData.productName === tableData[0].productName &&
+        productData.model === tableData[0].model) {
+        ElMessage.warning("涓嶈兘鍦ㄦ渶澶栧眰閫夋嫨璺熷綋鍓嶄骇鍝佷竴鏍风殑浜у搧");
+        return;
+      }
+    }
     // dataValue.dataList[dataValue.currentRowIndex].productName =
     //   row[0].productName;
     // dataValue.dataList[dataValue.currentRowIndex].model = row[0].model;
@@ -386,6 +397,7 @@
       unitQuantity: 0,
       demandedQuantity: 0,
       unit: "",
+      children: [],
       tempId: new Date().getTime(),
     });
   };
@@ -423,6 +435,9 @@
   const addItem2 = tempId => {
     dataValue.dataList.map(item => {
       if (item.tempId === tempId) {
+        if (!item.children) {
+          item.children = [];
+        }
         item.children.push({
           parentId: item.id || "",
           parentTempId: item.tempId || "",
@@ -447,7 +462,9 @@
   const addchildItem = (item, tempId) => {
     if (item.tempId === tempId) {
       console.log(item, "item");
-
+      if (!item.children) {
+        item.children = [];
+      }
       item.children.push({
         parentId: item.id || "",
         parentTempId: item.tempId || "",
@@ -494,9 +511,9 @@
 
   onMounted(async () => {
     // 浠庤矾鐢卞弬鏁板洖鏄炬暟鎹�
-    tableData[0].productName = routeProductName.value;
-    tableData[0].model = routeProductModelName.value;
-    tableData[0].bomNo = routeBomNo.value;
+    tableData[0].productName = routeProductName.value as string;
+    tableData[0].model = routeProductModelName.value as string;
+    tableData[0].bomNo = routeBomNo.value as string;
 
     // 璁㈠崟鎯呭喌涓嬬鐢ㄧ紪杈�
     if (isOrderPage.value) {

--
Gitblit v1.9.3