import React, { useState } from 'react'; import { Table, Button, Space } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { DeleteOutlined, FilterFilled } from '@ant-design/icons'; import { ProxyLog } from '@/types/proxy'; import { LogDetail } from './LogDetail'; interface ProxyLogsProps { logs: ProxyLog[]; onClearLogs: () => void; } export const ProxyLogs: React.FC = ({ logs, onClearLogs }) => { const [selectedLog, setSelectedLog] = useState(null); const [resourceFilter, setResourceFilter] = useState([]); const columns: ColumnsType = [ { title: '时间', dataIndex: 'timestamp', key: 'timestamp', render: (timestamp: number) => new Date(timestamp).toLocaleString() }, { title: 'URL', dataIndex: 'url', key: 'url', ellipsis: true }, { title: ( 类型 {resourceFilter.length > 0 && } ), dataIndex: 'resourceType', key: 'resourceType', render: (type: string) => { const typeMap: Record = { xhr: 'XHR', fetch: 'Fetch', script: 'JS', stylesheet: 'CSS', image: 'Image', other: 'Other' }; return typeMap[type] || 'Other'; }, filters: [ { text: 'XHR', value: 'xhr' }, { text: 'Fetch', value: 'fetch' }, { text: 'JS', value: 'script' }, { text: 'CSS', value: 'stylesheet' }, { text: 'Image', value: 'image' }, { text: 'Other', value: 'other' } ], filterMode: 'menu' as const, filtered: resourceFilter.length > 0, onFilter: (value: string, record: ProxyLog) => record.resourceType === value }, { title: '使用代理', dataIndex: 'proxyName', key: 'proxyName' }, { title: '状态', dataIndex: 'status', key: 'status', render: (status: string) => ( {status === 'success' ? '成功' : '失败'} ) }, { title: '错误信息', dataIndex: 'errorMessage', key: 'errorMessage', ellipsis: true } ]; const filteredLogs = logs.filter(log => { if (resourceFilter.length === 0) return true; return resourceFilter.includes(log.resourceType || 'other'); }); return (
({ onClick: () => setSelectedLog(record), style: { cursor: 'pointer' } })} pagination={{ pageSize: 10, showSizeChanger: true, showQuickJumper: true, showTotal: (total) => `共 ${total} 条`, pageSizeOptions: ['10', '20', '50', '100'] }} rowKey="id" /> setSelectedLog(null)} /> ); };