menu-tree.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <script setup lang="ts">
  2. import { ref, nextTick } from "vue";
  3. import { httpList } from "/@/api/system/menuOperator";
  4. import { ElTree } from "element-plus";
  5. import type { IMenuTree } from "../types";
  6. const defaultProps = {
  7. label: "menu_name",
  8. children: "child"
  9. };
  10. const emit = defineEmits(["treeSelectChange", "initTableData"]);
  11. const treeData = ref<Array<IMenuTree>>([]);
  12. const treeRef = ref<InstanceType<typeof ElTree>>(null);
  13. const defaultExpandedKeys = ref<Array<string>>([]);
  14. //获取菜单树列表
  15. async function initMenuList() {
  16. const { data: list } = await httpList({});
  17. treeData.value = list;
  18. const menu = list[0];
  19. const page = menu.child[0];
  20. defaultExpandedKeys.value = [menu.id];
  21. //默认选中节点
  22. nextTick(() => treeRef.value.setCurrentKey(page.id));
  23. emit("initTableData", page.id);
  24. }
  25. //选择节点
  26. function handleSelect(node) {
  27. emit("treeSelectChange", node);
  28. }
  29. initMenuList();
  30. </script>
  31. <template>
  32. <div
  33. class="max-w-280px w-[280px] h-full min-h-780px bg-white p-2 mt-5px mr-10px"
  34. >
  35. <div class="flex justify-between mb-1 font-bold">
  36. <h1>菜单列表</h1>
  37. </div>
  38. <el-tree
  39. ref="treeRef"
  40. accordion
  41. node-key="id"
  42. highlight-current
  43. :props="defaultProps"
  44. :data="treeData"
  45. :default-expanded-keys="defaultExpandedKeys"
  46. @current-change="handleSelect"
  47. />
  48. </div>
  49. </template>