index.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <template>
  2. <div class="menuManagement-container">
  3. <el-divider content-position="left">
  4. 演示环境仅做基础功能展示,若想实现不同角色的真实菜单配置,需将settings.js路由加载模式改为all模式,由后端全面接管路由渲染与权限控制
  5. </el-divider>
  6. <el-row>
  7. <el-col :xs="24" :sm="24" :md="8" :lg="4" :xl="4">
  8. <el-tree
  9. :data="data"
  10. :props="defaultProps"
  11. node-key="id"
  12. :default-expanded-keys="['root']"
  13. @node-click="handleNodeClick"
  14. ></el-tree>
  15. </el-col>
  16. <el-col :xs="24" :sm="24" :md="16" :lg="20" :xl="20">
  17. <vab-query-form>
  18. <vab-query-form-top-panel :span="12">
  19. <el-button icon="el-icon-plus" type="primary" @click="handleEdit">
  20. 添加
  21. </el-button>
  22. </vab-query-form-top-panel>
  23. </vab-query-form>
  24. <el-table
  25. v-loading="listLoading"
  26. :data="list"
  27. :element-loading-text="elementLoadingText"
  28. row-key="path"
  29. border
  30. default-expand-all
  31. :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
  32. >
  33. <el-table-column
  34. show-overflow-tooltip
  35. prop="name"
  36. label="name"
  37. ></el-table-column>
  38. <el-table-column
  39. show-overflow-tooltip
  40. prop="path"
  41. label="路径"
  42. ></el-table-column>
  43. <el-table-column show-overflow-tooltip label="是否隐藏">
  44. <template #default="{ row }">
  45. <span>
  46. {{ row.hidden ? "是" : "否" }}
  47. </span>
  48. </template>
  49. </el-table-column>
  50. <el-table-column show-overflow-tooltip label="是否一直显示当前节点">
  51. <template #default="{ row }">
  52. <span>
  53. {{ row.alwaysShow ? "是" : "否" }}
  54. </span>
  55. </template>
  56. </el-table-column>
  57. <el-table-column
  58. show-overflow-tooltip
  59. prop="component"
  60. label="vue文件路径"
  61. ></el-table-column>
  62. <el-table-column
  63. show-overflow-tooltip
  64. prop="redirect"
  65. label="重定向"
  66. ></el-table-column>
  67. <el-table-column
  68. show-overflow-tooltip
  69. prop="meta.title"
  70. label="标题"
  71. ></el-table-column>
  72. <el-table-column show-overflow-tooltip label="图标">
  73. <template #default="{ row }">
  74. <span v-if="row.meta">
  75. <vab-icon
  76. v-if="row.meta.icon"
  77. :icon="['fas', row.meta.icon]"
  78. ></vab-icon>
  79. </span>
  80. </template>
  81. </el-table-column>
  82. <el-table-column show-overflow-tooltip label="是否固定">
  83. <template #default="{ row }">
  84. <span v-if="row.meta">
  85. {{ row.meta.affix ? "是" : "否" }}
  86. </span>
  87. </template>
  88. </el-table-column>
  89. <el-table-column show-overflow-tooltip label="是否无缓存">
  90. <template #default="{ row }">
  91. <span v-if="row.meta">
  92. {{ row.meta.noKeepAlive ? "是" : "否" }}
  93. </span>
  94. </template>
  95. </el-table-column>
  96. <el-table-column show-overflow-tooltip label="badge">
  97. <template #default="{ row }">
  98. <span v-if="row.meta">
  99. {{ row.meta.badge }}
  100. </span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column show-overflow-tooltip label="操作" width="200">
  104. <template #default="{ row }">
  105. <el-button type="text" @click="handleEdit(row)">编辑</el-button>
  106. <el-button type="text" @click="handleDelete(row)">删除</el-button>
  107. </template>
  108. </el-table-column>
  109. </el-table>
  110. </el-col>
  111. </el-row>
  112. <edit ref="edit" @fetch-data="fetchData"></edit>
  113. </div>
  114. </template>
  115. <script>
  116. import { getRouterList as getList } from "@/api/router";
  117. import { getTree, doDelete } from "@/api/menuManagement";
  118. import Edit from "./components/MenuManagementEdit";
  119. export default {
  120. name: "MenuManagement",
  121. components: { Edit },
  122. data() {
  123. return {
  124. data: [],
  125. defaultProps: {
  126. children: "children",
  127. label: "label",
  128. },
  129. list: [],
  130. listLoading: true,
  131. elementLoadingText: "正在加载...",
  132. };
  133. },
  134. async created() {
  135. const roleData = await getTree();
  136. this.data = roleData.data;
  137. this.fetchData();
  138. },
  139. methods: {
  140. handleEdit(row) {
  141. if (row.path) {
  142. this.$refs["edit"].showEdit(row);
  143. } else {
  144. this.$refs["edit"].showEdit();
  145. }
  146. },
  147. handleDelete(row) {
  148. if (row.id) {
  149. this.$baseConfirm("你确定要删除当前项吗", null, async () => {
  150. const { msg } = await doDelete({ ids: row.id });
  151. this.$baseMessage(msg, "success");
  152. this.fetchData();
  153. });
  154. }
  155. },
  156. async fetchData() {
  157. this.listLoading = true;
  158. const { data } = await getList();
  159. this.list = data;
  160. setTimeout(() => {
  161. this.listLoading = false;
  162. }, 300);
  163. },
  164. handleNodeClick(data) {
  165. this.fetchData();
  166. },
  167. },
  168. };
  169. </script>