fix: 接入用户与权限后端接口

This commit is contained in:
xy
2026-09-03 12:18:57 +08:00
parent e43a118dee
commit 48e5293509
19 changed files with 1982 additions and 375 deletions
+72 -3
View File
@@ -5,9 +5,12 @@ import type { ApiResponse } from '@/types/common'
import type {
BackendCollection,
CreateRoleRequest,
RolePermissionsResponseDto,
RolePermissionsUpdateRequest,
RoleRecord,
RoleQuery,
RoleResponseDto,
RoleSummaryResponseDto,
UpdateRoleRequest,
} from './types'
@@ -15,18 +18,35 @@ const useMockData = import.meta.env.VITE_USE_MOCK !== 'false'
const fallbackColors = ['#6b5bd2', '#0e6e8c', '#0f9d6c', '#d9821f', '#c65d5d']
function normalizeRole(dto: RoleResponseDto, index: number): RoleRecord {
function normalizeRole(dto: RoleResponseDto, index: number, userCount?: number | null): RoleRecord {
return {
id: dto.id,
code: dto.code,
name: dto.name,
description: dto.description ?? '—',
color: fallbackColors[index % fallbackColors.length],
userCount: dto.userCount ?? undefined,
userCount: userCount ?? undefined,
status: dto.status ?? 'ENABLED',
createdAt: dto.createdAt,
updatedAt: dto.updatedAt,
version: dto.version ?? undefined,
}
}
function normalizeRoleSummary(dto: RoleSummaryResponseDto, index: number): RoleRecord {
return normalizeRole(
{
id: dto.roleId,
code: dto.code,
name: dto.name,
description: dto.description,
status: dto.status,
},
index,
dto.userCount,
)
}
function toBackendQuery(query: RoleQuery) {
const params: Record<string, string | number> = {
page: Math.max(query.page, 1),
@@ -54,10 +74,59 @@ export function getRoles(query: RoleQuery = { page: 1, pageSize: 200 }): Promise
const records = Array.isArray(data)
? data
: (data.records ?? data.items ?? data.content ?? [])
return records.map(normalizeRole)
return records.map((role, index) => normalizeRole(role, index))
})
}
export function getRoleSummaries(campusId?: string): Promise<RoleRecord[]> {
if (useMockData) {
return Promise.resolve([])
}
return request
.get<ApiResponse<BackendCollection<RoleSummaryResponseDto>>>('/v1/roles/summary', {
params: campusId ? { campusId } : undefined,
})
.then(unwrapApiResponse)
.then((data) => {
const records = Array.isArray(data)
? data
: (data.records ?? data.items ?? data.content ?? [])
return records.map(normalizeRoleSummary)
})
}
export async function getRolePermissions(roleId: string): Promise<RolePermissionsResponseDto> {
if (useMockData) {
return {
roleId,
permissions: [],
version: 0,
updatedAt: '',
}
}
const response = await request.get<ApiResponse<RolePermissionsResponseDto>>(
`/v1/roles/${encodeURIComponent(roleId)}/permissions`,
)
return unwrapApiResponse(response)
}
export async function updateRolePermissions(
roleId: string,
payload: RolePermissionsUpdateRequest,
): Promise<RolePermissionsResponseDto> {
if (useMockData) {
throw new Error('Mock 模式不执行角色权限写操作')
}
const response = await request.put<ApiResponse<RolePermissionsResponseDto>>(
`/v1/roles/${encodeURIComponent(roleId)}/permissions`,
payload,
)
return unwrapApiResponse(response)
}
export function createRole(payload: CreateRoleRequest): Promise<RoleRecord> {
if (useMockData) {
return Promise.reject(new Error('Mock 模式不执行角色写操作'))