assetTree.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div class="tree-wrapper">
  3. <el-tree
  4. :data="treeList"
  5. :props="defaultProps"
  6. v-loading="treeLoading"
  7. :node-key="nodeKey"
  8. ref="tree"
  9. :highlight-current="true"
  10. :expand-on-click-node="false"
  11. @node-click="handleNodeClick"
  12. :default-expanded-keys="current && current.id ? [current.id] : []"
  13. >
  14. </el-tree>
  15. </div>
  16. </template>
  17. <script>
  18. import { getTreeByIds } from '@/api/classifyManage';
  19. export default {
  20. props: {
  21. defaultProps: {
  22. type: Object,
  23. default: function () {
  24. return {
  25. children: 'children',
  26. value: 'id',
  27. label: 'name'
  28. };
  29. }
  30. },
  31. // 初始请求treeList
  32. init: {
  33. type: Boolean,
  34. default: true
  35. },
  36. treeIds: {
  37. type: Array,
  38. default: []
  39. },
  40. nodeKey: {
  41. type: String,
  42. default: 'id'
  43. }
  44. },
  45. data() {
  46. return {
  47. treeList: [],
  48. treeLoading: false,
  49. current: {},
  50. currentKey: ''
  51. };
  52. },
  53. mounted() {
  54. if (this.init) {
  55. this.getTreeData();
  56. }
  57. },
  58. methods: {
  59. // 获取树结构数据
  60. getTreeData() {
  61. return new Promise(async (resolve) => {
  62. try {
  63. this.treeLoading = true;
  64. const res = await getTreeByIds({ ids: this.treeIds.join(',') });
  65. this.treeLoading = false;
  66. if (res?.code === '0') {
  67. this.treeList = res.data;
  68. this.$emit('setRootId', res.data[0]);
  69. this.$nextTick(() => {
  70. // 默认高亮第一级树节点
  71. if (this.treeList[0]) {
  72. this.setCurrentKey(this.treeList[0]);
  73. this.current = this.treeList[0];
  74. // 默认点击加载数据
  75. // const firstNode = document.querySelector('.el-tree-node');
  76. // firstNode.click();
  77. resolve(this.current);
  78. }
  79. });
  80. return this.treeList;
  81. }
  82. } catch (error) {
  83. console.log(error);
  84. }
  85. this.treeLoading = false;
  86. });
  87. },
  88. handleNodeClick(data, node) {
  89. this.$emit('handleNodeClick', data, node);
  90. },
  91. // 设置默认高亮行
  92. setCurrentKey(id) {
  93. this.currentKey = id;
  94. this.$refs.tree.setCurrentKey(this.currentKey);
  95. },
  96. // 获取树的选中状态
  97. getSelectList() {
  98. const selectList = this.$refs.tree.getCurrentNode();
  99. return selectList;
  100. }
  101. }
  102. };
  103. </script>
  104. <style lang="scss" scoped>
  105. .tree-wrapper {
  106. width: 100%;
  107. height: 100%;
  108. overflow: auto;
  109. :deep(.el-tree) {
  110. display: inline-block;
  111. min-width: 100%;
  112. }
  113. }
  114. </style>