selectable.vue 968 B

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