import { useState } from 'react' import { useQuery, useQueryClient } from '@tanstack/react-query' import { Table, Button, Typography, App, Modal, Input, Select, Tag, Tabs, DatePicker } from 'antd' import { ReloadOutlined, PlusOutlined, DeleteOutlined, KeyOutlined } from '@ant-design/icons' import { api } from '@/services/http-client' import dayjs from 'dayjs' const { Title, Text } = Typography function SecretsPage() { const { modal, message } = App.useApp() const qc = useQueryClient() const [addOpen, setAddOpen] = useState(false) const [form, setForm] = useState({ name: '', provider: 'deepseek', value: '', expiresAt: '' }) const { data: secrets } = useQuery({ queryKey: ['secrets'], queryFn: (): Promise => api.get('/admin-api/secrets') }) const { data: logs } = useQuery({ queryKey: ['secrets', 'logs'], queryFn: (): Promise => api.get('/admin-api/secrets/logs') }) const addSecret = async () => { await api.post('/admin-api/secrets', form) message.success('已添加') setAddOpen(false); qc.invalidateQueries({ queryKey: ['secrets'] }) } const deleteSecret = (id: string) => modal.confirm({ title: '删除密钥', okType: 'danger', onOk: async () => { await api.delete(`/admin-api/secrets/${id}`); qc.invalidateQueries({ queryKey: ['secrets'] }) }, }) const secCols = [ { title: '名称', dataIndex: 'name', width: 150 }, { title: '服务商', dataIndex: 'provider', width: 100, render: (v: string) => {v} }, { title: '末四位', dataIndex: 'maskLast4', width: 80, render: (v: string) => ****{v} }, { title: '状态', dataIndex: 'status', width: 70, render: (v: string) => {v} }, { title: '到期', dataIndex: 'expiresAt', width: 100, render: (d: string) => d ? dayjs(d).format('MM-DD') : 永久 }, { title: '操作', width: 80, render: (_:any, r:any) => }, { key: 'logs', label: '访问日志', children: }, ]} /> setAddOpen(false)} okText="添加"> setForm({...form, name: e.target.value})} style={{ marginBottom: 12 }} />