rwadurian/frontend/admin-web/src/hooks/useUsers.ts

54 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 用户管理 Hooks
* 使用 React Query 进行数据获取和缓存管理
*/
import { useQuery } from '@tanstack/react-query';
import { userService, type UserListParams } from '@/services/userService';
/** Query Keys */
export const userKeys = {
all: ['users'] as const,
list: (params: UserListParams) => [...userKeys.all, 'list', params] as const,
detail: (id: string) => [...userKeys.all, 'detail', id] as const,
stats: () => [...userKeys.all, 'stats'] as const,
};
/**
* 获取用户列表
* 注意apiClient 响应拦截器已解包 response.data直接返回数据
*/
export function useUsers(params: UserListParams = {}) {
return useQuery({
queryKey: userKeys.list(params),
queryFn: () => userService.getUsers(params),
staleTime: 30 * 1000, // 30秒后标记为过期
gcTime: 5 * 60 * 1000, // 5分钟后垃圾回收
});
}
/**
* 获取用户详情
*/
export function useUserDetail(id: string) {
return useQuery({
queryKey: userKeys.detail(id),
queryFn: () => userService.getUserDetail(id),
enabled: !!id, // 只有在 id 存在时才查询
staleTime: 60 * 1000, // 1分钟后标记为过期
gcTime: 5 * 60 * 1000,
});
}
/**
* 获取用户统计
*/
export function useUserStats() {
return useQuery({
queryKey: userKeys.stats(),
queryFn: () => userService.getUserStats(),
staleTime: 60 * 1000, // 1分钟后标记为过期
gcTime: 5 * 60 * 1000,
});
}