hcong
2024-11-08 d7d7da5c09340eafcd2e2c672e6b2c001a4cc0be
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
<template>
  <!-- 列出表头的树状结构 -->
  <el-tree
  class="tree"
    ref="tree"
    :props="headTreeProps"
    :data="copyTableHeader"
    node-key="id"
    show-checkbox
    :default-checked-keys="defaultCheckedKeys"
    @check="check"
  />
</template>
<script>
import { useCloned } from '@vueuse/core';
import tableCol from '../js/tableCol';
export default {
  computed: {
    defaultCheckedKeys() {
      if (this.copyTableHeader.length == 0) {
        this.tableHeaderCopy()
      }
      let result = this.collectLabels(this.copyTableHeader);
      console.log("resultsss", result);
      
      return result
    }
  },
  mounted() {
    this.tableHeaderCopy()
  },
  data() {
    return {
      copyTableHeader: [],
      headTreeProps: {
        children: 'children',
        label: 'label',
        disabled: 'disabled'
      }
    };
  },
  props: {
    // 多级表头的数据
    tableHeader: {
      type: Array,
      required: true
    }
  },
  methods: {
    getChangedHeaders() {
      return this.copyTableHeader
    },
    tableHeaderCopy() {
      this.copyTableHeader = useCloned(this.tableHeader).cloned.value
    },
    collectLabels(nodes) {
      let labels = [];
 
      function traverseNodes(nodes) {
        nodes.forEach((node) => {
          if (!('hidden' in node) || !node.hidden) {
            labels.push(node.id);
          }
 
          // 如果当前节点有子节点,递归调用遍历函数
          if (node.children && node.children.length > 0) {
            traverseNodes(node.children);
          }
        });
      }
 
      traverseNodes(nodes); // 开始递归遍历
 
      return labels; // 返回收集到的 labels 数组
    },
    check(checkedNode, checkedKeys, halfCheckedNodes, halfCheckedKeys) {
      checkedNode.hidden = !checkedNode.hidden;
      this.$refs.tree.updateKeyChildren(checkedNode.id, checkedNode);
    },
  }
};
</script>
<style scoped>
.tree {
  margin-left: -16.5px;
  display: flex !important;
  width: 100% !important;
  flex-flow: row wrap !important;
}
</style>