Files
hfb_sys/frontend/src/features/admin/api/adminMgr.ts
T
2026-06-11 07:23:00 +08:00

100 lines
2.4 KiB
TypeScript

import { apiClient } from '@/shared/api/client'
import type { ApiResponse, PaginatedResult } from '@/shared/types/types'
export interface AdminRole {
id: number
code: string
name: string
description: string
}
export interface AdminMgrUser {
id: number
username: string
nickname: string
status: string
roles: AdminRole[]
last_login_at?: string
created_at: string
updated_at: string
}
export interface CreateAdminRequest {
username: string
password: string
nickname?: string
}
export interface UpdateAdminRequest {
nickname?: string
status?: string
}
export interface ChangePasswordRequest {
old_password: string
new_password: string
}
export interface ResetPasswordRequest {
new_password: string
}
export async function fetchAdminMgrUsers(page = 1, pageSize = 20) {
const { data } = await apiClient.get<ApiResponse<PaginatedResult<AdminMgrUser>>>(
'/admin/admin-users',
{
params: { page, page_size: pageSize },
}
)
return data.data
}
export async function fetchAdminMgrUser(id: number) {
const { data } = await apiClient.get<ApiResponse<AdminMgrUser>>(`/admin/admin-users/${id}`)
return data.data
}
export async function createAdminMgrUser(req: CreateAdminRequest) {
const { data } = await apiClient.post<ApiResponse<AdminMgrUser>>('/admin/admin-users', req)
return data.data
}
export async function updateAdminMgrUser(id: number, req: UpdateAdminRequest) {
const { data } = await apiClient.put<ApiResponse<AdminMgrUser>>(`/admin/admin-users/${id}`, req)
return data.data
}
export async function deleteAdminMgrUser(id: number) {
const { data } = await apiClient.delete<ApiResponse<{ deleted: boolean }>>(
`/admin/admin-users/${id}`
)
return data.data
}
export async function assignAdminRoles(id: number, roleIds: number[]) {
const { data } = await apiClient.put<ApiResponse<{ updated: boolean }>>(
`/admin/admin-users/${id}/roles`,
{
role_ids: roleIds,
}
)
return data.data
}
export async function changeAdminPassword(req: ChangePasswordRequest) {
const { data } = await apiClient.put<ApiResponse<{ updated: boolean }>>(
'/admin/admin-users/me/password',
req
)
return data.data
}
export async function resetAdminPassword(id: number, req: ResetPasswordRequest) {
const { data } = await apiClient.put<ApiResponse<{ updated: boolean }>>(
`/admin/admin-users/${id}/password`,
req
)
return data.data
}