// 终端会话列表 — TanStack Query // Logan.Li import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { terminalSessionApi } from '@/api'; import { queryKeys } from './queryKeys'; import { unwrapList } from './unwrap'; export interface TerminalSession { id: number; user_id?: number; username: string; server_id: number; server_name: string; server_ip: string; server_port: number; client_ip: string; status: string; duration: number; record_size: number; start_time: string; end_time?: string | null; } type ListParams = { page?: number; page_size?: number; server_id?: number; username?: string; status?: string; }; export function useTerminalSessions(params: ListParams = { page: 1, page_size: 100 }) { return useQuery({ queryKey: queryKeys.terminalSessions(params), queryFn: async () => { const resp = await terminalSessionApi.list(params); return unwrapList(resp); }, }); } export function useTerminalSessionMutations() { const qc = useQueryClient(); const invalidate = () => qc.invalidateQueries({ queryKey: ['terminal-sessions'] }); const killMutation = useMutation({ mutationFn: (id: number) => terminalSessionApi.kill(id), onSuccess: invalidate, }); const deleteMutation = useMutation({ mutationFn: (id: number) => terminalSessionApi.delete(id), onSuccess: invalidate, }); const batchDeleteMutation = useMutation({ mutationFn: (ids: number[]) => terminalSessionApi.batchDelete(ids), onSuccess: invalidate, }); return { killMutation, deleteMutation, batchDeleteMutation, invalidate }; }