This commit is contained in:
yelan
2026-09-24 21:03:41 +08:00
3 changed files with 194 additions and 5 deletions
+22 -1
View File
@@ -1,13 +1,15 @@
import { unwrapApiResponse, unwrapNullableApiResponse } from '@/utils/api-response'
import { request } from '@/utils/request'
import type { ApiResponse } from '@/types/common'
import type { ApiResponse, PageResult } from '@/types/common'
import type {
BackendCollection,
BackendPage,
CreateRoleRequest,
PermissionResourceNodeDto,
RoleDataScopeRequest,
RoleDataScopeResponseDto,
RoleMemberDto,
RoleRecord,
RoleResponseDto,
UpdateRoleRequest,
@@ -21,6 +23,7 @@ function normalizeRole(dto: RoleResponseDto, index: number): RoleRecord {
code: dto.code,
name: dto.name,
description: dto.description ?? '',
userCount: dto.userCount ?? 0,
color: fallbackColors[index % fallbackColors.length],
status: dto.status ?? 'DISABLED',
menuPermissionCount: dto.menuPermissionCount ?? 0,
@@ -50,6 +53,24 @@ export async function getAssignableRoles(): Promise<RoleRecord[]> {
return normalizeCollection(unwrapApiResponse(response)).map(normalizeRole)
}
export async function getRoleMembers(
roleId: string,
page: number,
pageSize: number,
): Promise<PageResult<RoleMemberDto>> {
const response = await request.get<ApiResponse<BackendPage<RoleMemberDto>>>(
`/v1/roles/${encodeURIComponent(roleId)}/users`,
{ params: { page, size: pageSize } },
)
const result = unwrapApiResponse(response)
return {
records: result.records ?? result.items ?? result.content ?? [],
total: result.total ?? 0,
page: result.page ?? page,
pageSize: result.size ?? pageSize,
}
}
export async function getRolePermissionTree(): Promise<PermissionResourceNodeDto[]> {
const response = await request.get<ApiResponse<PermissionResourceNodeDto[]>>(
'/v1/roles/permission-tree',
+9
View File
@@ -166,6 +166,7 @@ export interface RoleResponseDto {
code: string
name: string
description?: string | null
userCount?: number | null
status?: RoleStatus | null
menuPermissionCount?: number | null
buttonPermissionCount?: number | null
@@ -176,6 +177,14 @@ export interface RoleResponseDto {
version?: number | null
}
export interface RoleMemberDto {
id: string
employeeId?: number | null
displayName: string
employeeNo?: string | null
campusName?: string | null
}
export interface CreateRoleRequest {
code: string
name: string