|  |  |  | @ -27,7 +27,7 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |     const [dataSource, setDataSource] = useState([]); | 
		
	
		
			
				|  |  |  |  |     const [pagination, setPagination] = useState({ | 
		
	
		
			
				|  |  |  |  |         current: 1, | 
		
	
		
			
				|  |  |  |  |         pageSize: 8, | 
		
	
		
			
				|  |  |  |  |         pageSize: 5, | 
		
	
		
			
				|  |  |  |  |         total: 0, | 
		
	
		
			
				|  |  |  |  |     }); | 
		
	
		
			
				|  |  |  |  |     const [searchText, setSearchText] = useState(''); | 
		
	
	
		
			
				
					|  |  |  | @ -42,12 +42,12 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                     left: '5%', | 
		
	
		
			
				|  |  |  |  |                     right: '5%', | 
		
	
		
			
				|  |  |  |  |                     bottom: '10%', | 
		
	
		
			
				|  |  |  |  |                     top: '20%', | 
		
	
		
			
				|  |  |  |  |                     top: '18%', | 
		
	
		
			
				|  |  |  |  |                     containLabel: true | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 xAxis: { | 
		
	
		
			
				|  |  |  |  |                     type: 'category', | 
		
	
		
			
				|  |  |  |  |                     data: ['灭火器', '消火栓', '报警器', '疏散灯', '排烟设备'], | 
		
	
		
			
				|  |  |  |  |                     data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], | 
		
	
		
			
				|  |  |  |  |                     axisLabel: { | 
		
	
		
			
				|  |  |  |  |                         fontSize: 12, | 
		
	
		
			
				|  |  |  |  |                         color: '#333', | 
		
	
	
		
			
				
					|  |  |  | @ -64,8 +64,8 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                 yAxis: { | 
		
	
		
			
				|  |  |  |  |                     type: 'value', | 
		
	
		
			
				|  |  |  |  |                     min: 0, | 
		
	
		
			
				|  |  |  |  |                     max: 50, | 
		
	
		
			
				|  |  |  |  |                     interval: 10, | 
		
	
		
			
				|  |  |  |  |                     max: 35, | 
		
	
		
			
				|  |  |  |  |                     interval: 5, | 
		
	
		
			
				|  |  |  |  |                     axisLabel: { | 
		
	
		
			
				|  |  |  |  |                         fontSize: 12, | 
		
	
		
			
				|  |  |  |  |                         color: '#666', | 
		
	
	
		
			
				
					|  |  |  | @ -84,57 +84,71 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 series: [{ | 
		
	
		
			
				|  |  |  |  |                     name: '使用次数', | 
		
	
		
			
				|  |  |  |  |                 series: [ | 
		
	
		
			
				|  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |                         name: '火灾报警', | 
		
	
		
			
				|  |  |  |  |                         type: 'bar', | 
		
	
		
			
				|  |  |  |  |                     barWidth: 27, | 
		
	
		
			
				|  |  |  |  |                     data: [35, 28, 42, 31, 38], | 
		
	
		
			
				|  |  |  |  |                         stack: 'total', | 
		
	
		
			
				|  |  |  |  |                         barWidth: 20, | 
		
	
		
			
				|  |  |  |  |                         data: [12, 8, 15, 10, 18, 14, 16, 13, 11, 17, 19, 15], | 
		
	
		
			
				|  |  |  |  |                         itemStyle: { | 
		
	
		
			
				|  |  |  |  |                         color: { | 
		
	
		
			
				|  |  |  |  |                             type: 'linear', | 
		
	
		
			
				|  |  |  |  |                             x: 0, | 
		
	
		
			
				|  |  |  |  |                             y: 0, | 
		
	
		
			
				|  |  |  |  |                             x2: 0, | 
		
	
		
			
				|  |  |  |  |                             y2: 1, | 
		
	
		
			
				|  |  |  |  |                             colorStops: [ | 
		
	
		
			
				|  |  |  |  |                                 { offset: 0, color: '#199BFB' }, | 
		
	
		
			
				|  |  |  |  |                                 { offset: 1, color: '#1373FA' } | 
		
	
		
			
				|  |  |  |  |                             ] | 
		
	
		
			
				|  |  |  |  |                             color: '#8979FF' | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     emphasis: { | 
		
	
		
			
				|  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |                         name: '故障报警', | 
		
	
		
			
				|  |  |  |  |                         type: 'bar', | 
		
	
		
			
				|  |  |  |  |                         stack: 'total', | 
		
	
		
			
				|  |  |  |  |                         barWidth: 20, | 
		
	
		
			
				|  |  |  |  |                         data: [6, 9, 7, 12, 8, 11, 9, 14, 10, 7, 8, 6], | 
		
	
		
			
				|  |  |  |  |                         itemStyle: { | 
		
	
		
			
				|  |  |  |  |                             color: { | 
		
	
		
			
				|  |  |  |  |                                 type: 'linear', | 
		
	
		
			
				|  |  |  |  |                                 x: 0, | 
		
	
		
			
				|  |  |  |  |                                 y: 0, | 
		
	
		
			
				|  |  |  |  |                                 x2: 0, | 
		
	
		
			
				|  |  |  |  |                                 y2: 1, | 
		
	
		
			
				|  |  |  |  |                                 colorStops: [ | 
		
	
		
			
				|  |  |  |  |                                     { offset: 0, color: '#0D7AE8' }, | 
		
	
		
			
				|  |  |  |  |                                     { offset: 1, color: '#0F5BC7' } | 
		
	
		
			
				|  |  |  |  |                                 ] | 
		
	
		
			
				|  |  |  |  |                             color: '#FF928A' | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |                         name: '误报', | 
		
	
		
			
				|  |  |  |  |                         type: 'bar', | 
		
	
		
			
				|  |  |  |  |                         stack: 'total', | 
		
	
		
			
				|  |  |  |  |                         barWidth: 20, | 
		
	
		
			
				|  |  |  |  |                         data: [3, 5, 4, 7, 6, 8, 5, 9, 7, 4, 6, 5], | 
		
	
		
			
				|  |  |  |  |                         itemStyle: { | 
		
	
		
			
				|  |  |  |  |                             color: '#3CC3DF' | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 }], | 
		
	
		
			
				|  |  |  |  |                 ], | 
		
	
		
			
				|  |  |  |  |                 legend: { | 
		
	
		
			
				|  |  |  |  |                     show: true, | 
		
	
		
			
				|  |  |  |  |                     top: '5%', | 
		
	
		
			
				|  |  |  |  |                     top: '8%', | 
		
	
		
			
				|  |  |  |  |                     left: 'center', | 
		
	
		
			
				|  |  |  |  |                     itemWidth: 15, | 
		
	
		
			
				|  |  |  |  |                     itemHeight: 3, | 
		
	
		
			
				|  |  |  |  |                     itemWidth: 8, | 
		
	
		
			
				|  |  |  |  |                     itemHeight: 8, | 
		
	
		
			
				|  |  |  |  |                     textStyle: { | 
		
	
		
			
				|  |  |  |  |                         fontSize: 12, | 
		
	
		
			
				|  |  |  |  |                         color: '#333' | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     data: [{ | 
		
	
		
			
				|  |  |  |  |                         name: '使用次数', | 
		
	
		
			
				|  |  |  |  |                     data: [ | 
		
	
		
			
				|  |  |  |  |                         { | 
		
	
		
			
				|  |  |  |  |                             name: '火灾报警', | 
		
	
		
			
				|  |  |  |  |                             icon: 'rect', | 
		
	
		
			
				|  |  |  |  |                             itemStyle: { | 
		
	
		
			
				|  |  |  |  |                             color: '#4B69F1' | 
		
	
		
			
				|  |  |  |  |                                 color: '#8979FF' | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                     }] | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         { | 
		
	
		
			
				|  |  |  |  |                             name: '故障报警', | 
		
	
		
			
				|  |  |  |  |                             icon: 'rect', | 
		
	
		
			
				|  |  |  |  |                             itemStyle: { | 
		
	
		
			
				|  |  |  |  |                                 color: '#FF928A' | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         { | 
		
	
		
			
				|  |  |  |  |                             name: '误报', | 
		
	
		
			
				|  |  |  |  |                             icon: 'rect', | 
		
	
		
			
				|  |  |  |  |                             itemStyle: { | 
		
	
		
			
				|  |  |  |  |                                 color: '#3CC3DF' | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     ] | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 tooltip: { | 
		
	
		
			
				|  |  |  |  |                     trigger: 'axis', | 
		
	
	
		
			
				
					|  |  |  | @ -142,7 +156,11 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                         type: 'shadow' | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     formatter: function (params) { | 
		
	
		
			
				|  |  |  |  |                         return `${params[0].name}<br/>使用次数: ${params[0].value}`; | 
		
	
		
			
				|  |  |  |  |                         let result = `${params[0].name}<br/>`; | 
		
	
		
			
				|  |  |  |  |                         params.forEach(param => { | 
		
	
		
			
				|  |  |  |  |                             result += `${param.seriesName}: ${param.value}<br/>`; | 
		
	
		
			
				|  |  |  |  |                         }); | 
		
	
		
			
				|  |  |  |  |                         return result; | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             }; | 
		
	
	
		
			
				
					|  |  |  | @ -167,13 +185,12 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }, []); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // 维护费用趋势折线图初始化
 | 
		
	
		
			
				|  |  |  |  |     // 设备运行状态趋势折线图初始化
 | 
		
	
		
			
				|  |  |  |  |     useEffect(() => { | 
		
	
		
			
				|  |  |  |  |         if (faultPieChartRef.current) { | 
		
	
		
			
				|  |  |  |  |             const faultPieChart = echarts.init(faultPieChartRef.current); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             const faultPieOption = { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 legend: { | 
		
	
		
			
				|  |  |  |  |                     show: true, | 
		
	
		
			
				|  |  |  |  |                     top: '5%', | 
		
	
	
		
			
				
					|  |  |  | @ -211,9 +228,9 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 yAxis: { | 
		
	
		
			
				|  |  |  |  |                     type: 'value', | 
		
	
		
			
				|  |  |  |  |                     min: 20000, | 
		
	
		
			
				|  |  |  |  |                     max: 30000, | 
		
	
		
			
				|  |  |  |  |                     interval: 2000, | 
		
	
		
			
				|  |  |  |  |                     min: 0, | 
		
	
		
			
				|  |  |  |  |                     max: 100, | 
		
	
		
			
				|  |  |  |  |                     interval: 20, | 
		
	
		
			
				|  |  |  |  |                     axisLine: { | 
		
	
		
			
				|  |  |  |  |                         show: false | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
	
		
			
				
					|  |  |  | @ -223,7 +240,7 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                     axisLabel: { | 
		
	
		
			
				|  |  |  |  |                         color: '#666', | 
		
	
		
			
				|  |  |  |  |                         fontSize: 12, | 
		
	
		
			
				|  |  |  |  |                         formatter: '¥{value}' | 
		
	
		
			
				|  |  |  |  |                         formatter: '{value}%' | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     splitLine: { | 
		
	
		
			
				|  |  |  |  |                         lineStyle: { | 
		
	
	
		
			
				
					|  |  |  | @ -232,20 +249,21 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 series: [{ | 
		
	
		
			
				|  |  |  |  |                     name: '费用', | 
		
	
		
			
				|  |  |  |  |                 series: [ | 
		
	
		
			
				|  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |                         name: '正常运行率', | 
		
	
		
			
				|  |  |  |  |                         type: 'line', | 
		
	
		
			
				|  |  |  |  |                     data: [29000, 21000, 27500, 21900, 26000, 25000, 27000, 24000, 22300, 28000, 29000, 27000], | 
		
	
		
			
				|  |  |  |  |                         data: [85, 78, 92, 88, 95, 90, 87, 93, 89, 91, 86, 88], | 
		
	
		
			
				|  |  |  |  |                         smooth: false, | 
		
	
		
			
				|  |  |  |  |                         symbol: 'circle', | 
		
	
		
			
				|  |  |  |  |                         symbolSize: 6, | 
		
	
		
			
				|  |  |  |  |                         lineStyle: { | 
		
	
		
			
				|  |  |  |  |                         color: '#1269FF', | 
		
	
		
			
				|  |  |  |  |                             color: '#3CC3DF', | 
		
	
		
			
				|  |  |  |  |                             width: 1 | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         itemStyle: { | 
		
	
		
			
				|  |  |  |  |                         color: '#fff', | 
		
	
		
			
				|  |  |  |  |                         borderColor: '#1269FF', | 
		
	
		
			
				|  |  |  |  |                             color: '#FFF', | 
		
	
		
			
				|  |  |  |  |                             borderColor: '#3CC3DF', | 
		
	
		
			
				|  |  |  |  |                             borderWidth: 1 | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         areaStyle: { | 
		
	
	
		
			
				
					|  |  |  | @ -257,14 +275,61 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                                 y2: 1, | 
		
	
		
			
				|  |  |  |  |                                 colorStops: [{ | 
		
	
		
			
				|  |  |  |  |                                     offset: 0, | 
		
	
		
			
				|  |  |  |  |                                 color: 'rgba(18, 105, 255, 0.3)' | 
		
	
		
			
				|  |  |  |  |                                     color: 'rgba(60, 195, 223, 0.3)' | 
		
	
		
			
				|  |  |  |  |                                 }, { | 
		
	
		
			
				|  |  |  |  |                                     offset: 1, | 
		
	
		
			
				|  |  |  |  |                                 color: 'rgba(18, 105, 255, 0.05)' | 
		
	
		
			
				|  |  |  |  |                                     color: 'rgba(60, 195, 223, 0.05)' | 
		
	
		
			
				|  |  |  |  |                                 }] | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |                         name: '故障率', | 
		
	
		
			
				|  |  |  |  |                         type: 'line', | 
		
	
		
			
				|  |  |  |  |                         data: [15, 22, 8, 12, 5, 10, 13, 7, 11, 9, 14, 12], | 
		
	
		
			
				|  |  |  |  |                         smooth: false, | 
		
	
		
			
				|  |  |  |  |                         symbol: 'circle', | 
		
	
		
			
				|  |  |  |  |                         symbolSize: 6, | 
		
	
		
			
				|  |  |  |  |                         lineStyle: { | 
		
	
		
			
				|  |  |  |  |                             color: '#8979FF', | 
		
	
		
			
				|  |  |  |  |                             width: 1 | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         itemStyle: { | 
		
	
		
			
				|  |  |  |  |                             color: '#fff', | 
		
	
		
			
				|  |  |  |  |                             borderColor: '#8979FF', | 
		
	
		
			
				|  |  |  |  |                             borderWidth: 1 | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         areaStyle: { | 
		
	
		
			
				|  |  |  |  |                             color: { | 
		
	
		
			
				|  |  |  |  |                                 type: 'linear', | 
		
	
		
			
				|  |  |  |  |                                 x: 0, | 
		
	
		
			
				|  |  |  |  |                                 y: 0, | 
		
	
		
			
				|  |  |  |  |                                 x2: 0, | 
		
	
		
			
				|  |  |  |  |                                 y2: 1, | 
		
	
		
			
				|  |  |  |  |                                 colorStops: [{ | 
		
	
		
			
				|  |  |  |  |                                     offset: 0, | 
		
	
		
			
				|  |  |  |  |                                     color: 'rgba(137, 121, 255, 0.3)' | 
		
	
		
			
				|  |  |  |  |                                 }, { | 
		
	
		
			
				|  |  |  |  |                                     offset: 1, | 
		
	
		
			
				|  |  |  |  |                                     color: 'rgba(137, 121, 255, 0.05)' | 
		
	
		
			
				|  |  |  |  |                                 }] | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 ], | 
		
	
		
			
				|  |  |  |  |                 tooltip: { | 
		
	
		
			
				|  |  |  |  |                     trigger: 'axis', | 
		
	
		
			
				|  |  |  |  |                     axisPointer: { | 
		
	
		
			
				|  |  |  |  |                         type: 'cross' | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     formatter: function (params) { | 
		
	
		
			
				|  |  |  |  |                         let result = `${params[0].name}<br/>`; | 
		
	
		
			
				|  |  |  |  |                         params.forEach(param => { | 
		
	
		
			
				|  |  |  |  |                             result += `${param.seriesName}: ${param.value}%<br/>`; | 
		
	
		
			
				|  |  |  |  |                         }); | 
		
	
		
			
				|  |  |  |  |                         return result; | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             faultPieChart.setOption(faultPieOption); | 
		
	
	
		
			
				
					|  |  |  | @ -299,51 +364,51 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |             }, 100); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             const option = { | 
		
	
		
			
				|  |  |  |  |                 color: ['#3C7EFF', '#FF8800', '#FFC403', '#31BCFF'], | 
		
	
		
			
				|  |  |  |  |                 tooltip: { | 
		
	
		
			
				|  |  |  |  |                     trigger: 'item' | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 legend: { | 
		
	
		
			
				|  |  |  |  |                     orient: 'vertical', | 
		
	
		
			
				|  |  |  |  |                     right: '2%', | 
		
	
		
			
				|  |  |  |  |                     top: 'middle', | 
		
	
		
			
				|  |  |  |  |                     itemWidth: 14, | 
		
	
		
			
				|  |  |  |  |                     bottom: '4%', | 
		
	
		
			
				|  |  |  |  |                     left: 'center', | 
		
	
		
			
				|  |  |  |  |                     itemWidth: 16, | 
		
	
		
			
				|  |  |  |  |                     itemHeight: 5, | 
		
	
		
			
				|  |  |  |  |                     textStyle: { | 
		
	
		
			
				|  |  |  |  |                         fontSize: 10, | 
		
	
		
			
				|  |  |  |  |                         color: '#666' | 
		
	
		
			
				|  |  |  |  |                         fontSize: 12, | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 tooltip: { | 
		
	
		
			
				|  |  |  |  |                     trigger: 'item', | 
		
	
		
			
				|  |  |  |  |                     formatter: '{b}<br/>{d}%' | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
		
			
				|  |  |  |  |                 series: [ | 
		
	
		
			
				|  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |                         name: '设备类型占比', | 
		
	
		
			
				|  |  |  |  |                         name: '设备故障原因', | 
		
	
		
			
				|  |  |  |  |                         type: 'pie', | 
		
	
		
			
				|  |  |  |  |                         radius: '70%', | 
		
	
		
			
				|  |  |  |  |                         center: ['40%', '55%'], | 
		
	
		
			
				|  |  |  |  |                         radius: ['20%', '65%'], | 
		
	
		
			
				|  |  |  |  |                         center: ['50%', '40%'], | 
		
	
		
			
				|  |  |  |  |                         avoidLabelOverlap: false, | 
		
	
		
			
				|  |  |  |  |                         padAngle: 5, | 
		
	
		
			
				|  |  |  |  |                         itemStyle: { | 
		
	
		
			
				|  |  |  |  |                             borderRadius: 0, | 
		
	
		
			
				|  |  |  |  |                             borderRadius: 8, | 
		
	
		
			
				|  |  |  |  |                             borderColor: '#fff', | 
		
	
		
			
				|  |  |  |  |                             borderWidth: 1 | 
		
	
		
			
				|  |  |  |  |                             borderWidth: 2 | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         label: { | 
		
	
		
			
				|  |  |  |  |                             show: false, | 
		
	
		
			
				|  |  |  |  |                             position: 'center' | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         emphasis: { | 
		
	
		
			
				|  |  |  |  |                             label: { | 
		
	
		
			
				|  |  |  |  |                                 show: false | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         // emphasis: {
 | 
		
	
		
			
				|  |  |  |  |                         //     label: {
 | 
		
	
		
			
				|  |  |  |  |                         //         show: true,
 | 
		
	
		
			
				|  |  |  |  |                         //         fontSize: 40,
 | 
		
	
		
			
				|  |  |  |  |                         //         fontWeight: 'bold'
 | 
		
	
		
			
				|  |  |  |  |                         //     }
 | 
		
	
		
			
				|  |  |  |  |                         // },
 | 
		
	
		
			
				|  |  |  |  |                         labelLine: { | 
		
	
		
			
				|  |  |  |  |                             show: false | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         data: [ | 
		
	
		
			
				|  |  |  |  |                             { value: 25, name: '灭火器' }, | 
		
	
		
			
				|  |  |  |  |                             { value: 30, name: '消防栓' }, | 
		
	
		
			
				|  |  |  |  |                             { value: 20, name: '报警器' }, | 
		
	
		
			
				|  |  |  |  |                             { value: 25, name: '烟雾探测器' } | 
		
	
		
			
				|  |  |  |  |                             { value: 1048, name: '环境因素(粉尘)', itemStyle: { color: '#44BB5F' } }, | 
		
	
		
			
				|  |  |  |  |                             { value: 735, name: '环境因素(湿度)', itemStyle: { color: '#F8C541' } }, | 
		
	
		
			
				|  |  |  |  |                             { value: 580, name: '设备故障', itemStyle: { color: '#A493FB' } }, | 
		
	
		
			
				|  |  |  |  |                             { value: 484, name: '施工干扰', itemStyle: { color: '#4B69F1' } }, | 
		
	
		
			
				|  |  |  |  |                             { value: 300, name: '其他', itemStyle: { color: '#949FD0' } } | 
		
	
		
			
				|  |  |  |  |                         ] | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 ] | 
		
	
	
		
			
				
					|  |  |  | @ -440,265 +505,166 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |     // 表格列定义
 | 
		
	
		
			
				|  |  |  |  |     const columns = [ | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '编号', | 
		
	
		
			
				|  |  |  |  |             title: '序号', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'id', | 
		
	
		
			
				|  |  |  |  |             key: 'id', | 
		
	
		
			
				|  |  |  |  |             width: 60, | 
		
	
		
			
				|  |  |  |  |             render: (text, record, index) => { | 
		
	
		
			
				|  |  |  |  |                 const page = pagination.current || 1; | 
		
	
		
			
				|  |  |  |  |                 const pageSize = pagination.pageSize || 8; | 
		
	
		
			
				|  |  |  |  |                 const pageSize = pagination.pageSize || 5; | 
		
	
		
			
				|  |  |  |  |                 const number = (page - 1) * pageSize + index + 1; | 
		
	
		
			
				|  |  |  |  |                 return `0${number}`.slice(-2); | 
		
	
		
			
				|  |  |  |  |                 return number; | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '设备编号', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'deviceId', | 
		
	
		
			
				|  |  |  |  |             key: 'deviceId', | 
		
	
		
			
				|  |  |  |  |             width: 140, | 
		
	
		
			
				|  |  |  |  |             title: '区域', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'area', | 
		
	
		
			
				|  |  |  |  |             key: 'area', | 
		
	
		
			
				|  |  |  |  |             width: 120, | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '设备名称', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'deviceName', | 
		
	
		
			
				|  |  |  |  |             key: 'deviceName', | 
		
	
		
			
				|  |  |  |  |             width: 110, | 
		
	
		
			
				|  |  |  |  |             title: '火灾报警', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'fireAlarm', | 
		
	
		
			
				|  |  |  |  |             key: 'fireAlarm', | 
		
	
		
			
				|  |  |  |  |             width: 100, | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '类型', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'modelSpec', | 
		
	
		
			
				|  |  |  |  |             key: 'modelSpec', | 
		
	
		
			
				|  |  |  |  |             width: 120, | 
		
	
		
			
				|  |  |  |  |             title: '故障报警', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'faultAlarm', | 
		
	
		
			
				|  |  |  |  |             key: 'faultAlarm', | 
		
	
		
			
				|  |  |  |  |             width: 100, | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '安装位置', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'installLocation', | 
		
	
		
			
				|  |  |  |  |             key: 'installLocation', | 
		
	
		
			
				|  |  |  |  |             title: '误报', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'falseAlarm', | 
		
	
		
			
				|  |  |  |  |             key: 'falseAlarm', | 
		
	
		
			
				|  |  |  |  |             width: 100, | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '状态', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'status', | 
		
	
		
			
				|  |  |  |  |             key: 'status', | 
		
	
		
			
				|  |  |  |  |             title: '总计', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'total', | 
		
	
		
			
				|  |  |  |  |             key: 'total', | 
		
	
		
			
				|  |  |  |  |             width: 100, | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '同比变化', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'yearOverYear', | 
		
	
		
			
				|  |  |  |  |             key: 'yearOverYear', | 
		
	
		
			
				|  |  |  |  |             width: 120, | 
		
	
		
			
				|  |  |  |  |             render: (text) => { | 
		
	
		
			
				|  |  |  |  |                 const statusMap = { | 
		
	
		
			
				|  |  |  |  |                     '报废': { color: '#FF3E48', bg: '#FFE0E2' }, | 
		
	
		
			
				|  |  |  |  |                     '待维修': { color: '#FF8800', bg: '#FFF3E9' }, | 
		
	
		
			
				|  |  |  |  |                     '已使用': { color: '#00AAFA', bg: '#DAF3FF' }, | 
		
	
		
			
				|  |  |  |  |                     '正常': { color: '#44BB5F', bg: '#D8F7DE' } | 
		
	
		
			
				|  |  |  |  |                 }; | 
		
	
		
			
				|  |  |  |  |                 const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' }; | 
		
	
		
			
				|  |  |  |  |                 const isPositive = text.includes('↑'); | 
		
	
		
			
				|  |  |  |  |                 const color = isPositive ? '#FF3E48' : '#44BB5F'; | 
		
	
		
			
				|  |  |  |  |                 const icon = isPositive ? '↑' : '↓'; | 
		
	
		
			
				|  |  |  |  |                 return ( | 
		
	
		
			
				|  |  |  |  |                     <span style={{ | 
		
	
		
			
				|  |  |  |  |                         color: status.color, | 
		
	
		
			
				|  |  |  |  |                         backgroundColor: status.bg, | 
		
	
		
			
				|  |  |  |  |                         padding: '2px 8px', | 
		
	
		
			
				|  |  |  |  |                         borderRadius: '4px', | 
		
	
		
			
				|  |  |  |  |                         fontSize: '12px' | 
		
	
		
			
				|  |  |  |  |                     }}> | 
		
	
		
			
				|  |  |  |  |                     <span style={{ color }}> | 
		
	
		
			
				|  |  |  |  |                         {text} | 
		
	
		
			
				|  |  |  |  |                     </span> | 
		
	
		
			
				|  |  |  |  |                 ); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '最后维护时间', | 
		
	
		
			
				|  |  |  |  |             dataIndex: 'lastMaintenance', | 
		
	
		
			
				|  |  |  |  |             key: 'lastMaintenance', | 
		
	
		
			
				|  |  |  |  |             width: 150, | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             title: '操作', | 
		
	
		
			
				|  |  |  |  |             key: 'action', | 
		
	
		
			
				|  |  |  |  |             width: 140, | 
		
	
		
			
				|  |  |  |  |             render: (_, record) => ( | 
		
	
		
			
				|  |  |  |  |                 <div> | 
		
	
		
			
				|  |  |  |  |                     <Button type="link" size="small" style={{ | 
		
	
		
			
				|  |  |  |  |                         padding: '2px 8px', | 
		
	
		
			
				|  |  |  |  |                         fontSize: 12, | 
		
	
		
			
				|  |  |  |  |                         marginRight: 8, | 
		
	
		
			
				|  |  |  |  |                         border: '1px solid #E6E9FB', | 
		
	
		
			
				|  |  |  |  |                         backgroundColor: 'transparent', | 
		
	
		
			
				|  |  |  |  |                         borderRadius: '4px' | 
		
	
		
			
				|  |  |  |  |                     }}> | 
		
	
		
			
				|  |  |  |  |                         编辑 | 
		
	
		
			
				|  |  |  |  |                     </Button> | 
		
	
		
			
				|  |  |  |  |                     <Button type="link" size="small" style={{ | 
		
	
		
			
				|  |  |  |  |                         padding: '2px 8px', | 
		
	
		
			
				|  |  |  |  |                         fontSize: 12, | 
		
	
		
			
				|  |  |  |  |                         color: '#FF2526', | 
		
	
		
			
				|  |  |  |  |                         border: '1px solid #FFE0E2', | 
		
	
		
			
				|  |  |  |  |                         backgroundColor: 'transparent', | 
		
	
		
			
				|  |  |  |  |                         borderRadius: '4px' | 
		
	
		
			
				|  |  |  |  |                     }}> | 
		
	
		
			
				|  |  |  |  |                         删除 | 
		
	
		
			
				|  |  |  |  |                     </Button> | 
		
	
		
			
				|  |  |  |  |                 </div> | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |     ]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // 模拟数据
 | 
		
	
		
			
				|  |  |  |  |     const mockData = [ | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '1', | 
		
	
		
			
				|  |  |  |  |             id: '001', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-001', | 
		
	
		
			
				|  |  |  |  |             deviceName: '干粉灭火器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '1层大厅', | 
		
	
		
			
				|  |  |  |  |             status: '报废', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '1', | 
		
	
		
			
				|  |  |  |  |             area: 'A栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 3, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 7, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 10, | 
		
	
		
			
				|  |  |  |  |             total: 23, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↓ 12%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '2', | 
		
	
		
			
				|  |  |  |  |             id: '002', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-02-015', | 
		
	
		
			
				|  |  |  |  |             deviceName: '室内消火栓', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '3层东区', | 
		
	
		
			
				|  |  |  |  |             status: '已使用', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '2', | 
		
	
		
			
				|  |  |  |  |             area: 'B栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 2, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 9, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 6, | 
		
	
		
			
				|  |  |  |  |             total: 18, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↑ 8%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '3', | 
		
	
		
			
				|  |  |  |  |             id: '003', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-03-007', | 
		
	
		
			
				|  |  |  |  |             deviceName: '火警报警器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '报警设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '正常', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '3', | 
		
	
		
			
				|  |  |  |  |             area: 'C栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 1, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 5, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 8, | 
		
	
		
			
				|  |  |  |  |             total: 16, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↓ 15%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '4', | 
		
	
		
			
				|  |  |  |  |             id: '004', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-03-008', | 
		
	
		
			
				|  |  |  |  |             deviceName: '火警报警器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '报警设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '待维修', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '4', | 
		
	
		
			
				|  |  |  |  |             area: 'D栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 0, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 2, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 7, | 
		
	
		
			
				|  |  |  |  |             total: 11, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↓ 16%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '5', | 
		
	
		
			
				|  |  |  |  |             id: '005', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-009', | 
		
	
		
			
				|  |  |  |  |             deviceName: '干粉灭火器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '报废', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '5', | 
		
	
		
			
				|  |  |  |  |             area: 'E栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 4, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 6, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 5, | 
		
	
		
			
				|  |  |  |  |             total: 15, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↓ 5%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '6', | 
		
	
		
			
				|  |  |  |  |             id: '006', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-010', | 
		
	
		
			
				|  |  |  |  |             deviceName: '室内消火栓', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '已使用', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '6', | 
		
	
		
			
				|  |  |  |  |             area: 'F栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 2, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 8, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 9, | 
		
	
		
			
				|  |  |  |  |             total: 19, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↑ 3%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '7', | 
		
	
		
			
				|  |  |  |  |             id: '007', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-011', | 
		
	
		
			
				|  |  |  |  |             deviceName: '火警报警器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '报警设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '待维修', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '7', | 
		
	
		
			
				|  |  |  |  |             area: 'G栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 1, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 4, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 6, | 
		
	
		
			
				|  |  |  |  |             total: 11, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↓ 8%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '8', | 
		
	
		
			
				|  |  |  |  |             id: '008', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-012', | 
		
	
		
			
				|  |  |  |  |             deviceName: '火警报警器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '报警设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '正常', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '8', | 
		
	
		
			
				|  |  |  |  |             area: 'H栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 3, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 3, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 4, | 
		
	
		
			
				|  |  |  |  |             total: 10, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↓ 20%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '9', | 
		
	
		
			
				|  |  |  |  |             id: '009', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-013', | 
		
	
		
			
				|  |  |  |  |             deviceName: '干粉灭火器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '已使用', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |             id: '9', | 
		
	
		
			
				|  |  |  |  |             area: 'I栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 0, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 1, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 3, | 
		
	
		
			
				|  |  |  |  |             total: 4, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↓ 25%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '10', | 
		
	
		
			
				|  |  |  |  |             id: '010', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-014', | 
		
	
		
			
				|  |  |  |  |             deviceName: '室内消火栓', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '待维修', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '11', | 
		
	
		
			
				|  |  |  |  |             id: '011', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-015', | 
		
	
		
			
				|  |  |  |  |             deviceName: '火警报警器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '报警设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '正常', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '12', | 
		
	
		
			
				|  |  |  |  |             id: '012', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-016', | 
		
	
		
			
				|  |  |  |  |             deviceName: '火警报警器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '报警设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下一层', | 
		
	
		
			
				|  |  |  |  |             status: '已使用', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2025-09-10', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '13', | 
		
	
		
			
				|  |  |  |  |             id: '013', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-017', | 
		
	
		
			
				|  |  |  |  |             deviceName: '干粉灭火器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '2层西区', | 
		
	
		
			
				|  |  |  |  |             status: '报废', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2024-08-15', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '14', | 
		
	
		
			
				|  |  |  |  |             id: '014', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-02-018', | 
		
	
		
			
				|  |  |  |  |             deviceName: '室内消火栓', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '4层南区', | 
		
	
		
			
				|  |  |  |  |             status: '报废', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2024-07-20', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '15', | 
		
	
		
			
				|  |  |  |  |             id: '015', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-03-019', | 
		
	
		
			
				|  |  |  |  |             deviceName: '火警报警器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '报警设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '地下二层', | 
		
	
		
			
				|  |  |  |  |             status: '报废', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2024-06-10', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             key: '16', | 
		
	
		
			
				|  |  |  |  |             id: '016', | 
		
	
		
			
				|  |  |  |  |             deviceId: 'HQ-XF-01-020', | 
		
	
		
			
				|  |  |  |  |             deviceName: '干粉灭火器', | 
		
	
		
			
				|  |  |  |  |             modelSpec: '灭火设备', | 
		
	
		
			
				|  |  |  |  |             installLocation: '5层北区', | 
		
	
		
			
				|  |  |  |  |             status: '报废', | 
		
	
		
			
				|  |  |  |  |             lastMaintenance: '2024-05-05', | 
		
	
		
			
				|  |  |  |  |             id: '10', | 
		
	
		
			
				|  |  |  |  |             area: 'J栋', | 
		
	
		
			
				|  |  |  |  |             fireAlarm: 2, | 
		
	
		
			
				|  |  |  |  |             faultAlarm: 5, | 
		
	
		
			
				|  |  |  |  |             falseAlarm: 7, | 
		
	
		
			
				|  |  |  |  |             total: 14, | 
		
	
		
			
				|  |  |  |  |             yearOverYear: '↑ 2%', | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |     ]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -751,17 +717,29 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     return ( | 
		
	
		
			
				|  |  |  |  |         <div className={styles.analysisContainer}> | 
		
	
		
			
				|  |  |  |  |             {/* 第1个div - 高度39% */} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             <div className={styles.analysisContainerMiddle}> | 
		
	
		
			
				|  |  |  |  |                 <div className={styles.analysisSectionContent}> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisMiddleBlock2}> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMiddleBlock2Title}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisTitleLeft}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisTitleIcon}></div> | 
		
	
		
			
				|  |  |  |  |                                 <div>误报原因分析</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMiddleBlock2Chart} ref={chartRef}> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                     </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisMiddleBlock1}> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisBlock1Header}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisBlock1Title}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisTitleIcon}></div> | 
		
	
		
			
				|  |  |  |  |                                 设备使用频率分析 | 
		
	
		
			
				|  |  |  |  |                                 报表统计生成 | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                         {/* 设备状态饼图 */} | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisDeviceStatusChart} ref={pieChartRef}> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                     </div> | 
		
	
	
		
			
				
					|  |  |  | @ -770,43 +748,31 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisBlock1Header}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisBlock1Title}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisTitleIcon}></div> | 
		
	
		
			
				|  |  |  |  |                                 近一年维护费用趋势 | 
		
	
		
			
				|  |  |  |  |                                 设备运行状态趋势 | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                         {/* 维护费用趋势折线图 */} | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisDeviceStatusChart} ref={faultPieChartRef}> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                     </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisMiddleBlock2}> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMiddleBlock2Title}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisTitleLeft}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisTitleIcon}></div> | 
		
	
		
			
				|  |  |  |  |                                 <div>设备类型占比</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMiddleBlock2Chart} ref={chartRef}> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                     </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 </div> | 
		
	
		
			
				|  |  |  |  |             </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             {/* 第2个div - 占满剩余位置 */} | 
		
	
		
			
				|  |  |  |  |             <div className={styles.analysisContainerBottom}> | 
		
	
		
			
				|  |  |  |  |                 <div className={styles.analysisSectionContent}> | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisLeftBlock}> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMaintenanceStack}> | 
		
	
		
			
				|  |  |  |  |             {/* 底部区域 */} | 
		
	
		
			
				|  |  |  |  |             <div className={styles.analysisBottom}> | 
		
	
		
			
				|  |  |  |  |                 {/* 左侧维护提醒 */} | 
		
	
		
			
				|  |  |  |  |                 <div className={styles.analysisMaintenanceSection}> | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisMaintenanceTitle}> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisTitleIcon}></div> | 
		
	
		
			
				|  |  |  |  |                                     <div>近期维护提醒</div> | 
		
	
		
			
				|  |  |  |  |                         <div>实时预警信息</div> | 
		
	
		
			
				|  |  |  |  |                     </div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceContent1}> | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisMaintenanceContent}> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMaintenanceItem}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisMaintenanceLeft}> | 
		
	
		
			
				|  |  |  |  |                                             <div className={styles.analysisMaintenanceText1}>SH-MHQ-023-C 干粉灭火器</div> | 
		
	
		
			
				|  |  |  |  |                                             <div className={styles.analysisMaintenanceText2}>位置: 4楼办公区丨维护类型: 季度检查</div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText1}>电路线路过载预警</div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText2}>B动丨维护类型: 季度检查</div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText3}>负责人: 张三</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisMaintenanceRight}> | 
		
	
	
		
			
				
					|  |  |  | @ -823,67 +789,37 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceStatus}>8天后到期</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMaintenanceItem}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisMaintenanceLeft}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText1}>电路线路过载预警</div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText2}>B动丨维护类型: 季度检查</div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText3}>负责人: 张三</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisMaintenanceRight}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceStatus}>3天后到期</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisMaintenanceSection}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceTitle}> | 
		
	
		
			
				|  |  |  |  |                                     <div className={styles.analysisTitleIcon}></div> | 
		
	
		
			
				|  |  |  |  |                                     <div>维护任务进度</div> | 
		
	
		
			
				|  |  |  |  |                                 </div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceContent2}> | 
		
	
		
			
				|  |  |  |  |                                     {/* 进度条区域 */} | 
		
	
		
			
				|  |  |  |  |                                     <div className={styles.analysisProgressSection}> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                                         <div className={styles.analysisProgressLabel}>月度维护计划</div> | 
		
	
		
			
				|  |  |  |  |                                         <Progress percent={75} status="active" /> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                                         <div className={styles.analysisProgressLabel}>季度维护计划</div> | 
		
	
		
			
				|  |  |  |  |                                         <Progress percent={60} status="active" /> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                                         <div className={styles.analysisProgressLabel}>年度维护计划</div> | 
		
	
		
			
				|  |  |  |  |                                         <Progress percent={85} status="active" /> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                                         {/* 警告提示框 */} | 
		
	
		
			
				|  |  |  |  |                                         <div className={styles.analysisWarningBox}> | 
		
	
		
			
				|  |  |  |  |                                             <ExclamationCircleOutlined className={styles.analysisWarningIcon} /> | 
		
	
		
			
				|  |  |  |  |                                             <span className={styles.analysisWarningText}>本月有5项维护任务即将到期</span> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisMaintenanceItem}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisMaintenanceLeft}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText1}>电路线路过载预警</div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText2}>B动丨维护类型: 季度检查</div> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceText3}>负责人: 张三</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisMaintenanceRight}> | 
		
	
		
			
				|  |  |  |  |                                 <div className={styles.analysisMaintenanceStatus}>3天后到期</div> | 
		
	
		
			
				|  |  |  |  |                             </div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                     </div> | 
		
	
		
			
				|  |  |  |  |                 </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisRightBlock}> | 
		
	
		
			
				|  |  |  |  |                         {/* 表格 */} | 
		
	
		
			
				|  |  |  |  |                 {/* 右侧表格 */} | 
		
	
		
			
				|  |  |  |  |                 <div className={styles.analysisTableSection}> | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisTableHeader}> | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisTableTitle}> | 
		
	
		
			
				|  |  |  |  |                             <div className={styles.analysisTitleIcon}></div> | 
		
	
		
			
				|  |  |  |  |                                 <div>消防设施与器材列表</div> | 
		
	
		
			
				|  |  |  |  |                             <div>月度报警统计</div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |               | 
		
	
		
			
				|  |  |  |  |                        {/* 操作按钮 */} | 
		
	
		
			
				|  |  |  |  |                         <div className={styles.analysisTableActions}> | 
		
	
		
			
				|  |  |  |  |                            <div className={styles.analysisLeftActions}> | 
		
	
		
			
				|  |  |  |  |                                <Input  | 
		
	
		
			
				|  |  |  |  |                                    placeholder="搜索设备名称、编号..."  | 
		
	
		
			
				|  |  |  |  |                                    onChange={handleSearchChange} | 
		
	
		
			
				|  |  |  |  |                                    value={searchText} | 
		
	
		
			
				|  |  |  |  |                                    style={{ width: 250, fontSize: 12 }}  | 
		
	
		
			
				|  |  |  |  |                                    allowClear | 
		
	
		
			
				|  |  |  |  |                                    suffix={<SearchOutlined />} | 
		
	
		
			
				|  |  |  |  |                                /> | 
		
	
		
			
				|  |  |  |  |                            </div> | 
		
	
		
			
				|  |  |  |  |                            <div className={styles.analysisRightActions}> | 
		
	
		
			
				|  |  |  |  |                                <button className={styles.analysisActionButton} onClick={handleAddDevice}> | 
		
	
		
			
				|  |  |  |  |                                    <span className={styles.analysisButtonIcon}>+</span> | 
		
	
		
			
				|  |  |  |  |                                    <span>新增设备</span> | 
		
	
		
			
				|  |  |  |  |                                </button> | 
		
	
		
			
				|  |  |  |  |                             <button className={styles.analysisActionButton} onClick={handleExportData}> | 
		
	
		
			
				|  |  |  |  |                                 <span className={styles.analysisButtonIcon}><ExportOutlined /></span> | 
		
	
		
			
				|  |  |  |  |                                 <span>导出数据</span> | 
		
	
	
		
			
				
					|  |  |  | @ -891,7 +827,6 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                         </div> | 
		
	
		
			
				|  |  |  |  |                     </div> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                         {/* 表格 */} | 
		
	
		
			
				|  |  |  |  |                     <div className={styles.analysisTableContainer}> | 
		
	
		
			
				|  |  |  |  |                         <StandardTable | 
		
	
		
			
				|  |  |  |  |                             columns={columns} | 
		
	
	
		
			
				
					|  |  |  | @ -915,7 +850,6 @@ const DataAnalysisWarning = () => { | 
		
	
		
			
				|  |  |  |  |                 </div> | 
		
	
		
			
				|  |  |  |  |             </div> | 
		
	
		
			
				|  |  |  |  |         </div> | 
		
	
		
			
				|  |  |  |  |         </div> | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | 
 |