default-state.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <template>
  2. <el-tree-v2 :data="data" :height="208" :props="props" show-checkbox :default-checked-keys="defaultCheckedKeys" :default-expanded-keys="defaultExpandedKeys" />
  3. </template>
  4. <script lang="ts" setup>
  5. import { ref } from 'vue'
  6. interface Tree {
  7. id: string
  8. label: string
  9. children?: Tree[]
  10. }
  11. const getKey = (prefix: string, id: number) => {
  12. return `${prefix}-${id}`
  13. }
  14. const createData = (maxDeep: number, maxChildren: number, minNodesNumber: number, deep = 1, key = 'node'): Tree[] => {
  15. let id = 0
  16. return Array.from({ length: minNodesNumber })
  17. .fill(deep)
  18. .map(() => {
  19. const childrenNumber = deep === maxDeep ? 0 : Math.round(Math.random() * maxChildren)
  20. const nodeKey = getKey(key, ++id)
  21. return {
  22. id: nodeKey,
  23. label: nodeKey,
  24. children: childrenNumber ? createData(maxDeep, maxChildren, childrenNumber, deep + 1, nodeKey) : undefined,
  25. }
  26. })
  27. }
  28. const props = {
  29. value: 'id',
  30. label: 'label',
  31. children: 'children',
  32. }
  33. const data = createData(4, 30, 40)
  34. const checkedKeys: string[] = []
  35. const expanedKeys: string[] = []
  36. for (const datum of data) {
  37. const children = datum.children
  38. if (children) {
  39. expanedKeys.push(datum.id)
  40. checkedKeys.push(children[0].id)
  41. break
  42. }
  43. }
  44. const defaultCheckedKeys = ref(checkedKeys)
  45. const defaultExpandedKeys = ref(expanedKeys)
  46. </script>