post.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <PageWrapper>
  3. <el-card :bordered="false" class="mb-3 proCard">
  4. <el-space align="center">
  5. <el-input
  6. :style="{ width: '320px' }"
  7. v-model="params.postName"
  8. clearable
  9. placeholder="请输入岗位名称"
  10. @keyup.enter="reloadTable"
  11. />
  12. <el-button type="primary" @click="reloadTable">
  13. <template #icon>
  14. <el-icon>
  15. <SearchOutlined />
  16. </el-icon>
  17. </template>
  18. 查询
  19. </el-button>
  20. </el-space>
  21. </el-card>
  22. <el-card :bordered="false" class="proCard">
  23. <BasicTable
  24. :columns="columns"
  25. :request="loadDataTable"
  26. :row-key="(row) => row.postId"
  27. ref="basicTableRef"
  28. :actionColumn="actionColumn"
  29. @update:checked-row-keys="onCheckedRow"
  30. virtual-scroll
  31. >
  32. <template #tableTitle>
  33. <el-space align="center">
  34. <el-button type="primary" @click="openCreateDrawer">
  35. <template #icon>
  36. <el-icon>
  37. <FileAddOutlined />
  38. </el-icon>
  39. </template>
  40. 添加
  41. </el-button>
  42. <!-- <el-button type="error" @click="openRemoveModal" :disabled="!rowKeys.length">
  43. <template #icon>
  44. <el-icon>
  45. <DeleteOutlined />
  46. </el-icon>
  47. </template>
  48. 删除
  49. </el-button> -->
  50. </el-space>
  51. </template>
  52. </BasicTable>
  53. </el-card>
  54. <CreateDrawer ref="createDrawerRef" :title="drawerTitle" :roleList="roleData" @change="reloadTable" />
  55. </PageWrapper>
  56. </template>
  57. <script lang="ts" setup>
  58. import { h, reactive, ref } from 'vue';
  59. import { ElMessage } from 'element-plus';
  60. import { PageWrapper } from '@/components/Page';
  61. import { BasicTable, TableAction, BasicColumn } from '@/components/Table';
  62. import { postList, deletePost } from '@/api/auth/post';
  63. import { FileAddOutlined, SearchOutlined } from '@vicons/antd';
  64. import CreateDrawer from './CreateDrawer.vue';
  65. import { columns } from './columns';
  66. const message = ElMessage;
  67. const basicTableRef = ref();
  68. const rowKeys = ref([]);
  69. const rowKeysName = ref([]);
  70. const tableData = ref();
  71. const createDrawerRef = ref();
  72. const drawerTitle = ref('添加岗位');
  73. const roleData = ref([]);
  74. const params = reactive({
  75. postName: '',
  76. });
  77. const actionColumn: BasicColumn = reactive({
  78. width: 150,
  79. title: '操作',
  80. prop: 'action',
  81. fixed: 'right',
  82. align: 'center',
  83. render(record) {
  84. return h(TableAction as any, {
  85. actions: [
  86. {
  87. label: '删除',
  88. isConfirm: true,
  89. popConfirm: {
  90. onConfirm: handleDelete.bind(null, record.row),
  91. title: '您确定要删除吗?',
  92. confirmButtonText: '确定',
  93. cancelButtonText: '取消',
  94. },
  95. },
  96. {
  97. label: '编辑',
  98. onClick: handleEdit.bind(null, record.row),
  99. },
  100. ],
  101. });
  102. },
  103. });
  104. const loadDataTable = async (res) => {
  105. const result = await postList({ ...params, ...res });
  106. tableData.value = result.list;
  107. return result;
  108. };
  109. function onCheckedRow(keys) {
  110. rowKeys.value = keys;
  111. rowKeysName.value = tableData.value
  112. .filter((item) => {
  113. return keys.includes(item.id);
  114. })
  115. .map((item) => {
  116. return item.username;
  117. })
  118. .join(',');
  119. }
  120. function reloadTable() {
  121. basicTableRef.value.reload();
  122. }
  123. function openCreateDrawer() {
  124. drawerTitle.value = '添加岗位';
  125. const { openDrawer } = createDrawerRef.value;
  126. openDrawer();
  127. }
  128. function handleEdit(record: Recordable) {
  129. console.log('点击了编辑', record);
  130. drawerTitle.value = '编辑岗位';
  131. const { openDrawer } = createDrawerRef.value;
  132. openDrawer(record.postId);
  133. }
  134. function handleDelete(record: Recordable) {
  135. deletePost({ id: record.postId }).then(() => {
  136. message.success('删除成功');
  137. reloadTable();
  138. });
  139. }
  140. </script>