PersonGroup.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <template>
  2. <VerticalFlexLayout>
  3. <template #static>
  4. <Breadcrumb />
  5. </template>
  6. <div>
  7. <el-card shadow="never">
  8. <template #header>
  9. <el-button type="primary" @click="openEditDrawer()" v-permission="PERM_NOTICE.PERSONNEL_GROUP">
  10. <template #icon>
  11. <el-icon>
  12. <PlusOutlined />
  13. </el-icon>
  14. </template>
  15. 新建人员分组
  16. </el-button>
  17. </template>
  18. <el-table :data="personGroupList">
  19. <el-table-column label="分组名" prop="name" />
  20. <el-table-column label="分组描述" prop="description" />
  21. <el-table-column label="人员数量" prop="total" />
  22. <el-table-column label="创建人" prop="operatorName" />
  23. <el-table-column label="创建时间" prop="operationTime" />
  24. <el-table-column label="操作">
  25. <template #default="{ row }">
  26. <section class="actions">
  27. <el-button type="primary" link @click="openCheckDrawer(row)">查看</el-button>
  28. <el-button type="primary" link @click="openEditDrawer(row)" v-permission="PERM_NOTICE.PERSONNEL_GROUP">
  29. 编辑
  30. </el-button>
  31. <el-button type="primary" link @click="deleteGroup(row)" v-permission="PERM_NOTICE.PERSONNEL_GROUP">
  32. 删除
  33. </el-button>
  34. </section>
  35. </template>
  36. </el-table-column>
  37. </el-table>
  38. <section class="paginationPosition">
  39. <el-pagination
  40. background
  41. layout="total, sizes, prev, pager, next"
  42. :page-sizes="[10, 30, 50]"
  43. :total="total"
  44. v-model:page-size="personGroupListRequestParams.pageSize"
  45. v-model:current-page="personGroupListRequestParams.pageNumber"
  46. @change="queryPersonGroupList"
  47. />
  48. </section>
  49. <PersonGroupEditDrawer :title="drawerTitle" ref="editDrawerInstance" @submitted="onSubmit" />
  50. <PersonGroupExhibitionDrawer :title="drawerTitle" ref="exhibitionDrawerInstance" />
  51. </el-card>
  52. </div>
  53. </VerticalFlexLayout>
  54. </template>
  55. <script setup lang="ts">
  56. import { PlusOutlined } from '@vicons/antd';
  57. import { PersonGroupListItem } from '@/types/person-group/type';
  58. import { deleteUserGroup } from '@/api/system/person-group';
  59. import usePersonGroupListQuery from './hooks/usePersonGroupListQuery';
  60. import PersonGroupEditDrawer from './components/PersonGroupEditDrawer.vue';
  61. import { onMounted, ref } from 'vue';
  62. import PersonGroupExhibitionDrawer from './components/PersonGroupExhibitionDrawer.vue';
  63. import { ElMessage, ElMessageBox } from 'element-plus';
  64. import { PERM_NOTICE } from '@/types/permission/constants';
  65. import VerticalFlexLayout from '@/components/VerticalFlexLayout.vue';
  66. import Breadcrumb from '@/components/Breadcrumb.vue';
  67. const { personGroupListRequestParams, personGroupList, total, setRequestParams, queryPersonGroupList } =
  68. usePersonGroupListQuery();
  69. const drawerTitle = ref('');
  70. const editDrawerInstance = ref();
  71. const exhibitionDrawerInstance = ref();
  72. function openEditDrawer(row?: PersonGroupListItem) {
  73. drawerTitle.value = row ? '编辑人员分组' : '新建人员分组';
  74. editDrawerInstance.value?.open(row);
  75. }
  76. function openCheckDrawer(row: PersonGroupListItem) {
  77. drawerTitle.value = '查看人员分组';
  78. exhibitionDrawerInstance.value?.open(row);
  79. }
  80. function deleteGroup(row: PersonGroupListItem) {
  81. ElMessageBox.confirm('确认删除,删除后无法恢复,确认删除吗?', '提示', {
  82. confirmButtonText: '确定',
  83. cancelButtonText: '取消',
  84. customClass: 'customMessageBox--warn',
  85. })
  86. .then(() => {
  87. deleteUserGroup(row.id).then(() => {
  88. queryPersonGroupList();
  89. ElMessage.success('删除成功');
  90. });
  91. })
  92. .catch((e) => {
  93. ElMessage.error(e);
  94. });
  95. }
  96. const onSubmit = () => {
  97. queryPersonGroupList();
  98. };
  99. onMounted(() => {
  100. queryPersonGroupList();
  101. });
  102. </script>