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'; import KnowledgeGridView from '@/components/knowledge/KnowledgeGridView'; import UserDataDebug from '@/components/UserDataDebug'; import { useNavigate } from 'react-router-dom'; 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'); const navigate = useNavigate(); // 模拟知识库数据 const mockKnowledgeBases = [ { id: '1', name: '产品文档库', description: '包含所有产品相关的技术文档和用户手册', status: '1', doc_num: 156, chunk_num: 1240, size: 2400000000, // 2.4GB update_date: '2024-01-15', created_by: 'admin', nickname: '管理员', create_date: '2024-01-01', create_time: 1704067200, tenant_id: 'tenant1', token_num: 50000, parser_config: {}, parser_id: 'parser1', pipeline_id: 'pipeline1', pipeline_name: 'Default Pipeline', pipeline_avatar: '', permission: 'read', similarity_threshold: 0.8, update_time: 1705305600, vector_similarity_weight: 0.7, embd_id: 'embd1', operator_permission: 1, }, { id: '2', name: '客服FAQ', description: '常见问题解答和客服对话记录', status: '1', doc_num: 89, chunk_num: 670, size: 1100000000, // 1.1GB update_date: '2024-01-14', created_by: 'support', nickname: '客服团队', create_date: '2024-01-02', create_time: 1704153600, tenant_id: 'tenant1', token_num: 30000, parser_config: {}, parser_id: 'parser1', pipeline_id: 'pipeline1', pipeline_name: 'Default Pipeline', pipeline_avatar: '', permission: 'read', similarity_threshold: 0.8, update_time: 1705219200, vector_similarity_weight: 0.7, embd_id: 'embd1', operator_permission: 1, }, { id: '3', name: '法律合规', description: '法律条文、合规要求和相关政策文档', status: '0', doc_num: 234, chunk_num: 1890, size: 3700000000, // 3.7GB update_date: '2024-01-13', created_by: 'legal', nickname: '法务部', create_date: '2024-01-03', create_time: 1704240000, tenant_id: 'tenant1', token_num: 75000, parser_config: {}, parser_id: 'parser1', pipeline_id: 'pipeline1', pipeline_name: 'Default Pipeline', pipeline_avatar: '', permission: 'read', similarity_threshold: 0.8, update_time: 1705132800, vector_similarity_weight: 0.7, embd_id: 'embd1', operator_permission: 1, }, ]; const handleSeeAllKnowledgeBases = () => { navigate('/knowledge'); }; 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} ))}
{/* 用户数据调试组件 - 仅在开发环境显示 */} {process.env.NODE_ENV === 'development' && ( )}
); }; export default Dashboard;