he wei
2025-04-03 c6a2d2debf161b987ff91c6ac9560d10fc98c54b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<script setup>
  import { ref, onMounted, reactive, nextTick } from "vue";
  import { getAreaTreeApi } from "@/api/area";
  import { formatAreaTree } from "@/utils/tree";
 
  const emit = defineEmits(["itemClick"]);
  const defaultProps = reactive({
    children: "children",
    label: "label",
  });
 
  const treeRef = ref();
  const data = ref([]);
  const defaultSelect = ref([1]);
 
  onMounted(() => {
    getAreaTree();
  });
 
  function handleNodeClick(data) {
    console.log(data);
    emit("itemClick", data);
  }
 
  async function getAreaTree() {
    try {
      const res = await getAreaTreeApi();
      let _data = [];
      if (res.code === 1 && res.data) {
        _data = res.data2;
      }
      console.log('_data', _data, '=============');
      
      const treeList = [];
      let ids = _data.map((v) => v.id);
      for (let i = 0; i < _data.length; i++) {
        formatAreaTree(_data[i], ids, treeList);
      }
      // console.log(_data, 'data');
      console.log(treeList, "treeList");
      data.value = treeList;
      await nextTick();
      // defaultSelect.value = [treeList[0].id]
      handleNodeClick(treeList[0]);
    } catch (e) {
      console.log(e);
    }
  }
 
  const collapseAll = () => {
    const nodes = treeRef.value.store.nodesMap;
    Object.values(nodes).forEach((node) => {
      if (node.level > 0) {
        // 排除根节点
        node.expanded = false;
      }
    });
    treeRef.value.store.updateExpandedKeys(); // 更新展开状态
  };
 
  const expandAll = () => {
    const nodes = treeRef.value.store.nodesMap;
    Object.values(nodes).forEach((node) => {
      if (node.level > 0) {
        // 排除根节点
        node.expanded = true;
      }
    });
    treeRef.value.store.updateExpandedKeys(); // 更新展开状态
  };
</script>
 
<template>
  <el-scrollbar>
    <el-button type="warning" size="small" @click="collapseAll">折叠全部</el-button>
    <el-button type="primary" size="small" @click="expandAll">展开全部</el-button>
    <el-tree
      style="max-width: 600px"
      ref="treeRef"
      :data="data"
      :props="defaultProps"
      node-key="id"
      :expand-on-click-node="false"
      :default-checked-keys="defaultSelect"
      @node-click="handleNodeClick"
    />
  </el-scrollbar>
</template>
 
<style scoped lang="less"></style>