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