Compare commits
	
		
			No commits in common. 'e701a6311ac53e5563338919aacee3ab0be7d116' and '9cbf0d94d46b521797d069c7a576eb4bb4a3571e' have entirely different histories. 
		
	
	
		
			e701a6311a
			...
			9cbf0d94d4
		
	
		
	
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								| @ -0,0 +1,83 @@ | |||||||
|  | import React, { PureComponent } from 'react'; | ||||||
|  | import { connect } from '@umijs/max'; | ||||||
|  | import { Tabs } from 'antd'; | ||||||
|  | 
 | ||||||
|  | // 导入子组件
 | ||||||
|  | import BasicInfoManagement from './components/BasicInfoManagement'; | ||||||
|  | import QualificationManagement from './components/QualificationManagement'; | ||||||
|  | import PersonnelBasicInfo from './components/PersonnelBasicInfo'; | ||||||
|  | 
 | ||||||
|  | import styles from './BasicInformation.less'; | ||||||
|  | 
 | ||||||
|  | @connect(({ staffsheet, loading }) => ({ | ||||||
|  |     staffsheet, | ||||||
|  |     loading: loading.models.staffsheet, | ||||||
|  | })) | ||||||
|  | 
 | ||||||
|  | class BasicInformation extends PureComponent { | ||||||
|  |     state = { | ||||||
|  |         activeTab: '1', | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // 渲染Tab内容
 | ||||||
|  |     renderTabContent = () => { | ||||||
|  |         const { activeTab } = this.state; | ||||||
|  |         const { staffsheet, loading, dispatch } = this.props; | ||||||
|  | 
 | ||||||
|  |         const childProps = { | ||||||
|  |             staffsheet, | ||||||
|  |             loading, | ||||||
|  |             dispatch | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         switch (activeTab) { | ||||||
|  |             case '1': | ||||||
|  |                 return <BasicInfoManagement {...childProps} />; | ||||||
|  |             case '2': | ||||||
|  |                 return <QualificationManagement {...childProps} />; | ||||||
|  |             case '3': | ||||||
|  |                 return <PersonnelBasicInfo {...childProps} />; | ||||||
|  |             default: | ||||||
|  |                 return <BasicInfoManagement {...childProps} />; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     render() { | ||||||
|  |         const { activeTab } = this.state; | ||||||
|  | 
 | ||||||
|  |         const tabItems = [ | ||||||
|  |             { | ||||||
|  |                 key: '1', | ||||||
|  |                 label: '基本信息管理', | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 key: '2', | ||||||
|  |                 label: '资质证照管理', | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 key: '3', | ||||||
|  |                 label: '人员基础信息', | ||||||
|  |             } | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         return ( | ||||||
|  |             <div> | ||||||
|  |                 {/* 顶部标签页 */} | ||||||
|  |                 <div style={{ marginBottom: 0, background: '#EEEFF7', padding: '0 24px' }}> | ||||||
|  |                     <Tabs | ||||||
|  |                         activeKey={activeTab} | ||||||
|  |                         onChange={(key) => this.setState({ activeTab: key })} | ||||||
|  |                         items={tabItems} | ||||||
|  |                         className="custom-tabs" | ||||||
|  |                         style={{ marginBottom: 0 }} | ||||||
|  |                     /> | ||||||
|  |                 </div> | ||||||
|  | 
 | ||||||
|  |                 {/* 根据选中的Tab渲染对应的子组件 */} | ||||||
|  |                 {this.renderTabContent()} | ||||||
|  |             </div> | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default BasicInformation; | ||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								| @ -0,0 +1,167 @@ | |||||||
|  | import { useState, useEffect } from 'react' | ||||||
|  | import { Col, DatePicker, Form, Input, Modal, Row, Select } from 'antd' | ||||||
|  | import SelectDeptTree from '@/components/SelectDeptTree' | ||||||
|  | import SelectOrganTree from '@/components/SelectOrganTree' | ||||||
|  | import datadictionary from '@/utils/dataDictionary' | ||||||
|  | import { formatDictOptions, verifyPhone } from '@/utils/globalCommon' | ||||||
|  | import { NumberInput } from '@/components/NumberInput' | ||||||
|  | import styles from '../BasicInformation.less' | ||||||
|  | import style from '@/global.less' | ||||||
|  | import dayjs from 'dayjs' | ||||||
|  | import { formatDate } from '@/utils/formatUtils' | ||||||
|  | 
 | ||||||
|  | const { Item: FormItem } = Form | ||||||
|  | const { TextArea } = Input | ||||||
|  | const dictData = datadictionary | ||||||
|  | 
 | ||||||
|  | //新增表单
 | ||||||
|  | let getDeptTreeBySelectTree | ||||||
|  | let getOrganTreeBySelectTree | ||||||
|  | 
 | ||||||
|  | const BasicInfoCreateForm = (props => { | ||||||
|  |     const [form] = Form.useForm() | ||||||
|  | 
 | ||||||
|  |     const { | ||||||
|  |         modalVisible, | ||||||
|  |         handleAdd, | ||||||
|  |         handleModalVisible, | ||||||
|  |         loading, | ||||||
|  |         dispatch, | ||||||
|  |         selectDeptTree, | ||||||
|  |         selectOrganTree | ||||||
|  |     } = props | ||||||
|  | 
 | ||||||
|  |     // 清空和初始化逻辑可保留
 | ||||||
|  |     useEffect(() => { | ||||||
|  |         form.resetFields(); | ||||||
|  |     }, [modalVisible]) | ||||||
|  | 
 | ||||||
|  |     const okHandle = () => { | ||||||
|  |         form.validateFields() | ||||||
|  |             .then(fieldsValue => { | ||||||
|  |                 form.resetFields() | ||||||
|  |                 handleAdd(fieldsValue) | ||||||
|  |             }) | ||||||
|  |             .catch(() => { }) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const afterClose = () => { | ||||||
|  |         form.resetFields(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return ( | ||||||
|  |         <Modal | ||||||
|  |             width={550} | ||||||
|  |             bodyStyle={{ minHeight: '200px' }} | ||||||
|  |             className={styles.createForm} | ||||||
|  |             centered | ||||||
|  |             destroyOnClose | ||||||
|  |             title='新建项目' | ||||||
|  |             open={modalVisible} | ||||||
|  |             onOk={okHandle} | ||||||
|  |             onCancel={() => handleModalVisible()} | ||||||
|  |             afterClose={afterClose} | ||||||
|  |             confirmLoading={loading} | ||||||
|  |             footer={[ | ||||||
|  |                 <button | ||||||
|  |                     key="cancel" | ||||||
|  |                     onClick={() => handleModalVisible()} | ||||||
|  |                     className={styles['modal-cancel-btn']} | ||||||
|  |                 >取消</button>, | ||||||
|  |                 <button | ||||||
|  |                     key="submit" | ||||||
|  |                     onClick={okHandle} | ||||||
|  |                     className={styles['modal-ok-btn']} | ||||||
|  |                 >确定</button> | ||||||
|  |             ]} | ||||||
|  |         > | ||||||
|  |             <Form | ||||||
|  |                 form={form} | ||||||
|  |                 // layout='vertical'
 | ||||||
|  |                 requiredMark={false} | ||||||
|  |                 style={{ marginTop: 30 }} | ||||||
|  |             > | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="项目名称" | ||||||
|  |                             name="projectName" | ||||||
|  |                             rules={[{ required: true, message: '请输入项目名称' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="输入项目名称" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="地理信息" | ||||||
|  |                             name="location" | ||||||
|  |                             rules={[{ required: true, message: '请输入位置信息' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="请输入位置信息" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="占地面积" | ||||||
|  |                             name="area" | ||||||
|  |                             rules={[{ required: true, message: '请输入面积信息' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input | ||||||
|  |                                 placeholder="面积信息" | ||||||
|  |                                 addonAfter="m²" | ||||||
|  |                             /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="职业人数" | ||||||
|  |                             name="peopleCount" | ||||||
|  |                             rules={[{ required: true, message: '请输入人数' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="输入数量" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="组织机构" | ||||||
|  |                             name="org" | ||||||
|  |                             rules={[{ required: true, message: '请选择组织机构' }]} | ||||||
|  |                         > | ||||||
|  |                             <Select | ||||||
|  |                                 placeholder="请选择" | ||||||
|  |                                 options={[ | ||||||
|  |                                     { label: '机构A', value: 'A' }, | ||||||
|  |                                     { label: '机构B', value: 'B' } | ||||||
|  |                                 ]} | ||||||
|  |                             /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="安全等级" | ||||||
|  |                             name="safeLevel" | ||||||
|  |                             rules={[{ required: true, message: '请选择安全等级' }]} | ||||||
|  |                         > | ||||||
|  |                             <Select | ||||||
|  |                                 placeholder="请选择" | ||||||
|  |                                 options={[ | ||||||
|  |                                     { label: '一级', value: '1' }, | ||||||
|  |                                     { label: '二级', value: '2' }, | ||||||
|  |                                     { label: '三级', value: '3' } | ||||||
|  |                                 ]} | ||||||
|  |                             /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |             </Form> | ||||||
|  |         </Modal> | ||||||
|  |     ) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | export default BasicInfoCreateForm | ||||||
| @ -0,0 +1,149 @@ | |||||||
|  | import { useEffect } from 'react' | ||||||
|  | import { Col, Form, Input, Modal, Row, Select } from 'antd' | ||||||
|  | import styles from '../BasicInformation.less' | ||||||
|  | 
 | ||||||
|  | const BasicInfoUpdateForm = (props => { | ||||||
|  |     const [form] = Form.useForm() | ||||||
|  | 
 | ||||||
|  |     const { | ||||||
|  |         updateModalVisible, | ||||||
|  |         handleUpdate, | ||||||
|  |         handleUpdateModalVisible, | ||||||
|  |         loading, | ||||||
|  |         values = {} | ||||||
|  |     } = props | ||||||
|  | 
 | ||||||
|  |     useEffect(() => { | ||||||
|  |         if (updateModalVisible) { | ||||||
|  |             form.setFieldsValue(values) | ||||||
|  |         } | ||||||
|  |     }, [updateModalVisible, values, form]) | ||||||
|  | 
 | ||||||
|  |     const okHandle = () => { | ||||||
|  |         form.validateFields() | ||||||
|  |             .then(fieldsValue => { | ||||||
|  |                 form.resetFields() | ||||||
|  |                 handleUpdate(fieldsValue) | ||||||
|  |             }) | ||||||
|  |             .catch(() => { }) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const afterClose = () => { | ||||||
|  |         form.resetFields(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return ( | ||||||
|  |         <Modal | ||||||
|  |             width={550} | ||||||
|  |             bodyStyle={{ minHeight: '200px' }} | ||||||
|  |             className={styles.createForm} | ||||||
|  |             centered | ||||||
|  |             destroyOnClose | ||||||
|  |             title='修改项目' | ||||||
|  |             open={updateModalVisible} | ||||||
|  |             onOk={okHandle} | ||||||
|  |             onCancel={() => handleUpdateModalVisible()} | ||||||
|  |             afterClose={afterClose} | ||||||
|  |             confirmLoading={loading} | ||||||
|  |             footer={[ | ||||||
|  |                 <button | ||||||
|  |                     key="cancel" | ||||||
|  |                     onClick={() => handleUpdateModalVisible()} | ||||||
|  |                     className={styles['modal-cancel-btn']} | ||||||
|  |                 >取消</button>, | ||||||
|  |                 <button | ||||||
|  |                     key="submit" | ||||||
|  |                     onClick={okHandle} | ||||||
|  |                     className={styles['modal-ok-btn']} | ||||||
|  |                 >确定</button> | ||||||
|  |             ]} | ||||||
|  |         > | ||||||
|  |             <Form | ||||||
|  |                 form={form} | ||||||
|  |                 requiredMark={false} | ||||||
|  |                 style={{ marginTop: 30 }} | ||||||
|  |             > | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="项目名称" | ||||||
|  |                             name="projectName" | ||||||
|  |                             rules={[{ required: true, message: '请输入项目名称' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="输入项目名称" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="地理信息" | ||||||
|  |                             name="location" | ||||||
|  |                             rules={[{ required: true, message: '请输入位置信息' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="请输入位置信息" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="占地面积" | ||||||
|  |                             name="area" | ||||||
|  |                             rules={[{ required: true, message: '请输入面积信息' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input | ||||||
|  |                                 placeholder="面积信息" | ||||||
|  |                                 addonAfter="m²" | ||||||
|  |                             /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="职业人数" | ||||||
|  |                             name="peopleCount" | ||||||
|  |                             rules={[{ required: true, message: '请输入人数' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="输入数量" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="组织机构" | ||||||
|  |                             name="org" | ||||||
|  |                             rules={[{ required: true, message: '请选择组织机构' }]} | ||||||
|  |                         > | ||||||
|  |                             <Select | ||||||
|  |                                 placeholder="请选择" | ||||||
|  |                                 options={[ | ||||||
|  |                                     { label: '机构A', value: 'A' }, | ||||||
|  |                                     { label: '机构B', value: 'B' } | ||||||
|  |                                 ]} | ||||||
|  |                             /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="安全等级" | ||||||
|  |                             name="safeLevel" | ||||||
|  |                             rules={[{ required: true, message: '请选择安全等级' }]} | ||||||
|  |                         > | ||||||
|  |                             <Select | ||||||
|  |                                 placeholder="请选择" | ||||||
|  |                                 options={[ | ||||||
|  |                                     { label: '一级', value: '1' }, | ||||||
|  |                                     { label: '二级', value: '2' }, | ||||||
|  |                                     { label: '三级', value: '3' } | ||||||
|  |                                 ]} | ||||||
|  |                             /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |             </Form> | ||||||
|  |         </Modal> | ||||||
|  |     ) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | export default BasicInfoUpdateForm | ||||||
| @ -0,0 +1,52 @@ | |||||||
|  | import React from 'react'; | ||||||
|  | import { Modal, Row, Col } from 'antd'; | ||||||
|  | import styles from '../BasicInformation.less'; | ||||||
|  | 
 | ||||||
|  | const BasicInfoViewForm = (props) => { | ||||||
|  |   const { viewModalVisible, handleViewModalVisible, values = {} } = props; | ||||||
|  | 
 | ||||||
|  |   return ( | ||||||
|  |     <Modal | ||||||
|  |       width={500} | ||||||
|  |       bodyStyle={{ minHeight: '180px'}} | ||||||
|  |       className={styles.createForm} | ||||||
|  |       centered | ||||||
|  |       destroyOnClose | ||||||
|  |       title="详情" | ||||||
|  |       open={viewModalVisible} | ||||||
|  |       footer={null} | ||||||
|  |       onCancel={() => handleViewModalVisible(false)} | ||||||
|  |     > | ||||||
|  |       <Row gutter={0} style={{ marginTop: 30 }}> | ||||||
|  |         <Col span={12} style={{ marginBottom: 18 }}> | ||||||
|  |           <div className={styles['view-label']}>项目名称</div> | ||||||
|  |           <div className={styles['view-value']}>{values.projectName || '-'}</div> | ||||||
|  |         </Col> | ||||||
|  |         <Col span={12} style={{ marginBottom: 18 }}> | ||||||
|  |           <div className={styles['view-label']}>地理信息</div> | ||||||
|  |           <div className={styles['view-value']}>{values.location || '-'}</div> | ||||||
|  |         </Col> | ||||||
|  |         <Col span={12} style={{ marginBottom: 18 }}> | ||||||
|  |           <div className={styles['view-label']}>占地面积</div> | ||||||
|  |           <div className={styles['view-value']}> | ||||||
|  |             {values.area ? `${values.area}` : '-'} | ||||||
|  |           </div> | ||||||
|  |         </Col> | ||||||
|  |         <Col span={12} style={{ marginBottom: 18 }}> | ||||||
|  |           <div className={styles['view-label']}>职业人数</div> | ||||||
|  |           <div className={styles['view-value']}>{values.staffCount || '-'}</div> | ||||||
|  |         </Col> | ||||||
|  |         <Col span={12}> | ||||||
|  |           <div className={styles['view-label']}>组织机构</div> | ||||||
|  |           <div className={styles['view-value']}>{values.organization || '-'}</div> | ||||||
|  |         </Col> | ||||||
|  |         <Col span={12}> | ||||||
|  |           <div className={styles['view-label']}>安全等级</div> | ||||||
|  |           <div className={styles['view-value']}>{values.safetyLevel || '-'}</div> | ||||||
|  |         </Col> | ||||||
|  |       </Row> | ||||||
|  |     </Modal> | ||||||
|  |   ); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export default BasicInfoViewForm; | ||||||
| @ -0,0 +1,152 @@ | |||||||
|  | import { useState, useEffect } from 'react' | ||||||
|  | import { Col, DatePicker, Form, Input, Modal, Row, Select } from 'antd' | ||||||
|  | import SelectDeptTree from '@/components/SelectDeptTree' | ||||||
|  | import SelectOrganTree from '@/components/SelectOrganTree' | ||||||
|  | import datadictionary from '@/utils/dataDictionary' | ||||||
|  | import { formatDictOptions, verifyPhone } from '@/utils/globalCommon' | ||||||
|  | import { NumberInput } from '@/components/NumberInput' | ||||||
|  | import styles from '../BasicInformation.less' | ||||||
|  | import style from '@/global.less' | ||||||
|  | import dayjs from 'dayjs' | ||||||
|  | import { formatDate } from '@/utils/formatUtils' | ||||||
|  | 
 | ||||||
|  | const { Item: FormItem } = Form | ||||||
|  | const { TextArea } = Input | ||||||
|  | const dictData = datadictionary | ||||||
|  | 
 | ||||||
|  | //新增表单
 | ||||||
|  | let getDeptTreeBySelectTree | ||||||
|  | let getOrganTreeBySelectTree | ||||||
|  | 
 | ||||||
|  | const PersonnelCreateForm = (props => { | ||||||
|  |     const [form] = Form.useForm() | ||||||
|  | 
 | ||||||
|  |     const { | ||||||
|  |         modalVisible, | ||||||
|  |         handleAdd, | ||||||
|  |         handleModalVisible, | ||||||
|  |         loading, | ||||||
|  |         dispatch, | ||||||
|  |         selectDeptTree, | ||||||
|  |         selectOrganTree | ||||||
|  |     } = props | ||||||
|  | 
 | ||||||
|  |     // 清空和初始化逻辑可保留
 | ||||||
|  |     useEffect(() => { | ||||||
|  |         form.resetFields(); | ||||||
|  |     }, [modalVisible]) | ||||||
|  | 
 | ||||||
|  |     const okHandle = () => { | ||||||
|  |         form.validateFields() | ||||||
|  |             .then(fieldsValue => { | ||||||
|  |                 form.resetFields() | ||||||
|  |                 handleAdd(fieldsValue) | ||||||
|  |             }) | ||||||
|  |             .catch(() => { }) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const afterClose = () => { | ||||||
|  |         form.resetFields(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return ( | ||||||
|  |         <Modal | ||||||
|  |             width={550} | ||||||
|  |             bodyStyle={{ minHeight: '200px' }} | ||||||
|  |             className={styles.createForm} | ||||||
|  |             centered | ||||||
|  |             destroyOnClose | ||||||
|  |             title='新增人员' | ||||||
|  |             open={modalVisible} | ||||||
|  |             onOk={okHandle} | ||||||
|  |             onCancel={() => handleModalVisible()} | ||||||
|  |             afterClose={afterClose} | ||||||
|  |             confirmLoading={loading} | ||||||
|  |             footer={[ | ||||||
|  |                 <button | ||||||
|  |                     key="cancel" | ||||||
|  |                     onClick={() => handleModalVisible()} | ||||||
|  |                     className={styles['modal-cancel-btn']} | ||||||
|  |                 >取消</button>, | ||||||
|  |                 <button | ||||||
|  |                     key="submit" | ||||||
|  |                     onClick={okHandle} | ||||||
|  |                     className={styles['modal-ok-btn']} | ||||||
|  |                 >确定</button> | ||||||
|  |             ]} | ||||||
|  |         > | ||||||
|  |             <Form | ||||||
|  |                 form={form} | ||||||
|  |                 requiredMark={false} | ||||||
|  |                 style={{ marginTop: 30 }} | ||||||
|  |             > | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="姓  名" | ||||||
|  |                             name="name" | ||||||
|  |                             rules={[{ required: true, message: '请输入姓名' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="输入姓名" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="身份证号" | ||||||
|  |                             name="idNumber" | ||||||
|  |                             rules={[{ required: true, message: '请输入身份证号' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="请输入身份证号" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="所属公司" | ||||||
|  |                             name="company" | ||||||
|  |                             rules={[{ required: true, message: '请输入公司名' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="请输入公司名" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={24}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="联系方式" | ||||||
|  |                             name="phone" | ||||||
|  |                             rules={[{ required: true, message: '请输入手机号' }]} | ||||||
|  |                         > | ||||||
|  |                             <Input placeholder="请输入手机号" /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |                 <Row gutter={16}> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="人员分类" | ||||||
|  |                             name="personType" | ||||||
|  |                             rules={[{ required: true, message: '请选择人员分类' }]} | ||||||
|  |                         > | ||||||
|  |                             <Select placeholder="请选择" options={[]} /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                     <Col span={12}> | ||||||
|  |                         <Form.Item | ||||||
|  |                             label="合同状态" | ||||||
|  |                             name="contractStatus" | ||||||
|  |                             rules={[{ required: true, message: '请选择合同状态' }]} | ||||||
|  |                         > | ||||||
|  |                             <Select placeholder="请选择" options={[]} /> | ||||||
|  |                         </Form.Item> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |             </Form> | ||||||
|  |         </Modal> | ||||||
|  |     ) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | export default PersonnelCreateForm | ||||||
| @ -0,0 +1,113 @@ | |||||||
|  | import { useEffect } from 'react' | ||||||
|  | import { Button, Col, Form, Input, Row } from 'antd' | ||||||
|  | import { UpOutlined, SearchOutlined, RedoOutlined } from '@ant-design/icons' | ||||||
|  | import SelectDeptTree from '@/components/SelectDeptTree' | ||||||
|  | import SelectOrganTree from '@/components/SelectOrganTree' | ||||||
|  | import style from '@/global.less' | ||||||
|  | 
 | ||||||
|  | const { Item: FormItem } = Form | ||||||
|  | let getDeptTreeBySelectTree | ||||||
|  | let getOrganTreeBySelectTree | ||||||
|  | 
 | ||||||
|  | const StaffSheetRenderAdvancedForm = (props) => { | ||||||
|  |     const [form] = Form.useForm() | ||||||
|  |     const { dispatch, handleSearch, handleFormReset, toggleForm, selectDeptTree, selectOrganTree, params } = props | ||||||
|  | 
 | ||||||
|  |     useEffect(() => { | ||||||
|  |         form.setFieldsValue({ | ||||||
|  |             user_name: params?.user_name, | ||||||
|  |             user_name_cn: params?.user_name_cn, | ||||||
|  |             deptname: params?.deptname, | ||||||
|  |             orgname: params?.orgname, | ||||||
|  |         }) | ||||||
|  |     }, [params]) | ||||||
|  | 
 | ||||||
|  |     const onFinish = values => { | ||||||
|  |         // if (getDeptTreeBySelectTree) {
 | ||||||
|  |         //     values.dept_code = getDeptTreeBySelectTree.dept_code
 | ||||||
|  |         //     values.deptname = getDeptTreeBySelectTree.title
 | ||||||
|  |         // }
 | ||||||
|  | 
 | ||||||
|  |         if (getOrganTreeBySelectTree) { | ||||||
|  |             values.org_code = getOrganTreeBySelectTree.org_code | ||||||
|  |             values.orgname = getOrganTreeBySelectTree.title | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         handleSearch(values) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const myHandleFormReset = () => { | ||||||
|  |         form.resetFields() | ||||||
|  |         handleFormReset() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const selectedDeptTreeValue = (deptRecord) => { | ||||||
|  |         getDeptTreeBySelectTree = deptRecord | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const selectedOrganTreeValue = (orgRecord) => { | ||||||
|  |         getOrganTreeBySelectTree = orgRecord | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const parentDeptTreeMethod = { | ||||||
|  |         dispatch: dispatch, | ||||||
|  |         selectDeptTree: selectDeptTree, | ||||||
|  |         selectedDeptTreeValue: selectedDeptTreeValue | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const parentOrganTreeMethod = { | ||||||
|  |         dispatch: dispatch, | ||||||
|  |         selectOrganTree: selectOrganTree, | ||||||
|  |         selectedOrganTreeValue: selectedOrganTreeValue | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return ( | ||||||
|  |         <Form form={form} onFinish={onFinish} layout='inline'> | ||||||
|  |             <Row gutter={{ md: 8, lg: 24, xl: 48 }} className={style.searchInput}> | ||||||
|  |                 <Col md={8} sm={24}> | ||||||
|  |                     <FormItem label='用户名' name='user_name'> | ||||||
|  |                         <Input placeholder='请输入' /> | ||||||
|  |                     </FormItem> | ||||||
|  |                 </Col> | ||||||
|  | 
 | ||||||
|  |                 <Col md={8} sm={24}> | ||||||
|  |                     <FormItem label='用户名称' name='user_name_cn'> | ||||||
|  |                         <Input placeholder='请输入' /> | ||||||
|  |                     </FormItem> | ||||||
|  |                 </Col> | ||||||
|  | 
 | ||||||
|  |                 <Col md={8} sm={24}> | ||||||
|  |                     <FormItem label='机构代码' name='orgname'> | ||||||
|  |                         <SelectOrganTree {...parentOrganTreeMethod} /> | ||||||
|  |                     </FormItem> | ||||||
|  |                 </Col> | ||||||
|  |             </Row> | ||||||
|  | 
 | ||||||
|  |             <Row gutter={{md: 8, lg: 24, xl: 48}} className={style.searchBox}> | ||||||
|  |                 {/*<Col md={8} sm={24}>*/} | ||||||
|  |                 {/*    <FormItem label='部门名称' name='deptname'>*/} | ||||||
|  |                 {/*        <SelectDeptTree placeholder={'请选择部门'} {...parentDeptTreeMethod} />*/} | ||||||
|  |                 {/*    </FormItem>*/} | ||||||
|  |                 {/*</Col>*/} | ||||||
|  | 
 | ||||||
|  |                 <Col md={24} sm={24}> | ||||||
|  |                     <div className={style.searchBtn}> | ||||||
|  |                         <Button type='primary' htmlType='submit'> | ||||||
|  |                             查询 | ||||||
|  |                         </Button> | ||||||
|  | 
 | ||||||
|  |                         <Button onClick={myHandleFormReset}> | ||||||
|  |                             重置 | ||||||
|  |                         </Button> | ||||||
|  | 
 | ||||||
|  |                         <a onClick={() => toggleForm(form)}> | ||||||
|  |                             收起 <UpOutlined /> | ||||||
|  |                         </a> | ||||||
|  |                     </div> | ||||||
|  |                 </Col> | ||||||
|  |             </Row> | ||||||
|  |         </Form> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default StaffSheetRenderAdvancedForm | ||||||
| @ -0,0 +1,81 @@ | |||||||
|  | import { useEffect } from 'react' | ||||||
|  | import {Button, Col, Form, Input, Row, DatePicker, Select} from 'antd' | ||||||
|  | import {DownOutlined, RedoOutlined, SearchOutlined} from '@ant-design/icons' | ||||||
|  | import style from '@/global.less' | ||||||
|  | import dayjs from 'dayjs' | ||||||
|  | const { Item: FormItem } = Form | ||||||
|  | 
 | ||||||
|  | const StaffSheetRenderSimpleForm = (props) => { | ||||||
|  |     const [form] = Form.useForm() | ||||||
|  |     const { handleSearch, handleFormReset, toggleForm, params } = props | ||||||
|  | 
 | ||||||
|  |     useEffect(() => { | ||||||
|  |         form.setFieldsValue({ | ||||||
|  |             user_name: params?.user_name, | ||||||
|  |             user_name_cn: params?.user_name_cn, | ||||||
|  |         }) | ||||||
|  |     }, [params]) | ||||||
|  | 
 | ||||||
|  |     const onFinish = values => { | ||||||
|  |         handleSearch(values) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const myHandleFormReset = () => { | ||||||
|  |         form.resetFields() | ||||||
|  |         handleFormReset() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return ( | ||||||
|  |         <Form form={form} onFinish={onFinish} layout='inline'> | ||||||
|  |             <Row gutter={{ md: 8, lg: 24, xl: 48 }} className={style.searchInput}> | ||||||
|  |                 <Col md={4} sm={24}> | ||||||
|  |                     <FormItem label='我的查询条件' name='wdcxtj'> | ||||||
|  | 						<Select | ||||||
|  | 						  placeholder='请选择' | ||||||
|  | 						  options={[]} | ||||||
|  | 						/> | ||||||
|  |                     </FormItem> | ||||||
|  |                 </Col> | ||||||
|  | 				 | ||||||
|  | 				<Col md={4} sm={24}> | ||||||
|  | 				    <FormItem label='日期' name='rq' rules={[{ required: true, message: '请选择日期!' }]}> | ||||||
|  | 				        <DatePicker defaultValue={dayjs('2025-04-10', 'YYYY-MM-DD')} format='YYYY-MM-DD' /> | ||||||
|  | 				    </FormItem> | ||||||
|  | 				</Col> | ||||||
|  | 				 | ||||||
|  |                 <Col md={4} sm={24}> | ||||||
|  |                     <FormItem label='工作地点' name='gzdd'> | ||||||
|  |                         <Input placeholder='请输入' /> | ||||||
|  |                     </FormItem> | ||||||
|  |                 </Col> | ||||||
|  | 			 | ||||||
|  | 				 | ||||||
|  | 				<Col md={4} sm={24}> | ||||||
|  | 				    <FormItem label='工号' name='gh'> | ||||||
|  | 				        <Input placeholder='请输入' defaultValue="123456"/> | ||||||
|  | 				    </FormItem> | ||||||
|  | 				</Col> | ||||||
|  | 				 | ||||||
|  | 				<Col md={4} sm={24}> | ||||||
|  | 				    <FormItem label='名称' name='gh'> | ||||||
|  | 				        <Input placeholder='请输入'/> | ||||||
|  | 				    </FormItem> | ||||||
|  | 				</Col> | ||||||
|  | 
 | ||||||
|  |                 <Col md={4} sm={24}> | ||||||
|  |                     <div className={style.searchBtn}> | ||||||
|  |                         <Button type='primary' htmlType='submit'> | ||||||
|  |                             查询 | ||||||
|  |                         </Button> | ||||||
|  | 
 | ||||||
|  |                         <Button onClick={myHandleFormReset}> | ||||||
|  |                             重置 | ||||||
|  |                         </Button> | ||||||
|  |                     </div> | ||||||
|  |                 </Col> | ||||||
|  |             </Row> | ||||||
|  |         </Form> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default StaffSheetRenderSimpleForm | ||||||
| @ -0,0 +1,32 @@ | |||||||
|  | import MyCard from "@/pages/business_hiddentrouble/component/MyCard"; | ||||||
|  | import {Col, Row, Tabs} from "antd"; | ||||||
|  | import HiddenDangerInspection from "@/pages/business_hiddentrouble/component/hiddenDangerInspection/hiddenDangerInspection"; | ||||||
|  | import styles from './HiddenTrouble.less' | ||||||
|  | import HiddenDangerRighted from "@/pages/business_hiddentrouble/component/hiddenDangerRighted/hiddenDangerRighted"; | ||||||
|  | import HiddenDangerCount from "@/pages/business_hiddentrouble/component/hiddenDangerCount/hiddenDangerCount"; | ||||||
|  | 
 | ||||||
|  | const items = [ | ||||||
|  |     { | ||||||
|  |         key: '1', | ||||||
|  |         label: '隐患检查', | ||||||
|  |         children: <HiddenDangerInspection key={1}/>, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         key: '2', | ||||||
|  |         label: '隐患整改', | ||||||
|  |         children: <HiddenDangerRighted key={2}/> | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         key: '3', | ||||||
|  |         label: '隐患统计', | ||||||
|  |         children: <HiddenDangerCount key={3}/>, | ||||||
|  |     }, | ||||||
|  | ]; | ||||||
|  | const HiddenTrouble = () => { | ||||||
|  |     return ( | ||||||
|  |         <> | ||||||
|  |             <Tabs className={styles['custom-tabs']} type={'card'} defaultActiveKey="1" items={items} tabBarGutter={10}   /> | ||||||
|  |         </> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | export default HiddenTrouble | ||||||
| @ -0,0 +1,43 @@ | |||||||
|  | /* 移除下滑线 */ | ||||||
|  | .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  { | ||||||
|  |   :global(.ant-tabs-tab-active) { | ||||||
|  |     background: #2E4CD4 !important; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* 选中状态 - 文字变为白色 */ | ||||||
|  | .custom-tabs :global(.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,325 @@ | |||||||
|  | import Icon from "antd/es/icon"; | ||||||
|  | import {Col, Pagination, Row, Table} 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=(props)=>{ | ||||||
|  |     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: ['设备安全', '电气安全', '消防安全', '工艺安全', '储罐专业','其他'] | ||||||
|  |             }, | ||||||
|  |             grid:{ | ||||||
|  |                 top: 20, | ||||||
|  |                 bottom: 20, | ||||||
|  |                 left: 20, | ||||||
|  |                 right: 20, | ||||||
|  |             }, | ||||||
|  |             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> {props.title}</>} | ||||||
|  |                         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%',}} | ||||||
|  |                          key={2} | ||||||
|  |                     > | ||||||
|  | 
 | ||||||
|  |                     </div> | ||||||
|  |                 </Col> | ||||||
|  |             </Row> | ||||||
|  |         </div> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 柱状图
 | ||||||
|  | 
 | ||||||
|  | export const BarChart=()=>{ | ||||||
|  |     const chartRef=useRef(null) | ||||||
|  |     const data=[] | ||||||
|  |     useEffect(() => { | ||||||
|  |         const chart =echarts.init(chartRef.current) | ||||||
|  |         const option = { | ||||||
|  |             grid:{ | ||||||
|  |                 top:20, | ||||||
|  |                 bottom:20, | ||||||
|  |                 right:30, | ||||||
|  |                 left:30, | ||||||
|  |             }, | ||||||
|  |             xAxis:{ | ||||||
|  |                 type: 'category', | ||||||
|  |                 data:['每日','每周','每月','每季度','每半年','每年','季节性','专项'], | ||||||
|  |                 axisLine:{ | ||||||
|  |                     show:true, | ||||||
|  |                     lineStyle:{ | ||||||
|  |                         color:'#D5E2FF' | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 axisLabel:{ | ||||||
|  |                     show:true, | ||||||
|  |                     position:'bottom', | ||||||
|  |                     color:'#333' | ||||||
|  |                 }, | ||||||
|  | 
 | ||||||
|  |             }, | ||||||
|  |             yAxis:{ | ||||||
|  |                 type:'value', | ||||||
|  | 
 | ||||||
|  |                 axisLine:{ | ||||||
|  |                     show:true, | ||||||
|  |                     min:0, | ||||||
|  |                     lineStyle:{ | ||||||
|  |                         color:'#D5E2FF' | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                 }, | ||||||
|  |                 axisLabel: { | ||||||
|  |                     show:true, | ||||||
|  |                     color:'#333' | ||||||
|  |                 }, | ||||||
|  |                 splitLine:{ | ||||||
|  |                     show:true, | ||||||
|  |                     lineStyle:{ | ||||||
|  |                         color:'#D5E2FF', | ||||||
|  |                         type:'dashed' | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 nameTextStyle:{ | ||||||
|  |                     color:'#000', | ||||||
|  |                     fontSize:16, | ||||||
|  |                     fontWeight:'600', | ||||||
|  |                 } | ||||||
|  |             }, | ||||||
|  |             series:[ | ||||||
|  |                 { | ||||||
|  |                     name: '数据系列1', | ||||||
|  |                     type: 'bar', // 柱状图
 | ||||||
|  |                     data: [120, 200, 150, 80, 70,123,70,90], // 数据值
 | ||||||
|  |                     barWidth: '20%', // 柱子宽度
 | ||||||
|  |                     itemStyle: { | ||||||
|  |                         color: '#007BFF', // 柱子颜色
 | ||||||
|  |                         borderRadius: [4, 4, 0, 0] ,// 柱子圆角
 | ||||||
|  |                     }, | ||||||
|  |                     label: { | ||||||
|  |                         show: true, | ||||||
|  |                         position: 'top', // 数据标签位置
 | ||||||
|  |                         color: '#333' | ||||||
|  |                     }, | ||||||
|  |                     emphasis: { // 高亮样式
 | ||||||
|  |                         itemStyle: { | ||||||
|  |                             color: '#7491db' | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             ] | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  |         chart.setOption(option) | ||||||
|  |         const handleResize = () => { | ||||||
|  |             chart.resize(); | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         window.addEventListener('resize', handleResize); | ||||||
|  | 
 | ||||||
|  |         // 清理函数
 | ||||||
|  |         return () => { | ||||||
|  |             window.removeEventListener('resize', handleResize); | ||||||
|  |             chart.dispose(); | ||||||
|  |         }; | ||||||
|  |     }) | ||||||
|  |     return( | ||||||
|  |         <div  style={{width: '100%', height: '100%', backgroundColor: '#fff',padding:'15px'}}> | ||||||
|  |             <div style={{fontSize:'16px',fontWeight:'600'}}><span style={{borderRight: '3px solid blue', marginRight: '15px'}}></span>检查频次分布</div> | ||||||
|  |             <div ref={chartRef} style={{width:'100%',height:'126.84px',}}> | ||||||
|  | 
 | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export const MyTable=(props)=>{ | ||||||
|  |     const {dataSource,columns}=props | ||||||
|  |     return ( | ||||||
|  |         <> | ||||||
|  |             <Table | ||||||
|  |                 dataSource={dataSource} | ||||||
|  |                 columns={columns} | ||||||
|  |                 pagination={{ | ||||||
|  |                     total:25, | ||||||
|  |                     showSizeChanger:true, | ||||||
|  |                     showQuickJumper:true, | ||||||
|  |                     showTotal:() => '共 25 条', | ||||||
|  |                     pageSizeOptions:[5,10,20,50,100], | ||||||
|  |                     defaultPageSize:5, | ||||||
|  |                     style:{ | ||||||
|  |                         marginTop:50 | ||||||
|  |                     } | ||||||
|  |                 }} | ||||||
|  |                 style={{width:'100%'}} | ||||||
|  |             /> | ||||||
|  | 
 | ||||||
|  |         </> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | export default MyCard; | ||||||
| @ -0,0 +1,100 @@ | |||||||
|  | import {Col, List, Row} from "antd"; | ||||||
|  | import MyCard from "@/pages/business_hiddentrouble/component/MyCard"; | ||||||
|  | 
 | ||||||
|  | const headerList=[ | ||||||
|  |     { | ||||||
|  |         title:'总隐患数', | ||||||
|  |         num:'1489', | ||||||
|  |         data:'12', | ||||||
|  |         flag:1, | ||||||
|  |         grow:1, | ||||||
|  |         backgroundColor:'#E5EEFE', | ||||||
|  |         color:'#1269FF', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         title:'已整改隐患', | ||||||
|  |         num:'986', | ||||||
|  |         data:'12', | ||||||
|  |         flag:1, | ||||||
|  |         grow:1, | ||||||
|  |         backgroundColor:'#D9F8E8', | ||||||
|  |         color:'#1DCE74', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         title:'整改率', | ||||||
|  |         num:'86%', | ||||||
|  |         data:'8', | ||||||
|  |         flag:2, | ||||||
|  |         grow:0, | ||||||
|  |         backgroundColor:'#FFF3E9', | ||||||
|  |         color:'orange', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         title:'按期整改率', | ||||||
|  |         num:'89%', | ||||||
|  |         data:'2', | ||||||
|  |         flag:3, | ||||||
|  |         grow:0, | ||||||
|  |         backgroundColor:'#FFE6E8', | ||||||
|  |         color:'#FF3E48', | ||||||
|  |     } | ||||||
|  | ] | ||||||
|  | const data=[ | ||||||
|  |     {name:'Q3设备故障类隐患',tip:'占比最高',num:'45%'}, | ||||||
|  |     {name:'Q2安全防护隐患',tip:'显著下降',num:'32%'}, | ||||||
|  |     {name:'Q4电器隐患',tip:'持续改善',num:'28%'}, | ||||||
|  |     {name:'全年平均整改周期',tip:'同比缩短',num:'7天'}, | ||||||
|  | ] | ||||||
|  | const TrendAnalysis=()=>{ | ||||||
|  |     return( | ||||||
|  |         <div style={{backgroundColor:'#fff',padding:'15px'}}> | ||||||
|  |             <Row gutter={10}> | ||||||
|  |                 <Col span={18}>1</Col> | ||||||
|  |                 <Col span={6}> | ||||||
|  |                     {data.map((item,index)=>{ | ||||||
|  |                         return( | ||||||
|  |                             <div style={{display:'flex',justifyContent:'space-between'}}> | ||||||
|  |                                 <div> | ||||||
|  |                                     <div style={{fontSize:'16px',fontWeight:'500',color:'#333'}}>{item.name}</div> | ||||||
|  |                                     <div style={{fontSize:'12px',color:'#666666'}}>{item.tip}</div> | ||||||
|  |                                 </div> | ||||||
|  |                                 <div style={{display:'flex',alignItems:'center'}}> | ||||||
|  |                                     {item.num} | ||||||
|  |                                 </div> | ||||||
|  |                             </div> | ||||||
|  |                         ) | ||||||
|  |                     })} | ||||||
|  |                 </Col> | ||||||
|  |             </Row> | ||||||
|  |         </div> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const HiddenDangerCount=()=>{ | ||||||
|  |     return ( | ||||||
|  |         <> | ||||||
|  |             <header style={{overflow: 'hidden', marginBottom: '10px'}}> | ||||||
|  |                 <Row gutter={10}> | ||||||
|  |                     {headerList.map((item, index) => { | ||||||
|  |                         return <Col span={6}><MyCard {...item}></MyCard></Col> | ||||||
|  |                     })} | ||||||
|  |                 </Row> | ||||||
|  |             </header> | ||||||
|  |             <section style={{overflow: 'hidden', marginBottom: '10px'}}> | ||||||
|  |                 <Row gutter={10}> | ||||||
|  |                     <Col span={16}> | ||||||
|  |                         <TrendAnalysis></TrendAnalysis> | ||||||
|  |                     </Col> | ||||||
|  |                     <Col span={8}>1</Col> | ||||||
|  |                 </Row> | ||||||
|  |             </section> | ||||||
|  |             <footer style={{overflow: 'hidden'}}> | ||||||
|  |                 <Row gutter={10}> | ||||||
|  |                     <Col span={15}>2</Col> | ||||||
|  |                     <Col span={9}>2</Col> | ||||||
|  |                 </Row> | ||||||
|  |             </footer> | ||||||
|  |         </> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | export default HiddenDangerCount | ||||||
| @ -0,0 +1,198 @@ | |||||||
|  | import {Card, Col, Row, Input, Space, Select, Upload, Button, message, Tag} from "antd"; | ||||||
|  | import './hiddenDangerInspection.less' | ||||||
|  | import MyCard, {BarChart, MyTable, PieChart} from "@/pages/business_hiddentrouble/component/MyCard"; | ||||||
|  | import {ExportOutlined, UploadOutlined} from "@ant-design/icons"; | ||||||
|  | import {render} from "react-dom"; | ||||||
|  | const { Search } = Input; | ||||||
|  | 
 | ||||||
|  | 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', | ||||||
|  |     } | ||||||
|  | ] | ||||||
|  | export const Select1=()=>{ | ||||||
|  |     return( | ||||||
|  |         <Select defaultValue="所有领域" style={{ width: 120 }}> | ||||||
|  |             <Select.Option value="sample" >所有领域</Select.Option> | ||||||
|  |         </Select> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | export const Select2=()=>{ | ||||||
|  |     return( | ||||||
|  |         <Select defaultValue="所有频次" style={{ width: 120 }}> | ||||||
|  |             <Select.Option value="sample">所有频次</Select.Option> | ||||||
|  |         </Select> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | const props = { | ||||||
|  |     name: 'file', | ||||||
|  |     action: 'https://660d2bd96ddfa2943b33731c.mockapi.io/api/upload', | ||||||
|  |     headers: { | ||||||
|  |         authorization: 'authorization-text', | ||||||
|  |     }, | ||||||
|  |     onChange(info) { | ||||||
|  |         if (info.file.status !== 'uploading') { | ||||||
|  |             console.log(info.file, info.fileList); | ||||||
|  |         } | ||||||
|  |         if (info.file.status === 'done') { | ||||||
|  |             message.success(`${info.file.name} file uploaded successfully`); | ||||||
|  |         } else if (info.file.status === 'error') { | ||||||
|  |             message.error(`${info.file.name} file upload failed.`); | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  | }; | ||||||
|  | export const Import=()=>{ | ||||||
|  |   return( | ||||||
|  |         <Upload {...props}> | ||||||
|  |             <Button icon={<UploadOutlined />} style={{color:'#2E4CD4'}}>导入</Button> | ||||||
|  |         </Upload> | ||||||
|  |       ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | export const Export=()=>{ | ||||||
|  |     return( | ||||||
|  |         <Button icon={<ExportOutlined/>} style={{color:'#2E4CD4'}}>导出</Button> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | export const levelList= { | ||||||
|  |     '一般隐患':['#DAF3FF','#00AAFA'], | ||||||
|  |     '中等隐患':['#FFF3E9','#FF8800'], | ||||||
|  |     '极高隐患':['#FFE0E2','#FF3E48'], | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const columns=[ | ||||||
|  |     {align:'center',title:'检查项',dataIndex:'inspectionItems',key:'inspectionItems'}, | ||||||
|  |     {align:'center',title:'隐患名称',dataIndex:'name',key:'name'}, | ||||||
|  |     {align:'center',title:'隐患等级',dataIndex:'level',key:'level',render:(level)=>{ | ||||||
|  | 
 | ||||||
|  |         return <Tag color={levelList[level][0]} style={{color:levelList[level][1]}}>{level}</Tag> | ||||||
|  |     }}, | ||||||
|  |     {align:'center',title:'登记时间',dataIndex:'createTime',key:'createTime'}, | ||||||
|  |     {align:'center',title:'隐患来源',dataIndex:'source',key:'source'}, | ||||||
|  |     {align:'center',title:'隐患描述',dataIndex:'description',key:'description',ellipsis:{showTitle:true}}, | ||||||
|  |     {align:'center',title:'治理类型',dataIndex:'type',key:'type'}, | ||||||
|  |     {align:'center',title:'治理期限',dataIndex:'deadline',key:'deadline'}, | ||||||
|  |     {align:'center',title:'整改负责人',dataIndex:'head',key:'head'}, | ||||||
|  |     {align:'center',title:'隐患状态',dataIndex:'state',key:'state',render:(state)=>{return <span style={{color:'green'}}>{state}</span>}}, | ||||||
|  |     {align:'center',title:'验收时间',dataIndex:'acceptanceTime',key:'acceptanceTime'}, | ||||||
|  |     {align:'center',title:'操作',dataIndex:'operation',key:'operation',render:(_,record)=>{ | ||||||
|  |         return <Button type={"link"}>详情</Button> | ||||||
|  |     }}, | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | const dataSource=[ | ||||||
|  |     {key:1,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述111111111111111111111111111111111111',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:2,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'中等隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:3,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'极高隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:4,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:5,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:6,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:7,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:8,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:9,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:10,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:11,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:12,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:13,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:14,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:15,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:16,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:17,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:18,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:19,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:20,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  | 
 | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 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',marginBottom:'10px'}}> | ||||||
|  |                 <Row gutter={10}> | ||||||
|  |                     <Col span={8}> | ||||||
|  |                         <PieChart title={'检查领域分布'}></PieChart> | ||||||
|  |                     </Col> | ||||||
|  |                     <Col span={16}> | ||||||
|  |                         <BarChart></BarChart> | ||||||
|  |                     </Col> | ||||||
|  |                 </Row> | ||||||
|  |             </section> | ||||||
|  |             <footer> | ||||||
|  |                 <div style={{width:'100%',backgroundColor:'#fff',padding:'15px'}}> | ||||||
|  |                     <Space direction='vertical' size={"middle"} style={{width:'100%'}}> | ||||||
|  |                         <Row > | ||||||
|  |                             <span style={{borderRight: '3px solid blue', marginRight: '15px'}}></span> | ||||||
|  |                             <span style={{fontSize:'16px',fontWeight:'600'}}>检查频次分布</span> | ||||||
|  |                         </Row> | ||||||
|  |                         <Row style={{display:'flex',justifyContent:'space-between'}}> | ||||||
|  |                                 <div> | ||||||
|  |                                     <Search placeholder="搜素检查项" style={{ width: 300 }} /> | ||||||
|  |                                 </div> | ||||||
|  |                                 <div> | ||||||
|  |                                     <Space> | ||||||
|  |                                         <Select1></Select1> | ||||||
|  |                                         <Select2></Select2> | ||||||
|  |                                         <Import></Import> | ||||||
|  |                                         <Export></Export> | ||||||
|  |                                     </Space> | ||||||
|  |                                 </div> | ||||||
|  |                         </Row> | ||||||
|  |                         <Row> | ||||||
|  |                             <MyTable dataSource={dataSource} columns={columns}></MyTable> | ||||||
|  |                         </Row> | ||||||
|  |                     </Space> | ||||||
|  |                 </div> | ||||||
|  |             </footer> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         </> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | export default HiddenDangerInspection | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,318 @@ | |||||||
|  | import {Button, Card, Col, Input, Row, Space, Steps, Tag} from "antd"; | ||||||
|  | import MyCard, {MyTable, PieChart} from "@/pages/business_hiddentrouble/component/MyCard"; | ||||||
|  | import {useEffect, useRef} from "react"; | ||||||
|  | import img1 from '../../../../assets/img/stepOne.png' | ||||||
|  | import img2 from '../../../../assets/img/stepTwo.png' | ||||||
|  | import img3 from '../../../../assets/img/stepThree.png' | ||||||
|  | import img4 from '../../../../assets/img/stepFour.png' | ||||||
|  | 
 | ||||||
|  | import echarts from "echarts/lib/echarts"; | ||||||
|  | import { | ||||||
|  |     Export, Import, | ||||||
|  |     levelList, | ||||||
|  |     Select1, Select2 | ||||||
|  | } from "@/pages/business_hiddentrouble/component/hiddenDangerInspection/hiddenDangerInspection"; | ||||||
|  | import './hiddenDangerRighted.less' | ||||||
|  | const { Search } = Input; | ||||||
|  | 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:'89%', | ||||||
|  |         data:'2', | ||||||
|  |         flag:3, | ||||||
|  |         grow:0, | ||||||
|  |         backgroundColor:'#FFE6E8', | ||||||
|  |         color:'#FF3E48', | ||||||
|  |     } | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const columns=[ | ||||||
|  |     {align:'center',title:'检查项',dataIndex:'inspectionItems',key:'inspectionItems'}, | ||||||
|  |     {align:'center',title:'隐患名称',dataIndex:'name',key:'name'}, | ||||||
|  |     {align:'center',title:'隐患等级',dataIndex:'level',key:'level',render:(level)=>{ | ||||||
|  | 
 | ||||||
|  |             return <Tag color={levelList[level][0]} style={{color:levelList[level][1]}}>{level}</Tag> | ||||||
|  |         }}, | ||||||
|  |     {align:'center',title:'登记时间',dataIndex:'createTime',key:'createTime'}, | ||||||
|  |     {align:'center',title:'隐患来源',dataIndex:'source',key:'source'}, | ||||||
|  |     {align:'center',title:'隐患描述',dataIndex:'description',key:'description',ellipsis:{showTitle:true}}, | ||||||
|  |     {align:'center',title:'治理类型',dataIndex:'type',key:'type'}, | ||||||
|  |     {align:'center',title:'治理期限',dataIndex:'deadline',key:'deadline'}, | ||||||
|  |     {align:'center',title:'整改负责人',dataIndex:'head',key:'head'}, | ||||||
|  |     {align:'center',title:'隐患状态',dataIndex:'state',key:'state',render:(state)=>{return <span style={{color:'green'}}>{state}</span>}}, | ||||||
|  |     {align:'center',title:'验收时间',dataIndex:'acceptanceTime',key:'acceptanceTime'}, | ||||||
|  |     {align:'center',title:'操作',dataIndex:'operation',key:'operation',render:(_,record)=>{ | ||||||
|  |             return <div style={{display:"flex"}}> | ||||||
|  |                 <Button type={"link"}>详情</Button> | ||||||
|  |                 <Button type={"link"}>验收</Button> | ||||||
|  |             </div> | ||||||
|  |         }}, | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | const dataSource=[ | ||||||
|  |     {key:1,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述111111111111111111111111111111111111',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:2,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'中等隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:3,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'极高隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:4,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:5,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:6,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:7,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:8,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:9,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:10,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:11,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:12,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:13,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:14,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:15,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:16,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:17,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:18,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:19,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:20,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  |     {key:21,inspectionItems:'设备运行温度',name:'D10精馏车间',level:'一般隐患',createTime:'2025-03-01',source:'日常排查',description:'隐患描述',type:'限期整改',deadline:'2025-09-03',head:'张小龙',state:'已验收',acceptanceTime:'2025-09-03'}, | ||||||
|  | 
 | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const Qiu=(props)=>{ | ||||||
|  |     return( | ||||||
|  |         <div className={'qiu'}> | ||||||
|  |             {props.num} | ||||||
|  |         </div> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | const items=[ | ||||||
|  |     {'0': img1}, | ||||||
|  |     {'1': img2}, | ||||||
|  |     {'2': img3}, | ||||||
|  |     {'3': img4}, | ||||||
|  | 
 | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | const TrendChart=()=>{ | ||||||
|  |     const TrendChart=useRef(null) | ||||||
|  |     useEffect(() => { | ||||||
|  |         const chart=echarts.init(TrendChart.current); | ||||||
|  |         const option={ | ||||||
|  |             grid:{ | ||||||
|  |                 bottom:25, | ||||||
|  |                 top:20, | ||||||
|  |             }, | ||||||
|  |             legend:{ | ||||||
|  |                 show:true, | ||||||
|  |                 left:'50%', | ||||||
|  |                 top:0, | ||||||
|  |                 icon: 'path://M0,0 L20,0', | ||||||
|  |                 itemStyle:{ | ||||||
|  |                     color:'#00A0E9', | ||||||
|  |                 } | ||||||
|  |             }, | ||||||
|  |             xAxis:{ | ||||||
|  |                 type:'category', | ||||||
|  |                 data:['3月','4月','5月','6月','7月','8月'], | ||||||
|  |                 axisLabel:{ | ||||||
|  |                     color:'#000', | ||||||
|  |                 }, | ||||||
|  |                 axisLine:{ | ||||||
|  |                     lineStyle:{ | ||||||
|  |                         color:'#00A0E9', | ||||||
|  |                         type:'dashed', | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 boundaryGap: false, // 关键
 | ||||||
|  |                 axisTick: { | ||||||
|  |                     show: true, | ||||||
|  |                     alignWithLabel: true, // 关键
 | ||||||
|  |                     inside: true, // 刻度朝外
 | ||||||
|  |                     length: 100, // 足够长的长度(根据图表高度调整)
 | ||||||
|  |                     lineStyle: { | ||||||
|  |                         color: '#cccccc', | ||||||
|  |                         width: 1, | ||||||
|  |                         type: 'dashed', | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |             }, | ||||||
|  |             yAxis:{ | ||||||
|  |                 type:'value', | ||||||
|  |                 axisLabel:{ | ||||||
|  |                     color:'#000', | ||||||
|  |                     type:'dashed', | ||||||
|  |                 }, | ||||||
|  |                 axisLine:{ | ||||||
|  |                     show:true, | ||||||
|  |                     lineStyle:{ | ||||||
|  |                         color:'#00A0E9', | ||||||
|  |                         type:'dashed', | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 splitLine:{ | ||||||
|  |                     lineStyle:{ | ||||||
|  |                         color:'#00A0E9', | ||||||
|  |                         type:'dashed' | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             }, | ||||||
|  |             series:[ | ||||||
|  |                 { | ||||||
|  |                     name:'整改完成率', | ||||||
|  |                     data:[120,200,150,80,70,110], | ||||||
|  |                     type:'line', | ||||||
|  |                     smooth:true, | ||||||
|  |                     lineStyle:{ | ||||||
|  |                         color:'#00A0E9' | ||||||
|  |                     }, | ||||||
|  |                     areaStyle:{ | ||||||
|  |                         color:{ | ||||||
|  |                             type:'linear', | ||||||
|  |                             x:0, | ||||||
|  |                             y:0, | ||||||
|  |                             x2:0, | ||||||
|  |                             y2:1, | ||||||
|  |                             colorStops:[ | ||||||
|  |                                 {offset:0,color:'#00A0E9'}, | ||||||
|  |                                 {offset:1,color:'#99D4F5 '} | ||||||
|  |                             ] | ||||||
|  |                         } | ||||||
|  |                     }, | ||||||
|  |                     symbol:'none' | ||||||
|  |                 } | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |         chart.setOption(option) | ||||||
|  |         // 响应式调整
 | ||||||
|  |         const handleResize = () => { | ||||||
|  |             chart.resize(); | ||||||
|  |         }; | ||||||
|  |         handleResize() | ||||||
|  |         window.addEventListener('resize', handleResize); | ||||||
|  | 
 | ||||||
|  |         // 清理函数
 | ||||||
|  |         return () => { | ||||||
|  |             window.removeEventListener('resize', handleResize); | ||||||
|  |             chart.dispose(); | ||||||
|  |         }; | ||||||
|  |     }, []); | ||||||
|  |     return( | ||||||
|  |         <div style={{padding:'10px',backgroundColor:'#fff',height:'100%',width:'100%'}}> | ||||||
|  |             <div style={{fontSize:'16px',fontWeight:'600'}}> | ||||||
|  |                 <span style={{borderRight: '3px solid blue', marginRight: '15px'}}></span>隐患整改进度趋势 | ||||||
|  |             </div> | ||||||
|  |             <div ref={TrendChart} style={{width:'100%',height:'136.86px'}} key={1}> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | const Workflow=()=>{ | ||||||
|  |     return( | ||||||
|  |         <div style={{width: '100%', height: '100%', backgroundColor: '#fff',padding:'10px'}}> | ||||||
|  |             <div style={{fontSize: '16px', fontWeight: '600'}}> | ||||||
|  |                 <span style={{borderRight: '3px solid blue', marginRight: '15px'}}></span>隐患整改流程 | ||||||
|  |             </div> | ||||||
|  |             <div style={{display:'flex',justifyContent:'space-around'}}> | ||||||
|  |                 {items.map((item,index)=>{ | ||||||
|  |                     return ( | ||||||
|  |                         <div key={index}> | ||||||
|  |                             <div className={'box'}> | ||||||
|  |                                 <Qiu num={index+1}></Qiu> | ||||||
|  |                             </div> | ||||||
|  |                             <div style={{ | ||||||
|  |                                 width: '136px', | ||||||
|  |                                 height: '111px', | ||||||
|  |                                 backgroundImage: `url(${item[index]})` | ||||||
|  |                             }}> | ||||||
|  |                             </div> | ||||||
|  |                         </div> | ||||||
|  |                     ) | ||||||
|  |                 })} | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const HiddenDangerRighted = () => { | ||||||
|  |     return ( | ||||||
|  |         <> | ||||||
|  |             <header style={{overflow: 'hidden', marginBottom: '10px'}}> | ||||||
|  |                 <Row gutter={10}> | ||||||
|  |                     {dataList.map((item, index) => { | ||||||
|  |                         return <Col span={6}><MyCard {...item}></MyCard></Col> | ||||||
|  |                     })} | ||||||
|  |                 </Row> | ||||||
|  |             </header> | ||||||
|  |             <section style={{overflow: 'hidden',marginBottom:'10px'}}> | ||||||
|  |                     <Row gutter={10}> | ||||||
|  |                         <Col span={8}> | ||||||
|  |                             <PieChart title={'隐患整改类型'}></PieChart> | ||||||
|  |                         </Col> | ||||||
|  |                         <Col span={7}> | ||||||
|  |                             <TrendChart></TrendChart> | ||||||
|  |                         </Col> | ||||||
|  |                         <Col span={9}> | ||||||
|  |                             <Workflow></Workflow> | ||||||
|  |                         </Col> | ||||||
|  |                     </Row> | ||||||
|  |             </section> | ||||||
|  |             <footer> | ||||||
|  |                 <div style={{width: '100%', backgroundColor: '#fff', padding: '15px'}}> | ||||||
|  |                     <Space direction='vertical' size={"middle"} style={{width: '100%'}}> | ||||||
|  |                         <Row> | ||||||
|  |                             <span style={{borderRight: '3px solid blue', marginRight: '15px'}}></span> | ||||||
|  |                             <span style={{fontSize: '16px', fontWeight: '600'}}>隐患整改列表</span> | ||||||
|  |                         </Row> | ||||||
|  |                         <Row style={{display: 'flex', justifyContent: 'space-between'}}> | ||||||
|  |                             <div> | ||||||
|  |                                 <Search placeholder="搜素检查项" style={{width: 300}}/> | ||||||
|  |                             </div> | ||||||
|  |                             <div> | ||||||
|  |                                 <Space> | ||||||
|  |                                     <Select1></Select1> | ||||||
|  |                                     <Select2></Select2> | ||||||
|  |                                     <Import></Import> | ||||||
|  |                                     <Export></Export> | ||||||
|  |                                 </Space> | ||||||
|  |                             </div> | ||||||
|  |                         </Row> | ||||||
|  |                         <Row> | ||||||
|  |                             <MyTable dataSource={dataSource} columns={columns}></MyTable> | ||||||
|  |                         </Row> | ||||||
|  |                     </Space> | ||||||
|  |                 </div> | ||||||
|  |             </footer> | ||||||
|  |         </> | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | export default HiddenDangerRighted; | ||||||
| @ -0,0 +1,13 @@ | |||||||
|  | .qiu{ | ||||||
|  |   width: 27px; | ||||||
|  |   height: 27px; | ||||||
|  |   border-radius: 50%; | ||||||
|  |   background-color:blue; | ||||||
|  |   color: #fff; | ||||||
|  |   text-align: center; | ||||||
|  |   line-height: 27px; | ||||||
|  | } | ||||||
|  | .box{ | ||||||
|  |   display: flex; | ||||||
|  |   justify-content: center; | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in New Issue