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

72 lines
2.1 KiB
TypeScript

/**
* 系统账户划转管理 Hooks
* [2026-01-06] 新增
*/
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { systemWithdrawalService } from '@/services/systemWithdrawalService';
import type {
SystemWithdrawalQueryParams,
SystemWithdrawalRequest,
} from '@/types/system-withdrawal.types';
/** Query Keys */
export const systemWithdrawalKeys = {
all: ['systemWithdrawals'] as const,
accounts: () => [...systemWithdrawalKeys.all, 'accounts'] as const,
orders: (params: SystemWithdrawalQueryParams) => [...systemWithdrawalKeys.all, 'orders', params] as const,
accountName: (accountSequence: string) => [...systemWithdrawalKeys.all, 'accountName', accountSequence] as const,
};
/**
* 获取可划转的系统账户列表
*/
export function useSystemWithdrawalAccounts() {
return useQuery({
queryKey: systemWithdrawalKeys.accounts(),
queryFn: () => systemWithdrawalService.getAccounts(),
staleTime: 5 * 60 * 1000, // 5分钟
gcTime: 10 * 60 * 1000,
});
}
/**
* 获取划转订单列表
*/
export function useSystemWithdrawalOrders(params: SystemWithdrawalQueryParams = {}) {
return useQuery({
queryKey: systemWithdrawalKeys.orders(params),
queryFn: () => systemWithdrawalService.getOrders(params),
staleTime: 30 * 1000, // 30秒
gcTime: 5 * 60 * 1000,
});
}
/**
* 获取账户名称
*/
export function useAccountName(accountSequence: string) {
return useQuery({
queryKey: systemWithdrawalKeys.accountName(accountSequence),
queryFn: () => systemWithdrawalService.getAccountName(accountSequence),
enabled: !!accountSequence && accountSequence.length > 0,
staleTime: 10 * 60 * 1000, // 10分钟
gcTime: 30 * 60 * 1000,
});
}
/**
* 发起划转请求
*/
export function useRequestSystemWithdrawal() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: SystemWithdrawalRequest) => systemWithdrawalService.request(data),
onSuccess: () => {
// 成功后刷新账户列表和订单列表
queryClient.invalidateQueries({ queryKey: systemWithdrawalKeys.all });
},
});
}