MenuSettings.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <script setup lang="ts">
  2. import {onMounted, ref} from "vue";
  3. import {deleteMenuSettings, getMenuSettings, IntergrationMenu} from "@/api/settings/menu-settings";
  4. import {ElButton, ElButtonGroup} from "element-plus";
  5. import Dialog from "@/views/settings/menu-settings/dialog.vue";
  6. import {CyMessageBox} from "@/components/cy/message-box";
  7. import {useCompRef} from "@/utils/useCompRef";
  8. const menuTreeData = ref<IntergrationMenu[]>([])
  9. const dialogRef = useCompRef(Dialog)
  10. function modify(row) {
  11. dialogRef.value!.openDialog(row)
  12. }
  13. async function loadingData() {
  14. menuTreeData.value = await getMenuSettings()
  15. }
  16. async function delById(id: number) {
  17. await CyMessageBox.confirm({
  18. message: "是否删除页面",
  19. type: "delete",
  20. })
  21. await deleteMenuSettings(id);
  22. loadingData();
  23. }
  24. function addRouterClick(row: IntergrationMenu | null = null) {
  25. let cascaders = []
  26. if (row !== null) {
  27. if (row.parentId === null) {
  28. cascaders = [row.id];
  29. } else {
  30. if (row.type === 1) {
  31. cascaders = [...row.cascaders, row.id];
  32. } else {
  33. cascaders = [...row.cascaders];
  34. }
  35. }
  36. }
  37. // @ts-ignore
  38. dialogRef.value!.openDialog({
  39. cascaders: cascaders,
  40. children: [],
  41. completePath: "",
  42. component: "",
  43. icon: "",
  44. id: null,
  45. mainCard: false,
  46. mainOverflowAuto: false,
  47. metaHideTabs: false,
  48. metaPassRule: false,
  49. metaShowMenu: false,
  50. metaTitle: "",
  51. name: "",
  52. parentId: row?.id,
  53. path: "",
  54. pathParams: "",
  55. redirect: "",
  56. sort: 0,
  57. type: 0
  58. });
  59. }
  60. onMounted(() => {
  61. loadingData()
  62. })
  63. </script>
  64. <template>
  65. <vxe-table
  66. border="inner"
  67. height="auto"
  68. show-overflow
  69. :row-config="{isHover: true, useKey: true}"
  70. :column-config="{resizable: true}"
  71. :tree-config="{ rowField: 'id', parentField: 'parentId', showLine: true}"
  72. :data="menuTreeData">
  73. <vxe-column field="metaTitle" title="标题" tree-node>
  74. <template #default="{row}">
  75. <span :class="row.icon"></span>
  76. {{ row.metaTitle }}
  77. </template>
  78. </vxe-column>
  79. <vxe-column field="path" title="路径"></vxe-column>
  80. <vxe-column field="component" title="组件路径"></vxe-column>
  81. <vxe-column title="操作" fixed="right" width="220">
  82. <template #header>
  83. <el-button
  84. type="primary"
  85. @click="addRouterClick()"
  86. >
  87. 新增
  88. </el-button>
  89. </template>
  90. <template #default="{row}">
  91. <el-button-group>
  92. <el-button text type="primary" @click="addRouterClick(row)">新增</el-button>
  93. <el-button text type="primary" @click="modify(row)">修改</el-button>
  94. <el-button text type="primary" @click="delById(row.id)">删除</el-button>
  95. </el-button-group>
  96. </template>
  97. </vxe-column>
  98. </vxe-table>
  99. <Dialog :cascaderData="menuTreeData"
  100. @saveCallback="loadingData()"
  101. ref="dialogRef"/>
  102. </template>
  103. <style lang="scss">
  104. .no_el-table {
  105. .cell {
  106. padding: 0 16px;
  107. color: black;
  108. }
  109. .el-table__cell {
  110. padding: 12px 0;
  111. }
  112. }
  113. </style>