Compare commits
	
		
			2 Commits 
		
	
	
		
			eaa90302af
			...
			daf7b79cf8
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | daf7b79cf8 | 2 months ago | 
|  | d7c085262b | 2 months ago | 
| @ -0,0 +1,30 @@ | ||||
| import MyCard from "@/pages/hrefficiency_hiddentrouble/component/MyCard"; | ||||
| import {Col, Row, Tabs} from "antd"; | ||||
| import HiddenDangerInspection from "@/pages/hrefficiency_hiddentrouble/component/hiddenDangerInspection/hiddenDangerInspection"; | ||||
| import './HiddenTrouble.less' | ||||
| 
 | ||||
| const items = [ | ||||
|     { | ||||
|         key: '1', | ||||
|         label: '隐患检查', | ||||
|         children: <HiddenDangerInspection/>, | ||||
|     }, | ||||
|     { | ||||
|         key: '2', | ||||
|         label: '隐患整改', | ||||
|         children: 'Content of Tab Pane 2', | ||||
|     }, | ||||
|     { | ||||
|         key: '3', | ||||
|         label: '隐患统计', | ||||
|         children: 'Content of Tab Pane 3', | ||||
|     }, | ||||
| ]; | ||||
| const HiddenTrouble = () => { | ||||
|     return ( | ||||
|         <> | ||||
|             <Tabs className={'custom-tabs'} type={'card'} defaultActiveKey="1" items={items} tabBarGutter={10}   /> | ||||
|         </> | ||||
|     ) | ||||
| } | ||||
| export default HiddenTrouble | ||||
| @ -0,0 +1,39 @@ | ||||
| /* 移除下滑线 */ | ||||
| .custom-tabs .ant-tabs-ink-bar { | ||||
|   display: none !important; | ||||
| } | ||||
| 
 | ||||
| /* 未选中状态 */ | ||||
| .custom-tabs .ant-tabs-tab { | ||||
|   background: #f0f0f0 !important; | ||||
|   border: none !important; | ||||
|   border-radius: 6px !important; | ||||
|   margin-right: 8px !important; | ||||
|   padding: 8px 16px !important; | ||||
|   transition: all 0.3s ease !important; | ||||
| } | ||||
| 
 | ||||
| /* 选中状态 - 背景变为蓝色 */ | ||||
| .custom-tabs .ant-tabs-tab-active { | ||||
|   background: #2E4CD4 !important; | ||||
| } | ||||
| 
 | ||||
| /* 选中状态 - 文字变为白色 */ | ||||
| .custom-tabs .ant-tabs-tab-active .ant-tabs-tab-btn { | ||||
|   color: white !important; | ||||
|   font-weight: 500 !important; | ||||
| } | ||||
| 
 | ||||
| /* 移除底部边框 */ | ||||
| .custom-tabs .ant-tabs-nav::before { | ||||
|   border-bottom: none !important; | ||||
| } | ||||
| 
 | ||||
| /* 悬停效果 */ | ||||
| .custom-tabs .ant-tabs-tab:hover { | ||||
|   background: #e6e6e6 !important; | ||||
| } | ||||
| 
 | ||||
| .custom-tabs .ant-tabs-tab-active:hover { | ||||
|   background: #40a9ff !important; | ||||
| } | ||||
| @ -0,0 +1,185 @@ | ||||
| import Icon from "antd/es/icon"; | ||||
| import {Col,  Row} from "antd"; | ||||
| import {Descriptions} from "antd"; | ||||
| import * as echarts from 'echarts'; | ||||
| import {useEffect, useRef} from "react"; | ||||
| 
 | ||||
| const HourglassSvg=()=>{ | ||||
|     return ( | ||||
|         <svg width="21px" height="33px" fill="currentColor" viewBox="0 0 1024 1024"> | ||||
|             <title>hourglass icon</title> | ||||
|             <path | ||||
|                 d="M768 832h-512c-17.6 0-32-14.4-32-32s14.4-32 32-32h64v-192c0-52.8 33.6-99.2 84-116.8-50.4-17.6-84-64-84-116.8v-192h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h512c17.6 0 32 14.4 32 32s-14.4 32-32 32h-64v192c0 52.8-33.6 99.2-84 116.8 50.4 17.6 84 64 84 116.8v192h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM320 192v192c0 70.4 57.6 128 128 128s128-57.6 128-128v-192h-256zM448 768c-70.4 0-128-57.6-128-128v-192h256v192c0 70.4-57.6 128-128 128z"/> | ||||
|         </svg> | ||||
|     ) | ||||
| } | ||||
| const HourglassIcon=(props)=>{ | ||||
|     return( | ||||
|         <Icon component={HourglassSvg} {...props}></Icon> | ||||
|     ) | ||||
| } | ||||
| 
 | ||||
