From de4e098a962e8403d9b32590f0acba025b8072f6 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期六, 14 三月 2026 17:51:27 +0800
Subject: [PATCH] 一些修改

---
 src/views/basicData/product/index.vue |  221 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 171 insertions(+), 50 deletions(-)

diff --git a/src/views/basicData/product/index.vue b/src/views/basicData/product/index.vue
index 538687f..45931bc 100644
--- a/src/views/basicData/product/index.vue
+++ b/src/views/basicData/product/index.vue
@@ -6,7 +6,7 @@
                   style="width: 210px"
                   placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�"
                   @change="searchFilter"
-                  @clear="searchFilter"
+                  @clear="searchFilter1"
                   clearable
                   prefix-icon="Search" />
         <el-button type="primary"
@@ -32,8 +32,7 @@
             <div class="custom-tree-node">
               <span class="tree-node-content">
                 <el-icon class="tree-icon">
-                  <component :is="data.children && data.children.length > 0
-                  ? node.expanded ? 'FolderOpened' : 'Folder' : 'Tickets'" />
+                  <component :is="node.expanded ? 'FolderOpened' : 'Folder'" />
                 </el-icon>
                 <span class="tree-node-label">{{ data.label }}</span>
               </span>
@@ -77,7 +76,7 @@
       </div>
     </div>
     <div class="right">
-      <div style="margin-bottom: 10px"
+      <div style="margin-bottom: 10px; display: flex; align-items: center; gap: 10px"
            v-if="isShowButton">
         <el-button type="primary"
                    @click="openModelDia('add')">
@@ -85,9 +84,18 @@
         </el-button>
         <ImportExcel :product-id="currentId"
                      @uploadSuccess="getModelList" />
+        <el-input v-model="model"
+                  placeholder="瑙勬牸鍨嬪彿"
+                  style="width: 150px"
+                  clearable
+                  @change="getModelList" />
+        <el-input v-model="materialCode"
+                  placeholder="鐗╂枡缂栧彿"
+                  style="width: 150px"
+                  clearable
+                  @change="getModelList" />
         <el-button type="danger"
                    @click="handleDelete"
-                   style="margin-left: 10px"
                    plain>
           鍒犻櫎
         </el-button>
@@ -95,10 +103,11 @@
       <PIMTable rowKey="id"
                 :column="tableColumn"
                 :tableData="tableData"
+                :page="page"
                 :isSelection="true"
-                :isShowPagination="false"
                 @selection-change="handleSelectionChange"
-                :tableLoading="tableLoading"></PIMTable>
+                :tableLoading="tableLoading"
+                @pagination="pagination"></PIMTable>
     </div>
     <el-dialog v-model="productDia"
                title="浜у搧"
@@ -112,8 +121,8 @@
         <el-row :gutter="30">
           <el-col :span="24">
             <el-form-item label="浜у搧鍚嶇О锛�"
-                          prop="materialName">
-              <el-input v-model="form.materialName"
+                          prop="productName">
+              <el-input v-model="form.productName"
                         placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
                         maxlength="20"
                         show-word-limit
@@ -129,6 +138,7 @@
               <el-select v-model="form.inventoryCategoryId"
                          placeholder="璇烽�夋嫨瀛樿揣绫诲埆"
                          clearable
+                         filterable
                          style="width: 100%">
                 <el-option v-for="item in inventoryCategoryList"
                            :key="item.id"
@@ -145,6 +155,7 @@
               <el-select v-model="form.materialTypeId"
                          placeholder="璇烽�夋嫨鐗╂枡绫诲瀷"
                          clearable
+                         filterable
                          style="width: 100%">
                 <el-option v-for="item in materialTypeList"
                            :key="item.id"
@@ -157,8 +168,8 @@
         <el-row :gutter="30">
           <el-col :span="24">
             <el-form-item label="鍩烘湰鍗曚綅锛�"
