diff --git a/src/api/system/role/index.ts b/src/api/system/role/index.ts index 352e352..1dcb9c1 100644 --- a/src/api/system/role/index.ts +++ b/src/api/system/role/index.ts @@ -1,8 +1,8 @@ import request from '@/utils/request'; import type { ApiResult, PageResult } from '@/api'; -import type { Role, RoleParam } from './model'; +import type { Role, RoleMember, RoleMemberParam, RoleParam } from './model'; import type { Menu } from '../menu/model'; -import { SERVER_API_URL } from '@/config/setting'; +import { SERVER_API_URL, THINK_API_URL } from '@/config/setting'; /** * 分页查询角色 @@ -117,3 +117,45 @@ export async function updateRoleMenus(roleId?: number, data?: number[]) { } return Promise.reject(new Error(res.data.message)); } + +/** + * 分页查询角色成员 + */ +export async function pageRoleMembers(params: RoleMemberParam) { + const res = await request.get>>( + THINK_API_URL + '/system/role-member/page', + { params } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加角色成员 + */ +export async function addRoleMember(data: RoleMemberParam) { + const res = await request.post>( + THINK_API_URL + '/system/role-member', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 移除角色成员 + */ +export async function removeRoleMember(roleId?: number, userId?: number) { + const res = await request.delete>( + THINK_API_URL + '/system/role-member', + { params: { roleId, userId } } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/src/api/system/role/model/index.ts b/src/api/system/role/model/index.ts index d4c9a50..4a02264 100644 --- a/src/api/system/role/model/index.ts +++ b/src/api/system/role/model/index.ts @@ -25,3 +25,31 @@ export interface RoleParam extends PageParam { roleCode?: string; comments?: string; } + +/** + * 角色成员 + */ +export interface RoleMember { + // 用户id + userId?: number; + // 账号 + username?: string; + // 真实姓名 + realName?: string; + // 昵称 + nickname?: string; + // 所属组织id + organizationId?: number; + // 所属组织名称 + organizationName?: string; + // 状态, 0启用, 1停用 + status?: number; +} + +/** + * 角色成员查询/操作参数 + */ +export interface RoleMemberParam extends PageParam { + roleId?: number; + userId?: number; +} diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts index 2ac2612..f0b4411 100644 --- a/src/api/system/user/index.ts +++ b/src/api/system/user/index.ts @@ -1,7 +1,7 @@ import request from '@/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { User, UserParam } from './model'; -import { SERVER_API_URL } from '@/config/setting'; +import { SERVER_API_URL, THINK_API_URL } from '@/config/setting'; /** * 分页查询用户 @@ -97,7 +97,7 @@ export async function addUser(data: User) { */ export async function updateUser(data: User) { const res = await request.put>( - SERVER_API_URL + '/system/user', + THINK_API_URL + '/system/user', data ); if (res.data.code === 0) { diff --git a/src/views/system/role/components/role-member.vue b/src/views/system/role/components/role-member.vue new file mode 100644 index 0000000..8228a11 --- /dev/null +++ b/src/views/system/role/components/role-member.vue @@ -0,0 +1,230 @@ + + + + diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index ab6ebca..4462465 100644 --- a/src/views/system/role/index.vue +++ b/src/views/system/role/index.vue @@ -39,6 +39,8 @@ 修改 + 成员 + 分配权限 + + @@ -77,6 +81,7 @@ import RoleSearch from './components/role-search.vue'; import RoleEdit from './components/role-edit.vue'; import RoleAuth from './components/role-auth.vue'; + import RoleMember from './components/role-member.vue'; import { pageRoles, removeRole, removeRoles } from '@/api/system/role'; import type { Role, RoleParam } from '@/api/system/role/model'; @@ -120,7 +125,7 @@ { title: '操作', key: 'action', - width: 200, + width: 260, align: 'center' } ]); @@ -137,6 +142,9 @@ // 是否显示权限分配弹窗 const showAuth = ref(false); + // 是否显示成员维护弹窗 + const showMember = ref(false); + // 表格数据源 const datasource: DatasourceFunction = ({ page, limit, where, orders }) => { return pageRoles({ ...where, ...orders, page, limit }); @@ -160,6 +168,12 @@ showAuth.value = true; }; + /* 打开成员维护弹窗 */ + const openMember = (row?: Role) => { + current.value = row ?? null; + showMember.value = true; + }; + /* 删除单个 */ const remove = (row: Role) => { const hide = messageLoading('请求中..', 0); diff --git a/src/views/system/user/components/user-edit.vue b/src/views/system/user/components/user-edit.vue index 13f807d..59649d2 100644 --- a/src/views/system/user/components/user-edit.vue +++ b/src/views/system/user/components/user-edit.vue @@ -255,14 +255,8 @@ // trigger: 'blur' // } // ], - roles: [ - { - required: true, - message: '请选择角色', - type: 'array', - trigger: 'blur' - } - ], + // 角色可以为空:清空并保存表示删除该用户的全部角色关联 + roles: [], email: [ { pattern: emailReg,