import { request, type ApiResponse } from './request'
|
|
export interface RolePermission {
|
menuId: number
|
menuName: string
|
}
|
|
export interface RolePermissionPage {
|
menuId: number
|
pageName: string
|
permissions: RolePermission[]
|
}
|
|
export interface RolePermissionModule {
|
menuId: number
|
moduleName: string
|
pages: RolePermissionPage[]
|
}
|
|
export interface CreateRoleInput {
|
roleName: string
|
roleKey: 'common'
|
roleSort: 1
|
status: '0'
|
menuIds: number[]
|
remark: string
|
}
|
|
export interface UpdateRoleInput {
|
roleId: number
|
roleName: string
|
roleKey: 'common'
|
roleSort: 1
|
status: '0'
|
menuIds: number[]
|
remark: string
|
}
|
|
export interface RoleListParams {
|
pageNum: number
|
pageSize: number
|
roleName?: string
|
}
|
|
export interface RoleListItem {
|
id: number
|
name: string
|
accountCount: number
|
createdAt: string
|
remark: string
|
builtIn: boolean
|
}
|
|
interface RoleDto {
|
roleId: number
|
roleName: string | null
|
roleKey: string | null
|
createTime: string | null
|
remark: string | null
|
userCount?: number | null
|
accountCount?: number | null
|
}
|
|
interface RoleListResponse extends ApiResponse {
|
total: number
|
rows: RoleDto[]
|
}
|
|
interface RoleDetailDto {
|
roleId: number
|
roleName: string | null
|
remark: string | null
|
menuIds: number[] | null
|
}
|
|
interface RoleDetailResponse extends ApiResponse {
|
data: RoleDetailDto
|
}
|
|
export interface RoleDetail {
|
id: number
|
name: string
|
remark: string
|
menuIds: number[]
|
}
|
|
export interface RoleListResult {
|
total: number
|
rows: RoleListItem[]
|
}
|
|
interface PermissionListResponse extends ApiResponse {
|
data: RolePermissionModule[]
|
}
|
|
export async function getRolePermissionList(): Promise<RolePermissionModule[]> {
|
const result = await request<PermissionListResponse>('/system/menu/permissionList')
|
return Array.isArray(result.data) ? result.data : []
|
}
|
|
export async function getRoleList(params: RoleListParams): Promise<RoleListResult> {
|
const searchParams = new URLSearchParams()
|
Object.entries(params).forEach(([key, value]) => {
|
if (value !== undefined && value !== '') searchParams.set(key, String(value))
|
})
|
const result = await request<RoleListResponse>(`/system/role/list?${searchParams.toString()}`)
|
return {
|
total: Number(result.total) || 0,
|
rows: (result.rows || []).map(item => ({
|
id: item.roleId,
|
name: item.roleName || '-',
|
accountCount: Number(item.userCount ?? item.accountCount) || 0,
|
createdAt: item.createTime || '',
|
remark: item.remark || '',
|
builtIn: item.roleKey === 'admin',
|
})),
|
}
|
}
|
|
export async function getRole(roleId: number): Promise<RoleDetail> {
|
const result = await request<RoleDetailResponse>(`/system/role/${roleId}`)
|
return {
|
id: result.data.roleId,
|
name: result.data.roleName || '',
|
remark: result.data.remark || '',
|
menuIds: Array.isArray(result.data.menuIds) ? result.data.menuIds.map(Number) : [],
|
}
|
}
|
|
export function createRole(input: CreateRoleInput): Promise<ApiResponse> {
|
return request<ApiResponse>('/system/role', {
|
method: 'POST',
|
body: JSON.stringify(input),
|
})
|
}
|
|
export function updateRole(input: UpdateRoleInput): Promise<ApiResponse> {
|
return request<ApiResponse>('/system/role', {
|
method: 'PUT',
|
body: JSON.stringify(input),
|
})
|
}
|
|
export async function deleteRoles(roleIds: number[]): Promise<void> {
|
await request<ApiResponse>(`/system/role/${roleIds.join(',')}`, {
|
method: 'DELETE',
|
})
|
}
|