PersonGroupExhibitionDrawer.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <el-drawer :title="title" v-model="drawerOpened" destroy-on-close>
  3. <div class="drawer-content">
  4. <div class="export-button-wrapper">
  5. <el-button class="export-button" type="primary" @click="handleExport">导出分组名单</el-button>
  6. </div>
  7. <el-table :data="personList" style="width: 100%" height="600">
  8. <el-table-column prop="staffNo" label="工号" show-overflow-tooltip />
  9. <el-table-column prop="realname" label="姓名" show-overflow-tooltip />
  10. <el-table-column prop="deptName" label="部门" show-overflow-tooltip>
  11. <template #default="{ row }">
  12. {{ row.deptName ? row.deptName : '--' }}
  13. </template>
  14. </el-table-column>
  15. <el-table-column prop="jobName" label="岗位" show-overflow-tooltip>
  16. <template #default="{ row }">
  17. {{ row.jobName ? row.jobName : '--' }}
  18. </template>
  19. </el-table-column>
  20. </el-table>
  21. </div>
  22. </el-drawer>
  23. </template>
  24. <script setup lang="ts">
  25. import { ref } from 'vue';
  26. import { ElMessage } from 'element-plus';
  27. import { downloadByData } from '@/utils/file/download';
  28. import { PersonGroupItem, PersonGroupListItem } from '@/types/person-group/type';
  29. import { queryUserGroupDetail, exportUserGroupList } from '@/api/system/person-group';
  30. defineProps<{
  31. title: string;
  32. }>();
  33. const drawerOpened = ref(false);
  34. const userGroupId = ref<number>(0);
  35. const personList = ref<PersonGroupItem[]>([]);
  36. const open = async (row: PersonGroupListItem) => {
  37. userGroupId.value = row.id;
  38. const res = await queryUserGroupDetail(row.id);
  39. personList.value = res.userList;
  40. drawerOpened.value = true;
  41. };
  42. // 导出
  43. const handleExport = () => {
  44. exportUserGroupList(userGroupId.value).then(async (responnse) => {
  45. if (!responnse) {
  46. throw new Error('下载文件失败');
  47. }
  48. downloadByData(responnse, '导出分组名单.xlsx');
  49. ElMessage.success('下载文件成功');
  50. });
  51. };
  52. defineExpose({
  53. open,
  54. });
  55. </script>
  56. <style lang="scss" scoped>
  57. .drawer-content {
  58. display: flex;
  59. flex-direction: column;
  60. height: 100%;
  61. }
  62. .export-button-wrapper {
  63. position: sticky;
  64. top: 0;
  65. z-index: 10;
  66. background: #fff;
  67. margin-bottom: 20px;
  68. display: flex;
  69. justify-content: flex-end;
  70. }
  71. :deep(.el-table) {
  72. flex: 1;
  73. overflow: auto;
  74. }
  75. </style>