-                          prop="baseUnit">
-              <el-input v-model="form.baseUnit"
+                          prop="unit">
+              <el-input v-model="form.unit"
                         placeholder="璇疯緭鍏ュ熀鏈崟浣�"
                         clearable
                         @keydown.enter.prevent />
@@ -199,9 +210,18 @@
         <el-row>
           <el-col :span="24">
             <el-form-item label="瑙勬牸鍨嬪彿锛�"
-                          prop="specification">
-              <el-input v-model="modelForm.specification"
+                          prop="model">
+              <el-input v-model="modelForm.model"
                         placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+                        clearable
+                        @keydown.enter.prevent />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鐗╂枡缂栫爜锛�"
+                          prop="materialCode">
+              <el-input v-model="modelForm.materialCode"
+                        placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�"
                         clearable
                         @keydown.enter.prevent />
             </el-form-item>
@@ -214,6 +234,7 @@
               <el-select v-model="modelForm.supplyType"
                          placeholder="璇烽�夋嫨渚涘簲鏂瑰紡"
                          clearable
+                         filterable
                          style="width: 100%">
                 <el-option label="鑷埗"
                            value="鑷埗" />
@@ -280,6 +301,7 @@
     delProductModel,
     modelListPage,
     productTreeList,
+    productTreeListQuery,
     addOrEditProductConfig,
     updateOrEditProductConfig,
     delProductConfig,
@@ -305,6 +327,8 @@
   const expandedKeys = ref([]);
   const inventoryCategoryList = ref([]);
   const materialTypeList = ref([]);
