import React, { useState } from 'react'; import { Box, Typography, Card, CardContent, Grid, Button, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, Chip, LinearProgress, Select, MenuItem, FormControl, InputLabel, } from '@mui/material'; import { TrendingUp as TrendingUpIcon, TrendingDown as TrendingDownIcon, Assessment as AssessmentIcon, Speed as SpeedIcon, Error as ErrorIcon, CheckCircle as CheckCircleIcon, } from '@mui/icons-material'; import { styled } from '@mui/material/styles'; const PageContainer = styled(Box)(({ theme }) => ({ padding: '1.5rem', backgroundColor: '#F8F9FA', minHeight: 'calc(100vh - 60px)', })); const PageHeader = styled(Box)(({ theme }) => ({ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '1.5rem', })); const MetricCard = styled(Card)(({ theme }) => ({ height: '100%', border: '1px solid #E5E5E5', transition: 'all 0.2s ease-in-out', '&:hover': { boxShadow: '0 4px 12px rgba(0,0,0,0.1)', }, })); const MetricValue = styled(Typography)(({ theme }) => ({ fontSize: '2rem', fontWeight: 700, lineHeight: 1.2, })); const TrendIndicator = styled(Box)<{ trend: 'up' | 'down' }>(({ trend, theme }) => ({ display: 'flex', alignItems: 'center', gap: '0.25rem', color: trend === 'up' ? '#28A745' : '#DC3545', fontSize: '0.875rem', fontWeight: 500, })); const StatusChip = styled(Chip)<{ status: string }>(({ status, theme }) => ({ fontSize: '0.75rem', height: '24px', backgroundColor: status === 'success' ? '#E8F5E8' : status === 'warning' ? '#FFF3CD' : status === 'error' ? '#F8D7DA' : '#F8F9FA', color: status === 'success' ? '#155724' : status === 'warning' ? '#856404' : status === 'error' ? '#721C24' : '#666', })); const mockMetrics = { totalQueries: { value: 12847, trend: 'up', change: '+12.5%' }, avgResponseTime: { value: '2.3s', trend: 'down', change: '-8.2%' }, successRate: { value: '98.7%', trend: 'up', change: '+0.3%' }, activeUsers: { value: 1256, trend: 'up', change: '+5.7%' }, }; const mockRecentQueries = [ { id: 1, query: '如何配置RAG Pipeline的参数?', user: 'user@example.com', status: 'success', responseTime: '1.8s', timestamp: '2024-01-15 14:30:25', knowledgeBase: '产品文档库', }, { id: 2, query: '客服系统的常见问题有哪些?', user: 'admin@company.com', status: 'success', responseTime: '2.1s', timestamp: '2024-01-15 14:28:15', knowledgeBase: '客服FAQ', }, { id: 3, query: '法律合规要求的详细说明', user: 'legal@company.com', status: 'warning', responseTime: '4.2s', timestamp: '2024-01-15 14:25:10', knowledgeBase: '法律合规', }, { id: 4, query: '员工培训流程和要求', user: 'hr@company.com', status: 'error', responseTime: 'N/A', timestamp: '2024-01-15 14:22:45', knowledgeBase: '培训资料', }, ]; const Dashboard: React.FC = () => { const [timeRange, setTimeRange] = useState('24h'); return ( 运营监控 时间范围 {/* 关键指标卡片 */} 总查询数 {mockMetrics.totalQueries.value.toLocaleString()} {mockMetrics.totalQueries.trend === 'up' ? : } {mockMetrics.totalQueries.change} 平均响应时间 {mockMetrics.avgResponseTime.value} {mockMetrics.avgResponseTime.trend === 'up' ? : } {mockMetrics.avgResponseTime.change} 成功率 {mockMetrics.successRate.value} {mockMetrics.successRate.trend === 'up' ? : } {mockMetrics.successRate.change} 活跃用户 {mockMetrics.activeUsers.value.toLocaleString()} {mockMetrics.activeUsers.trend === 'up' ? : } {mockMetrics.activeUsers.change} {/* 系统状态 */} 系统状态 CPU 使用率 45% 内存使用率 67% 存储使用率 23% 知识库状态 产品文档库 客服FAQ 法律合规 培训资料 {/* 最近查询记录 */} 最近查询记录 查询内容 用户 知识库 状态 响应时间 时间 {mockRecentQueries.map((query) => ( {query.query} {query.user} {query.knowledgeBase} {query.responseTime} {query.timestamp} ))}
); }; export default Dashboard;