From 7cb0cf9a36e263d29be61a44b8caae2a896f3461 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 31 三月 2026 11:31:40 +0800
Subject: [PATCH] 新增入库选择器修改

---
 src/views/inventoryManagement/receiptManagement/index.vue |  108 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 81 insertions(+), 27 deletions(-)

diff --git a/src/views/inventoryManagement/receiptManagement/index.vue b/src/views/inventoryManagement/receiptManagement/index.vue
index be59711..056c46d 100644
--- a/src/views/inventoryManagement/receiptManagement/index.vue
+++ b/src/views/inventoryManagement/receiptManagement/index.vue
@@ -246,7 +246,7 @@
         <el-form :model="directQuery"
                  class="mb-2">
           <el-form-item label="浜у搧澶х被">
-            <el-select v-model="directQuery.productCategory"
+            <!-- <el-select v-model="directQuery.productCategory"
                        placeholder="璇烽�夋嫨浜у搧澶х被"
                        clearable
                        filterable
@@ -255,14 +255,22 @@
                          :key="item.id"
                          :label="item.productName"
                          :value="item.productName" />
-            </el-select>
+            </el-select> -->
+            <el-tree-select v-model="directQuery.productId"
+                            placeholder="璇烽�夋嫨浜у搧澶х被"
+                            clearable
+                            check-strictly
+                            @change="handleProductCategoryChange"
+                            :data="productList"
+                            :render-after-expand="false"
+                            style="width: 100%" />
           </el-form-item>
           <el-form-item label="瑙勬牸鍨嬪彿">
             <el-select v-model="directQuery.productModelId"
                        placeholder="璇峰厛閫夋嫨浜у搧澶х被"
                        clearable
                        filterable
-                       :disabled="!directQuery.productCategory">
+                       :disabled="!directQuery.productId">
               <el-option v-for="item in productModelList"
                          :key="item.id"
                          :label="item.model"
@@ -671,6 +679,7 @@
     directQuery.value = {
       productId: null,
       productModelId: null,
+      productCategory: "",
       inboundQuantity: 0,
       warnNum: 0,
       outStockQuantity: 0,
@@ -691,33 +700,76 @@
     if (type === "edit" && row) {
       // 缂栬緫妯″紡锛屽洖鏄炬暟鎹�
       directForm.value = { ...row };
-      // 鍥炴樉浜у搧澶х被
-      const selectedProduct = productList.value.find(
-        item => item.productName === row.productCategory
-      );
-      if (selectedProduct) {
-        directQuery.value.productId = selectedProduct.id;
-        // 鏍规嵁浜у搧澶х被鍔犺浇瑙勬牸鍨嬪彿鍒楄〃骞跺洖鏄�
-        loadProductModelList(selectedProduct.id).then(() => {
-          // 鍥炴樉瑙勬牸鍨嬪彿
+      // 鍥炴樉鍏朵粬瀛楁
+      directQuery.value.inboundQuantity = row.inboundNum || row.inboundQuantity;
+      directQuery.value.warnNum = row.warnNum || 0;
+      directQuery.value.outStockQuantity = row.outStockQuantity || 0;
+      directQuery.value.shortageDescription = row.shortageDescription || "";
+      // 鍥炴樉浜у搧澶х被鍜岃鏍煎瀷鍙�
+      if (row.productModelId) {
+        // 杩欓噷闇�瑕佹牴鎹疄闄呮儏鍐佃幏鍙栦骇鍝佸ぇ绫籌D锛屾殏鏃跺亣璁緍ow涓湁productId瀛楁
+        if (row.productId) {
+          directQuery.value.productId = row.productId;
+          // 鏇存柊浜у搧绫诲埆鍚嶇О
+          const productCategory = findNodeById(productList.value, row.productId);
+          if (productCategory) {
+            directQuery.value.productCategory = productCategory;
+          }
+          // 鏍规嵁浜у搧澶х被鍔犺浇瑙勬牸鍨嬪彿鍒楄〃骞跺洖鏄�
+          loadProductModelList(row.productId).then(() => {
+            directQuery.value.productModelId = row.productModelId;
+          });
+        } else {
+          // 濡傛灉娌℃湁productId瀛楁锛屽皾璇曟牴鎹畃roductCategory鏌ユ壘
+          // 杩欓噷闇�瑕佹牴鎹疄闄呮儏鍐佃皟鏁存煡鎵鹃�昏緫
           directQuery.value.productCategory = row.productCategory || "";
-          directQuery.value.productModelId = row.productModelId;
-          // 鍥炴樉鍏朵粬瀛楁
-          directQuery.value.inboundQuantity =
-            row.inboundNum || row.inboundQuantity;
-          directQuery.value.warnNum = row.warnNum || 0;
-          directQuery.value.outStockQuantity = row.outStockQuantity || 0;
-          directQuery.value.shortageDescription = row.shortageDescription || "";
-        });
+        }
       }
     }
+  };
+
+  // 杞崲浜у搧鏍戞暟鎹牸寮忎负 el-tree-select 鎵�闇�鏍煎紡
+  function convertIdToValue(data) {
+    return data.map(item => {
+      const { id, children, ...rest } = item;
+      const newItem = {
+        ...rest,
+        value: id,
+        label: item.productName,
+      };
+      if (children && children.length > 0) {
+        newItem.children = convertIdToValue(children);
+      }
+      return newItem;
+    });
+  }
+
+  // 鏍规嵁 ID 鏌ユ壘鑺傜偣鍚嶇О
+  const findNodeById = (nodes, productId) => {
+    for (let i = 0; i < nodes.length; i++) {
+      if (nodes[i].value === productId) {
+        return nodes[i].label;
+      }
+      if (nodes[i].children && nodes[i].children.length > 0) {
+        const foundNode = findNodeById(nodes[i].children, productId);
+        if (foundNode) {
+          return foundNode;
+        }
+      }
+    }
+    return null;
   };
 
   // 鍔犺浇浜у搧澶х被鍒楄〃
   const loadProductList = async () => {
     try {
       const res = await productTreeList();
-      productList.value = res;
+      // 纭繚鏁版嵁鏍煎紡绗﹀悎 el-tree-select 瑕佹眰
+      if (Array.isArray(res)) {
+        productList.value = convertIdToValue(res);
+      } else {
+        productList.value = [];
+      }
     } catch (error) {
       console.error("鍔犺浇浜у搧澶х被澶辫触:", error);
       proxy.$modal.msgError("鍔犺浇浜у搧澶х被澶辫触");
@@ -726,16 +778,18 @@
 
   // 澶勭悊浜у搧澶х被鍙樺寲
   const handleProductCategoryChange = value => {
-    directQuery.value.specificationModel = "";
+    directQuery.value.productModelId = "";
     productModelList.value = [];
     if (value) {
       // 鏍规嵁浜у搧澶х被鍔犺浇瑙勬牸鍨嬪彿鍒楄〃
-      const selectedProduct = productList.value.find(
-        item => item.productName === value
-      );
-      if (selectedProduct) {
-        loadProductModelList(selectedProduct.id);
+      loadProductModelList(value);
+      // 鏇存柊浜у搧绫诲埆鍚嶇О
+      const productCategory = findNodeById(productList.value, value);
+      if (productCategory) {
+        directQuery.value.productCategory = productCategory;
       }
+    } else {
+      directQuery.value.productCategory = "";
     }
   };
 

--
Gitblit v1.9.3