From f832a1bc749462812ae776f0d776af9034695420 Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 20 Dec 2025 03:34:43 -0800 Subject: [PATCH] =?UTF-8?q?fix(admin-web):=20=E4=BF=AE=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96=E6=97=B6=20respon?= =?UTF-8?q?se.data=20undefined=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- frontend/admin-web/src/hooks/useUsers.ts | 16 ++++------------ frontend/admin-web/src/services/userService.ts | 11 +++++------ 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/frontend/admin-web/src/hooks/useUsers.ts b/frontend/admin-web/src/hooks/useUsers.ts index 0196e57a..4f81eb99 100644 --- a/frontend/admin-web/src/hooks/useUsers.ts +++ b/frontend/admin-web/src/hooks/useUsers.ts @@ -16,14 +16,12 @@ export const userKeys = { /** * 获取用户列表 + * 注意:apiClient 响应拦截器已解包 response.data,直接返回数据 */ export function useUsers(params: UserListParams = {}) { return useQuery({ queryKey: userKeys.list(params), - queryFn: async () => { - const response = await userService.getUsers(params); - return response.data; - }, + queryFn: () => userService.getUsers(params), staleTime: 30 * 1000, // 30秒后标记为过期 gcTime: 5 * 60 * 1000, // 5分钟后垃圾回收 }); @@ -35,10 +33,7 @@ export function useUsers(params: UserListParams = {}) { export function useUserDetail(id: string) { return useQuery({ queryKey: userKeys.detail(id), - queryFn: async () => { - const response = await userService.getUserDetail(id); - return response.data; - }, + queryFn: () => userService.getUserDetail(id), enabled: !!id, // 只有在 id 存在时才查询 staleTime: 60 * 1000, // 1分钟后标记为过期 gcTime: 5 * 60 * 1000, @@ -51,10 +46,7 @@ export function useUserDetail(id: string) { export function useUserStats() { return useQuery({ queryKey: userKeys.stats(), - queryFn: async () => { - const response = await userService.getUserStats(); - return response.data; - }, + queryFn: () => userService.getUserStats(), staleTime: 60 * 1000, // 1分钟后标记为过期 gcTime: 5 * 60 * 1000, }); diff --git a/frontend/admin-web/src/services/userService.ts b/frontend/admin-web/src/services/userService.ts index 4d1dd41b..08595e96 100644 --- a/frontend/admin-web/src/services/userService.ts +++ b/frontend/admin-web/src/services/userService.ts @@ -5,7 +5,6 @@ import apiClient from '@/infrastructure/api/client'; import { API_ENDPOINTS } from '@/infrastructure/api/endpoints'; -import type { ApiResponse } from '@/types'; /** 用户列表项 */ export interface UserListItem { @@ -73,26 +72,27 @@ export interface UserListParams { /** * 用户管理服务 + * 注意:apiClient 响应拦截器已解包 response.data,直接返回数据 */ export const userService = { /** * 获取用户列表 */ - async getUsers(params: UserListParams = {}): Promise> { + async getUsers(params: UserListParams = {}): Promise { return apiClient.get(API_ENDPOINTS.USERS.LIST, { params }); }, /** * 获取用户详情 */ - async getUserDetail(id: string): Promise> { + async getUserDetail(id: string): Promise { return apiClient.get(API_ENDPOINTS.USERS.DETAIL(id)); }, /** * 获取用户统计 */ - async getUserStats(): Promise> { + async getUserStats(): Promise { return apiClient.get(API_ENDPOINTS.USERS.STATS); }, @@ -100,11 +100,10 @@ export const userService = { * 导出用户数据 */ async exportUsers(params: UserListParams = {}): Promise { - const response = await apiClient.get(API_ENDPOINTS.USERS.EXPORT, { + return apiClient.get(API_ENDPOINTS.USERS.EXPORT, { params, responseType: 'blob', }); - return response.data as unknown as Blob; }, };