basicTree.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <div class="basicTree">
  3. <a-tree :tree-data="treeDatas" show-icon default-expand-all v-model:selectedKeys="selectedKeys"
  4. v-model:expandedKeys="expandedKeys">
  5. <template #switcherIcon>
  6. <CaretDownOutlined />
  7. </template>
  8. </a-tree>
  9. </div>
  10. </template>
  11. <script lang="ts" setup>
  12. import { ref, reactive, defineProps, watch } from 'vue'
  13. import { CaretDownOutlined, } from '@ant-design/icons-vue';
  14. let props = defineProps({
  15. treeData: {
  16. type: Array,
  17. default: () => {
  18. return []
  19. }
  20. }
  21. })
  22. let treeDatas = ref([])//树节点数据
  23. //默认选中节点
  24. let selectedKeys = ref(['0-0-0'])
  25. //默认展开节点
  26. const expandedKeys = ref<string[]>(['1']);
  27. //递归遍历菜单数据
  28. function getMenuTree(menuList, pid) {
  29. let treeList = [];
  30. for (let i = 0; i < menuList.length; i++) {
  31. let menu = menuList[i];
  32. if (menu.pid === pid) {
  33. let tree = {
  34. key: menu.id,
  35. title: menu.name,
  36. children: getMenuTree(menuList, menu.id)
  37. };
  38. tree.children.length === 0 && delete tree.children;
  39. treeList.push(tree);
  40. }
  41. }
  42. return treeList;
  43. }
  44. watch(() => props.treeData, (newV, oldV) => {
  45. treeDatas.value.length = 0
  46. treeDatas.value = getMenuTree(newV, null)
  47. console.log(treeDatas.value, '树节点数据------')
  48. }, { immediate: true, deep: true })
  49. </script>
  50. <style lang="less" scoped>
  51. .basicTree {
  52. position: relative;
  53. width: 100%;
  54. height: 100%;
  55. padding: 15px 10px;
  56. box-sizing: border-box;
  57. }
  58. :deep(.zxm-tree) {
  59. color: #fff;
  60. background-color: transparent;
  61. letter-spacing: 1px;
  62. }
  63. :deep(.zxm-tree .zxm-tree-node-content-wrapper.zxm-tree-node-selected) {
  64. background-color: transparent;
  65. color: #02bbe9;
  66. }
  67. :deep(.zxm-tree .zxm-tree-node-content-wrapper:hover) {
  68. background-color: transparent;
  69. color: #02bbe9;
  70. }</style>