import { useState } from 'react' import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query' import { Card, Row, Col, Statistic, Table, Tag, Button, Typography, Tabs, Modal, Form, Input, InputNumber, Select, Switch, App } from 'antd' import { ReloadOutlined, CloudOutlined, PlusOutlined, DeleteOutlined } from '@ant-design/icons' import { aiGatewayAPI } from '@/api' const { Title, Text } = Typography export default function AiGatewayPage() { const qc = useQueryClient() const { message } = App.useApp() const [activeTab, setActiveTab] = useState('overview') const [routeModal, setRouteModal] = useState<{ open: boolean; editing?: any }>({ open: false }) const [form] = Form.useForm() const { data: status } = useQuery({ queryKey: ['ai-gateway', 'status'], queryFn: (): Promise => aiGatewayAPI.status(), staleTime: 30_000, }) const { data: routes, refetch: refetchRoutes } = useQuery({ queryKey: ['ai-gateway', 'routes'], queryFn: (): Promise => aiGatewayAPI.routes(), enabled: activeTab === 'routes', }) const { data: providers, refetch: refetchProviders } = useQuery({ queryKey: ['ai-gateway', 'providers'], queryFn: (): Promise => aiGatewayAPI.providers(), enabled: activeTab === 'providers', }) const { data: fallbackEvents } = useQuery({ queryKey: ['ai-gateway', 'fallback-events'], queryFn: (): Promise => aiGatewayAPI.fallbackEvents(), enabled: activeTab === 'fallback', refetchInterval: 30_000, }) const createRoute = useMutation({ mutationFn: (values: any) => aiGatewayAPI.createRoute(values), onSuccess: () => { message.success('路由已创建'); refetchRoutes(); setRouteModal({ open: false }); form.resetFields() }, }) const deleteRoute = useMutation({ mutationFn: (id: string) => aiGatewayAPI.deleteRoute(id), onSuccess: () => { message.success('路由已删除'); refetchRoutes() }, }) const toggleProvider = useMutation({ mutationFn: ({ name, enabled }: { name: string; enabled: boolean }) => aiGatewayAPI.toggleProvider(name, enabled), onSuccess: () => { message.success('Provider 已更新'); refetchProviders() }, }) const routeColumns = [ { title: '级别', dataIndex: 'tier', width: 80, render: (v: string) => {v} }, { title: '任务类型', dataIndex: 'taskType', width: 100 }, { title: '首选 Provider', dataIndex: 'preferredProvider', width: 120, render: (v: string) => {v} }, { title: '首选模型', dataIndex: 'preferredModel', width: 180, ellipsis: true }, { title: '备用 Provider', dataIndex: 'fallbackProvider', width: 120, render: (v: string) => {v} }, { title: '备用模型', dataIndex: 'fallbackModel', width: 180, ellipsis: true }, { title: '重试', dataIndex: 'maxRetries', width: 60, align: 'center' as const }, { title: '状态', dataIndex: 'isActive', width: 70, render: (v: boolean) => v ? 启用 : 禁用 }, { title: '操作', width: 80, render: (_: any, r: any) => (