default-state.vue 1.4 KB

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