| const MyCard = (props) => { | ||||
|     return ( | ||||
|         <div style={{ | ||||
|             // width: '100%',
 | ||||
|             // height: '134px',
 | ||||
|             borderRadius: '5px', | ||||
|             backgroundColor: 'white', | ||||
|             padding: '20px 20px', | ||||
|             boxSizing: 'border-box', | ||||
|             display:'flex', | ||||
|             justifyContent:'space-between' | ||||
|         }}> | ||||
|             <div> | ||||
|                 <div>{props.title}</div> | ||||
|                 <div style={{fontWeight: '600', fontSize: '18px', }}>{props.num}</div> | ||||
|                 {props.flag === 1 && <div style={{color: '#44BB5F', fontSize: '14px'}}> | ||||
|                     {props.grow === 1 ? <>⬆</> : <>⬇</>} {props.data}% 较上周 | ||||
|                 </div>} | ||||
|                 {props.flag===2 && <div style={{color: 'orange',fontSize:'14px'}}> | ||||
|                     {props.grow===1 ? <>⬆</>:<>⬇</>} {props.data}% 较上周 | ||||
|                 </div>} | ||||
|                 {props.flag===3 && <div style={{color: 'red',fontSize:'14px'}}> | ||||
|                     {props.grow===1 ? <>⬆</>:<>⬇</>} {props.data}% 较上周 | ||||
|                 </div>} | ||||
|             </div> | ||||
|             <div style={{color:props.color,height:'53px',width:'53px',backgroundColor:props.backgroundColor,borderRadius:'10px',display:'flex',justifyContent:'center',alignItems: 'center'}}> | ||||
|                 <HourglassSvg ></HourglassSvg> | ||||
|             </div> | ||||
|         </div> | ||||
|     ) | ||||
| } | ||||
| 
 | ||||
| const items = [ | ||||
|     { | ||||
|         key: '1', | ||||
|         children: '设备安全', | ||||
|         color:'#868BF9', | ||||
|     }, | ||||
|     { | ||||
|         key: '2', | ||||
|         children: '电气安全', | ||||
|         color:'#F29629', | ||||
|     }, | ||||
|     { | ||||
|         key: '3', | ||||
|         children: '消防安全', | ||||
|         color:'#FFD85A', | ||||
|     }, | ||||
|     { | ||||
|         key: '4', | ||||
|         children: '工艺安全', | ||||
|         color:'#5ED6BE', | ||||
|     }, | ||||
|     { | ||||
|         key: '5', | ||||
|         children: '储罐专业', | ||||
|         color:'#00AAFF', | ||||
|     }, | ||||
|     { | ||||
|         key: '6', | ||||
|         children: '其他', | ||||
|         color:'#5FDCF7', | ||||
|     }, | ||||
| ]; | ||||
| 
 | ||||
| 
 | ||||
