RoleUserTable.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <BasicDrawer @register="registerBaseDrawer" title="角色用户" width="800" destroyOnClose>
  3. <BasicTable @register="registerTable" :rowSelection="rowSelection" >
  4. <template #tableTitle>
  5. <a-button type="primary" @click="handleCreate"> 新增用户</a-button>
  6. <a-button type="primary" @click="handleSelect"> 已有用户</a-button>
  7. <a-dropdown v-if="checkedKeys.length > 0">
  8. <template #overlay>
  9. <a-menu>
  10. <a-menu-item key="1" @click="batchHandleDelete">
  11. <Icon icon="bx:bx-unlink"></Icon>
  12. 取消关联
  13. </a-menu-item>
  14. </a-menu>
  15. </template>
  16. <a-button>批量操作
  17. <Icon icon="ant-design:down-outlined"></Icon>
  18. </a-button>
  19. </a-dropdown>
  20. </template>
  21. <template #action="{ record }">
  22. <TableAction :actions="getTableAction(record)"/>
  23. </template>
  24. </BasicTable>
  25. <!--用户操作抽屉-->
  26. <UserDrawer @register="registerDrawer" @success="handleSuccess"/>
  27. <!--用户选择弹窗-->
  28. <UseSelectModal @register="registerModal" @select="selectOk"/>
  29. </BasicDrawer>
  30. </template>
  31. <script lang="ts" setup>
  32. import { ref, defineProps, watch, unref } from 'vue';
  33. import {BasicTable, useTable, TableAction} from '/src/components/Table';
  34. import { BasicDrawer,useDrawer, useDrawerInner } from '/src/components/Drawer';
  35. import {useModal} from '/src/components/Modal';
  36. import UserDrawer from '../../user/UserDrawer.vue';
  37. import UseSelectModal from './UseSelectModal.vue';
  38. import {userList, deleteUserRole, batchDeleteUserRole, addUserRole} from '../role.api';
  39. import {userColumns, searchUserFormSchema} from '../role.data';
  40. import {getUserRoles} from '../../user/user.api';
  41. const emit = defineEmits(['register','hideUserList']);
  42. const checkedKeys = ref<Array<string | number>>([]);
  43. const roleId = ref('');
  44. const [registerBaseDrawer, {setDrawerProps, closeDrawer}] = useDrawerInner(async (data) => {
  45. roleId.value = data.id
  46. setProps({searchInfo:{roleId:data.id}});
  47. reload()
  48. });
  49. //注册drawer
  50. const [registerDrawer, {openDrawer}] = useDrawer();
  51. //注册drawer
  52. const [registerModal, {openModal}] = useModal();
  53. const [registerTable, {reload, updateTableDataRecord,setProps}] = useTable({
  54. title: '用户列表',
  55. api: userList,
  56. columns: userColumns,
  57. formConfig: {
  58. labelWidth: 120,
  59. schemas: searchUserFormSchema,
  60. autoSubmitOnEnter:true,
  61. actionColOptions: { pull:1 }
  62. },
  63. striped: true,
  64. useSearchForm: true,
  65. showTableSetting: true,
  66. clickToRowSelect: false,
  67. bordered: true,
  68. showIndexColumn: false,
  69. tableSetting: {fullScreen: true},
  70. canResize: false,
  71. rowKey: 'id',
  72. actionColumn: {
  73. width: 180,
  74. title: '操作',
  75. dataIndex: 'action',
  76. slots: {customRender: 'action'},
  77. fixed: undefined,
  78. },
  79. });
  80. /**
  81. * 选择列配置
  82. */
  83. const rowSelection = {
  84. type: 'checkbox',
  85. columnWidth: 50,
  86. selectedRowKeys: checkedKeys,
  87. onChange: onSelectChange
  88. }
  89. /**
  90. * 选择事件
  91. */
  92. function onSelectChange(selectedRowKeys: (string | number)[], selectionRows) {
  93. checkedKeys.value = selectedRowKeys;
  94. }
  95. /**
  96. * 新增
  97. */
  98. function handleCreate() {
  99. openDrawer(true, {
  100. isUpdate: false,
  101. selectedroles: [roleId.value],
  102. isRole: true
  103. });
  104. }
  105. /**
  106. * 编辑
  107. */
  108. async function handleEdit(record: Recordable) {
  109. try {
  110. const userRoles = await getUserRoles({userid: record.id});
  111. if (userRoles && userRoles.length > 0) {
  112. record.selectedroles = userRoles;
  113. }
  114. } catch (e) {
  115. console.log(e)
  116. }
  117. openDrawer(true, {
  118. record,
  119. isUpdate: true,
  120. isRole: true,
  121. });
  122. }
  123. /**
  124. * 删除事件
  125. */
  126. async function handleDelete(record) {
  127. await deleteUserRole({userId: record.id, roleId: roleId.value}, reload);
  128. }
  129. /**
  130. * 批量删除事件
  131. */
  132. async function batchHandleDelete() {
  133. await batchDeleteUserRole({userIds: checkedKeys.value.join(','), roleId:roleId.value}, reload);
  134. }
  135. /**
  136. * 成功回调
  137. */
  138. function handleSuccess({isUpdate, values}) {
  139. isUpdate ? updateTableDataRecord(values.id, values) : reload();
  140. }
  141. /**
  142. * 选择已有用户
  143. */
  144. function handleSelect() {
  145. openModal(true);
  146. }
  147. /**
  148. * 添加已有用户
  149. */
  150. async function selectOk(val) {
  151. await addUserRole({roleId:roleId.value,userIdList:val},reload)
  152. }
  153. /**
  154. * 操作栏
  155. */
  156. function getTableAction(record) {
  157. return [
  158. {
  159. label: '编辑',
  160. onClick: handleEdit.bind(null, record),
  161. },
  162. {
  163. label: '取消关联',
  164. popConfirm: {
  165. title: '是否确认取消关联',
  166. confirm: handleDelete.bind(null, record),
  167. }
  168. }
  169. ]
  170. }
  171. </script>