/** * 全文复筛任务进度Hook * * 功能: * 1. 轮询任务进度 * 2. 自动刷新 * 3. 错误处理 */ import { useQuery } from '@tanstack/react-query'; import { aslApi } from '../api'; interface UseFulltextTaskOptions { taskId: string; enabled?: boolean; refetchInterval?: number | false; } export function useFulltextTask({ taskId, enabled = true, refetchInterval, }: UseFulltextTaskOptions) { const { data, isLoading, error, refetch, } = useQuery({ queryKey: ['fulltextTask', taskId], queryFn: async () => { const response = await aslApi.getFulltextTaskProgress(taskId); return response.data; }, enabled: enabled && !!taskId, refetchInterval: refetchInterval !== undefined ? refetchInterval : ((data) => { // 默认行为:任务进行中时每2秒轮询,否则停止 if (!data?.data) return false; const status = (data.data as any).status; return status === 'processing' || status === 'pending' ? 2000 : false; }), retry: 1, }); const task = data as any; const isRunning = task?.status === 'processing' || task?.status === 'pending'; const isCompleted = task?.status === 'completed'; const isFailed = task?.status === 'failed'; const progress = task?.progress?.progressPercent || 0; return { task, progress, isRunning, isCompleted, isFailed, isLoading, error, refetch, }; }