import React, { useState } from 'react'; import { Card, Row, Col, Table, Select, Input, Tag, Typography, Button, Space, Avatar, Pagination } from 'antd'; import { CloudOutlined, CheckCircleOutlined, WarningOutlined, MinusCircleOutlined, ThunderboltOutlined, RiseOutlined, SunOutlined, BarChartOutlined, VideoCameraOutlined, RocketOutlined, AppstoreOutlined, RobotOutlined, BranchesOutlined, ExperimentOutlined, SearchOutlined, MoreOutlined, ArrowRightOutlined, FullscreenOutlined, SyncOutlined } from '@ant-design/icons'; import { Line, Bar, Pie } from '@ant-design/charts'; import bgMain from '../assets/images/bgmain.jpg'; import { UniversalBarChart, UniversalLineChart, UniversalPieChart } from '../components/recharts'; import CesiumMap from '../components/Map'; import { useTranslation } from 'react-i18next'; const { Option } = Select; const { Search } = Input; const { Text, Title } = Typography; // 模拟数据扩展 const powerTrendData = [ { time: '00:00', value: 0, type: '实时功率' }, { time: '04:00', value: 50, type: '实时功率' }, { time: '08:00', value: 350, type: '实时功率' }, { time: '12:00', value: 750, type: '实时功率' }, { time: '16:00', value: 500, type: '实时功率' }, { time: '20:00', value: 50, type: '实时功率' }, { time: '24:00', value: 0, type: '实时功率' }, ]; const inverterPowerData = [ { name: 'INV-01', power: 164.2 }, { name: 'INV-02', power: 166.8 }, { name: 'INV-03', power: 162.1 }, { name: 'INV-04', power: 159.7 }, { name: 'INV-05', power: 159.8 } ]; const heatmapColors = ['#52c41a', '#1890ff', '#faad14', '#1890ff', '#52c41a']; const RealTimeMonitorPage = () => { const { t } = useTranslation(); const [filterStatus, setFilterStatus] = useState('all'); const [filterType, setFilterType] = useState(undefined); const [searchName, setSearchName] = useState(''); const cardStyle = { borderRadius: 12, border: '1px solid #f0f0f0', boxShadow: '0 2px 8px rgba(0,0,0,0.04)' }; const getStatusTag = (status) => { const color = status === t('roles.normal') ? '#52c41a' : status === t('constants.sourceAlert') ? '#faad14' : '#999'; return ( {status} ); }; const columns = [ { title: t('devices.deviceName'), dataIndex: 'name', key: 'name', render: (text, record) => (
{record.type === t('home.inverter') ? : }
{text}
) }, { title: t('common.type'), dataIndex: 'type', render: (t) => {t} }, { title: t('workOrder.currentStatus'), dataIndex: 'status', render: getStatusTag }, { title: '实时功率/数据', dataIndex: 'data', render: (d) => {d} }, { title: '通讯状态', dataIndex: 'communication', render: (c) => ( {c} ) }, { title: t('common.updateTime'), dataIndex: 'updateTime', render: (t) => {t} } ]; const deviceList = [ { id: 1, name: '逆变器 INV-01', type: t('home.inverter'), status: t('roles.normal'), data: '164.2 KW', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, { id: 2, name: '逆变器 INV-02', type: t('home.inverter'), status: t('roles.normal'), data: '166.8 KW', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, { id: 3, name: '逆变器 INV-03', type: t('home.inverter'), status: t('roles.normal'), data: '162.1 KW', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, { id: 4, name: '逆变器 INV-04', type: t('home.inverter'), status: t('roles.normal'), data: '159.7 KW', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, { id: 5, name: '逆变器 INV-05', type: t('home.inverter'), status: t('constants.sourceAlert'), data: '159.8 KW', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, { id: 6, name: '汇流箱 01', type: t('home.combinerBox'), status: t('roles.normal'), data: '32 组 / 32 组', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, { id: 7, name: '汇流箱 02', type: t('home.combinerBox'), status: t('roles.normal'), data: '32 组 / 32 组', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, { id: 8, name: '气象站', type: '气象站', status: t('roles.normal'), data: '28.0 ℃ / 815W/m²', communication: '通讯正常', updateTime: '2025-05-25 10:24:15' }, ]; return (
实时监控中心 全方位实时掌握电站设备运行状态与发电表现
{/* 左侧大栏 */} {/* 电站拓扑图 */} 电站拓扑图 (实时)} extra={
roles.normal constants.sourceAlert devices.offline •• 通讯中
} bordered={false} style={{ ...cardStyle, borderRadius: 8 }} bodyStyle={{ padding: 0, position: 'relative', height: 400, overflow: 'hidden' }} >
{/*