+  const model = ref("");
+  const materialCode = ref("");
 
   const getloadData = () => {
     loadData()
@@ -350,15 +374,19 @@
   const tableColumn = ref([
     {
       label: "瑙勬牸鍨嬪彿",
-      prop: "materialName",
+      prop: "productName",
     },
     {
       label: "瑙勬牸",
-      prop: "specification",
+      prop: "model",
+    },
+    {
+      label: "鐗╂枡缂栫爜",
+      prop: "materialCode",
     },
     {
       label: "鍗曚綅",
-      prop: "baseUnit",
+      prop: "unit",
     },
     {
       dataType: "action",
@@ -379,33 +407,40 @@
   const tableLoading = ref(false);
   const isShowButton = ref(false);
   const selectedRows = ref([]);
+  const page = reactive({
+    current: 1,
+    size: 10,
+    total: 0,
+  });
 
   const data = reactive({
     form: {
       materialTypeId: null,
       inventoryCategoryId: null,
-      materialName: "",
-      baseUnit: "",
+      productName: "",
+      unit: "",
       remark: "",
     },
     rules: {
-      materialName: [
+      productName: [
         { required: true, message: "璇疯緭鍏�", trigger: "blur" },
         { max: 20, message: "浜у搧鍚嶇О涓嶈兘瓒呰繃20涓瓧绗�", trigger: "blur" },
       ],
       inventoryCategoryId: [
         { required: true, message: "璇烽�夋嫨", trigger: "change" },
       ],
-      baseUnit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+      unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     },
     modelForm: {
-      specification: "",
+      model: "",
       supplyType: "",
+      materialCode: "",
       id: null,
     },
     modelRules: {
-      specification: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+      model: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
       supplyType: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+      materialCode: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     },
     configForm: {
       configName: "",
@@ -424,29 +459,20 @@
   // 鏌ヨ浜у搧鏍�
   const getProductTreeList = () => {
     treeLoad.value = true;
-    productTreeList()
+    productTreeList({ type: 2 })
       .then(res => {
         // 杞崲鏂扮殑鏁版嵁鏍煎紡
         const newList = [];
         expandedKeys.value = [];
         for (const category of res.data) {
-          // 娣诲姞鍒嗙被鑺傜偣
+          // 娣诲姞鍒嗙被鑺傜偣锛堝彧杩斿洖涓�灞傛暟鎹紝涓嶅寘鍚瓙鑺傜偣锛�
           const categoryNode = {
             label: category.configName,
             id: category.configId,
             isLeaf: false,
-            children: category.materialList.map(item => ({
-              id: item.id,
-              isLeaf: true,
-              label: item.materialName,
-              inventoryCategoryId: item.inventoryCategoryId,
-              materialTypeId: item.materialTypeId,
-              remark: item.remark,
-              baseUnit: item.baseUnit,
-            })),
+            children: [], // 鍒濆鍖栦负绌烘暟缁勶紝鐐瑰嚮鏃跺啀鍔犺浇
           };
           newList.push(categoryNode);
-          expandedKeys.value.push(category.configName);
         }
         list.value = newList;
         treeLoad.value = false;
@@ -455,9 +481,64 @@
         treeLoad.value = false;
       });
   };
+  const searchFilter1 = () => {
+    getProductTreeList();
+  };
   // 杩囨护浜у搧鏍�
   const searchFilter = () => {
-    proxy.$refs.tree.filter(search.value);
+    if (!search.value) {
+      // 濡傛灉鎼滅储鍏抽敭瀛椾负绌猴紝閲嶆柊鍔犺浇鍘熷鏁版嵁
+      // getProductTreeList();
+      return;
+    }
+
+    treeLoad.value = true;
+    // 璋冪敤 productTreeListQuery 鎺ュ彛杩涜鎼滅储
+    productTreeListQuery({ productName: search.value })
+      .then(res => {
+        // 澶勭悊杩斿洖鐨勬暟鎹�
+        const newList = [];
+        if (res.data && res.data.length > 0) {
+          for (const category of res.data) {
+            for (const item of list.value) {
+              if (item.id == category.configId) {
+                item.children = (category.materialList || []).map(item => ({
+                  id: item.id,
+                  isLeaf: true,
+                  label: item.productName,
+                  inventoryCategoryId: item.inventoryCategoryId,
+                  materialTypeId: item.materialTypeId,
+                  remark: item.remark,
+                  unit: item.unit,
+                }));
+                break;
+              }
+            }
+            // 杞崲鏁版嵁鏍煎紡
+            // const categoryNode = {
+            //   label: category.configName,
+            //   id: category.configId,
+            //   isLeaf: false,
+            //   children: (category.materialList || []).map(item => ({
+            //     id: item.id,
+            //     isLeaf: true,
+            //     label: item.productName,
+            //     inventoryCategoryId: item.inventoryCategoryId,
+            //     materialTypeId: item.materialTypeId,
+            //     remark: item.remark,
+            //     unit: item.unit,
+            //   })),
+            // };
+            // newList.push(categoryNode);
+          }
+        }
+        // 浣跨敤 el-tree 鐨勫唴缃繃婊ゅ姛鑳芥悳绱�
+        proxy.$refs.tree.filter(search.value);
+        treeLoad.value = false;
+      })
+      .catch(err => {
+        treeLoad.value = false;
+      });
   };
   // 鎵撳紑浜у搧寮规
   const openProDia = (type, data) => {
@@ -465,18 +546,18 @@
     productDia.value = true;
     // 閲嶇疆琛ㄥ崟
     form.value = {
-      materialName: "",
+      productName: "",
       inventoryCategoryId: null,
-      baseUnit: "",
+      unit: "",
       remark: "",
       materialTypeId: null,
     };
     console.log(data);
     if (type === "edit" && data) {
       // 缂栬緫妯″紡锛屽洖濉暟鎹�
-      form.value.materialName = data.label || "";
+      form.value.productName = data.label || "";
       form.value.inventoryCategoryId = data.inventoryCategoryId || null;
-      form.value.baseUnit = data.baseUnit || "";
+      form.value.unit = data.unit || "";
       form.value.remark = data.remark || "";
       form.value.materialTypeId = data.materialTypeId || null;
       form.value.id = data.id || null;
@@ -505,15 +586,17 @@
     modelOperationType.value = type;
     modelDia.value = true;
     // 閲嶇疆鎵�鏈夊瓧娈�
-    modelForm.value.specification = "";
+    modelForm.value.model = "";
     modelForm.value.supplyType = "";
     modelForm.value.id = null;
+    modelForm.value.materialCode = null;
 
     if (type === "edit" && data) {
       // 缂栬緫妯″紡锛屽洖濉暟鎹�
-      modelForm.value.specification = data.specification || "";
+      modelForm.value.model = data.model || "";
       modelForm.value.supplyType = data.supplyType || "";
-      modelForm.value.id = data.skuId || null;
+      modelForm.value.id = data.id || null;
+      modelForm.value.materialCode = data.materialCode || null;
     }
   };
   // 鎻愪氦浜у搧鍚嶇О淇敼
@@ -524,8 +607,8 @@
         // const params = {
         //   materialTypeId: null,
         //   inventoryCategoryId: form.value.inventoryCategoryId,
-        //   materialName: form.value.materialName,
-        //   baseUnit: form.value.baseUnit,
+        //   productName: form.value.productName,
+        //   unit: form.value.unit,
         //   remark: form.value.remark,
         // };
 
@@ -647,8 +730,35 @@
   };
   // 閫夋嫨浜у搧
   const handleNodeClick = (val, node, el) => {
-    // 鐐瑰嚮闈炲彾瀛愯妭鐐规椂锛屼笉鎵ц浠ヤ笅閫昏緫
+    // 鐐瑰嚮闈炲彾瀛愯妭鐐规椂锛屽姞杞藉瓙鑺傜偣鏁版嵁
     if (!val.isLeaf) {
+      // 璋冪敤 productTreeListQuery 鎺ュ彛鑾峰彇瀛愯妭鐐规暟鎹�
+      // treeLoad.value = true;
+      productTreeListQuery({ materialTypeId: val.id })
+        .then(res => {
+          // 澶勭悊杩斿洖鐨勬暟鎹�
+          if (res.data && res.data.length > 0) {
+            const materialList = res.data[0].materialList || [];
+            // 杞崲瀛愯妭鐐规暟鎹牸寮�
+            const children = materialList.map(item => ({
+              id: item.id,
+              isLeaf: true,
+              label: item.productName,
+              inventoryCategoryId: item.inventoryCategoryId,
+              materialTypeId: item.materialTypeId,
+              remark: item.remark,
+              unit: item.unit,
+            }));
+            // 鏇存柊鑺傜偣鐨勫瓙鑺傜偣
+            val.children = children;
+            // 灞曞紑鑺傜偣
+            node.expanded = true;
+          }
+          // treeLoad.value = false;
+        })
+        .catch(err => {
+          // treeLoad.value = false;
+        });
       return;
     }
     // 鍒ゆ柇鏄惁涓哄彾瀛愯妭鐐�
@@ -665,8 +775,9 @@
       if (valid) {
         // 鏋勫缓鎻愪氦鍙傛暟
         const params = {
-          materialId: currentId.value,
-          specification: modelForm.value.specification,
+          productId: currentId.value,
+          model: modelForm.value.model,
+          materialCode: modelForm.value.materialCode,
           supplyType: modelForm.value.supplyType,
         };
         if (modelOperationType.value === "add") {
@@ -699,16 +810,26 @@
   };
 
   // 鏌ヨ瑙勬牸鍨嬪彿
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getModelList();
+  };
   const getModelList = () => {
     if (!currentId.value) {
       return;
     }
     tableLoading.value = true;
     modelListPage({
-      materialId: currentId.value,
+      productId: currentId.value,
+      current: page.current,
+      size: page.size,
+      model: model.value,
+      materialCode: materialCode.value,
     }).then(res => {
       console.log("res", res);
-      tableData.value = res.data;
+      tableData.value = res.data.records || [];
+      page.total = res.data.total;
       tableLoading.value = false;
     });
   };
@@ -716,7 +837,7 @@
   const handleDelete = () => {
     let ids = [];
     if (selectedRows.value.length > 0) {
-      ids = selectedRows.value.map(item => item.skuId);
+      ids = selectedRows.value.map(item => item.id);
     } else {
       proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
       return;

--
Gitblit v1.9.3