MenuManage.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <div class="menu-manage">
  3. <div class="part-box">
  4. <el-button type="primary" size="mini" icon="el-icon-edit" @click="toAdd"
  5. >新增</el-button
  6. >
  7. </div>
  8. <div class="part-box part-box-pad part-box-border">
  9. <el-tree
  10. :data="menus"
  11. node-key="id"
  12. default-expand-all
  13. :expand-on-click-node="false"
  14. :props="defaultProps"
  15. >
  16. <span class="custom-tree-node" slot-scope="{ node, data }">
  17. <span
  18. ><i class="el-icon-s-check" v-if="data.type === 'LINK'"></i>
  19. {{ node.label }}</span
  20. >
  21. <span>
  22. <el-button
  23. v-if="data.type === 'MENU'"
  24. class="btn-table-icon"
  25. type="text"
  26. icon="icon icon-plus-act"
  27. @click="() => append(node, data)"
  28. title="新增"
  29. ></el-button>
  30. <el-button
  31. class="btn-table-icon"
  32. type="text"
  33. icon="icon icon-edit"
  34. @click="() => edit(node, data)"
  35. title="修改"
  36. ></el-button>
  37. <!-- <el-button
  38. class="btn-table-icon"
  39. type="text"
  40. icon="icon icon-delete"
  41. @click="() => remove(node, data)"
  42. title="删除"
  43. ></el-button> -->
  44. </span>
  45. </span>
  46. </el-tree>
  47. </div>
  48. <!-- ModifyMenu -->
  49. <modify-menu
  50. ref="ModifyMenu"
  51. :instance="curMenu"
  52. @confirm="getList"
  53. ></modify-menu>
  54. </div>
  55. </template>
  56. <script>
  57. import { menuList, deleteMenu } from "../api";
  58. import ModifyMenu from "../components/ModifyMenu";
  59. export default {
  60. name: "menu-manage",
  61. components: { ModifyMenu },
  62. data() {
  63. return {
  64. menus: [],
  65. curMenu: {},
  66. defaultProps: {
  67. label: "name"
  68. }
  69. };
  70. },
  71. created() {
  72. this.getList();
  73. },
  74. methods: {
  75. async getList() {
  76. this.menus = await menuList();
  77. },
  78. toAdd() {
  79. this.curMenu = {};
  80. this.$refs.ModifyMenu.open();
  81. },
  82. edit(node, data) {
  83. this.curMenu = {
  84. ...data,
  85. parentName: data.parentId && node.parent.data.name
  86. };
  87. this.$refs.ModifyMenu.open();
  88. },
  89. remove(node, data) {
  90. const name = node.parent.label
  91. ? `${node.parent.label}->${data.name}`
  92. : data.name;
  93. this.$confirm(`确定要删除【${name}】吗?`, "提示", {
  94. cancelButtonClass: "el-button--danger is-plain",
  95. confirmButtonClass: "el-button--primary",
  96. type: "warning"
  97. })
  98. .then(async () => {
  99. await deleteMenu(data.id);
  100. const parent = node.parent;
  101. const children = parent.data.children || parent.data;
  102. const index = children.findIndex(d => d.id === data.id);
  103. children.splice(index, 1);
  104. this.$message.success("删除成功!");
  105. })
  106. .catch(() => {});
  107. },
  108. append(node, data) {
  109. const sequences = node.parent.childNodes.map(item => item.sequence);
  110. const maxSequence = Math.max.apply(null, sequences) || 0;
  111. this.curMenu = {
  112. parentId: data.id,
  113. parentName: data.name,
  114. sequence: maxSequence + 1
  115. };
  116. this.$refs.ModifyMenu.open();
  117. }
  118. }
  119. };
  120. </script>