|
|
@ -1,5 +1,6 @@ |
|
|
|
import { httpClient } from '@/lib/http-client'; |
|
|
|
import { OperationResult } from '@/types/auth'; |
|
|
|
import { API_PATHS } from '@/constants/api'; |
|
|
|
|
|
|
|
export interface User { |
|
|
|
id: string; |
|
|
@ -12,14 +13,23 @@ export interface User { |
|
|
|
isActive?: boolean; |
|
|
|
} |
|
|
|
|
|
|
|
// 获取用户列表请求接口
|
|
|
|
export interface GetAllUsersRequest { |
|
|
|
pageNumber?: number; |
|
|
|
pageSize?: number; |
|
|
|
searchTerm?: string; |
|
|
|
isActive?: boolean; |
|
|
|
} |
|
|
|
|
|
|
|
// 获取用户列表响应接口
|
|
|
|
export interface GetAllUsersResponse { |
|
|
|
users: User[]; |
|
|
|
totalCount: number; |
|
|
|
pageNumber: number; |
|
|
|
pageSize: number; |
|
|
|
totalPages: number; |
|
|
|
hasPreviousPage: boolean; |
|
|
|
hasNextPage: boolean; |
|
|
|
items: User[]; |
|
|
|
} |
|
|
|
|
|
|
|
export interface CreateUserRequest { |
|
|
@ -38,121 +48,46 @@ export interface UpdateUserRequest { |
|
|
|
isActive?: boolean; |
|
|
|
} |
|
|
|
|
|
|
|
export interface UserService { |
|
|
|
getAllUsers: (params?: { userName?: string; page?: number; pageSize?: number }) => Promise<OperationResult<GetAllUsersResponse>>; |
|
|
|
getUser: (userId: string) => Promise<OperationResult<User>>; |
|
|
|
createUser: (data: CreateUserRequest) => Promise<OperationResult<User>>; |
|
|
|
updateUser: (userId: string, data: UpdateUserRequest) => Promise<OperationResult<User>>; |
|
|
|
updateUserRoles: (userId: string, roles: string[]) => Promise<OperationResult<User>>; |
|
|
|
deleteUser: (userId: string) => Promise<OperationResult<void>>; |
|
|
|
} |
|
|
|
class UserService { |
|
|
|
private readonly baseUrl = API_PATHS.USERS; |
|
|
|
|
|
|
|
// 获取用户列表
|
|
|
|
async getAllUsers(params: GetAllUsersRequest = {}): Promise<OperationResult<GetAllUsersResponse>> { |
|
|
|
const queryParams = new URLSearchParams(); |
|
|
|
|
|
|
|
if (params.pageNumber) queryParams.append('pageNumber', params.pageNumber.toString()); |
|
|
|
if (params.pageSize) queryParams.append('pageSize', params.pageSize.toString()); |
|
|
|
if (params.searchTerm) queryParams.append('searchTerm', params.searchTerm); |
|
|
|
if (params.isActive !== undefined) queryParams.append('isActive', params.isActive.toString()); |
|
|
|
|
|
|
|
export const userService: UserService = { |
|
|
|
getAllUsers: async (params = {}) => { |
|
|
|
try { |
|
|
|
const mappedParams = { |
|
|
|
PageNumber: params.page ?? 1, |
|
|
|
PageSize: params.pageSize ?? 10, |
|
|
|
UserName: params.userName ?? undefined |
|
|
|
}; |
|
|
|
const response = await httpClient.get<{ data: GetAllUsersResponse }>('/users', { params: mappedParams }); |
|
|
|
const resultData = (response.data && 'users' in response.data) ? response.data : response.data?.data; |
|
|
|
if (resultData && Array.isArray(resultData.users)) { |
|
|
|
resultData.users = resultData.users.map(u => ({ |
|
|
|
...u, |
|
|
|
id: u.id ?? u.userId, |
|
|
|
isActive: u.isActive ?? false |
|
|
|
})); |
|
|
|
} |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
data: resultData as GetAllUsersResponse, |
|
|
|
message: '获取用户列表成功' |
|
|
|
}; |
|
|
|
} catch (error: any) { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
message: error.response?.data?.message || '获取用户列表失败' |
|
|
|
}; |
|
|
|
} |
|
|
|
}, |
|
|
|
const url = `${this.baseUrl}?${queryParams.toString()}`; |
|
|
|
return httpClient.get<GetAllUsersResponse>(url); |
|
|
|
} |
|
|
|
|
|
|
|
getUser: async (userId: string): Promise<OperationResult<User>> => { |
|
|
|
try { |
|
|
|
const response = await httpClient.get<User>(`/users/${userId}`); |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
data: response.data || undefined, |
|
|
|
message: '获取用户详情成功' |
|
|
|
}; |
|
|
|
} catch (error: any) { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
message: error.response?.data?.message || '获取用户详情失败' |
|
|
|
}; |
|
|
|
} |
|
|
|
}, |
|
|
|
// 根据ID获取用户详情
|
|
|
|
async getUser(userId: string): Promise<OperationResult<User>> { |
|
|
|
return httpClient.get<User>(`${this.baseUrl}/${userId}`); |
|
|
|
} |
|
|
|
|
|
|
|
createUser: async (data: CreateUserRequest): Promise<OperationResult<User>> => { |
|
|
|
try { |
|
|
|
const response = await httpClient.post<User>('/users', data); |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
data: response.data || undefined, |
|
|
|
message: '创建用户成功' |
|
|
|
}; |
|
|
|
} catch (error: any) { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
message: error.response?.data?.message || '创建用户失败' |
|
|
|
}; |
|
|
|
} |
|
|
|
}, |
|
|
|
// 创建用户
|
|
|
|
async createUser(data: CreateUserRequest): Promise<OperationResult<User>> { |
|
|
|
return httpClient.post<User>(this.baseUrl, data); |
|
|
|
} |
|
|
|
|
|
|
|
updateUser: async (userId: string, data: UpdateUserRequest): Promise<OperationResult<User>> => { |
|
|
|
try { |
|
|
|
const response = await httpClient.put<User>(`/users/${userId}`, data); |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
data: response.data || undefined, |
|
|
|
message: '更新用户成功' |
|
|
|
}; |
|
|
|
} catch (error: any) { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
message: error.response?.data?.message || '更新用户失败' |
|
|
|
}; |
|
|
|
} |
|
|
|
}, |
|
|
|
// 更新用户
|
|
|
|
async updateUser(userId: string, data: UpdateUserRequest): Promise<OperationResult<User>> { |
|
|
|
return httpClient.put<User>(`${this.baseUrl}/${userId}`, data); |
|
|
|
} |
|
|
|
|
|
|
|
updateUserRoles: async (userId: string, roles: string[]): Promise<OperationResult<User>> => { |
|
|
|
try { |
|
|
|
const response = await httpClient.put<User>(`/users/${userId}/roles`, { roles }); |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
data: response.data || undefined, |
|
|
|
message: '更新用户角色成功' |
|
|
|
}; |
|
|
|
} catch (error: any) { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
message: error.response?.data?.message || '更新用户角色失败' |
|
|
|
}; |
|
|
|
} |
|
|
|
}, |
|
|
|
// 更新用户角色
|
|
|
|
async updateUserRoles(userId: string, roles: string[]): Promise<OperationResult<User>> { |
|
|
|
return httpClient.put<User>(`${this.baseUrl}/${userId}/roles`, { roles }); |
|
|
|
} |
|
|
|
|
|
|
|
deleteUser: async (userId: string): Promise<OperationResult<void>> => { |
|
|
|
try { |
|
|
|
await httpClient.delete(`/users/${userId}`); |
|
|
|
return { |
|
|
|
success: true, |
|
|
|
message: '删除用户成功' |
|
|
|
}; |
|
|
|
} catch (error: any) { |
|
|
|
return { |
|
|
|
success: false, |
|
|
|
message: error.response?.data?.message || '删除用户失败' |
|
|
|
}; |
|
|
|
} |
|
|
|
// 删除用户
|
|
|
|
async deleteUser(userId: string): Promise<OperationResult<boolean>> { |
|
|
|
return httpClient.delete<boolean>(`${this.baseUrl}/${userId}`); |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
export const userService = new UserService(); |