ZaiZai 2 years ago
parent
commit
0f4fdab63b
3 changed files with 49 additions and 9 deletions
  1. 45 4
      components/hc-tree/hc-tree.vue
  2. 1 1
      components/hc-tree/tree-node.vue
  3. 3 4
      pages/image/position.vue

+ 45 - 4
components/hc-tree/hc-tree.vue

@@ -19,8 +19,9 @@
 </template>
 
 <script setup>
-import {onMounted, ref, watch} from 'vue'
-import {getArrValue} from "js-fast-way";
+import {getCurrentInstance, nextTick, onMounted, ref, watch} from 'vue'
+import {getArrValue, isNullES} from "js-fast-way";
+const instance = getCurrentInstance().proxy
 
 //参数
 const props = defineProps({
@@ -155,6 +156,25 @@ const setLazyLoad = (data, arr) => {
         if (data.level === 0) {
             nodeData.value = newNodeData
         }
+        //节点自动展开的处理
+        const keys = getArrValue(AutoExpandKeys.value)
+        if(keys.length > 0 && (keys.length - 1) === data.level) {
+            const item = newNodeData.find(item => item.key === keys[data.level])
+            if(!isNullES(item)) {
+                nextTick(() => {
+                    instance.treeModule.treeNodeClick('tree-' + item.key)
+                })
+            }
+        }
+        //如果没有自动展开的,那么自动展开第一个节点
+        if (keys.length <= 0 && data.level === 0) {
+            const item = newNodeData.length > 0 ? newNodeData[0] : {}
+            if(!isNullES(item)) {
+                nextTick(() => {
+                    instance.treeModule.treeNodeClick('tree-' + item.key)
+                })
+            }
+        }
     }
 }
 
@@ -178,9 +198,20 @@ const ifCheckData = (data, item) => {
 }
 
 //树节点被点击
-const treeNodeTap = (item) => {
+const treeNodeTap = async (item) => {
     currentNodeKey.value = item.key
-    emit('nodeTap', item)
+    let autoKeysArr = []
+    await getNodeExpandKeys(item, autoKeysArr)
+    const autoKeys = autoKeysArr.reverse()
+    emit('nodeTap', item, autoKeys)
+}
+
+//处理自动展开的节点KEY
+const getNodeExpandKeys = async (item, newKeys) => {
+    if (item.key && item.level > 0) {
+        newKeys.push(item.key)
+        await getNodeExpandKeys(item.parentNodes, newKeys)
+    }
 }
 
 //获取选中的key
@@ -221,6 +252,16 @@ defineExpose({
 })
 </script>
 
+<script module="treeModule" lang="renderjs">
+export default {
+    methods: {
+        treeNodeClick(id) {
+            document.getElementById(id).click();
+        }
+    }
+}
+</script>
+
 <style lang="scss">
 @import "./style.scss";
 </style>

+ 1 - 1
components/hc-tree/tree-node.vue

@@ -1,6 +1,6 @@
 <template>
     <view class="hc-tree-node" :class="[nodeItem.level > 1 ? 'pl': '']">
-        <view class="content-bar" :class="currentNodeKey===nodeItem.key?'current-node-key':''" @click="nodeTap(nodeItem)">
+        <view class="content-bar" :id="'tree-' + nodeItem.key" :class="currentNodeKey===nodeItem.key?'current-node-key':''" @click="nodeTap(nodeItem)">
             <view class="expand-icon" @click.stop="expandTap(nodeItem)" :class="nodeItem.isExpand?'is-expanded':''">
                 <text class="i-ri-arrow-right-s-fill" v-if="!nodeItem.isLeaf"/>
             </view>

+ 3 - 4
pages/image/position.vue

@@ -70,9 +70,7 @@ onHide(() => {
 })
 
 //全部树
-const AllExpandKey = ref([
-    '1644218999308812288'
-])
+const AllExpandKey = ref([])
 const getAllLoad = async (node, resolve) => {
     const { contractType } = contractInfo.value
     const { id, contractIdRelation } = getObjValue(node.data)
@@ -89,7 +87,8 @@ const getAllLoad = async (node, resolve) => {
 
 //树节点被点击
 const treeItem = ref({})
-const nodeAllTap = ({data}) => {
+const nodeAllTap = ({data},key) => {
+    AllExpandKey.value = key
     if (data?.notExsitChild) {
         treeItem.value = getObjValue(data);
     } else {