ソースを参照

关联工程部位搜索树修改

duy 2 年 前
コミット
0490e68403

+ 45 - 2
src/views/tentative/detect/components/DivisionTree.vue

@@ -1,4 +1,5 @@
 <template>
+  
     <ElTree 
     class="hc-tree-node tree-line" 
     ref="ElTreeRef" 
@@ -13,6 +14,7 @@
      :default-checked-keys="defaultCheckarr"
      :default-expand-all="defaultExpandAll"
      v-loading="divisionLoading"
+    :filter-node-method="filterNode"
     >
         <template #default="{ node, data }">
             <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
@@ -23,7 +25,7 @@
 </template>
 
 <script setup>
-import { ref , watch} from "vue";
+import { ref , watch,nextTick} from "vue";
 //参数
 const props = defineProps({
     datas: {
@@ -52,15 +54,36 @@ const props = defineProps({
     divisionLoading:{
         type:Boolean,
         default:false
+    },
+    linksRelateSearchTreeVal:{
+        type: String,
+        default: ''
     }
 })
+const linksRelateSearchTreeValInfo=ref('')
 //监听
 watch(() => [
     props.divisionLoading,
+    props.linksRelateSearchTreeVal,
    
-], ([divisionLoading]) => {
+], ([divisionLoading,LinksRelateSearchTreeVal]) => {
    isdivisionLoading.value=divisionLoading
+   linksRelateSearchTreeValInfo.value=LinksRelateSearchTreeVal
 })
+watch(linksRelateSearchTreeValInfo, (val) => {
+    if(val){
+        nextTick(()=> {
+          ElTreeRef?.value.filter(val)
+        }) 
+    }else if(!val.length){
+        
+    }
+   
+},
+
+{immediate:true}
+
+)
 //变量
 const ElTreeRef = ref(null)
 const isdivisionLoading=ref(props.divisionLoading)
@@ -81,6 +104,26 @@ const ElTreeClick = async (data,node) => {
 const handleCheckChange = (data,checked,indeterminate,) => {
   emit('nodeCheck',ElTreeRef.value?.getCheckedNodes(false, false))
 }
+ const getReturnNode=(node,_array,value)=>{
+        let isPass = node.data &&  node.data.title && node.data.title.indexOf(value) !== -1;
+        isPass?_array.push(isPass):'';
+        if(!isPass && node.level!=1 && node.parent){
+          getReturnNode(node.parent,_array,value);
+        }
+ }
+const filterNode = (value, data,node) => {
+    if(!value){
+            return true;
+        }
+        let level = node.title;
+        let _array = [];//这里使用数组存储 只是为了存储值。
+        getReturnNode(node,_array,value);
+        let result = false;
+        _array.forEach((item)=>{
+            result = result || item;
+        });
+        return result;
+    }
 </script>
 
 <style lang="scss" scoped>

+ 44 - 20
src/views/tentative/detect/test-form.vue

@@ -83,21 +83,28 @@
                 <div class="hc-search-tree-val">
                     <el-input v-model="linksRelateSearchTreeVal" block size="large" placeholder="请输入名称关键词检索" clearable @keyup="searchTreeKeyUp">
                         <template #suffix>
-                            <HcIcon name="search-2" ui="text-xl"/>
+                            <HcIcon name="search-2" ui="text-xl"  @click="searchTreeClick"/>
                         </template>
                     </el-input>
                 </div>
                 <div class="hc-tree-scrollbar" v-loading="linksRelateTreeLoading" element-loading-text="获取数据中...">
                     <el-scrollbar>
                          <!-- <DivisionTree :datas="unmatchedTreeData" @nodeTap="divisionTreeClick" @nodeCheck="divisionTreeCheck" :defaultCheckarr="defaultCheckarrIds"/> -->
-                            <KeepAlive>
+                          
                             <template v-if="isSearchTree">
                                <DivisionTree :datas="searchTreeData" @nodeTap="divisionTreeClick" @nodeCheck="divisionTreeCheck" :defaultCheckarr="defaultCheckarrIds" :ElTreeProps="seaElTreeProps" :defaultExpandAll="true" :check-strictly="true" :divisionLoading="searchlinksRelateTreeLoading"/>
                             </template>
-                            <template v-else>
-                               <DivisionTree :datas="unmatchedTreeData" @nodeTap="divisionTreeClick" @nodeCheck="divisionTreeCheck" :defaultCheckarr="defaultCheckarrIds"  :check-strictly="true"  :divisionLoading="isdivisionLoading"/>
-                            </template>
-                        </KeepAlive>
+                            
+                               <DivisionTree 
+                               :datas="unmatchedTreeData" 
+                               @nodeTap="divisionTreeClick"
+                                @nodeCheck="divisionTreeCheck"
+                                 :defaultCheckarr="defaultCheckarrIds"  
+                                :check-strictly="true"  
+                                :divisionLoading="isdivisionLoading"
+                                :linksRelateSearchTreeVal="linksRelateSearchTreeVal"
+                                />
+                        
                     </el-scrollbar>
                 </div>
             </div>
@@ -146,7 +153,7 @@ import DivisionTree from "./components/DivisionTree.vue"
 import dataApi from "~api/tentative/detect/test";
 import divisionApi from "~api/data-fill/division";
 import queryApi from '~api/data-fill/query';
-import {getStoreData} from '~src/utils/storage'
+import {getStoreData,setStoreData} from '~src/utils/storage'
 import TestTree from "../material/components/TestTree.vue"
 import {getArrValue, getObjValue, getObjNullValue,isString} from "vue-utils-plus";
 import {getDictionary} from "~api/other";
@@ -332,6 +339,8 @@ const getContractInfoTreeApi = async () => {
     //判断状态
     if (!error && code === 200) {
         unmatchedTreeData.value = getArrValue(data['treeContractAll'])
+          setStoreData('unmatchedTreeData',  unmatchedTreeData.value)
+        
         defaultCheckarrIds.value=getArrValue(data['isSelectedStatus'])
         checkrelationId.value=getArrValue(data['isSelectedStatus'])
     } else {
@@ -356,6 +365,20 @@ const seaElTreeProps = ref({
     children: 'children'
 })
 const linksRelateSearchTreeVal = ref('')
+watch(linksRelateSearchTreeVal, (val) => {
+    if(!val.length){
+        nextTick(()=> {
+              unmatchedTreeData.value =getStoreData('unmatchedTreeData');
+            
+         
+        }) 
+    }
+   
+},
+
+{immediate:true}
+
+)
 const linksRelateTreeLoading = ref(false)
 const searchTreeData = ref([])
 const searchlinksRelateTreeLoading = ref(false)
@@ -368,20 +391,21 @@ const searchTreeKeyUp = (e) => {
 const isSearchTree = ref(false)
 const searchTreeClick = async () => {
     if (linksRelateSearchTreeVal.value) {
-        isSearchTree.value = true
+        // isSearchTree.value = true
         searchlinksRelateTreeLoading.value = true
-      const {error, code, data} = await queryApi.searchContractTree({
-            contractId: contractId.value,
-            queryValue: linksRelateSearchTreeVal.value
-        })
-        //判断状态
-        if (!error && code === 200) {
-            searchTreeData.value = getArrValue(data)
-            searchlinksRelateTreeLoading.value = false
-        } else {
-            searchlinksRelateTreeLoading.value = false
-            searchTreeData.value = []
-        }
+        searchlinksRelateTreeLoading.value = false
+    //   const {error, code, data} = await queryApi.searchContractTree({
+    //         contractId: contractId.value,
+    //         queryValue: linksRelateSearchTreeVal.value
+    //     })
+    //     //判断状态
+    //     if (!error && code === 200) {
+          
+    //         searchlinksRelateTreeLoading.value = false
+    //     } else {
+    //         searchlinksRelateTreeLoading.value = false
+    //         searchTreeData.value = []
+    //     }
     } else {
         searchlinksRelateTreeLoading.value = true
         isSearchTree.value = false