From f893b9efc98874730de0a9e2a180d4932f5f479d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E7=BA=A2=E5=85=B5?= <374362909@qq.com> Date: Sat, 14 Feb 2026 19:55:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/admin/role.ts | 48 +++ src/views/admin/system/role/form.vue | 9 + src/views/admin/system/role/index.vue | 417 +++++++++++++++++++++++--- 3 files changed, 431 insertions(+), 43 deletions(-) diff --git a/src/api/admin/role.ts b/src/api/admin/role.ts index e9fae5a..921062c 100644 --- a/src/api/admin/role.ts +++ b/src/api/admin/role.ts @@ -61,6 +61,54 @@ export const delObj = (ids: Object) => { data: ids, }); }; +/** + * 批量设置角色分组 + * @param roleIds 角色ID列表 + * @param roleGroup 分组名称(空表示未分组) + */ +export const batchUpdateRoleGroup = (roleIds: string[], roleGroup: string) => { + return request({ + url: '/admin/role/batchGroup', + method: 'put', + data: { roleIds, roleGroup: roleGroup || '' }, + }); +}; + +/** + * 批量指定角色关联用户 + * @param roleId 角色ID + * @param userIds 用户ID列表 + */ +export const assignUsersToRole = (roleId: string, userIds: string[]) => { + return request({ + url: '/admin/role/assignUsers', + method: 'post', + data: { roleId, userIds }, + }); +}; + +/** + * 根据角色ID查询该角色下绑定的用户列表(含部门、姓名、工号) + * @param roleId 角色ID + */ +export const getUsersByRoleId = (roleId: string) => { + return request({ + url: '/admin/role/users/' + roleId, + method: 'get', + }); +}; + +/** + * 解除指定用户与该角色的关联 + * @param roleId 角色ID + * @param userId 用户ID + */ +export const unassignUserFromRole = (roleId: string, userId: string) => { + return request({ + url: `/admin/role/users/${roleId}/${userId}`, + method: 'delete', + }); +}; export const permissionUpd = (roleId: string, menuIds: string) => { return request({ diff --git a/src/views/admin/system/role/form.vue b/src/views/admin/system/role/form.vue index 77f56a7..3cdf9ba 100644 --- a/src/views/admin/system/role/form.vue +++ b/src/views/admin/system/role/form.vue @@ -7,6 +7,12 @@ + + + + + + { // 获取部门数据 getObj(id).then((res: any) => { Object.assign(form, res.data); + if (res.data.roleSort == null) form.roleSort = 0; if (res.data.dsScope) { dataForm.checkedDsScope = res.data.dsScope.split(','); } else { diff --git a/src/views/admin/system/role/index.vue b/src/views/admin/system/role/index.vue index c885438..578f994 100644 --- a/src/views/admin/system/role/index.vue +++ b/src/views/admin/system/role/index.vue @@ -25,6 +25,12 @@ {{ $t('common.delBtn') }} + + 批量指定分组 + + + 批量指定关联用户 + - - - - - - + + - + — + {{ scope.$index + 1 }} - - + - {{ - $t('common.editBtn') - }} - - {{ - $t('sysrole.permissionTip') - }} - - - - {{ $t('common.delBtn') }} - - - + {{ scope.row.roleName }} + {{ scope.row.roleName }} + + + + {{ scope.row._isGroup ? '—' : (scope.row.roleSort ?? 0) }} + + + {{ scope.row._isGroup ? '—' : scope.row.roleCode }} + + + {{ scope.row._isGroup ? '—' : scope.row.roleDesc }} + + + + — + + + + + {{ scope.row._isGroup ? '—' : scope.row.createTime }} + + + + — + + {{ + $t('common.editBtn') + }} + {{ + $t('sysrole.permissionTip') + }} + 查看关联用户 + + + {{ $t('common.delBtn') }} + + + + - + + + + + + + + + 取消 + 确定 + + + + + + + 当前角色:{{ assignCurrentRole.roleName }}({{ assignCurrentRole.roleCode }}) + + + + 教职工 + 学生 + 驻校单位 + + + + + + + 查询 + + + 请先选择用户类型后再查询 + + + + + {{ row.label }} + {{ row.realName || row.username || row.label }} + + + + {{ row._isDept ? '—' : row.username }} + + + {{ row._isDept ? '—' : (row.deptName || '—') }} + + + + + 取消 + 确定(已选 {{ assignSelectedIds.length }} 人) + + + + + + + 角色:{{ currentRoleForUsers.roleName }}({{ currentRoleForUsers.roleCode }}) + + + + + + + 解除 + + + + 该角色下暂无关联用户 + + + @@ -101,8 +217,10 @@ + +