diff --git a/src/components/alerts/AlarmOverview.tsx b/src/components/alerts/AlarmOverview.tsx index 0fc742a..2dceb1f 100644 --- a/src/components/alerts/AlarmOverview.tsx +++ b/src/components/alerts/AlarmOverview.tsx @@ -250,7 +250,7 @@ export default function AlarmCenterPage() { >
- 告警列表(共8条)
+ 告警列表(共8条)
点击告警查看详情
diff --git a/src/index.css b/src/index.css index 4eab566..a7e65b6 100644 --- a/src/index.css +++ b/src/index.css @@ -35,3 +35,15 @@ .custom-scrollbar::-webkit-scrollbar-track { background: transparent; } .custom-scrollbar::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 10px; } .custom-scrollbar::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.2); } + +.ant-card-head-title{ + color:#0837A8 +} +.ant-statistic-content-suffix{ + font-size: 14px; +} +.ant-statistic-title{ + color:#000 !important; + opacity: 1; + font-weight: 800; +} diff --git a/src/pages/AIAnalysis.tsx b/src/pages/AIAnalysis.tsx new file mode 100644 index 0000000..8a903da --- /dev/null +++ b/src/pages/AIAnalysis.tsx @@ -0,0 +1,540 @@ +import React, { useState } from 'react'; +import { + Row, Col, Card, Button, Tag, Table, Drawer, Typography, Space, Statistic, message +} from 'antd'; +import { ReloadOutlined, PlusOutlined, ArrowDownOutlined, ArrowUpOutlined, CheckCircleOutlined, ExclamationCircleOutlined, LineHeightOutlined } from '@ant-design/icons'; +import { Line, Bar, Pie } from '@ant-design/charts'; +import he from '@/dist/assets/Organization-irk1gmLc'; + +const { Title, Text } = Typography; + +// 模拟数据 +const aiSummaryData = [ + { diagnosis: '热斑检测', status: '异常', confidence: '92%', impact: '高', conclusion: '检测到36处热斑疑似点' }, + { diagnosis: '组串失配', status: '异常', confidence: '90%', impact: '高', conclusion: '8串组串存在异常' }, + { diagnosis: '遮挡风险', status: '轻微', confidence: '78%', impact: '中', conclusion: '局部遮挡影响2%发电量' }, + { diagnosis: '组件衰减', status: '异常', confidence: '86%', impact: '中', conclusion: '平均衰减率-5.32%' }, + { diagnosis: '逆变器效率', status: '正常', confidence: '93%', impact: '低', conclusion: '运行效率稳定' }, + { diagnosis: '清洗收益', status: '建议', confidence: '88%', impact: '中', conclusion: '建议优先清洗B区' }, +]; + +const aiRecommendations = [ + { measure: '处理劣质组件', priority: '高', expectedGain: '+2.15%', confidence: '92%' }, + { measure: '排查异常组串', priority: '高', expectedGain: '+1.85%', confidence: '90%' }, + { measure: '清洗受遮挡区域', priority: '中', expectedGain: '+0.45%', confidence: '78%' }, + { measure: '跟踪衰减组件', priority: '中', expectedGain: '+0.35%', confidence: '86%' }, + { measure: '持续监控逆变器效率', priority: '低', expectedGain: '+0.10%', confidence: '93%' }, + { measure: '复核电压波动点', priority: '中', expectedGain: '+0.28%', confidence: '82%' }, +]; + +const thermalImagingData = [ + { title: '热斑异常', name: '方阵A-05', temp: '71.5℃', image: '' }, + { title: '高温风险', name: '方阵A-12', temp: '68.3℃', image: '' }, + { title: '疑似遮挡', name: '方阵B-03', temp: '64.8℃', image: '' }, + { title: '热斑异常', name: '方阵C-07', temp: '67.2℃', image: '' }, + { title: '轻微升温', name: '方阵D-11', temp: '58.9℃', image: '' }, + { title: '组件衰减', name: '方阵E-18', temp: '62.4℃', image: '' }, +]; + +// 图表配置 +const degradationConfig = { + data: [ + { date: 'D1', 平均衰减率: 0, 最佳组件: 0, 最差组件: -1 }, + { date: 'D4', 平均衰减率: -1, 最佳组件: -0.5, 最差组件: -2 }, + { date: 'D7', 平均衰减率: -1.5, 最佳组件: -0.8, 最差组件: -3 }, + { date: 'D10', 平均衰减率: -2, 最佳组件: -1, 最差组件: -4 }, + { date: 'D13', 平均衰减率: -2.5, 最佳组件: -1.2, 最差组件: -5 }, + { date: 'D16', 平均衰减率: -3, 最佳组件: -1.5, 最差组件: -6 }, + { date: 'D19', 平均衰减率: -3.5, 最佳组件: -1.8, 最差组件: -7 }, + { date: 'D22', 平均衰减率: -4, 最佳组件: -2, 最差组件: -8 }, + { date: 'D25', 平均衰减率: -4.5, 最佳组件: -2.2, 最差组件: -9 }, + { date: 'D28', 平均衰减率: -5.32, 最佳组件: -2.5, 最差组件: -10 }, + ], + xField: 'date', + yField: ['平均衰减率', '最佳组件', '最差组件'], + color: ['#1890ff', '#52c41a', '#faad14'], + smooth: true, + areaStyle: { fillOpacity: 0.15 }, + legend: { position: 'top-left' }, +}; + +const generationConfig = { + data: [ + { time: '00:00', 实际发电: 50, 预测发电: 60, 理论发电: 80 }, + { time: '03:00', 实际发电: 50, 预测发电: 60, 理论发电: 80 }, + { time: '06:00', 实际发电: 100, 预测发电: 120, 理论发电: 150 }, + { time: '09:00', 实际发电: 800, 预测发电: 900, 理论发电: 1000 }, + { time: '12:00', 实际发电: 1400, 预测发电: 1600, 理论发电: 1800 }, + { time: '15:00', 实际发电: 1200, 预测发电: 1400, 理论发电: 1600 }, + { time: '18:00', 实际发电: 600, 预测发电: 700, 理论发电: 800 }, + { time: '21:00', 实际发电: 100, 预测发电: 120, 理论发电: 150 }, + { time: '24:00', 实际发电: 50, 预测发电: 60, 理论发电: 80 }, + { time: '27:00', 实际发电: 50, 预测发电: 60, 理论发电: 80 }, + ], + xField: 'time', + yField: ['实际发电', '预测发电', '理论发电'], + color: ['#1890ff', '#52c41a', '#faad14'], + smooth: true, + areaStyle: { fillOpacity: 0.15 }, + legend: { position: 'top' }, +}; + +export default function AIDiagnosisPage() { + const [drawerVisible, setDrawerVisible] = useState(false); + const [selectedTask, setSelectedTask] = useState(null); + + // 状态标签渲染 + const renderStatusTag = (status: string) => { + const statusMap: Record = { + '异常': 异常, + '正常': 正常, + '轻微': 轻微, + '建议': 建议, + }; + return statusMap[status] || {status}; + }; + + const renderPriorityTag = (priority: string) => { + const colorMap: Record = { '高': 'red', '中': 'orange', '低': 'green' }; + return {priority}; + }; + + return ( +
+ {/* 顶部标题和操作 */} +
+
+ AI诊断分析 + 无人机热成像、组串异常定位、发电偏差与AI处置建议 +
+ + + + +
+ + {/* 顶部指标卡片 */} + + + + AI
} + /> +
较昨日 -1.3%
+ + + + + } + /> +
较昨日 -1.02%
+
+ + + + ▦} + /> +
较昨日 +2
+
+ + + + } + /> +
较昨日 +5
+
+ + + + } + /> +
较昨日 -1.7
+
+ + + + ⚡} + /> +
较昨日 +2.6%
+
+ + + + {/* 热成像和组串定位 */} + + + 热成像分析(无人机巡检)} + bordered={false} + style={{ borderRadius: 8 }} + extra={巡检时间:2026-05-06 09:30} + > + + {thermalImagingData.map((item, idx) => ( + +
+
+ {item.title} +
+
+
{item.name}
+
{item.temp}
+
+
+ + ))} +
+
+
+ 热斑疑似点 + 高温区域 +
+ 温度范围:25℃ - 85℃ +
+
+ + + 组串异常定位} + bordered={false} + style={{ borderRadius: 8, height: "100%" }} + extra={
20列 × 8排二维矩阵,点击点位查看详情异常组串:8
} + > +
+
+ {/* 组串矩阵模拟 */} +
+ {Array.from({ length: 8 }).map((_, row) => + Array.from({ length: 20 }).map((_, col) => { + const isNormal = true; + const isLight = (row === 4 && col === 2); + const isAbnormal = (row === 1 && col === 1) || (row === 1 && col === 10) || (row === 3 && col === 15) || (row === 5 && col === 18); + const isSevere = (row === 0 && col === 8) || (row === 3 && col === 8); + let bgColor = '#91d5ff'; // 正常 + if (isLight) bgColor = '#e6f7ff'; + if (isAbnormal) bgColor = '#faad14'; + if (isSevere) bgColor = '#ff4d4f'; + return ( +
{ + setSelectedTask({ + id: `A-${col + 1}`, + temp: isSevere ? '75℃' : '68℃', + deviation: '-18.6%', + count: 3, + level: isSevere ? '严重异常' : '异常' + }); + setDrawerVisible(true); + }} + /> + ); + }) + )} +
+
+ 正常 + 轻微异常 + 异常 + 严重异常 +
+
+
+
+
A-03
+
温度 75℃
+
发电偏差 -18.6%
+
历史异常 3 次
+
等级:严重异常
+
+ +
+
+ + + + + {/* 图表和表格 */} + + + 组件衰减分析} + bordered={false} + style={{ borderRadius: 8 }} + > + + + + + 发电表现分析} + bordered={false} + style={{ borderRadius: 8 }} + > + + + + + AI诊断总结} + bordered={false} + style={{ borderRadius: 8, height: '100%' }} + extra={模型置信度与影响程度} + > + {/* 关键:给 Table 设置固定高度 + 滚动 */} +
+ + + + + + + {/* 数据来源和AI建议 */} + + + 数据来源状态} + bordered={false} + style={{ borderRadius: 8, height: '100%' }} + extra={多源数据融合质量} + > + + +
+
UAV
+
无人机
+
数据状态:正常
+
+ + +
+
DB
+
SCA
+
数据状态:正常
+
+ + + + + +
+
UAV
+
无人机
+
数据状态:正常
+
+ + +
+
UAV
+
无人机
+
数据状态:正常
+
+ + + + + + + AI建议与处置} + bordered={false} + style={{ borderRadius: 8 }} + extra={按收益、优先级与置信度排序} + > + {/* 👇 关键:外层包一层 div,设置高度 + 滚动 */} +
+
( + + + + + ) + }, + ]} + dataSource={aiRecommendations} + pagination={false} + size="small" + scroll={{ y: undefined }} + /> + + + + + + {/* 二级入口按钮 */} + +
+
+ 二级入口 + 原诊断任务、热斑结果、AI建议、诊断报告保留为操作入口 +
+ + + + + + +
+
+ + {/* 抽屉详情 */} + AI诊断详情} + placement="right" + onClose={() => setDrawerVisible(false)} + open={drawerVisible} + width={600} + > + {selectedTask && ( +
+ +
+
+ 任务 + AIT-DEMO-HEALTH-01 +
+
+ 算法 + 设备健康演示算法 +
+
+ 结果 + RES-DEMO-INV-A02 +
+
+ 最高温 + {selectedTask.temp} +
+ + +
+ 状态 + SUCCESS +
+
+ 进度 + 100% +
+
+ 等级 + {selectedTask.level} +
+
+ 置信度 + 90% +
+ + +
+ 摘要 +
+ 结合遥感数据发现逆变器温度偏高且功率波动,建议检修散热。 +
+
+
+ 图片/热成像文件 + +
+
+ 方阵A-05
热点异常 · 71.5℃
+
+ + +
+ 方阵A-12
高温风险 · 68.3℃
+
+ + +
+ 方阵B-03
疑似遮挡 · 64.8℃
+
+ + + +
+ 热斑列表 +
+ +
+ AI JSON摘要 +
+								{`{
+  "demo": true,
+  "metric": [
+    "temperature",
+    "activePower"
+  ]
+}`}
+							
+
+ + )} + + + ); +} diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 7d28063..9581a6e 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -6,7 +6,6 @@ import { MinusOutlined, PlusOutlined, SyncOutlined } from '@ant-design/icons'; import { Line, Bar, Pie } from '@ant-design/charts'; -import { getOverflowOptions } from 'antd/es/_util/placements'; const { Text } = Typography; @@ -177,7 +176,7 @@ export default function StationDashboard() { {/* 左侧图表列 - 最终完美版:不溢出 + 一定可见 */} 发电趋势} bordered={false} style={{ ...cardStyle, @@ -198,7 +197,7 @@ export default function StationDashboard() { 辐照度与温度} bordered={false} style={{ ...cardStyle, @@ -219,7 +218,7 @@ export default function StationDashboard() { 逆变器效率} bordered={false} style={{ ...cardStyle, @@ -240,7 +239,7 @@ export default function StationDashboard() { 运维任务进度} bordered={false} style={{ ...cardStyle, @@ -267,7 +266,7 @@ export default function StationDashboard() { title={
-
电站概览
+
电站概览
GeoTIFF 正射底图 · 设备点位叠加
@@ -319,7 +318,7 @@ export default function StationDashboard() { - 实时告警 {/* 缩小标题 */} + 实时告警
} @@ -338,7 +337,7 @@ export default function StationDashboard() { display: 'flex', alignItems: 'center', justifyContent: 'space-between', - marginBottom: idx === realtimeAlerts.length - 1 ? 0 : 8, // 缩小行间距 + marginBottom: idx === realtimeAlerts.length - 1 ? 0 : 8, fontSize: 12 }} > @@ -358,7 +357,7 @@ export default function StationDashboard() { {alert.level} - {alert.type} {/* 缩小 */} + {alert.type} {alert.time} @@ -367,7 +366,7 @@ export default function StationDashboard() { {/* 设备在线状态 */} 设备在线状态} + title={设备在线状态} bordered={false} style={{ borderRadius: 8, @@ -400,7 +399,7 @@ export default function StationDashboard() { {/* 天气信息 */} 天气信息} + title={天气信息} bordered={false} style={{ borderRadius: 8, @@ -421,13 +420,7 @@ export default function StationDashboard() {
风速 4.1 m/s
中卫市
- - - - - -
@@ -435,7 +428,7 @@ export default function StationDashboard() { - 清洗建议 + 清洗建议 } @@ -475,7 +468,12 @@ export default function StationDashboard() {
- + 近期巡检记录} + bordered={false} + style={{ ...cardStyle, height: '100%' }} + bodyStyle={{ padding: 12, height: '66%', overflow: 'auto', scrollbarWidth: 'thin', scrollbarColor: '#ccc transparent' }} + > {patrolRecords.map((item, idx) => (
@@ -490,7 +488,12 @@ export default function StationDashboard() {
- + AI分析摘要} + bordered={false} + style={{ ...cardStyle, height: '100%' }} + bodyStyle={{ padding: 12, height: '66%', overflow: 'auto', scrollbarWidth: 'thin', scrollbarColor: '#ccc transparent' }} + > {aiAnalysis.map((item, idx) => (
{item.type} @@ -502,8 +505,6 @@ export default function StationDashboard() { - -
); diff --git a/src/pages/SystemSetting.tsx b/src/pages/SystemSetting.tsx index ac5ac73..4ae0ef0 100644 --- a/src/pages/SystemSetting.tsx +++ b/src/pages/SystemSetting.tsx @@ -199,6 +199,11 @@ export default function SystemSettings() { }; return ( +
+ 系统设置 + 告警规则配置、用户角色、通知管理与系统参数设置 + +
{/* ========== 顶部统计卡片:统一高度 ========== */} - -
- -
+ +
+ +
-
32 台
-
在线摄像头
-
在线率 ↑ 4.1%
+
32 台
+
在线摄像头
+
在线率 ↑ 4.1%
- +
- - -
+
+ +
-
2 台
-
离线摄像头
-
离线率 ↑ 5.9%
+
2 台
+
离线摄像头
+
离线率 ↑ 5.9%
- +
- - -
+
+ +
-
6 起
-
今日告警事件
-
较昨日 ↑ 50%
+
6 起
+
今日告警事件
+
较昨日 ↑ 50%
- +
- - -
+
+ +
-
2 起
-
周界告警
-
较昨日 ↑ 100%
+
2 起
+
周界告警
+
较昨日 ↑ 100%
- +
- - -
+
+ +
-
78.6TB
-
存储使用率
-
使用率 65.5%
+
78.6TB
+
存储使用率
+
使用率 65.5%
- +
diff --git a/src/router/index.tsx b/src/router/index.tsx index 5e26d3a..b0633fa 100644 --- a/src/router/index.tsx +++ b/src/router/index.tsx @@ -2,6 +2,7 @@ import React, { lazy, Suspense } from 'react'; import { createBrowserRouter } from 'react-router-dom'; import type { RouteObject } from 'react-router-dom'; import VideoMonitorPage from '../pages/VideoMonitorPage'; +import AIDiagnosisPage from '../pages/AIAnalysis'; const Layout = lazy(() => import('../components/Layout')); const ProtectedRoute = lazy(() => import('../components/ProtectedRoute')); @@ -82,7 +83,9 @@ const routes: RouteObject[] = [ { path: 'video', element: