/** * 权限服务 * * 提供权限管理相关 API 调用 */ import { get, post, put, del } from '@/lib/http/client' import type { Permission, CreatePermissionRequest, UpdatePermissionRequest, PermissionType, } from '@/types/permission' type RawPermissionType = 0 | 1 | 2 interface RawPermission extends Omit { type: RawPermissionType children?: RawPermission[] } function normalizePermissionType(type: RawPermissionType): PermissionType { switch (type) { case 0: return 'menu' case 1: return 'button' case 2: return 'api' default: return 'api' } } function serializePermissionType(type: PermissionType): RawPermissionType { switch (type) { case 'menu': return 0 case 'button': return 1 case 'api': return 2 } } function normalizePermission(permission: RawPermission): Permission { return { ...permission, type: normalizePermissionType(permission.type), children: permission.children?.map(normalizePermission), } } /** * 获取权限树 * GET /api/v1/permissions/tree */ export function getPermissionTree(): Promise { return get('/permissions/tree').then((permissions) => permissions.map(normalizePermission)) } /** * 获取所有权限列表(扁平) * GET /api/v1/permissions */ export function listPermissions(): Promise { return get('/permissions').then((permissions) => permissions.map(normalizePermission)) } /** * 获取权限详情 * GET /api/v1/permissions/:id */ export function getPermission(id: number): Promise { return get(`/permissions/${id}`).then(normalizePermission) } /** * 创建权限 * POST /api/v1/permissions */ export function createPermission(data: CreatePermissionRequest): Promise { return post('/permissions', { ...data, type: serializePermissionType(data.type), }).then(normalizePermission) } /** * 更新权限 * PUT /api/v1/permissions/:id */ export function updatePermission(id: number, data: UpdatePermissionRequest): Promise { return put(`/permissions/${id}`, data).then(normalizePermission) } /** * 删除权限 * DELETE /api/v1/permissions/:id */ export function deletePermission(id: number): Promise { return del(`/permissions/${id}`) } /** * 更新权限状态 * PUT /api/v1/permissions/:id/status */ export function updatePermissionStatus(id: number, status: 0 | 1): Promise { return put(`/permissions/${id}/status`, { status }) }