menuTree.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <div>
  3. <el-tree
  4. :data="menuList"
  5. show-checkbox
  6. default-expand-all
  7. node-key="permissionId"
  8. ref="tree"
  9. highlight-current
  10. :props="defaultProps"
  11. >
  12. </el-tree>
  13. </div>
  14. </template>
  15. <script>
  16. import { getAllMenu } from "@/api/system.js";
  17. import { checkListFn, getcheckListFn } from "@/utils/getMenu.js";
  18. export default {
  19. props: {
  20. treeObj: {
  21. type: Object,
  22. required: true,
  23. },
  24. },
  25. data() {
  26. return {
  27. menuList: [],
  28. defaultProps: {
  29. children: "children",
  30. label: "permissionName",
  31. },
  32. };
  33. },
  34. watch: {
  35. treeObj: {
  36. handler(newVal) {
  37. this.updateTreeCheckState(newVal.checkList);
  38. },
  39. deep: true,
  40. immediate: true,
  41. },
  42. },
  43. created() {
  44. this.getMenuList();
  45. },
  46. mounted() {
  47. this.updateTreeCheckState(this.treeObj.checkList);
  48. },
  49. methods: {
  50. getMenuList() {
  51. getAllMenu().then((res) => {
  52. this.menuList = res.data;
  53. });
  54. },
  55. getCheckTreeKey() {
  56. const result = getcheckListFn(
  57. this.$refs.tree.getCheckedKeys(),
  58. this.menuList
  59. );
  60. return {
  61. permissionIds: [...new Set(result)].join(","),
  62. roleId: this.treeObj.roleId,
  63. };
  64. },
  65. updateTreeCheckState(checkList) {
  66. if (this.$refs.tree) {
  67. this.$refs.tree.setCheckedKeys(checkListFn(checkList));
  68. }
  69. },
  70. },
  71. };
  72. </script>
  73. <style scoped lang="scss">
  74. .el-tree {
  75. height: 300px;
  76. overflow: hidden;
  77. overflow-y: auto;
  78. }
  79. </style>