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' }}
>
{/**/}
{/* 设备实时监控列表 */}
设备实时监控列表}
bordered={false}
style={{ ...cardStyle, borderRadius: 8 }}
extra={
全部 56
正常 52
告警 1
离线 3
} style={{ width: 120 }} />
}
>
{/* 右侧小栏 */}
{/* 6个统计卡片 */}
{[
{ title: '当前总功率', value: '812.6', unit: 'kW', sub: '额定功率 1,000 kW', color: '#165DFF', icon: },
{ title: '并网状态', value: '并网正常', unit: '', sub: '频率 50.02 Hz', color: '#00B42A', icon: },
{ title: '电网电压', value: '380.2', unit: 'V', sub: 'A相 380.1 V', color: '#165DFF', icon: },
{ title: '今日累计发电量', value: '4,752', unit: t('home.kWh'), sub: '昨日 5,000 kWh', color: '#00B42A', icon: },
{ title: '当前辐照度', value: '815', unit: 'W/m²', sub: '较昨日 +5.6%', color: '#faad14', icon: },
{ title: '环境温度', value: '28.0', unit: '℃', sub: '较昨日 +1.2 ℃', color: '#165DFF', icon: },
].map((item, idx) => (
{item.icon}
{item.title}
{item.value}
{item.unit}
{item.sub}
))}
{/* 实时功率曲线 */}
实时功率曲线} extra={} bordered={false} style={cardStyle} bodyStyle={{ padding: '12px' }}>
{/* 逆变器功率对比 */}
逆变器功率对比 (实时)} bordered={false} style={cardStyle} bodyStyle={{ padding: '12px' }}>
{/* 热力图与在线率 */}
组串电流热力图 (单位: A)} extra={} bordered={false} style={cardStyle} bodyStyle={{ padding: '12px' }}>
{['INV-01', 'INV-02', 'INV-03', 'INV-04', 'INV-05'].map((name, i) => (
{name}
{Array.from({ length: 12 }).map((_, j) => (
))}
))}
15101520253032
{[
{ name: '逆变器 INV-01', status: t('roles.normal'), color: '#52c41a' },
{ name: '逆变器 INV-02', status: t('roles.normal'), color: '#52c41a' },
{ name: '逆变器 INV-03', status: t('roles.normal'), color: '#52c41a' },
{ name: '逆变器 INV-04', status: t('roles.normal'), color: '#52c41a' },
{ name: '逆变器 INV-05', status: t('constants.sourceAlert'), color: '#faad14' },
{ name: '气象站', status: t('roles.normal'), color: '#52c41a' },
{ name: '无人机机场', status: t('roles.normal'), color: '#52c41a' },
{ name: t('home.inspectionRobot'), status: t('roles.normal'), color: '#52c41a' },
].map((item, idx) => (
{item.name.includes(t('home.inverter')) ? : }
{item.name}
{item.status}
))}
设备在线率} bordered={false} style={{ ...cardStyle, height: "100%" }} bodyStyle={{ padding: '12px' }}>
在线 52 (92.1%)
离线 3 (5.3%)
告警 1 (1.8%)
总数 56
);
};
export default RealTimeMonitorPage;