fix(admin-web): 修复用户数据获取时 response.data undefined 问题

apiClient 响应拦截器已经解包了 response.data,service 和 hooks 层
不需要再次访问 .data 属性,否则会得到 undefined。

修复:
- useUsers/useUserDetail/useUserStats hooks 直接返回 service 结果
- userService 返回类型改为直接数据类型而非 ApiResponse 包装

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-20 03:34:43 -08:00
parent d38e627a0a
commit f832a1bc74
2 changed files with 9 additions and 18 deletions

View File

@ -16,14 +16,12 @@ export const userKeys = {
/** /**
* *
* apiClient response.data
*/ */
export function useUsers(params: UserListParams = {}) { export function useUsers(params: UserListParams = {}) {
return useQuery({ return useQuery({
queryKey: userKeys.list(params), queryKey: userKeys.list(params),
queryFn: async () => { queryFn: () => userService.getUsers(params),
const response = await userService.getUsers(params);
return response.data;
},
staleTime: 30 * 1000, // 30秒后标记为过期 staleTime: 30 * 1000, // 30秒后标记为过期
gcTime: 5 * 60 * 1000, // 5分钟后垃圾回收 gcTime: 5 * 60 * 1000, // 5分钟后垃圾回收
}); });
@ -35,10 +33,7 @@ export function useUsers(params: UserListParams = {}) {
export function useUserDetail(id: string) { export function useUserDetail(id: string) {
return useQuery({ return useQuery({
queryKey: userKeys.detail(id), queryKey: userKeys.detail(id),
queryFn: async () => { queryFn: () => userService.getUserDetail(id),
const response = await userService.getUserDetail(id);
return response.data;
},
enabled: !!id, // 只有在 id 存在时才查询 enabled: !!id, // 只有在 id 存在时才查询
staleTime: 60 * 1000, // 1分钟后标记为过期 staleTime: 60 * 1000, // 1分钟后标记为过期
gcTime: 5 * 60 * 1000, gcTime: 5 * 60 * 1000,
@ -51,10 +46,7 @@ export function useUserDetail(id: string) {
export function useUserStats() { export function useUserStats() {
return useQuery({ return useQuery({
queryKey: userKeys.stats(), queryKey: userKeys.stats(),
queryFn: async () => { queryFn: () => userService.getUserStats(),
const response = await userService.getUserStats();
return response.data;
},
staleTime: 60 * 1000, // 1分钟后标记为过期 staleTime: 60 * 1000, // 1分钟后标记为过期
gcTime: 5 * 60 * 1000, gcTime: 5 * 60 * 1000,
}); });

View File

@ -5,7 +5,6 @@
import apiClient from '@/infrastructure/api/client'; import apiClient from '@/infrastructure/api/client';
import { API_ENDPOINTS } from '@/infrastructure/api/endpoints'; import { API_ENDPOINTS } from '@/infrastructure/api/endpoints';
import type { ApiResponse } from '@/types';
/** 用户列表项 */ /** 用户列表项 */
export interface UserListItem { export interface UserListItem {
@ -73,26 +72,27 @@ export interface UserListParams {
/** /**
* *
* apiClient response.data
*/ */
export const userService = { export const userService = {
/** /**
* *
*/ */
async getUsers(params: UserListParams = {}): Promise<ApiResponse<UserListResponse>> { async getUsers(params: UserListParams = {}): Promise<UserListResponse> {
return apiClient.get(API_ENDPOINTS.USERS.LIST, { params }); return apiClient.get(API_ENDPOINTS.USERS.LIST, { params });
}, },
/** /**
* *
*/ */
async getUserDetail(id: string): Promise<ApiResponse<UserDetail>> { async getUserDetail(id: string): Promise<UserDetail> {
return apiClient.get(API_ENDPOINTS.USERS.DETAIL(id)); return apiClient.get(API_ENDPOINTS.USERS.DETAIL(id));
}, },
/** /**
* *
*/ */
async getUserStats(): Promise<ApiResponse<UserStats>> { async getUserStats(): Promise<UserStats> {
return apiClient.get(API_ENDPOINTS.USERS.STATS); return apiClient.get(API_ENDPOINTS.USERS.STATS);
}, },
@ -100,11 +100,10 @@ export const userService = {
* *
*/ */
async exportUsers(params: UserListParams = {}): Promise<Blob> { async exportUsers(params: UserListParams = {}): Promise<Blob> {
const response = await apiClient.get(API_ENDPOINTS.USERS.EXPORT, { return apiClient.get(API_ENDPOINTS.USERS.EXPORT, {
params, params,
responseType: 'blob', responseType: 'blob',
}); });
return response.data as unknown as Blob;
}, },
}; };