| export const PieChart=()=>{ | ||||
|     const chartRef=useRef(null) | ||||
|     const data=[ | ||||
|         { value: 5, name: '设备安全' ,itemStyle:{color:'#868BF9'}}, | ||||
|         { value: 5, name: '电气安全',itemStyle:{color:'#F29629'} }, | ||||
|         { value: 10, name: '消防安全' ,itemStyle:{color:'#FFD85A'}}, | ||||
|         { value: 20, name: '工艺安全',itemStyle:{color:'#5ED6BE'} }, | ||||
|         { value: 30, name: '储罐专业',itemStyle:{color:'#00AAFF'} }, | ||||
|         { value: 30, name:'其他',itemStyle:{color:'#5FDCF7'}} | ||||
|     ] | ||||
|     useEffect(() => { | ||||
|         const chart=echarts.init(chartRef.current) | ||||
|         const option = { | ||||
|             legend: { | ||||
|                 show:false, | ||||
|                 orient: 'vertical', | ||||
|                 x: 'left', | ||||
|                 data: ['设备安全', '电气安全', '消防安全', '工艺安全', '储罐专业','其他'] | ||||
|             }, | ||||
|             series: [ | ||||
|                 { | ||||
|                     type: 'pie', | ||||
|                     radius: ['50%', '70%'], | ||||
|                     avoidLabelOverlap: false, | ||||
|                     label: { | ||||
|                         show: true, | ||||
|                         formatter: '{d}%', | ||||
|                         position: 'outsider', | ||||
|                     }, | ||||
|                     labelLine: { | ||||
|                         show: true | ||||
|                     }, | ||||
|                     emphasis: { | ||||
|                         label: { | ||||
|                             show: true, | ||||
|                             position:'center', | ||||
|                             fontSize: '15', | ||||
|                             fontWeight: 'bold', | ||||
|                             formatter: function(params) { | ||||
|                                 return `${params.name}\n${params.percent}%`; | ||||
|                             }, | ||||
| 
 | ||||
|                         } | ||||
|                     }, | ||||
|                     data:data, | ||||
|                 }, | ||||
|             ] | ||||
|         }; | ||||
|         chart.setOption(option) | ||||
|         // 响应式调整
 | ||||
|         const handleResize = () => { | ||||
|             chart.resize(); | ||||
|         }; | ||||
| 
 | ||||
|         window.addEventListener('resize', handleResize); | ||||
| 
 | ||||
|         // 清理函数
 | ||||
|         return () => { | ||||
|             window.removeEventListener('resize', handleResize); | ||||
|             chart.dispose(); | ||||
|         }; | ||||
|     }, []); | ||||
| 
 | ||||
|     return( | ||||
|         <div style={{backgroundColor:'#fff',borderRadius:'5px',padding:'15px',boxSizing:'border-box'}}> | ||||
|             <Row> | ||||
|                 <Col span={9}> | ||||
|                     <Descriptions | ||||
|                         title={<><span style={{borderRight: '3px solid blue', marginRight: '15px'}}></span> 检查领域分布</>} | ||||
|                         column={2} | ||||
|                     > | ||||
|                         {items.map((item)=>{ | ||||
|                             return( | ||||
|                                 <Descriptions.Item> | ||||
|                                     <div style={{display:'flex',alignItems:'center',fontSize:'12px'}}> | ||||
|                                         <span style={{borderBottom:'4px solid',width:'10px',marginRight:'5px',borderBottomColor:item.color }}></span> | ||||
|                                         {item.children} | ||||
|                                     </div> | ||||
|                                 </Descriptions.Item> | ||||
|                             ) | ||||
|                         })} | ||||
| 
 | ||||
| 
 | ||||
|                      </Descriptions> | ||||
| 
 | ||||
|                 </Col> | ||||
|                 <Col span={15}> | ||||
|                     <div ref={chartRef} | ||||
|                         style={{width:'100%',height:'100%'}} | ||||
|                     > | ||||
| 
 | ||||
|                     </div> | ||||
|                 </Col> | ||||
|             </Row> | ||||
|         </div> | ||||
|     ) | ||||
| } | ||||
| export default MyCard; | ||||
| @ -0,0 +1,67 @@ | ||||
| import {Col, Row} from "antd"; | ||||
| import './hiddenDangerInspection.less' | ||||
| import MyCard, {PieChart} from "@/pages/hrefficiency_hiddentrouble/component/MyCard"; | ||||
| const dataList=[ | ||||
|     { | ||||
|         title:'隐患总数', | ||||
|         num:'169', | ||||
|         data:'12', | ||||
|         flag:1, | ||||
|         grow:1, | ||||
|         backgroundColor:'#E5EEFE', | ||||
|         color:'#1269FF', | ||||
|     }, | ||||
|     { | ||||
|         title:'已整改隐患', | ||||
|         num:'169', | ||||
|         data:'12', | ||||
|         flag:1, | ||||
|         grow:1, | ||||
|         backgroundColor:'#D9F8E8', | ||||
|         color:'#1DCE74', | ||||
|     }, | ||||
|     { | ||||
|         title:'整改中隐患', | ||||
|         num:'169', | ||||
|         data:'8', | ||||
|         flag:2, | ||||
|         grow:0, | ||||
|         backgroundColor:'#FFF3E9', | ||||
|         color:'orange', | ||||
|     }, | ||||
|     { | ||||
|         title:'超期未整改', | ||||
|         num:'169', | ||||
|         data:'2', | ||||
|         flag:3, | ||||
|         grow:0, | ||||
|         backgroundColor:'#FFE6E8', | ||||
|         color:'#FF3E48', | ||||
|     } | ||||
| ] | ||||
| 
 | ||||
| 
 | ||||
| const HiddenDangerInspection=()=>{ | ||||
|     return( | ||||
|         < > | ||||
|             <header style={{overflow: 'hidden',marginBottom:'10px'}}> | ||||
|                 <Row gutter={10}> | ||||
|                     {dataList.map((item) => { | ||||
|                         return <Col span={6}><MyCard {...item}> </MyCard></Col> | ||||
|                     })} | ||||
|                 </Row> | ||||
|             </header> | ||||
|             <section style={{overflow: 'hidden',}}> | ||||
|                 <Row > | ||||
|                     <Col span={8}> | ||||
|                         <PieChart></PieChart> | ||||
|                     </Col> | ||||
|                     <Col span={14}></Col> | ||||
|                 </Row> | ||||
|             </section> | ||||
| 
 | ||||
| 
 | ||||
|         </> | ||||
|     ) | ||||
| } | ||||
| export default HiddenDangerInspection | ||||
| @ -0,0 +1,3 @@ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
					Loading…
					
					
				
		Reference in New Issue