index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <template>
  2. <a-card class="account-page-card">
  3. <Action :btn_text="'新建角色'" :btn_permission="'system:role:add'" @searchClick="searchClick" @resetClick="resetClick"
  4. @createClick="createClick" @sizeChange="tableSizeChange" @refreshClick="refreshClick"></Action>
  5. <DataTable :data="table_data" :columns="table_columns" row-key="roleId" :size="table_size" :loading="table_loading"
  6. :pagination="pagination_props" @pageChange="handlePageChange">
  7. <template #status="{ record }">
  8. <a-switch v-model="record.status" @change="statusChange(record)" checked-value="1" unchecked-value="0" />
  9. </template>
  10. <template #operationSlot="{ record }">
  11. <a-button v-hasPermi="'system:role:edit'" type="text" @click="handleEdit(record, true)">编辑</a-button>
  12. <a-button v-hasPermi="'system:role:permissionEdit'" type="text"
  13. @click="handlePermissionConfig(record, true)">权限配置</a-button>
  14. <a-button v-hasPermi="'system:role:deptEdit'" type="text"
  15. @click="handleDeptConfig(record, true)">部门配置</a-button>
  16. <a-popconfirm content="确定删除该条数据吗?" type="warning" @ok="handleDelete(record.roleId)">
  17. <a-button v-hasPermi="'system:role:delete'" type="text" status="warning">删除</a-button>
  18. </a-popconfirm>
  19. </template>
  20. </DataTable>
  21. </a-card>
  22. <Modal :visible.sync="edit_visible" @ok="modalSave" @cancel="handleEdit(null, false)"
  23. :title="is_edit_mode ? '编辑' : '新增'">
  24. <RoleForm :edit_form="edit_form" :is_edit_mode="is_edit_mode" />
  25. </Modal>
  26. <PermissionConfigModal :visible.sync="permission_config_visible" :menu_list="menu_list" :record="current_record"
  27. @ok="handlePermissionConfigSave" @cancel="handlePermissionConfig(null, false)" />
  28. <DeptConfigModal :visible.sync="dept_config_visible" :dept_list="dept_list" :record="current_record"
  29. @ok="handleDeptConfigSave" @cancel="handleDeptConfig(null, false)" />
  30. </template>
  31. <script setup>
  32. import { ref, reactive, onMounted, h } from 'vue';
  33. import { Message } from '@arco-design/web-vue';
  34. import DataTable from '../../../views/permission/DataTable.vue';
  35. import Action from '../../../views/permission/Action.vue';
  36. import Modal from '../Modal.vue';
  37. import RoleForm from './RoleForm.vue';
  38. import PermissionConfigModal from './PermissionConfigModal.vue';
  39. import DeptConfigModal from './DeptConfigModal.vue';
  40. import { hasPermission } from '../../../utils/permission';
  41. import { QueryRoleList, RoleStatusSwitch, DeleteRole, CreateRole, UpdateRole } from '../../../apis/permission/role';
  42. import { QueryResourceTree } from '../../../apis/permission/resource';
  43. import { QueryDeptTree } from '../../../apis/permission/common';
  44. const keywords = ref('');
  45. // 表格相关
  46. const table_data = ref([]);
  47. const table_columns = ref([
  48. { title: '序号', slotName: 'index' },
  49. { title: '角色名', dataIndex: 'roleName', titleSlotName: 'roleName' },
  50. { title: '状态', dataIndex: 'status', slotName: 'status' },
  51. { title: '操作', dataIndex: 'operation', slotName: 'operationSlot' }
  52. ]);
  53. const pagination_props = ref({
  54. total: 10,
  55. current: 1,
  56. pageSize: 12
  57. });
  58. const table_size = ref('medium');
  59. const table_loading = ref(false);
  60. // 编辑表单相关
  61. const edit_visible = ref(false);
  62. const is_edit_mode = ref(false);
  63. const edit_form = reactive({
  64. roleName: '',
  65. remark: ''
  66. });
  67. // 权限配置相关
  68. const permission_config_visible = ref(false);
  69. const menu_list = ref([]);
  70. // 部门配置相关
  71. const dept_config_visible = ref(false);
  72. const current_record = ref(null);
  73. const dept_list = ref([]);
  74. const gerRoleList = async () => {
  75. const params = {
  76. keyword: keywords.value,
  77. current: pagination_props.value.current,
  78. pageSize: pagination_props.value.pageSize
  79. };
  80. table_loading.value = true;
  81. const { code, data } = await QueryRoleList(params);
  82. if (code === 200) {
  83. pagination_props.value.total = data.total;
  84. table_data.value = data.rows;
  85. table_loading.value = false;
  86. } else {
  87. table_loading.value = false;
  88. }
  89. };
  90. const searchClick = (value) => {
  91. keywords.value = value;
  92. gerRoleList();
  93. };
  94. const resetClick = () => {
  95. keywords.value = '';
  96. gerRoleList();
  97. };
  98. const createClick = () => {
  99. edit_form.roleName = '';
  100. edit_form.remark = '';
  101. is_edit_mode.value = false;
  102. edit_visible.value = true;
  103. };
  104. const refreshClick = () => {
  105. console.log('刷新');
  106. };
  107. // 切换页码
  108. const handlePageChange = (current) => {
  109. pagination_props.value.current = current;
  110. gerRoleList();
  111. };
  112. // TODO功能 状态切换拦截
  113. const beforeStatusChange = async () => {
  114. await new Promise((resolve, reject) =>
  115. setTimeout(() => {
  116. resolve();
  117. }, 1000)
  118. );
  119. };
  120. // 用户状态切换
  121. const statusChange = async (record) => {
  122. const params = {
  123. roleId: record.roleId,
  124. status: record.status
  125. };
  126. const { code } = await RoleStatusSwitch(params);
  127. if (code === 200) {
  128. Message.success({
  129. title: '成功',
  130. content: '状态切换成功.'
  131. });
  132. }
  133. };
  134. const handleEdit = (record, visible) => {
  135. if (record) {
  136. edit_form.roleId = record.roleId;
  137. edit_form.roleName = record.roleName;
  138. edit_form.remark = record.remark;
  139. is_edit_mode.value = true;
  140. }
  141. edit_visible.value = visible;
  142. };
  143. // 权限配置
  144. const handlePermissionConfig = async (record, visible) => {
  145. if (record) {
  146. edit_form.roleId = record.roleId;
  147. current_record.value = record;
  148. }
  149. permission_config_visible.value = visible;
  150. };
  151. const handlePermissionConfigSave = async (checked_menu) => {
  152. permission_config_visible.value = false;
  153. const params = {
  154. roleId: edit_form.roleId,
  155. resources: checked_menu,
  156. editType: 2
  157. };
  158. const { code } = await UpdateRole(params);
  159. if (code === 200) {
  160. Message.success({
  161. title: '权限配置',
  162. content: '权限配置成功'
  163. });
  164. gerRoleList();
  165. }
  166. };
  167. // 部门配置
  168. const handleDeptConfig = async (record, visible) => {
  169. if (record) {
  170. edit_form.roleId = record.roleId;
  171. current_record.value = record;
  172. }
  173. dept_config_visible.value = visible;
  174. };
  175. const handleDeptConfigSave = async (dept_ids) => {
  176. dept_config_visible.value = false;
  177. const params = {
  178. roleId: edit_form.roleId,
  179. depts: dept_ids,
  180. editType: 3
  181. };
  182. const { code } = await UpdateRole(params);
  183. if (code === 200) {
  184. Message.success({
  185. title: '部门配置',
  186. content: '部门配置成功'
  187. });
  188. gerRoleList();
  189. }
  190. };
  191. // 删除用户
  192. const handleDelete = async (roleId) => {
  193. const { code } = await DeleteRole(roleId);
  194. if (code === 200) {
  195. Message.success({
  196. title: '删除用户',
  197. content: '删除成功'
  198. });
  199. gerRoleList();
  200. }
  201. };
  202. const modalSave = async () => {
  203. edit_visible.value = false;
  204. const data = {
  205. roleId: is_edit_mode.value ? edit_form.roleId : undefined,
  206. roleName: edit_form.roleName,
  207. editType: is_edit_mode.value ? 1 : undefined,
  208. remark: edit_form.remark
  209. };
  210. const apiCall = is_edit_mode.value ? UpdateRole : CreateRole;
  211. const { code } = await apiCall(data);
  212. if (code === 200) {
  213. const action = is_edit_mode.value ? '编辑' : '新增';
  214. Message.success({
  215. title: `${action}用户`,
  216. content: `${action}成功`
  217. });
  218. gerRoleList();
  219. }
  220. };
  221. const tableSizeChange = (size) => {
  222. table_size.value = size;
  223. };
  224. // 获取菜单树
  225. const getMenuTree = async () => {
  226. const {
  227. code,
  228. data: { rows }
  229. } = await QueryResourceTree();
  230. if (code === 200) {
  231. menu_list.value = rows;
  232. }
  233. };
  234. // 获取部门树
  235. const getDeptTree = async () => {
  236. const {
  237. code,
  238. data: { rows }
  239. } = await QueryDeptTree();
  240. if (code == 200) {
  241. dept_list.value = rows;
  242. }
  243. };
  244. onMounted(() => {
  245. if (hasPermission('system:role:list')) {
  246. gerRoleList();
  247. getMenuTree();
  248. getDeptTree();
  249. }
  250. });
  251. </script>
  252. <style lang="css" scoped>
  253. .account-page-card {
  254. height: calc(100% - 40px);
  255. }
  256. </style>