roleUser.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <template>
  2. <a-modal
  3. :width="800"
  4. v-model:visible="visible"
  5. title="角色用户"
  6. :keyboard="false"
  7. :mask-closable="false"
  8. :closable="false"
  9. cancel-text="关闭"
  10. :ok-button-props="{ style: { display: 'none' } }"
  11. >
  12. <div class="modal-search">
  13. <a-form
  14. ref="formRef"
  15. name="advanced_search"
  16. class="ant-advanced-search-form"
  17. :model="searchParamsState"
  18. >
  19. <a-row :gutter="24">
  20. <a-col :span="10">
  21. <a-form-item label="帐号" :label-col="{span:10}" name="loginID">
  22. <a-input v-model:value="searchParamsState.loginID" placeholder=""/>
  23. </a-form-item>
  24. </a-col>
  25. <a-col :span="10">
  26. <a-form-item label="用户名称" :label-col="{span:8}" name="name">
  27. <a-input v-model:value="searchParamsState.name" placeholder=""/>
  28. </a-form-item>
  29. </a-col>
  30. <a-col :span="4" style="text-align: left">
  31. <a-button type="primary" html-type="submit" @click="loadRoleUserList">查询</a-button>
  32. </a-col>
  33. </a-row>
  34. <a-row class="edit-operation">
  35. <a-col :span="24">
  36. <a-button type="primary" @click="addRoleUser">新增</a-button>
  37. <a-button @click="onDelete">删除</a-button>
  38. </a-col>
  39. </a-row>
  40. </a-form>
  41. <div class="search-result-list">
  42. <a-table :columns="columns" :data-source="roleUserList" :scroll="{ x: 500, y: 500 }" :pagination="pagination"
  43. :loading="formState.loading"
  44. @change="handleTableChange"
  45. :row-selection="{ selectedRowKeys: formState.selectedRowKeys, onChange: onSelectChange}"
  46. :row-key="record=>record.userID"
  47. bordered>
  48. </a-table>
  49. </div>
  50. </div>
  51. <a-modal v-model:visible="visibleUserModal" title="新增角色用户" cancel-text="取消" :width="700"
  52. @ok="saveRoleUser">
  53. <a-transfer
  54. v-model:target-keys="targetKeys"
  55. :data-source="userList"
  56. show-search
  57. :filter-option="(inputValue, item) => (item.name.indexOf(inputValue) !== -1 || item.loginId.indexOf(inputValue) !== -1)"
  58. :show-select-all="false"
  59. :list-style="{width: '600px',height: '640px', }"
  60. >
  61. <template
  62. #children="{
  63. direction,
  64. filteredItems,
  65. selectedKeys,
  66. disabled: listDisabled,
  67. onItemSelectAll,
  68. onItemSelect,
  69. }"
  70. >
  71. <a-table
  72. :scroll="{ x: 300, y: 500 }"
  73. :row-key="record=>record.userID"
  74. :row-selection="
  75. getRowSelection({
  76. disabled:true,
  77. selectedKeys,
  78. onItemSelectAll,
  79. onItemSelect,
  80. })
  81. "
  82. :columns="direction === 'left' ? leftColumns : rightColumns"
  83. :data-source="filteredItems"
  84. size="small"
  85. :custom-row="
  86. ({ key }) => ({
  87. onClick: () => {
  88. onItemSelect(key, !selectedKeys.includes(key));
  89. },
  90. })
  91. "
  92. :pagination="false"
  93. />
  94. </template>
  95. </a-transfer>
  96. </a-modal>
  97. </a-modal>
  98. </template>
  99. <script lang="ts">
  100. import {computed, createVNode, defineComponent, reactive, ref} from "vue";
  101. import type {TableColumnsType, TableProps} from "ant-design-vue";
  102. import type {FormInstance} from 'ant-design-vue';
  103. import {deleteRoleUser, getRoleUserList, getUserForSettingList, saveRoleUserList} from "@/api/system/role/index"
  104. import {message, Modal} from "ant-design-vue";
  105. import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
  106. type tableColumn = Record<string, string>;
  107. const leftTableColumns = [
  108. {
  109. dataIndex: 'name',
  110. title: '用户名',
  111. },
  112. {
  113. dataIndex: 'loginId',
  114. title: '帐号',
  115. },
  116. ];
  117. const rightTableColumns = [
  118. {
  119. dataIndex: 'name',
  120. title: '用户名',
  121. },
  122. {
  123. dataIndex: 'loginId',
  124. title: '帐号',
  125. }
  126. ];
  127. export default defineComponent({
  128. props: {
  129. loadData: {
  130. type: Function,
  131. default: null
  132. }
  133. },
  134. setup() {
  135. const roleUserList = ref([]);
  136. const userList = ref([]);
  137. const visible = ref<boolean>(false);
  138. const visibleUserModal = ref<boolean>(false);
  139. const confirmLoading = ref<boolean>(false);
  140. const searchParamsState = reactive({
  141. page: 1,
  142. rows: 20,
  143. loginID: '',
  144. name: '',
  145. roleID: ''
  146. });
  147. const userTypeID = ref<number>();
  148. const modalFormRef = ref<FormInstance>();
  149. const columns: TableColumnsType = [
  150. {
  151. title: '序号',
  152. align: 'center',
  153. width: 60,
  154. key: 'userID',
  155. customRender: item => `${searchParamsState.rows * (searchParamsState.page - 1) + item.index + 1}`
  156. },
  157. {title: '帐号', dataIndex: 'loginID', key: 'loginID', width: 150},
  158. {title: '用户名称', width: 150, dataIndex: 'name', key: 'name',},
  159. ];
  160. const formState = reactive({
  161. total: 0,
  162. selectedRowKeys: [],
  163. loading: false
  164. });
  165. const pagination = computed(() => ({
  166. total: formState.total,
  167. current: searchParamsState.page,
  168. pageSize: searchParamsState.rows,
  169. showSizeChanger: true
  170. }));
  171. const targetKeys = ref<string[]>();
  172. const leftColumns = ref<tableColumn[]>(leftTableColumns);
  173. const rightColumns = ref<tableColumn[]>(rightTableColumns);
  174. const getRowSelection = ({
  175. selectedKeys,
  176. onItemSelectAll,
  177. onItemSelect,
  178. }: Record<string, any>) => {
  179. return {
  180. onSelectAll(selected: boolean, selectedRows: any[]) {
  181. const treeSelectedKeys = selectedRows.map((record) => record.userID);
  182. onItemSelectAll(treeSelectedKeys, selected);
  183. /* console.log("当前选择的用户id集合",targetKeys.value);
  184. console.log("selectedKeys",selectedKeys);*/
  185. },
  186. onSelect(record: any, selected: boolean) {
  187. onItemSelect(record.userID, selected);
  188. /*console.log("当前userList",userList.value);
  189. console.log("当前选择的用户id集合",targetKeys.value);
  190. console.log("selectedKeys",selectedKeys);*/
  191. },
  192. selectedRowKeys: selectedKeys,
  193. };
  194. };
  195. const onSelectChange = (selectedRowKeys: any) => {
  196. formState.selectedRowKeys = selectedRowKeys;
  197. };
  198. const getUserList = () => {
  199. getUserForSettingList({userType: userTypeID.value, roleID: searchParamsState.roleID}).then((result: any) => {
  200. userList.value = result;
  201. });
  202. };
  203. const handleTableChange: TableProps['onChange'] = (
  204. pag: { pageSize: number; current: number }
  205. ) => {
  206. searchParamsState.page = pag.current
  207. loadRoleUserList();
  208. };
  209. const saveRoleUser = () => {
  210. saveRoleUserList(searchParamsState.roleID, targetKeys.value).then(() => {
  211. visibleUserModal.value = false;
  212. loadRoleUserList();
  213. });
  214. }
  215. const show = (roleID, userType) => {
  216. searchParamsState.roleID = roleID;
  217. userTypeID.value = userType;
  218. searchParamsState.loginID ='';
  219. searchParamsState.name ='';
  220. formState.selectedRowKeys = [];
  221. formState.total = 0;
  222. loadRoleUserList();
  223. visible.value = true;
  224. };
  225. const handleCancel = () => {
  226. visible.value = false;
  227. };
  228. const onDelete = () => {
  229. if (formState.selectedRowKeys.length <= 0) {
  230. message.warning('请选择需要删除的数据!');
  231. return false;
  232. }
  233. Modal.confirm({
  234. title: '确认删除选中角色用户?',
  235. icon: createVNode(ExclamationCircleOutlined),
  236. content: '',
  237. okText: '确认删除',
  238. okType: 'danger',
  239. okButtonProps: {},
  240. cancelText: '取消',
  241. onOk() {
  242. deleteRoleUser(searchParamsState.roleID, formState.selectedRowKeys).then(() => {
  243. loadRoleUserList();
  244. });
  245. },
  246. onCancel() {
  247. },
  248. });
  249. }
  250. const addRoleUser = () => {
  251. visibleUserModal.value = true;
  252. targetKeys.value = [];
  253. getUserList();
  254. }
  255. const loadRoleUserList = async function () {
  256. formState.loading = true;
  257. const result: any = await getRoleUserList(searchParamsState);
  258. roleUserList.value = result.list;
  259. formState.total = result.total;
  260. formState.loading = false;
  261. }
  262. return {
  263. visible,
  264. confirmLoading,
  265. modalFormRef,
  266. searchParamsState,
  267. columns,
  268. pagination,
  269. roleUserList,
  270. show,
  271. handleCancel,
  272. handleTableChange,
  273. onSelectChange,
  274. formState,
  275. onDelete,
  276. visibleUserModal,
  277. addRoleUser,
  278. saveRoleUser,
  279. userList,
  280. targetKeys,
  281. leftColumns,
  282. rightColumns,
  283. getRowSelection,
  284. loadRoleUserList
  285. };
  286. },
  287. created() {
  288. },
  289. })
  290. </script>