index.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <app-view class="system-menu">
  3. <app-table ref="tableRef" :data="dataList" v-model:columns="columns" row-key="code" :selection="false">
  4. <template #header>
  5. <app-action-menu :menus="getAuthButtons(['system_menu_add'])" @click="openComponent" />
  6. <el-button type="primary" :icon="isRowExpansion ? 'FolderOpened' : 'Folder'" @click="tableExpandAll">
  7. <span v-if="isRowExpansion">全部收起</span>
  8. <span v-else>全部展开</span>
  9. </el-button>
  10. </template>
  11. <template #operate="{ row }">
  12. <app-action-menu :menus="getAuthButtons(['system_menu_edit', 'system_menu_delete'])" :record="row"
  13. @click="openComponent" linkButton />
  14. </template>
  15. </app-table>
  16. <component ref="componentRef" :is="asyncComponent" v-bind="{ selectedRow: activeMenu.record }"
  17. @closed="closeComponent" v-if="asyncComponent" />
  18. </app-view>
  19. </template>
  20. <script lang="ts" setup>
  21. import { ref } from 'vue'
  22. import { useDataTable } from '@/hooks/datatable'
  23. import { useMenu } from '@/hooks/menu'
  24. import { useActionMenu } from '@pc/components/modules/action-menu'
  25. import AppActionMenu from '@pc/components/modules/action-menu/index.vue'
  26. import AppTable from '@pc/components/base/table/index.vue'
  27. const { userRoutes } = useMenu()
  28. const { activeMenu, asyncComponent, getAuthButtons, openComponent, closeComponent } = useActionMenu<Model.UserRoutes>()
  29. const { dataList = userRoutes } = useDataTable<Model.UserRoutes>()
  30. const tableRef = ref()
  31. const isRowExpansion = ref(false)
  32. const columns = ref([
  33. { prop: 'title', label: '菜单', },
  34. { prop: 'code', label: '代码', },
  35. { prop: 'component', label: '组件', },
  36. { prop: 'icon', label: '图标', },
  37. { prop: 'operate', label: '操作', }
  38. ])
  39. // 展开或收起表格
  40. const tableExpandAll = () => {
  41. const table = tableRef.value.elTable
  42. isRowExpansion.value = !isRowExpansion.value
  43. const toggleRowExpansionAll = (data: Model.UserRoutes[]) => {
  44. data.forEach((item) => {
  45. table.toggleRowExpansion(item, isRowExpansion.value)
  46. if (item.children) {
  47. toggleRowExpansionAll(item.children)
  48. }
  49. })
  50. }
  51. toggleRowExpansionAll(dataList.value)
  52. }
  53. </script>
  54. <style lang="less">
  55. @import './index.less';
  56. </style>