From c88ed203971acddef1a8eb16ab0caef5b72e43af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=BE=8E=E8=8D=A3?= <10755671+mei-rong-he@user.noreply.gitee.com> Date: Fri, 16 Jan 2026 09:24:10 +0800 Subject: [PATCH 01/11] 1 --- src/components/Edit/EditModal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Edit/EditModal.js b/src/components/Edit/EditModal.js index 74c5020..4c0ffd8 100644 --- a/src/components/Edit/EditModal.js +++ b/src/components/Edit/EditModal.js @@ -11,7 +11,7 @@ class EditPage extends React.Component { visible: false, loading: false } - this.formName=this.props.app.currActivatedMenu.NAME;//this.props.app.currActivatedMenu.Nav_MenuForm.NAME + this.formName=this.props.app?.currActivatedMenu?.NAME;//this.props.app.currActivatedMenu.Nav_MenuForm.NAME }; showModal = () => { // 显示弹窗 this.setState({ From c47798866f341561aa0224c136ea23aa79a4e89e Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Mon, 19 Jan 2026 08:56:29 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomPages/BI/BI00FullScreen.js | 66 + src/components/PopupWindow.js | 59 + src/layout/FullScreen.js | 842 ++++----- src/layout/FullScreenInter.js | 1531 +++++++++++++++++ src/layout/full.less | 78 +- src/layout/fullinter.less | 551 ++++++ src/plugins/consts/services/route.ts | 4 + src/router.js | 58 +- 8 files changed, 2722 insertions(+), 467 deletions(-) create mode 100644 src/components/CustomPages/BI/BI00FullScreen.js create mode 100644 src/components/PopupWindow.js create mode 100644 src/layout/FullScreenInter.js create mode 100644 src/layout/fullinter.less diff --git a/src/components/CustomPages/BI/BI00FullScreen.js b/src/components/CustomPages/BI/BI00FullScreen.js new file mode 100644 index 0000000..768479c --- /dev/null +++ b/src/components/CustomPages/BI/BI00FullScreen.js @@ -0,0 +1,66 @@ +import React, { useState, useEffect, useRef, Component } from 'react'; +import { withRouter } from 'dva/router'; +import { connect } from 'dva'; +import { + initFilter, + addRuleAndGroups, + guid, + extendInclude, + extendRule, + extendOrder, + extend, +} from '../../../utils/common'; +import { Table, Row, Col, Button, Select, Divider } from 'antd'; +import echarts from 'echarts'; +import styles from '../HI/StepForm1.css'; +import moment from 'moment'; +const { Option } = Select; + +class BI00FullScreen extends React.Component { + constructor(props) { + super(props); + this.state = { + pagination: {}, + retData: [], + displayNum: 24, + totalCount: 0, + finishCount: 0, + overtimeCount: 0, + unfinishCount: 0, + filterType: 1, + timeRange: '', + departmentType: '', + }; + } + + componentDidMount() {} + + render() { + return ( +
+

金源公司生产安全管控平台

+ +
+ ); + } +} +export default connect(({ login, app }) => ({ login, app }))(BI00FullScreen); diff --git a/src/components/PopupWindow.js b/src/components/PopupWindow.js new file mode 100644 index 0000000..87047b1 --- /dev/null +++ b/src/components/PopupWindow.js @@ -0,0 +1,59 @@ +import React, { useEffect, useState } from 'react'; +import { Modal, Button, message } from 'antd'; +import FullScreenPage from '../layout/FullScreenInter'; +const PopupWindow = () => { + const [visible, setVisible] = useState(false); + const [params, setParams] = useState({}); + + useEffect(() => { + // 尝试从 URL 查询参数获取 + const searchParams = new URLSearchParams(window.location.search); + const timeRange = searchParams.get('timeRange') || ''; + const filterType = searchParams.get('filterType') || ''; + + if (timeRange || filterType) { + setParams({ timeRange, filterType }); + setVisible(true); + } else { + // 从 localStorage 获取 + const storedParams = localStorage.getItem('popupParams'); + if (storedParams) { + try { + const parsedParams = JSON.parse(storedParams); + setParams(parsedParams); + setVisible(true); + localStorage.removeItem('popupParams'); + } catch (error) { + message.error('参数解析错误'); + } + } + } + }, []); + + return ( +
+ setVisible(false)} + footer={[ + , + ]} + width={700} + centered + > + + + + {!visible && ( +
+ +
+ )} +
+ ); +}; + +export default PopupWindow; diff --git a/src/layout/FullScreen.js b/src/layout/FullScreen.js index 3a61170..e2fa893 100644 --- a/src/layout/FullScreen.js +++ b/src/layout/FullScreen.js @@ -8,9 +8,10 @@ import { $consts } from '../plugins'; import styles from './full.less'; import echarts from 'echarts'; import realGif from '../assets/layout/mofang.png'; +import logo from '../assets/layout/headerno-logo-new.png'; +import debounce from 'lodash.debounce'; import storage from '../utils/storage'; import { initFilter } from '../utils/common'; -import logo from '../assets/layout/headerno-logo-new.png'; import { FullScreenContainer, BorderBox8, @@ -20,6 +21,7 @@ import { WaterLevelPond, } from '@jiaminghi/data-view-react'; import { text } from '@jiaminghi/data-view-react/lib/index-cd27b7f6'; +import { Scale } from 'canvg'; const stud = (eve) => { return ( @@ -39,6 +41,13 @@ const stud = (eve) => { ); }; +const getScale = () => { + const width = 1920, + height = 1080; // 此处可以根据实际设计稿尺寸修改 + let ww = window.innerWidth / width; + let wh = window.innerHeight / height; + return ww < wh ? ww : wh; +}; class FullScreen extends React.Component { constructor(props) { @@ -48,7 +57,7 @@ class FullScreen extends React.Component { animationDuration: 20, sliderColor: '#de4e58', sliderSize: '24px', - screenWidh: window.screen.width > 2000 ? true : false, + // screenWidh: window.screen.width > 2000 ? true : false, nowDate: '', checkData: [ { name: '公司检查', value: 103 }, @@ -238,6 +247,7 @@ class FullScreen extends React.Component { value: 132, }, ], + scale: getScale(), }; // this.scrollConfig = { // header: ["检查类型", "检查次数", "完成率"], @@ -255,7 +265,15 @@ class FullScreen extends React.Component { // }; } + setScale = debounce(() => { + // debounce节流 + // 获取到缩放比,设置它 + let scale = getScale(); + this.setState({ scale }); + }, 500); + componentDidMount() { + window.addEventListener('resize', this.setScale); // 得到呈现的屏幕宽高比 this.riskLevel(); this.safedanger(); const eve = () => { @@ -298,6 +316,7 @@ class FullScreen extends React.Component { // }); } componentWillUnmount() { + window.removeEventListener('resize', this.setScale); clearInterval(this.timer); } getHomeTitle = () => { @@ -932,202 +951,213 @@ class FullScreen extends React.Component { }; render() { - const { safetySloganOne, animationDuration, sliderColor, sliderSize } = this.state; + const width = 1920, + height = 1080; + // 固定好16:9的宽高比,计算出最合适的缩放比,宽高比可根据需要自行更改 + const { scale, safetySloganOne, animationDuration, sliderColor, sliderSize } = this.state; return ( -
-
-
- - -
+
+
+
+ + - logo
-

{safetySloganOne || '暂无公告'}

+ logo +
+

{safetySloganOne || '暂无公告'}

+
-
- - -
安全生产标准化运营平台
- - -
+ - {this.state.nowDate} -
- - -
-
- - -
- {/* */} -
-
-
风险等级基本信息
+
金源公司安全生产管控平台
+ + +
+ {this.state.nowDate} +
+ + +
+
+ + +
+ {/* */} +
+
+
风险等级基本信息
+
+ +
+ {/*
*/}
+
+
+ {/* */} +
+
+
隐患检查基本信息
+
+
+
+ {this.state.checkData.map((item, index) => { + return ( +
+ +
+
+
{item.name}
+ +
+ /次 +
+
+
+ {item.value} +
+
+
+
+ ); + })} +
+
+ +
+
+ {/*
*/} +
+ +
- {/* */} -
- -
-
- {/* */} -
-
-
隐患检查基本信息
-
-
-
- {this.state.checkData.map((item, index) => { - return ( -
- -
-
-
{item.name}
- -
- /次 -
-
-
- {item.value} -
-
-
-
- ); - })} -
-
- -
-
- {/*
*/} -
- - -
- {this.state.screenWidh ? (
{/*
矿山
*/} @@ -1149,103 +1179,111 @@ class FullScreen extends React.Component {
- ) : ( -
-
-
矿山
-
标准化得分
-
83
+ {/* {this.state.screenWidh ? ( + + ) : ( +
+
+
矿山
+
+ 标准化得分 +
+
83
+
+
+
选矿
+
+ 标准化得分 +
+
88
+
+
+
尾矿
+
+ 标准化得分 +
+
93
+
-
-
选矿
-
标准化得分
-
88
-
-
-
尾矿
-
标准化得分
-
93
+ )} */} +
+
+
+ 1 +
+
+ {this.state.roaData.map((item, index) => { + return ( +
  • +
    +
    + {item.name}:{item.value} +
    +
    +
  • + ); + })} +
    - )} -
    -
    -
    - 1 +
    + + +
    + {/* */} +
    +
    +
    基本会议完成情况
    +
    - {this.state.roaData.map((item, index) => { - return ( -
  • -
    -
    - {item.name}:{item.value} -
    -
    -
  • - ); - })} -
    -
    -
    -
    - - -
    - {/* */} -
    -
    -
    基本会议完成情况
    -
    -
    -
    -
    - {/*
    + {/*
    @@ -1253,7 +1291,7 @@ class FullScreen extends React.Component { id="completethree" style={{ width: "100%", height: "100%" }} >
    */} - {/* @@ -1265,183 +1303,187 @@ class FullScreen extends React.Component { config={this.state.WaterLevelPondconfig3} style={{ width: "20%", height: "100%" }} /> */} +
    +
    + + {this.state.meetingData.map((item, index) => ( + +
    +
    +
    +
    {item.value}
    +
    {item.name}
    +
    +
    +
    + + ))} +
    +
    +
    +
    + +
    +
    + {/* */} +
    +
    +
    安全任务完成情况
    +
    +
    +
    + +
    +
    + {/*
    */} +
    + + +
    +
    + + +
    + {/* */} +
    +
    +
    隐患整改数据
    - - {this.state.meetingData.map((item, index) => ( - -
    -
    -
    -
    {item.value}
    -
    {item.name}
    -
    -
    +
    +
    +
    +
    +
    83
    +
    隐患数
    +
    +
    +
    +
    +
    +
    +
    23
    +
    延期整改数
    +
    +
    +
    +
    +
    +
    +
    56
    +
    按期整改数
    - - ))} - -
    -
    -
    - -
    -
    - {/* */} -
    -
    -
    安全任务完成情况
    -
    -
    -
    - -
    -
    - {/*
    */} -
    - - -
    -
    - - -
    - {/* */} -
    -
    -
    隐患整改数据
    -
    -
    -
    -
    -
    -
    -
    83
    -
    隐患数
    -
    -
    -
    -
    23
    -
    延期整改数
    -
    -
    -
    -
    -
    -
    -
    56
    -
    按期整改数
    -
    -
    -
    -
    -
    -
    -
    -
    -
    83%
    -
    整改率
    +
    +
    +
    +
    +
    83%
    +
    整改率
    +
    + {/* */}
    - {/* */} -
    - - - {/* */} -
    -
    -
    -
    安全生产标准化运行走势图
    -
    -
    -
    - {/*
    */} - - -
    + + + {/* */}
    -
    班组完成率TOP5
    +
    安全生产标准化运行走势图
    -
    - +
    +
    + {/* */} + + +
    +
    +
    +
    +
    班组完成率TOP5
    +
    +
    + +
    -
    - - + + +
    diff --git a/src/layout/FullScreenInter.js b/src/layout/FullScreenInter.js new file mode 100644 index 0000000..fc48f5a --- /dev/null +++ b/src/layout/FullScreenInter.js @@ -0,0 +1,1531 @@ +import React, { useState, useEffect, useMemo, useRef } from 'react'; +import { connect } from 'dva'; +import { withRouter, matchPath } from 'dva/router'; +import { Scrollbars } from 'react-custom-scrollbars'; +import { Icon, Row, Col, Progress, Tabs } from 'antd'; +import EnergyIcon from '../utils/energyIcon'; +import { $consts } from '../plugins'; +import styles from './fullinter.less'; +import echarts from 'echarts'; +import realGif from '../assets/layout/mofang.png'; +import logo from '../assets/layout/headerno-logo-new.png'; +import debounce from 'lodash.debounce'; +import storage from '../utils/storage'; +import { initFilter } from '../utils/common'; +import { + FullScreenContainer, + BorderBox8, + BorderBox10, + ScrollBoard, + CapsuleChart, + WaterLevelPond, + BorderBox7, + BorderBox6, +} from '@jiaminghi/data-view-react'; +import { color } from 'echarts/lib/export'; +import { title } from 'process'; +const { TabPane } = Tabs; + +const getScale = () => { + const width = 1920, + height = 1200; // 此处可以根据实际设计稿尺寸修改 + let ww = window.innerWidth / width; + let wh = window.innerHeight / height; + return ww < wh ? ww : wh; +}; + +class FullScreen extends React.Component { + constructor(props) { + super(props); + this.state = { + safetySloganOne: '', + animationDuration: 20, + sliderColor: '#de4e58', + sliderSize: '24px', + nowDate: '', + riskTypeRate: {}, //风险等级占比 + jobTodayTop3: {}, //当日工作票排名前三 + hiddenRectifyRate: {}, //隐患整改率 + taskTop3: {}, //各事项排名前三 + jobFinishRate: {}, //作业现场完成情况统计 + safeCheckSum: {}, //各公司安全检查统计 + riskChangeData: [ + { name: '隐患数量', value: 103 }, + { name: '延期整改数', value: 18 }, + { name: '按期整改数', value: 85 }, + ], + configBanner: [ + { name: '首页', value: 103 }, + { name: '风险管控', value: 103 }, + { name: '隐患治理', value: 103 }, + { name: '班组建设', value: 103 }, + { name: '危险作业', value: 103 }, + { name: '安全培训', value: 103 }, + ], + checkData: [ + { name: '公司检查', value: 103 }, + { name: '部门检查', value: 79 }, + { name: '车间检查', value: 86 }, + { name: '班组检查', value: 94 }, + ], + widthp: '70%', + scrollConfig: { + header: ['检查类型', '检查次数', '完成率'], + data: [ + ['巡回检查', '322', '99%'], + ['例行检查', '255', '99%'], + ['日常检查', '253', '99%'], + ['专业检查', '123', '99%'], + ['巡回检查', '322', '99%'], + ['例行检查', '255', '99%'], + ['日常检查', '253', '99%'], + ['专业检查', '123', '99%'], + ], + waitTime: 200000, + }, + safescrollConfig: { + header: ['部门', '车间', '活动', '进度'], + data: [ + ['矿山部', '穿爆车间', '班前会议', '98%'], + ['矿山部', '金宇宁化分公司', '班前会议', '98%'], + ['选矿部', '破碎车间', '班前会议', '95%'], + ['矿山部', '磨重车间', '班前会议', '92%'], + ['矿山部', '机电设备管理科', '班前会议', '83%'], + ['矿山部', '钨细泥回收车间', '班前会议', '93%'], + ['矿山部', '穿爆车间', '班前会议', '90%'], + ['矿山部', '穿爆车间', '班前会议', '90%'], + ['矿山部', '穿爆车间', '班前会议', '90%'], + ], + index: true, + columnWidth: [80, 200, 300, 200, 200], + align: ['center'], + waitTime: 2000, + }, + chartConfig: { + data: [ + { + name: '电工日常班', + value: 97, + }, + { + name: '电工三班', + value: 95, + }, + { + name: '破碎一班', + value: 91, + }, + { + name: '磨重二班', + value: 86, + }, + { + name: '磨重三班', + value: 83, + }, + { + name: '电工日常班', + value: 97, + }, + { + name: '电工三班', + value: 95, + }, + { + name: '破碎一班', + value: 91, + }, + { + name: '磨重二班', + value: 86, + }, + { + name: '磨重三班', + value: 83, + }, + { + name: '电工日常班', + value: 97, + }, + { + name: '电工三班', + value: 95, + }, + { + name: '破碎一班', + value: 91, + }, + { + name: '磨重二班', + value: 86, + }, + { + name: '磨重三班', + value: 83, + }, + ], + showValue: true, + }, + riskData: [ + { color: '#c92a2a', value: 2, name: '重大风险' }, + { color: '#FF6710', value: 5, name: '较大风险' }, + { color: '#FFDD1E', value: 15, name: '一般风险' }, + { color: '#0091FF', value: 30, name: '低风险' }, + ], + WaterLevelPondconfig1: { + data: [75], + shape: 'round', + }, + WaterLevelPondconfig2: { + data: [85], + shape: 'round', + }, + WaterLevelPondconfig3: { + data: [95], + shape: 'round', + }, + completeData: [ + { + name: '班组会议完成率', + value: 75, + }, + { + name: '岗位交接班完成率', + value: 85, + }, + { + name: '岗位当班记录完成率', + value: 95, + }, + ], + // completeDatatwo: { + // name: "岗位交接班完成率", + // value: 85, + // id: "completetwo", + // }, + // completeDatathree: { + // name: "岗位当班记录完成率", + // value: 95, + // id: "completethree", + // }, + meetingData: [ + { + name: '班前会议', + value: 32, + }, + { + name: '班组活动', + value: 132, + }, + { + name: '岗位交接班', + value: 32, + }, + { + name: '岗位当班', + value: 132, + }, + { + name: '班前会议', + value: 32, + }, + { + name: '班组活动', + value: 132, + }, + { + name: '岗位交接班', + value: 32, + }, + { + name: '岗位当班', + value: 132, + }, + ], + roaData: [ + { + name: '总任务数', + value: 1456, + }, + { + name: '超时待办数', + value: 132, + }, + { + name: '安全检查数', + value: 1456, + }, + { + name: '检查完成率', + value: 32, + }, + { + name: '职业危害', + value: 132, + }, + { + name: '管控措施', + value: 1456, + }, + { + name: '安全检查库', + value: 132, + }, + { + name: '危险源库', + value: 32, + }, + { + name: '培训计划完成率', + value: 132, + }, + { + name: '用户活跃度', + value: 1456, + }, + { + name: '系统用户数', + value: 132, + }, + { + name: '正常已办数', + value: 32, + }, + { + name: '未完成数', + value: 132, + }, + ], + scale: getScale(), + }; + this.echartsInstances = { + riskLevel: null, + opretionTrend: null, + completeone: null, + }; + } + + setScale = debounce(() => { + // debounce节流 + // 获取到缩放比,设置它 + let scale = getScale(); + this.setState({ scale }); + }, 500); + + componentDidMount() { + window.addEventListener('resize', this.setScale); // 得到呈现的屏幕宽高比 + // this.getHomeTitle(); + this.getHomeDataArray(); + this.setState({ activeTab: '首页' }); + this.riskLevel(); + this.safedanger(); + this.completeChart(this.state.completeData); + this.timer = setInterval(() => { + this.setState({ + nowDate: this.getDate(), + }); + }, 1000); + } + + componentDidUpdate(prevProps, prevState) { + // 当从其他tab切换回首页时 + if (prevState.activeTab !== this.state.activeTab && this.state.activeTab === '首页') { + console.log('切换到首页,初始化图表'); + + // 延迟确保DOM已渲染 + setTimeout(() => { + this.riskLevel(); + this.safedanger(); + this.completeChart(this.state.completeData); + }, 300); // 稍微增加延迟时间 + } + + // 当离开首页时,清理图表 + if (prevState.activeTab === '首页' && this.state.activeTab !== '首页') { + console.log('离开首页,清理图表'); + this.cleanupCharts(); + } + } + getHomeDataArray = () => { + var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 + let json = initFilter(orgId); + this.props.dispatch({ + type: 'app/getDataByPost', + payload: json, + url: 'BI/BIKanBanController/ReturnAllData', + onComplete: (ret) => { + console.log(ret, '877777'); + if (ret) { + console.log('首页标题数据', ret); + this.setState({ + riskTypeRate: ret.riskTypeRate, + jobTodayTop3: ret.jobTodayTop3, + hiddenRectifyRate: ret.hiddenRectifyRate, + taskTop3: ret.taskTop3, + jobFinishRate: ret.jobFinishRate, + safeCheckSum: ret.safeCheckSum, + }); + } + }, + }); + }; + + // 添加清理方法 + cleanupCharts = () => { + // 清理风险分级图表 + if (this.echartsInstances.riskLevel) { + this.echartsInstances.riskLevel.dispose(); + this.echartsInstances.riskLevel = null; + } + + // 清理运行走势图 + if (this.echartsInstances.opretionTrend) { + this.echartsInstances.opretionTrend.dispose(); + this.echartsInstances.opretionTrend = null; + } + + // 清理完成率图表 + if (this.echartsInstances.completeone) { + this.echartsInstances.completeone.dispose(); + this.echartsInstances.completeone = null; + } + + // 移除resize监听器 + if (this.riskResizeHandler) { + window.removeEventListener('resize', this.riskResizeHandler); + this.riskResizeHandler = null; + } + + if (this.trendResizeHandler) { + window.removeEventListener('resize', this.trendResizeHandler); + this.trendResizeHandler = null; + } + + if (this.completeResizeHandler) { + window.removeEventListener('resize', this.completeResizeHandler); + this.completeResizeHandler = null; + } + }; + handleTabClick = (name) => { + // 如果从首页切换到其他tab,先清理图表 + if (this.state.activeTab === '首页' && name !== '首页') { + this.cleanupCharts(); + } + + this.setState({ activeTab: name }); + + const tabActions = { + 首页: () => { + console.log('跳转到首页'); + // 首页图表会在componentDidUpdate中初始化 + }, + 风险管控: () => { + console.log('跳转到风险管控'); + }, + 隐患治理: () => { + console.log('跳转到隐患治理'); + }, + // ... 其他tab + }; + + if (tabActions[name]) { + tabActions[name](); + } + }; + componentWillUnmount() { + window.removeEventListener('resize', this.setScale); + clearInterval(this.timer); + this.cleanupCharts(); + } + getHomeTitle = () => { + console.log('获取首页标题数据'); + var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 + let json = initFilter(orgId); + console.log(json, '首页标题数据'); + this.props.dispatch({ + type: 'app/getDataByPost', + payload: json, + url: 'PF/HomeTitle/OrderPaged', + onComplete: (ret) => { + console.log(ret, '877777'); + if (ret) { + console.log('首页标题数据', ret); + this.setState({ + safetySloganOne: ret[0].TITLE, + // safetySloganOne: "1.安全方针:以人为本、关注健康、依法治企、安全发展。 2.安全理念:一切风险皆可控,一切事故皆可防!3.安全方针:以人为本、关注健康、依法治企、安全发展。4.安全方针:以人为本、关注健康、依法治企、安全发展。5.安全方针:以人为本、关注健康、依法治企、安全发展。 6.安全理念:一切风险皆可控,一切事故皆可防!7.安全方针:以人为本、关注健康、依法治企、安全发展。8.安全方针:以人为本、关注健康、依法治企、安全发展。", + animationDuration: ret[0].SECOND, + sliderColor: ret[0].COCOR, + sliderSize: ret[0].FONTSIZE, + }); + } + }, + }); + }; + callback = (key) => { + console.log(key); + }; + getDate = () => { + var myDate = new Date(); + var year = myDate.getFullYear(); //获取当前年 + var mon = myDate.getMonth() + 1; //获取当前月 + var date = myDate.getDate(); //获取当前日 + // var hours = myDate.getHours(); //获取当前小时 + // var minutes = myDate.getMinutes(); //获取当前分钟 + + if (myDate.getHours() < 10) { + var hours = '0' + myDate.getHours(); + } else { + hours = myDate.getHours(); //获取当前小时 + } + if (myDate.getMinutes() < 10) { + var minutes = '0' + myDate.getMinutes(); + } else { + minutes = myDate.getMinutes(); //获取当前分钟 + } + if (myDate.getSeconds() < 10) { + var seconds = '0' + myDate.getSeconds(); + } else { + seconds = myDate.getSeconds(); //获取当前秒 + } + + var now = year + ' 年 ' + mon + ' 月 ' + date + ' 日 ' + '\t\t\t' + hours + ' : ' + minutes + ' : ' + seconds; + return now; + }; + completeChart = (evt) => { + if (this.echartsInstances.completeone) { + this.echartsInstances.completeone.dispose(); + this.echartsInstances.completeone = null; + } + + let completeCharts = document.getElementById('completeone'); + if (!completeCharts) { + requestAnimationFrame(() => { + this.completeChart(evt); + }); + return; + } + + console.log('初始化完成率图表'); + + this.echartsInstances.completeone = echarts.init(completeCharts); + let seriesArr = []; + let centerArr = [ + ['20%', '50%'], + ['50%', '50%'], + ['80%', '50%'], + ]; + evt.forEach((item, index) => { + seriesArr.push({ + center: centerArr[index], + axisLine: { + show: true, + lineStyle: { + color: [ + [0.25, '#c23531'], + [0.5, '#EFC631'], + [0.75, '#63869e'], + [1, '#91c7ae'], + ], + width: 8, + }, + radius: '90%', // 控制轴线本身的半径 + }, + axisTick: { + show: false, + }, + splitLine: { + length: 8, // 刻度线长度 + distance: 25, // 向内移动距离,负值越大越向内 + lineStyle: { + color: '#fff', // 刻度线颜色 + width: 2, // 刻度线宽度 + }, + }, + axisLabel: { + distance: 15, // 标签与刻度线的距离 + textStyle: { + color: '#fff', + fontSize: 10, + }, + // 调整标签偏移 + offset: [0, 0], // [水平偏移, 垂直偏移] + }, + itemStyle: { + normal: { + color: 'auto', + }, + }, + radius: '80%', + pointer: { + show: true, + width: '8%', + length: '20%', + }, + title: { + textStyle: { + // fontWeight: 'bolder', + fontSize: 14, + color: '#fff', + }, + offsetCenter: [0, '100%'], + }, + detail: { + textStyle: { + fontWeight: 'bolder', + fontSize: 20, + color: '#fff', + }, + offsetCenter: [0, '68%'], + // formatter: '{value}万\n(5048人)', + }, + min: 0, + max: 100, + // name: '米类仪表盘', + type: 'gauge', + show: false, + splitNumber: 10, + data: [ + { + name: item.name, + value: item.value, + }, + ], + }); + }); + this.echartsInstances.completeone.setOption({ + series: seriesArr, + }); + + // 监听resize + const resizeHandler = () => { + if (this.echartsInstances.completeone) { + this.echartsInstances.completeone.resize(); + } + }; + + if (this.completeResizeHandler) { + window.removeEventListener('resize', this.completeResizeHandler); + } + + this.completeResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; + safedanger = () => { + if (this.echartsInstances.opretionTrend) { + this.echartsInstances.opretionTrend.dispose(); + this.echartsInstances.opretionTrend = null; + } + + const opretionTrends = document.getElementById('opretionTrend'); + if (!opretionTrends) { + requestAnimationFrame(() => { + this.safedanger(); + }); + return; + } + + console.log('初始化运行走势图'); + this.echartsInstances.opretionTrend = echarts.init(opretionTrends); + + // ... 原有配置代码 + let bgColor = '#000'; + let color = [ + '#0090FF', + '#36CE9E', + '#e690d1', + '#FF515A', + '#8B5CFF', + '#00CA69', + '#FFC107', + '#E91E63', + '#9C27B0', + '#3F51B5', + '#2196F3', + '#4CAF50', + '#FF9800', + '#795548', + '#607D8B', + ]; + const seriesNames = [ + '选矿部门', + '矿山部门', + '尾矿部门', + '机电部门', + '安全部门', + '生产部门', + '技术部门', + '维修部门', + '运输部门', + '仓储部门', + '质检部门', + '环保部门', + '研发部门', + '行政部门', + '财务部门', + ]; + // 生成x轴数据(12个月) + let xAxisData = []; + for (let i = 1; i <= 12; i++) { + xAxisData.push(i.toString()); + } + + // 生成15个系列的数据 + let seriesArr = []; + for (let i = 0; i < 15; i++) { + let yAxisData = []; + for (let j = 0; j < 12; j++) { + // 生成60-100的随机数据 + yAxisData.push(Math.floor(Math.random() * 40) + 60); + } + + seriesArr.push({ + name: seriesNames[i], + type: 'line', + smooth: true, + symbolSize: 6, + data: yAxisData, + }); + } + + const hexToRgba = (hex, opacity) => { + let rgbaColor = ''; + let reg = /^#[\da-f]{6}$/i; + if (reg.test(hex)) { + rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt('0x' + hex.slice(3, 5))},${parseInt( + '0x' + hex.slice(5, 7) + )},${opacity})`; + } + return rgbaColor; + }; + const option = { + title: [ + { + text: '各家公司的安全教育培训学时统计', + x: 'center', + y: '5%', + textStyle: { + fontSize: 16, + color: '#fff', + }, + }, + ], + backgroundColor: '', + color: color, + legend: { + type: 'scroll', // 如果项目多可以使用滚动 + orient: 'vertical', // 设置为垂直排列 + right: 10, // 距离右侧的距离 + top: 'center', // 垂直居中 + align: 'left', // 文本左对齐 + textStyle: { + color: '#fff', // 文字颜色 + fontSize: 12, + }, + itemStyle: { + color: 'inherit', + borderWidth: 0, + opacity: 1, + }, + symbol: 'rect', // 实心矩形 + symbolSize: [12, 8], // 大小 + itemWidth: 10, // 图例标记的宽度 + itemHeight: 10, // 图例标记的高度 + itemGap: 15, // 图例每项之间的间隔 + pageButtonItemGap: 3, + pageButtonGap: 5, + pageButtonPosition: 'end', + pageIconColor: '#00caf7', + width: 100, // 限制宽度 + height: 250, // 限制高度,超出就会显示滚动 + }, + tooltip: { + trigger: 'axis', + formatter: function (params) { + let html = ''; + params.forEach((v) => { + html += `
    + + ${v.seriesName} + ${v.value} + %`; + }); + + return html; + }, + extraCssText: 'background: #fff; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;', + axisPointer: { + type: 'shadow', + shadowStyle: { + // color: "#ffffff", + shadowColor: 'rgba(225,225,225,1)', + shadowBlur: 5, + }, + }, + }, + grid: { + top: '15%', + left: '5%', + right: '15%', // 为图例留出空间 + bottom: '15%', + containLabel: true, + }, + xAxis: [ + { + type: 'category', + boundaryGap: false, + axisLabel: { + formatter: '{value}月', + textStyle: { + color: '#fff', + }, + }, + axisTick: { + show: false, + }, + axisLine: { + lineStyle: { + color: '#fff', + }, + }, + data: xAxisData, + }, + ], + yAxis: [ + { + type: 'value', + axisLabel: { + textStyle: { + color: '#fff', + }, + }, + nameTextStyle: { + color: '#fff', + fontSize: 12, + lineHeight: 40, + }, + splitLine: { + show: false, + lineStyle: { + type: 'dashed', + color: '#fff', + }, + }, + axisLine: { + show: false, + lineStyle: { + color: '#00c7ff', + width: 1, + type: 'solid', + }, + }, + axisTick: { + show: false, + }, + }, + ], + series: seriesArr, + }; + + this.echartsInstances.opretionTrend.setOption(option); + // 监听resize + const resizeHandler = () => { + if (this.echartsInstances.opretionTrend) { + this.echartsInstances.opretionTrend.resize(); + } + }; + + if (this.trendResizeHandler) { + window.removeEventListener('resize', this.trendResizeHandler); + } + + this.trendResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; + riskLevel = () => { + // 如果已有实例,先销毁 + if (this.echartsInstances.riskLevel) { + this.echartsInstances.riskLevel.dispose(); + this.echartsInstances.riskLevel = null; + } + + const riskLevels = document.getElementById('riskLevelFull'); + if (!riskLevels) { + console.warn('风险分级图表容器未找到'); + // 使用requestAnimationFrame而不是setTimeout + requestAnimationFrame(() => { + this.riskLevel(); + }); + return; + } + + console.log('初始化风险分级图表'); + + // 初始化echarts实例并保存引用 + this.echartsInstances.riskLevel = echarts.init(riskLevels); + const option = { + color: ['#c92a2a', '#FF6710', '#FFDD1E', '#0091FF', '#fa8a89'], + title: [ + { + text: '风险分级占比', + x: 'center', + y: '5%', + textStyle: { + fontSize: 16, + color: '#fff', + }, + }, + ], + tooltip: { + trigger: 'item', + formatter: function (params) { + const color = params.color; + return `
    + + ${params.name}: + ${params.value} +
    `; + }, + backgroundColor: 'rgba(255, 255, 255, 0.5)', + borderColor: '#FFFFFF', + borderWidth: 2, + textStyle: { + color: '#000', + fontSize: 14, + fontWeight: 'normal', + }, + }, + series: [ + { + name: '访问来源', + type: 'pie', + minAngle: 20, + radius: ['40%', '60%'], + center: ['50%', '50%'], + clockwise: true, + avoidLabelOverlap: true, + hoverOffset: 15, + label: { + show: true, + position: 'inside', + formatter: '{a|{b}:{c}}{e|({d}%)}\n', + color: '#FFFFFF', + textBorderWidth: 0, + rich: { + a: { + padding: [-15, 0, 0, 0], + fontSize: 15, + color: '#FFFFFF', + textBorderWidth: 0, + textShadow: 'none', + }, + e: { + fontSize: 14, + color: '#FFFFFF', + padding: [-15, 0, 0, 5], + textBorderWidth: 0, + textShadow: 'none', + }, + }, + }, + labelLine: { + normal: { + show: false, + }, + }, + data: this.state.riskTypeRate, + }, + ], + }; + + this.echartsInstances.riskLevel.setOption(option); + + // 监听窗口大小变化 + const resizeHandler = () => { + if (this.echartsInstances.riskLevel) { + this.echartsInstances.riskLevel.resize(); + } + }; + + // 移除旧的监听器 + if (this.riskResizeHandler) { + window.removeEventListener('resize', this.riskResizeHandler); + } + + this.riskResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; + + render() { + const width = 1920, + height = 1200; + // 固定好16:9的宽高比,计算出最合适的缩放比,宽高比可根据需要自行更改 + const { scale, safetySloganOne, animationDuration, sliderColor, sliderSize, activeTab } = this.state; + const renderContent = () => { + if (activeTab === '首页') { + return ( + <> + {/* 首页内容 - 原来的两行布局 */} +
    + + {/* 原第一行内容 */} + + {/* 风险等级基本信息 */} +
    + + + +
    + {this.state.riskTypeRate.map((item, index) => ( +
    +
    {item.riskType}
    +
    {item.count}
    +
    + ))} +
    + + +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + + + + {/* 中间内容 */} +
    + +
    +
    +
    + 安全方针:以人为本、关注健康、依法治企、安全发展。 +
    +
    + 安全理念:一切风险皆可控,一切事故皆可防! +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + + {/* 右边内容 */} +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + + {this.state.meetingData.map((item, index) => ( + +
    +
    +
    +
    {item.name}
    +
    + {item.value} + + 次 + +
    +
    +
    +
    + + ))} +
    +
    +
    +
    +
    + +
    +
    + + {/* 第二行内容 */} +
    + + +
    + +
    +
    + {this.state.riskChangeData.map((item, index) => ( +
    +
    +
    +
    {item.name}
    +
    {item.value}
    +
    +
    +
    + ))} +
    +
    +
    +
    +
    +
    整改率
    +
    83.98%
    +
    +
    +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    + + 各家公司安全检查统计 + + +
    +
    +
    + +
    +
    + + ); + } else { + // 其他tab的内容 - 这里可以替换为你想要的其他内容 + return ( +
    + + +
    +
    {activeTab} 页面
    +
    这里是 {activeTab} 的内容展示区域
    +
    请根据实际需求替换此内容
    +
    + +
    +
    + ); + } + }; + return ( + +
    +
    +
    + {/* 头部保持不变 */} +
    + + +
    + logo +
    + {this.state.configBanner.slice(0, 3).map((item, index) => ( +
    this.handleTabClick(item.name)} + onKeyPress={(e) => e.key === 'Enter' && this.handleTabClick(item.name)} + tabIndex={0} + title={`点击进入${item.name}`} + role="button" + style={{ cursor: 'pointer' }} + > + {item.name} +
    + ))} +
    +
    + + +
    +
    金源公司安全生产管控平台
    +
    + + +
    + {this.state.configBanner.slice(3, 6).map((item, index) => ( +
    this.handleTabClick(item.name)} + onKeyPress={(e) => e.key === 'Enter' && this.handleTabClick(item.name)} + tabIndex={0} + title={`点击进入${item.name}`} + role="button" + style={{ cursor: 'pointer' }} + > + {item.name} +
    + ))} +
    +
    + {/* {this.state.nowWeek} */} + {this.state.nowDate} +
    + +
    +
    + + {/* 条件渲染的内容区域 */} + {renderContent()} +
    +
    +
    +
    + ); + } +} + +export default withRouter(connect(({ login }) => ({ login }))(FullScreen)); diff --git a/src/layout/full.less b/src/layout/full.less index 48b3c39..4335dd3 100644 --- a/src/layout/full.less +++ b/src/layout/full.less @@ -1,24 +1,31 @@ @font-face { font-family: pangmenzhengdao; - src: url("../assets/fonts/pangmenzhengdao.ttf"); + src: url('../assets/fonts/pangmenzhengdao.ttf'); } @font-face { - font-family: "阿里妈妈东方大楷 Regular"; + font-family: '阿里妈妈东方大楷 Regular'; font-weight: normal; - src: url("../assets/fonts/AlimamaDongFangDaKai-Regular.ttf") - format("truetype"); + src: url('../assets/fonts/AlimamaDongFangDaKai-Regular.ttf') format('truetype'); font-display: swap; } @font-face { - font-family: "站酷庆科黄油体"; + font-family: '站酷庆科黄油体'; font-weight: normal; - src: url("../assets/fonts/zhankuqingke.ttf") format("truetype"); + src: url('../assets/fonts/zhankuqingke.ttf') format('truetype'); font-display: swap; } +.box { + transform-origin: 0 0; + position: absolute; + left: 50%; + top: 50%; + transition: 0.3s; +} + .blackBack { - background-image: url("../assets/login/bg.png"); + background-image: url('../assets/login/bg.png'); width: 100%; // height: calc(100% - 10px); // 进入全屏 height: 100%; @@ -35,7 +42,7 @@ flex-direction: column; } .header { - background-image: url("../assets/layout/full-header.png"); + background-image: url('../assets/layout/full-header.png'); background-size: cover; background-position: center; background-repeat: no-repeat; @@ -51,7 +58,7 @@ font-size: 32px; // font-weight: bold; margin-top: 10px; - font-family: "pangmenzhengdao"; + font-family: 'pangmenzhengdao'; } .row { // height: calc(65% - 200px); @@ -185,7 +192,7 @@ font-size: 18px; } .title { - background-image: url("../assets/layout/title.png"); + background-image: url('../assets/layout/title.png'); background-size: cover; background-position: bottom; background-repeat: no-repeat; @@ -208,7 +215,7 @@ .titlename { color: #fff; font-size: 16px; - font-family: "站酷庆科黄油体"; + font-family: '站酷庆科黄油体'; letter-spacing: 3px; } .risklevelOne { @@ -264,7 +271,7 @@ margin-bottom: 20px; } .scoreBox1 { - background-image: url("../assets/layout/score-box.png"); + background-image: url('../assets/layout/score-box.png'); background-size: contain; background-position: center; background-repeat: no-repeat; @@ -282,7 +289,7 @@ flex-direction: row; // align-items: center; // justify-content: space-between; - background-image: url("../assets/layout/ks.png"); + background-image: url('../assets/layout/ks.png'); background-size: cover; background-position: center; background-repeat: no-repeat; @@ -297,7 +304,7 @@ flex-direction: row; // align-items: center; // justify-content: space-between; - background-image: url("../assets/layout/xk.png"); + background-image: url('../assets/layout/xk.png'); background-size: cover; background-position: center; background-repeat: no-repeat; @@ -311,7 +318,7 @@ flex-direction: row; // align-items: center; // justify-content: space-between; - background-image: url("../assets/layout/wk.png"); + background-image: url('../assets/layout/wk.png'); background-size: cover; background-position: center; background-repeat: no-repeat; @@ -325,7 +332,7 @@ flex-direction: column; align-items: center; justify-content: space-between; - background-image: url("../assets/layout/score.png"); + background-image: url('../assets/layout/score.png'); background-size: contain; background-position: center; background-repeat: no-repeat; @@ -376,58 +383,45 @@ } li:nth-of-type(1) { // transform: rotate(45deg); - transform: translate(-50%, -50%) rotate(12deg) translate(-280px) - rotate(-12deg); + transform: translate(-50%, -50%) rotate(12deg) translate(-280px) rotate(-12deg); // transform-origin: 20px 220px; } li:nth-of-type(2) { - transform: translate(-50%, -50%) rotate(38deg) translate(-280px) - rotate(-38deg); + transform: translate(-50%, -50%) rotate(38deg) translate(-280px) rotate(-38deg); } li:nth-of-type(3) { - transform: translate(-50%, -50%) rotate(64deg) translate(-280px) - rotate(-64deg); + transform: translate(-50%, -50%) rotate(64deg) translate(-280px) rotate(-64deg); } li:nth-of-type(4) { - transform: translate(-50%, -50%) rotate(90deg) translate(-280px) - rotate(-90deg); + transform: translate(-50%, -50%) rotate(90deg) translate(-280px) rotate(-90deg); } li:nth-of-type(5) { - transform: translate(-50%, -50%) rotate(116deg) translate(-280px) - rotate(-116deg); + transform: translate(-50%, -50%) rotate(116deg) translate(-280px) rotate(-116deg); } li:nth-of-type(6) { - transform: translate(-50%, -50%) rotate(142deg) translate(-280px) - rotate(-142deg); + transform: translate(-50%, -50%) rotate(142deg) translate(-280px) rotate(-142deg); } li:nth-of-type(7) { - transform: translate(-50%, -50%) rotate(168deg) translate(-280px) - rotate(-168deg); + transform: translate(-50%, -50%) rotate(168deg) translate(-280px) rotate(-168deg); } li:nth-of-type(8) { - transform: translate(-50%, -50%) rotate(-12deg) translate(-280px) - rotate(12deg); + transform: translate(-50%, -50%) rotate(-12deg) translate(-280px) rotate(12deg); } li:nth-of-type(9) { - transform: translate(-50%, -50%) rotate(-38deg) translate(-280px) - rotate(38deg); + transform: translate(-50%, -50%) rotate(-38deg) translate(-280px) rotate(38deg); } li:nth-of-type(10) { - transform: translate(-50%, -50%) rotate(-64deg) translate(-280px) - rotate(64deg); + transform: translate(-50%, -50%) rotate(-64deg) translate(-280px) rotate(64deg); } li:nth-of-type(11) { - transform: translate(-50%, -50%) rotate(-116deg) translate(-280px) - rotate(116deg); + transform: translate(-50%, -50%) rotate(-116deg) translate(-280px) rotate(116deg); } li:nth-of-type(12) { - transform: translate(-50%, -50%) rotate(-142deg) translate(-280px) - rotate(142deg); + transform: translate(-50%, -50%) rotate(-142deg) translate(-280px) rotate(142deg); } li:nth-of-type(13) { - transform: translate(-50%, -50%) rotate(-168deg) translate(-280px) - rotate(168deg); + transform: translate(-50%, -50%) rotate(-168deg) translate(-280px) rotate(168deg); } } diff --git a/src/layout/fullinter.less b/src/layout/fullinter.less new file mode 100644 index 0000000..409a83a --- /dev/null +++ b/src/layout/fullinter.less @@ -0,0 +1,551 @@ +@font-face { + font-family: pangmenzhengdao; + src: url('../assets/fonts/pangmenzhengdao.ttf'); +} + +@font-face { + font-family: '阿里妈妈东方大楷 Regular'; + font-weight: normal; + src: url('../assets/fonts/AlimamaDongFangDaKai-Regular.ttf') format('truetype'); + font-display: swap; +} +@font-face { + font-family: '站酷庆科黄油体'; + font-weight: normal; + src: url('../assets/fonts/zhankuqingke.ttf') format('truetype'); + font-display: swap; +} + +.box { + transform-origin: 0 0; + position: absolute; + left: 50%; + top: 50%; + transition: 0.3s; +} + +.blackBack { + background-image: url('../assets/login/bg.png'); + width: 100%; + // height: calc(100% - 10px); // 进入全屏 + height: 100%; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} +.backImage { + background-color: #021428; //021428 + width: 100%; + height: 100%; + opacity: 0.9; + display: flex; + flex-direction: column; + overflow: hidden; +} +.header { + // background-image: url('../assets/layout/full-header.png'); + // background-size: cover; + // background-position: center; + // background-repeat: no-repeat; + height: 60px; + display: flex; + align-items: center; + justify-content: space-between; + flex-direction: row; + margin: 10px; + background-color: rgba(73, 122, 175, 0.3); +} +.headerText { + color: GoldenRod; + font-size: 32px; + white-space: nowrap; + // font-weight: bold; + // margin-top: 10px; + font-family: 'pangmenzhengdao'; +} +.configBanners { + // height: 100%; + width: 110px; + height: 48px; + font-size: 20px; // 适当减小字体大小 + margin: 0px 10px; + font-style: italic; + font-weight: bold; + color: #fff; + border: 1px solid transparent; // 默认透明边框 + // border: 1px solid #00caf7; + white-space: nowrap; + background: linear-gradient(to bottom, #01408e, #07295e); + display: flex; // 使用flex布局 + align-items: center; // 垂直居中 + justify-content: center; // 水平居中 + text-align: center; // 文字居中 + box-sizing: border-box; // 确保边框计算在内 + padding: 0 2px; // 如果需要可以添加内边距 + overflow: hidden; // 防止内容溢出 + text-overflow: ellipsis; // 文字过长显示省略号 + position: relative; + overflow: hidden; + &:hover { + border-color: #00caf7; // 悬停效果 + opacity: 0.9; + } + + &.active { + border: 1px solid #00caf7 !important; + background: linear-gradient(to bottom, #0150a0, #083070); // 激活时背景加深 + box-shadow: 0 0 10px rgba(0, 202, 247, 0.5); // 可选:添加发光效果 + } + + &::after { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(0, 202, 247, 0.2), transparent); + transition: left 0.5s ease; + } + + &.active::after { + left: 100%; + } + + &.active { + animation: pulse 2s infinite; + } +} +@keyframes pulse { + 0% { + box-shadow: 0 0 5px rgba(0, 202, 247, 0.5); + } + 50% { + box-shadow: 0 0 15px rgba(0, 202, 247, 0.8); + } + 100% { + box-shadow: 0 0 5px rgba(0, 202, 247, 0.5); + } +} +.boxBack { + width: 100%; + height: 100%; + display: flex; + align-items: center; + flex-direction: column; + padding: 0px 20px; +} +.otherTabContent { + flex: 1; // 占据剩余空间 + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background: rgba(2, 20, 40, 0.7); + border-radius: 10px; + margin: 10px; + border: 1px solid rgba(0, 202, 247, 0.3); +} +.row { + // height: calc(65% - 200px); + flex: 1; + width: 100%; +} +.rowTwo { + height: 30%; + width: 100%; + margin-top: 10px; +} +.boxleft { + height: 100%; + // width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +.fullBorderBox { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + padding: 10px; // 如果需要内边距 + box-sizing: border-box; // 确保内边距计算在内 +} +.risklevel { + height: 50%; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 0px 10px; +} +.risklevelOne { + height: 50%; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 0px 10px; +} +.risklevelTwo { + height: 100%; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 0px 10px 10px 10px; +} +.riskChange { + width: 30%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; + padding: 20px 10px; +} +.riskChangeTwo { + width: 70%; + height: 100%; + padding: 26px 10px; + display: flex; + align-items: center; + justify-content: flex-start; +} +.gradient { + background-image: linear-gradient( + 250deg, + rgba(47, 109, 255, 1) 0%, + rgba(255, 255, 255, 54) 50%, + rgba(47, 109, 255, 1) 100% + ); + width: 100%; + height: 30%; + display: flex; + align-items: center; + justify-content: center; + padding: 2px; + // margin: 10px; +} +.gradientTwo { + background-image: linear-gradient( + 250deg, + rgba(47, 109, 255, 1) 0%, + rgba(255, 255, 255, 54) 50%, + rgba(47, 109, 255, 1) 100% + ); + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: space-around; + padding: 2px; +} +.gradientThree { + background-image: linear-gradient( + 275deg, + rgba(47, 109, 255, 1) 0%, + rgba(255, 255, 255, 54) 50%, + rgba(47, 109, 255, 1) 100% + ); + display: flex; + align-items: center; + justify-content: space-around; + padding: 2px; +} +.gradientNext { + width: 100%; + height: 100%; + background-color: #021428; + // z-index: 999; +} +.gradientNextTwo { + width: 100%; + height: 100%; + background-color: rgba(47, 109, 255, 0.1); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 5px; + color: #fff; +} +.gradientText { + font-size: 34px; + font-weight: bold; + color: #49ebff; + font-style: italic; + font-family: '站酷庆科黄油体'; +} +.gradientName { + font-size: 12px; +} +.gradientTextTwo { + font-size: 86px; + font-weight: bold; + // color: #ef595a; + color: #12f714; +} +.gradientNameTwo { + font-size: 28px; +} +.title { + background-image: url('../assets/layout/title.png'); + background-size: cover; + background-position: bottom; + background-repeat: no-repeat; + width: 90%; + height: 25px; + padding-bottom: 10px; + display: flex; + flex-direction: row; + align-items: center; + // justify-content: center; +} +.circle { + width: 12px; + height: 12px; + background: #021428; + border-radius: 50%; + border: 3px solid #fff; + margin-right: 5px; +} +.titlename { + color: #fff; + font-size: 16px; + font-family: '站酷庆科黄油体'; + letter-spacing: 3px; +} +// .risklevelOne { +// height: 60%; +// width: 90%; +// } +.boxTwo { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + // width: 100%; +} +.capsuleChart { + width: 100%; + height: 100%; + display: flex; + align-items: flex-start; + justify-content: center; + flex-direction: column; + padding: 20px; +} +.scrollboard { + width: 90%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + margin: 0px 20px 20px 20px; + flex: 1; +} +.scrollboard :global(.header) { + height: auto; + padding: 0; +} +.scrollboard :global(.dv-scroll-board .rows .ceil) { + text-align: center; +} +.scrollboard :global(.dv-scroll-board .header .header-item) { + text-align: center; +} + +.scoreBox { + // background-image: url("../assets/layout/score-box.png"); + // background-size: cover; + // background-position: center; + // background-repeat: no-repeat; + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; +} +.scoreBox1 { + background-image: url('../assets/layout/score-box.png'); + background-size: contain; + background-position: center; + background-repeat: no-repeat; + width: 100%; + // height: 140px; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-around; + margin-bottom: 20px; + padding: 5px; +} +.score { + display: flex; + flex-direction: row; + // align-items: center; + // justify-content: space-between; + background-image: url('../assets/layout/ks.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + object-fit: cover; + // width: 230px; + width: 33%; + height: auto; + margin: 10px; +} +.score2 { + display: flex; + flex-direction: row; + // align-items: center; + // justify-content: space-between; + background-image: url('../assets/layout/xk.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + object-fit: cover; + width: 33%; + height: auto; + margin: 10px; +} +.score3 { + display: flex; + flex-direction: row; + // align-items: center; + // justify-content: space-between; + background-image: url('../assets/layout/wk.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + object-fit: cover; + width: 33%; + height: auto; + margin: 10px; +} +.score4 { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + background-image: url('../assets/layout/score.png'); + background-size: contain; + background-position: center; + background-repeat: no-repeat; + width: 30%; + padding: 0px 15px; + // height: 100%; + // margin: 10px; +} +.scoreRight { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 40%; + margin-left: 50%; +} +.scoreLeft { + font-size: 12px; + font-weight: bold; + color: #6cc8d9; + margin-top: 5px; +} +.scoreText { + font-size: 13px; + font-weight: bold; + color: #6cc8d9; +} +.scoreText2 { + font-size: 33px; + color: #7fffff; + font-weight: bold; + // font-style: oblique; +} +.scoreText3 { + font-size: 12px; + color: #6cc8d9; + font-weight: bold; +} +.ulData { + li { + // transform: rotate(45deg); + position: absolute; + left: 50%; + top: 50%; + // margin-left: -20px; + // margin-right: -20px; + transform: translate(-50%, -50%); + } + li:nth-of-type(1) { + // transform: rotate(45deg); + transform: translate(-50%, -50%) rotate(12deg) translate(-280px) rotate(-12deg); + // transform-origin: 20px 220px; + } + li:nth-of-type(2) { + transform: translate(-50%, -50%) rotate(38deg) translate(-280px) rotate(-38deg); + } + li:nth-of-type(3) { + transform: translate(-50%, -50%) rotate(64deg) translate(-280px) rotate(-64deg); + } + li:nth-of-type(4) { + transform: translate(-50%, -50%) rotate(90deg) translate(-280px) rotate(-90deg); + } + li:nth-of-type(5) { + transform: translate(-50%, -50%) rotate(116deg) translate(-280px) rotate(-116deg); + } + li:nth-of-type(6) { + transform: translate(-50%, -50%) rotate(142deg) translate(-280px) rotate(-142deg); + } + li:nth-of-type(7) { + transform: translate(-50%, -50%) rotate(168deg) translate(-280px) rotate(-168deg); + } + li:nth-of-type(8) { + transform: translate(-50%, -50%) rotate(-12deg) translate(-280px) rotate(12deg); + } + li:nth-of-type(9) { + transform: translate(-50%, -50%) rotate(-38deg) translate(-280px) rotate(38deg); + } + li:nth-of-type(10) { + transform: translate(-50%, -50%) rotate(-64deg) translate(-280px) rotate(64deg); + } + li:nth-of-type(11) { + transform: translate(-50%, -50%) rotate(-116deg) translate(-280px) rotate(116deg); + } + + li:nth-of-type(12) { + transform: translate(-50%, -50%) rotate(-142deg) translate(-280px) rotate(142deg); + } + li:nth-of-type(13) { + transform: translate(-50%, -50%) rotate(-168deg) translate(-280px) rotate(168deg); + } +} + +.roateData { + background-image: linear-gradient( + 275deg, + rgba(47, 109, 255, 1) 0%, + rgba(255, 255, 255, 54) 50%, + rgba(47, 109, 255, 1) 100% + ); + display: flex; + align-items: center; + justify-content: space-around; + padding: 2px; + // background-color: rgba(47, 109, 255, 0.1); +} +.roatBack { + background-color: #021428; + width: 100%; + height: 100%; + padding: 5px; +} diff --git a/src/plugins/consts/services/route.ts b/src/plugins/consts/services/route.ts index db21b45..d6227a1 100644 --- a/src/plugins/consts/services/route.ts +++ b/src/plugins/consts/services/route.ts @@ -3,6 +3,10 @@ export default [ name: 'LOGIN', value: '/login' }, + { + name: 'POPUPWINDOW', + value: '/popup' + }, { name: 'HOME', value: '/home' diff --git a/src/router.js b/src/router.js index 97a53c1..a507c04 100644 --- a/src/router.js +++ b/src/router.js @@ -1,34 +1,42 @@ -import React from 'react' -import { ConfigProvider } from 'antd' -import { Router, Route, Switch } from 'dva/router' -import MainLayout from './layout/Main' -import Login from './routes/Login' -import Home from './routes/Home' -import GroupHome from './routes/GroupHome' -import Main from './routes/Main' -import Backend from './routes/Backend' -import HomeMobileNew from './routes/HomeMobileNew' -import { $consts } from './plugins' -import zhCN from 'antd/lib/locale-provider/zh_CN' -import 'moment/src/locale/zh-cn' +import React from 'react'; +import { ConfigProvider } from 'antd'; +import { Router, Route, Switch } from 'dva/router'; +import MainLayout from './layout/Main'; +import Login from './routes/Login'; +import Home from './routes/Home'; +import GroupHome from './routes/GroupHome'; +import Main from './routes/Main'; +import Backend from './routes/Backend'; +import HomeMobileNew from './routes/HomeMobileNew'; +import { $consts } from './plugins'; +import zhCN from 'antd/lib/locale-provider/zh_CN'; +import 'moment/src/locale/zh-cn'; +import PopupWindow from './components/PopupWindow'; function RouterConfig({ history }) { return ( - - - - - - - - {/* */} - - + + + {/* 其他页面使用 MainLayout */} + ( + + + + + + + + + + )} + /> + - ) + ); } -export default RouterConfig +export default RouterConfig; From c0ae7bb66594e39dc25747b5e801b102d3c3bb41 Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Mon, 19 Jan 2026 09:28:06 +0800 Subject: [PATCH 03/11] 1 --- src/layout/FullScreenInter.js | 10 +- src/utils/customConfig.js | 440 +++++++++++++++++++--------------- 2 files changed, 255 insertions(+), 195 deletions(-) diff --git a/src/layout/FullScreenInter.js b/src/layout/FullScreenInter.js index fc48f5a..8423e86 100644 --- a/src/layout/FullScreenInter.js +++ b/src/layout/FullScreenInter.js @@ -43,12 +43,12 @@ class FullScreen extends React.Component { sliderColor: '#de4e58', sliderSize: '24px', nowDate: '', - riskTypeRate: {}, //风险等级占比 - jobTodayTop3: {}, //当日工作票排名前三 + riskTypeRate: [], //风险等级占比 + jobTodayTop3: [], //当日工作票排名前三 hiddenRectifyRate: {}, //隐患整改率 - taskTop3: {}, //各事项排名前三 - jobFinishRate: {}, //作业现场完成情况统计 - safeCheckSum: {}, //各公司安全检查统计 + taskTop3: [], //各事项排名前三 + jobFinishRate: [], //作业现场完成情况统计 + safeCheckSum: [], //各公司安全检查统计 riskChangeData: [ { name: '隐患数量', value: 103 }, { name: '延期整改数', value: 18 }, diff --git a/src/utils/customConfig.js b/src/utils/customConfig.js index 37943f8..64cc789 100644 --- a/src/utils/customConfig.js +++ b/src/utils/customConfig.js @@ -1,119 +1,127 @@ -import Loadable from 'react-loadable' -import React from 'react' +import Loadable from 'react-loadable'; +import React from 'react'; // 优化的共�?loading 组件 const LoadingComponent = ({ isLoading, error }) => { if (error) { - return
    组件加载失败
    + return
    组件加载失败
    ; } if (isLoading) { - return
    加载�?..
    + return
    加载�?..
    ; } - return null -} + return null; +}; // 优化�?Loadable 配置函数 -const createLoadableComponent = (importFunc) => Loadable({ - loader: importFunc, - loading: LoadingComponent, - delay: 200, // 延迟显示 loading,避免闪�? - timeout: 10000 // 10秒超�? -}) +const createLoadableComponent = (importFunc) => + Loadable({ + loader: importFunc, + loading: LoadingComponent, + delay: 200, // 延迟显示 loading,避免闪�? + timeout: 10000, // 10秒超�? + }); -const SC022Import = createLoadableComponent(() => import('../components/CustomPages/SC/SC022Import')) -const SC022ImportData = createLoadableComponent(() => import('../components/CustomPages/SC/SC022ImportData')) -const FMUserEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/UserEditPage')) -const FMUserEditPageAuth = createLoadableComponent(() => import('../components/CustomPages/FM/UserEditPageAuth')) -const FMUserGroupEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/UserGroupEditPage')) -const PFCustomPageConfigPage = createLoadableComponent(() => import('../components/CustomPages/PF/CustomPageConfigPage')) -const FMRoleGroupEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/RoleGroupEditPage')) -const FMRoleEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/RoleEditPage')) +const SC022Import = createLoadableComponent(() => import('../components/CustomPages/SC/SC022Import')); +const SC022ImportData = createLoadableComponent(() => import('../components/CustomPages/SC/SC022ImportData')); +const FMUserEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/UserEditPage')); +const FMUserEditPageAuth = createLoadableComponent(() => import('../components/CustomPages/FM/UserEditPageAuth')); +const FMUserGroupEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/UserGroupEditPage')); +const PFCustomPageConfigPage = createLoadableComponent(() => + import('../components/CustomPages/PF/CustomPageConfigPage') +); +const FMRoleGroupEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/RoleGroupEditPage')); +const FMRoleEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/RoleEditPage')); -const FM204ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FM/FM204ShowPrint')) +const FM204ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FM/FM204ShowPrint')); -const FMBaseConfig = createLoadableComponent(() => import('../components/CustomPages/FM/BaseConfig')) +const FMBaseConfig = createLoadableComponent(() => import('../components/CustomPages/FM/BaseConfig')); -const PFFlowSchemesEditPage = createLoadableComponent(() => import('../components/CustomPages/PF/FlowSchemesEditPage')) +const PFFlowSchemesEditPage = createLoadableComponent(() => import('../components/CustomPages/PF/FlowSchemesEditPage')); -const PFFlowSchemesShowPage = createLoadableComponent(() => import('../components/CustomPages/PF/FlowSchemesShowPage')) +const PFFlowSchemesShowPage = createLoadableComponent(() => import('../components/CustomPages/PF/FlowSchemesShowPage')); -const PFFlowPermitEditPage = createLoadableComponent(() => import('../components/CustomPages/PF/FlowPermitEditPage')) +const PFFlowPermitEditPage = createLoadableComponent(() => import('../components/CustomPages/PF/FlowPermitEditPage')); -const PFFormConfigSqlPage = createLoadableComponent(() => import('../components/CustomPages/PF/FormConfigSqlPage')) -const PF147ShowPrint = createLoadableComponent(() => import('../components/CustomPages/PF/PF147ShowPrint')) +const PFFormConfigSqlPage = createLoadableComponent(() => import('../components/CustomPages/PF/FormConfigSqlPage')); +const PF147ShowPrint = createLoadableComponent(() => import('../components/CustomPages/PF/PF147ShowPrint')); -const WOSOPViewPage = createLoadableComponent(() => import('../components/CustomPages/WO/SOPViewPage')) +const WOSOPViewPage = createLoadableComponent(() => import('../components/CustomPages/WO/SOPViewPage')); -const FMCustomImportPage = createLoadableComponent(() => import('../components/CustomPages/FM/CustomImportPage')) +const FMCustomImportPage = createLoadableComponent(() => import('../components/CustomPages/FM/CustomImportPage')); -const FMNodeSchedulingPage = createLoadableComponent(() => import('../components/CustomPages/FM/NodeSchedulingPage')) +const FMNodeSchedulingPage = createLoadableComponent(() => import('../components/CustomPages/FM/NodeSchedulingPage')); -const PFEntitySqlPage = createLoadableComponent(() => import('../components/CustomPages/PF/EntitySqlPage')) +const PFEntitySqlPage = createLoadableComponent(() => import('../components/CustomPages/PF/EntitySqlPage')); -const PFInitDestOrgPage = createLoadableComponent(() => import('../components/CustomPages/PF/InitDestOrgPage')) +const PFInitDestOrgPage = createLoadableComponent(() => import('../components/CustomPages/PF/InitDestOrgPage')); -const PFEntityFieldListPage = createLoadableComponent(() => import('../components/CustomPages/PF/EntityFieldListPage')) +const PFEntityFieldListPage = createLoadableComponent(() => import('../components/CustomPages/PF/EntityFieldListPage')); -const PFExecuteSqlPage = createLoadableComponent(() => import('../components/CustomPages/PF/ExecuteSqlPage')) +const PFExecuteSqlPage = createLoadableComponent(() => import('../components/CustomPages/PF/ExecuteSqlPage')); -const PFSendInfoToClientPage = createLoadableComponent(() => import('../components/CustomPages/PF/SendInfoToClientPage')) +const PFSendInfoToClientPage = createLoadableComponent(() => + import('../components/CustomPages/PF/SendInfoToClientPage') +); -const PFFormConfigByNamePage = createLoadableComponent(() => import('../components/CustomPages/PF/FormConfigByNamePage')) +const PFFormConfigByNamePage = createLoadableComponent(() => + import('../components/CustomPages/PF/FormConfigByNamePage') +); -const BDPictureEditPage = createLoadableComponent(() => import('../components/CustomPages/BD/PictureEditPage')) +const BDPictureEditPage = createLoadableComponent(() => import('../components/CustomPages/BD/PictureEditPage')); -const BDHmiPage = createLoadableComponent(() => import('../components/CustomPages/BD/BDHmiPage')) +const BDHmiPage = createLoadableComponent(() => import('../components/CustomPages/BD/BDHmiPage')); -const BDWordPage = createLoadableComponent(() => import('../components/CustomPages/BD/BDWordPage')) +const BDWordPage = createLoadableComponent(() => import('../components/CustomPages/BD/BDWordPage')); -const FoPreOperSch = createLoadableComponent(() => import('../components/CustomPages/FO/FoPreOperSch')) +const FoPreOperSch = createLoadableComponent(() => import('../components/CustomPages/FO/FoPreOperSch')); -const FoTeamActivityShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FoTeamActivityShowPrint')) +const FoTeamActivityShowPrint = createLoadableComponent(() => + import('../components/CustomPages/FO/FoTeamActivityShowPrint') +); -const PFCommonApprove = createLoadableComponent(() => import('../components/CustomPages/PF/PFCommonApprove')) +const PFCommonApprove = createLoadableComponent(() => import('../components/CustomPages/PF/PFCommonApprove')); -const PFCommonApproveView = createLoadableComponent(() => import('../components/CustomPages/PF/PFCommonApproveView')) +const PFCommonApproveView = createLoadableComponent(() => import('../components/CustomPages/PF/PFCommonApproveView')); -const PFTodayReminder = createLoadableComponent(() => import('../components/CustomPages/PF/PFTodayReminder')) -const SelectUser = createLoadableComponent(() => import('../components/CustomPages/FM/SelectUser')) -const FO003ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO003ShowPrint')) -const FO003ShowPrintJD = createLoadableComponent(() => import('../components/CustomPages/FO/FO003ShowPrintJD')) -const FO005ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO005ShowPrint')) -const FOChangeShfitRecord = createLoadableComponent(() => import('../components/CustomPages/FO/FOChangeShfitRecord')) -const HM047ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM047ShowPrint')) -const HM040ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM040ShowPrint')) -const HM042ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM042ShowPrint')) -const HM001ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM001ShowPrint')) +const PFTodayReminder = createLoadableComponent(() => import('../components/CustomPages/PF/PFTodayReminder')); +const SelectUser = createLoadableComponent(() => import('../components/CustomPages/FM/SelectUser')); +const FO003ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO003ShowPrint')); +const FO003ShowPrintJD = createLoadableComponent(() => import('../components/CustomPages/FO/FO003ShowPrintJD')); +const FO005ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO005ShowPrint')); +const FOChangeShfitRecord = createLoadableComponent(() => import('../components/CustomPages/FO/FOChangeShfitRecord')); +const HM047ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM047ShowPrint')); +const HM040ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM040ShowPrint')); +const HM042ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM042ShowPrint')); +const HM001ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM001ShowPrint')); -const HM123ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM123ShowPrint')) +const HM123ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM123ShowPrint')); +const FileViewerShow = createLoadableComponent(() => import('../components/common/FileViewerShow')); -const FileViewerShow = createLoadableComponent(() => import('../components/common/FileViewerShow')) +const FO017ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO017ShowPrint')); +const FO017ShowPrintJD = createLoadableComponent(() => import('../components/CustomPages/FO/FO017ShowPrintJD')); +const FO021ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO021ShowPrint')); +const FO022ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO022ShowPrint')); +const FO015ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO015ShowPrint')); +const FO008ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO008ShowPrint')); +const FO021EditPage = createLoadableComponent(() => import('../components/CustomPages/FO/FO021EditPage')); +const FO019ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO019ShowPrint')); +const FO035ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO035ShowPrint')); +const FO037ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO037ShowPrint')); +const FO041ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO041ShowPrint')); +const FO043ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO043ShowPrint')); +const FO045ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO045ShowPrint')); -const FO017ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO017ShowPrint')) -const FO017ShowPrintJD = createLoadableComponent(() => import('../components/CustomPages/FO/FO017ShowPrintJD')) -const FO021ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO021ShowPrint')) -const FO022ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO022ShowPrint')) -const FO015ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO015ShowPrint')) -const FO008ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO008ShowPrint')) -const FO021EditPage = createLoadableComponent(() => import('../components/CustomPages/FO/FO021EditPage')) -const FO019ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO019ShowPrint')) -const FO035ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO035ShowPrint')) -const FO037ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO037ShowPrint')) -const FO041ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO041ShowPrint')) -const FO043ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO043ShowPrint')) -const FO045ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO045ShowPrint')) +const PreMeetingTask = createLoadableComponent(() => import('../components/CustomPages/Mobile/PreMeetingTask')); +const PreOperSchTask = createLoadableComponent(() => import('../components/CustomPages/Mobile/PreOperSchTask')); +const PF132ShowPrint = createLoadableComponent(() => import('../components/CustomPages/PF/PF132ShowPrint')); +const RiskSubmit = createLoadableComponent(() => import('../components/CustomPages/Mobile/RiskSubmit')); +const CrucialLicenseJob = createLoadableComponent(() => import('../components/CustomPages/Mobile/CrucialLicenseJob')); -const PreMeetingTask = createLoadableComponent(() => import('../components/CustomPages/Mobile/PreMeetingTask')) -const PreOperSchTask = createLoadableComponent(() => import('../components/CustomPages/Mobile/PreOperSchTask')) -const PF132ShowPrint = createLoadableComponent(() => import('../components/CustomPages/PF/PF132ShowPrint')) -const RiskSubmit = createLoadableComponent(() => import('../components/CustomPages/Mobile/RiskSubmit')) -const CrucialLicenseJob = createLoadableComponent(() => import('../components/CustomPages/Mobile/CrucialLicenseJob')) +const SCShowPrint = createLoadableComponent(() => import('../components/CustomPages/SC/SCShowPrint')); -const SCShowPrint = createLoadableComponent(() => import('../components/CustomPages/SC/SCShowPrint')) - -const SC046ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SC/SC046ShowPrint')) -const SC052ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SC/SC052ShowPrint')) +const SC046ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SC/SC046ShowPrint')); +const SC052ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SC/SC052ShowPrint')); // const CM018ShowPrint = createLoadableComponent(() => import('../components/CustomPages/CM/CM018ShowPrint')) // const CM002ShowPrint = createLoadableComponent(() => import('../components/CustomPages/CM/CM002ShowPrint')) @@ -130,34 +138,34 @@ const SC052ShowPrint = createLoadableComponent(() => import('../components/Custo // const CM043ShowPrint = createLoadableComponent(() => import('../components/CustomPages/CM/CM043ShowPrint')) // const CM045ShowPrint = createLoadableComponent(() => import('../components/CustomPages/CM/CM045ShowPrint')) -const SE001EditPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE001EditPage')) -const SEConfigPage = createLoadableComponent(() => import('../components/CustomPages/SE/SEConfigPage')) -const SE005ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE005ShowPrint')) -const SESafeSurveyTest = createLoadableComponent(() => import('../components/CustomPages/SE/SESafeSurveyTest')) -const SE005ReportEdit = createLoadableComponent(() => import('../components/CustomPages/SE/SE005ReportEdit')) -const SE007AllView = createLoadableComponent(() => import('../components/CustomPages/SE/SE007AllView')) -const SE009ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE009ShowPrint')) -const SE011ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE011ShowPrint')) -const SE013ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE013ShowPrint')) -const SE015ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE015ShowPrint')) -const SE018EditPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE018EditPage')) -const SE018PaperPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE018PaperPage')) -const SE019ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE019ShowPrint')) -const SE021ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE021ShowPrint')) -const SE061ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE061ShowPrint')) -const SE071ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE071ShowPrint')) -const SE061PaperPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE061PaperPage')) -const SE062ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE062ShowPrint')) -const SE063ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE063ShowPrint')) -const SE051ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE051ShowPrint')) -const SE007ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE007ShowPrint')) +const SE001EditPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE001EditPage')); +const SEConfigPage = createLoadableComponent(() => import('../components/CustomPages/SE/SEConfigPage')); +const SE005ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE005ShowPrint')); +const SESafeSurveyTest = createLoadableComponent(() => import('../components/CustomPages/SE/SESafeSurveyTest')); +const SE005ReportEdit = createLoadableComponent(() => import('../components/CustomPages/SE/SE005ReportEdit')); +const SE007AllView = createLoadableComponent(() => import('../components/CustomPages/SE/SE007AllView')); +const SE009ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE009ShowPrint')); +const SE011ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE011ShowPrint')); +const SE013ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE013ShowPrint')); +const SE015ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE015ShowPrint')); +const SE018EditPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE018EditPage')); +const SE018PaperPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE018PaperPage')); +const SE019ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE019ShowPrint')); +const SE021ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE021ShowPrint')); +const SE061ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE061ShowPrint')); +const SE071ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE071ShowPrint')); +const SE061PaperPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE061PaperPage')); +const SE062ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE062ShowPrint')); +const SE063ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE063ShowPrint')); +const SE051ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE051ShowPrint')); +const SE007ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE007ShowPrint')); -const BI001HomeDetail = createLoadableComponent(() => import('../components/CustomPages/BI/BI001HomeDetail')) -const BI002HomeDetail = createLoadableComponent(() => import('../components/CustomPages/BI/BI002HomeDetail')) +const BI001HomeDetail = createLoadableComponent(() => import('../components/CustomPages/BI/BI001HomeDetail')); +const BI002HomeDetail = createLoadableComponent(() => import('../components/CustomPages/BI/BI002HomeDetail')); // const BI054HomeDetail = createLoadableComponent(() => import('../components/CustomPages/BI/BI054HomeDetail')) // const BI055HomeDetail = createLoadableComponent(() => import('../components/CustomPages/BI/BI055HomeDetail')) // const BI004FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI004FormRunAnalysis')) -const BI005LoginRecord = createLoadableComponent(() => import('../components/CustomPages/BI/BI005LoginRecord')) +const BI005LoginRecord = createLoadableComponent(() => import('../components/CustomPages/BI/BI005LoginRecord')); // const BI006FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI006FormRunAnalysis')) // const BI006FormRunAnalysisNew = createLoadableComponent(() => import('../components/CustomPages/BI/BI006FormRunAnalysisNew')) // const BI007FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI007FormRunAnalysis')) @@ -165,23 +173,25 @@ const BI005LoginRecord = createLoadableComponent(() => import('../components/Cus // const BI008FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI008FormRunAnalysis')) // const BI009RiskAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI009RiskAnalysis')) // const BI010FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI010FormRunAnalysis')) -const BI011FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI011FormRunAnalysis')) -const BI011TrainSafeAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI011TrainSafeAnalysis')) +const BI011FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI011FormRunAnalysis')); +const BI011TrainSafeAnalysis = createLoadableComponent(() => + import('../components/CustomPages/BI/BI011TrainSafeAnalysis') +); // const BI012NotificationTaskAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI012NotificationTaskAnalysis')) // const BI013RiskAnalysisModel = createLoadableComponent(() => import('../components/CustomPages/BI/BI013RiskAnalysisModel')) -const BI030FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI030FormRunAnalysis')) +const BI030FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI030FormRunAnalysis')); // const BI060MapeShow = createLoadableComponent(() => import('../components/CustomPages/BI/BI060MapeShow')) // const BI060MapePoint = createLoadableComponent(() => import('../components/CustomPages/BI/BI060MapePoint')) // const BI061MapeGISShow = createLoadableComponent(() => import('../components/CustomPages/BI/BI061MapeGISShow')) -const BI009FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI009FormRunAnalysis')) -const BIView = createLoadableComponent(() => import('../components/CustomPages/BI/BIView')) +const BI009FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI009FormRunAnalysis')); +const BIView = createLoadableComponent(() => import('../components/CustomPages/BI/BIView')); // const BI001 = createLoadableComponent(() => import('../components/CustomPages/BI/BI001')) // const BI050BSSafeCheck = createLoadableComponent(() => import('../components/CustomPages/BI/BI050BSSafeCheck')) // const BI051BSCompanyYear = createLoadableComponent(() => import('../components/CustomPages/BI/BI051BSCompanyYearOne')) // const BI052BSSafeCheckYear = createLoadableComponent(() => import('../components/CustomPages/BI/BI052BSSafeCheckYearOne')) // const BI053BSSafeCheckYear = createLoadableComponent(() => import('../components/CustomPages/BI/BI053BSSafeCheckYearOne')) -const BI056Performance = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Performance')) +const BI056Performance = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Performance')); // const BI056Dilg1_1 = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Dilg1_1')) // const BI056Dilg1_2 = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Dilg1_2')) // const BI056Dilg2_1 = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Dilg2_1')) @@ -189,83 +199,106 @@ const BI056Performance = createLoadableComponent(() => import('../components/Cus // const BI056Dilg3_1 = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Dilg3_1')) // const BI056Dilg3_2 = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Dilg3_2')) // const BI003StatiscialAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI003StatiscialAnalysis')) -const BI020ApproveAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI020ApproveAnalysis')) -const BI014RiskPerformanceModel = createLoadableComponent(() => import('../components/CustomPages/BI/BI014RiskPerformanceModel')) -const BI012FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI012FormRunAnalysis')) +const BI020ApproveAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI020ApproveAnalysis')); +const BI014RiskPerformanceModel = createLoadableComponent(() => + import('../components/CustomPages/BI/BI014RiskPerformanceModel') +); +const BI012FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI012FormRunAnalysis')); -const PF136FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/PF/PF136FormRunAnalysis')) -const PF139FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/PF/PF139FormRunAnalysis')) +const PF136FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/PF/PF136FormRunAnalysis')); +const PF139FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/PF/PF139FormRunAnalysis')); -const FO025ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO025ShowPrint')) +const FO025ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FO/FO025ShowPrint')); -const SK035ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK035ShowPrint')) +const SK035ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK035ShowPrint')); -const HM061ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM061ShowPrint')) -const HM063ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM063ShowPrint')) -const HM101ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM101ShowPrint')) -const HM099ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM099ShowPrint')) -const HM121ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM121ShowPrint')) +const HM061ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM061ShowPrint')); +const HM063ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM063ShowPrint')); +const HM101ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM101ShowPrint')); +const HM099ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM099ShowPrint')); +const HM121ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM121ShowPrint')); -const HM104ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM104ShowPrint')) -const HM087ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM087ShowPrint')) -const HM109ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM109ShowPrint')) -const HM129ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM129ShowPrint')) +const HM104ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM104ShowPrint')); +const HM087ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM087ShowPrint')); +const HM109ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM109ShowPrint')); +const HM129ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM129ShowPrint')); -const HM107ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM107ShowPrint')) +const HM107ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM107ShowPrint')); -const HM111ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM111ShowPrint')) -const HMTasks = createLoadableComponent(() => import('../components/CustomPages/HM/HMTasks')) +const HM111ShowPrint = createLoadableComponent(() => import('../components/CustomPages/HM/HM111ShowPrint')); +const HMTasks = createLoadableComponent(() => import('../components/CustomPages/HM/HMTasks')); - - - -const CloseTasks = createLoadableComponent(() => import('../components/CustomPages/BI/CloseTasks')) -const FM202ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FM/FM202ShowPrint')) -const PFApproveRole = createLoadableComponent(() => import('../components/CustomPages/PF/PFApproveRole')) -const SK002ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK002ShowPrint')) -const SK002CheckList = createLoadableComponent(() => import('../components/CustomPages/SK/SK002CheckList')) -const SK002ShowSummary = createLoadableComponent(() => import('../components/CustomPages/SK/SK002ShowSummary')) -const SK004ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK004ShowPrint')) -const SK004CheckList = createLoadableComponent(() => import('../components/CustomPages/SK/SK004CheckList')) -const SK004CheckListNew = createLoadableComponent(() => import('../components/CustomPages/SK/SK004CheckListNew')) -const SK004CheckPost = createLoadableComponent(() => import('../components/CustomPages/SK/SK004CheckPost')) -const SK004ShowSummary = createLoadableComponent(() => import('../components/CustomPages/SK/SK004ShowSummary')) -const SK004Import = createLoadableComponent(() => import('../components/CustomPages/SK/SK004Import')) -const SK006ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK006ShowPrint')) -const SK006ShowOperateLog = createLoadableComponent(() => import('../components/CustomPages/SK/SK006ShowOperateLog')) -const SK010ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK010ShowPrint')) -const SK012ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK012ShowPrint')) -const SK014ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK014ShowPrint')) -const SK010CheckList = createLoadableComponent(() => import('../components/CustomPages/SK/SK010CheckList')) -const SK016ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK016ShowPrint')) -const SK018ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK018ShowPrint')) -const SK020ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK020ShowPrint')) -const SK022ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK022ShowPrint')) -const SK024ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK024ShowPrint')) -const SK026ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK026ShowPrint')) -const SK027ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK027ShowPrint')) -const SK031ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK031ShowPrint')) -const SK033ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK033ShowPrint')) +const CloseTasks = createLoadableComponent(() => import('../components/CustomPages/BI/CloseTasks')); +const FM202ShowPrint = createLoadableComponent(() => import('../components/CustomPages/FM/FM202ShowPrint')); +const PFApproveRole = createLoadableComponent(() => import('../components/CustomPages/PF/PFApproveRole')); +const SK002ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK002ShowPrint')); +const SK002CheckList = createLoadableComponent(() => import('../components/CustomPages/SK/SK002CheckList')); +const SK002ShowSummary = createLoadableComponent(() => import('../components/CustomPages/SK/SK002ShowSummary')); +const SK004ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK004ShowPrint')); +const SK004CheckList = createLoadableComponent(() => import('../components/CustomPages/SK/SK004CheckList')); +const SK004CheckListNew = createLoadableComponent(() => import('../components/CustomPages/SK/SK004CheckListNew')); +const SK004CheckPost = createLoadableComponent(() => import('../components/CustomPages/SK/SK004CheckPost')); +const SK004ShowSummary = createLoadableComponent(() => import('../components/CustomPages/SK/SK004ShowSummary')); +const SK004Import = createLoadableComponent(() => import('../components/CustomPages/SK/SK004Import')); +const SK006ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK006ShowPrint')); +const SK006ShowOperateLog = createLoadableComponent(() => import('../components/CustomPages/SK/SK006ShowOperateLog')); +const SK010ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK010ShowPrint')); +const SK012ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK012ShowPrint')); +const SK014ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK014ShowPrint')); +const SK010CheckList = createLoadableComponent(() => import('../components/CustomPages/SK/SK010CheckList')); +const SK016ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK016ShowPrint')); +const SK018ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK018ShowPrint')); +const SK020ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK020ShowPrint')); +const SK022ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK022ShowPrint')); +const SK024ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK024ShowPrint')); +const SK026ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK026ShowPrint')); +const SK027ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK027ShowPrint')); +const SK031ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK031ShowPrint')); +const SK033ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK033ShowPrint')); // 该组件已在上方声明,此处去除重复定义 -const SK035CheckLibrary = createLoadableComponent(() => import('../components/CustomPages/SK/SK035CheckLibrary')) -const SK037ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK037ShowPrint')) -const SK039ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK039ShowPrint')) -const SK041ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK041ShowPrint')) -const SK043ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK043ShowPrint')) -const SK045ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK045ShowPrint')) +const SK035CheckLibrary = createLoadableComponent(() => import('../components/CustomPages/SK/SK035CheckLibrary')); +const SK037ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK037ShowPrint')); +const SK039ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK039ShowPrint')); +const SK041ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK041ShowPrint')); +const SK043ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK043ShowPrint')); +const SK045ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK045ShowPrint')); +const BI00FullScreen = createLoadableComponent(() => import('../components/CustomPages/BI/BI00FullScreen')); export default function (componentName, formId, formParam, data, formCode, formData) { return { - - SC022Import: , - SC022ImportData: , - FMUserEditPage: , - FMUserEditPageAuth: , - FMUserGroupEditPage: , - FMRoleGroupEditPage: , - FMRoleEditPage: , - FM204ShowPrint: , - PFCustomPageConfigPage: , + SC022Import: ( + + ), + SC022ImportData: ( + + ), + FMUserEditPage: ( + + ), + FMUserEditPageAuth: ( + + ), + FMUserGroupEditPage: ( + + ), + FMRoleGroupEditPage: ( + + ), + FMRoleEditPage: ( + + ), + FM204ShowPrint: ( + + ), + PFCustomPageConfigPage: ( + + ), FMBaseConfig: , PFFlowSchemesEditPage: , PFFlowSchemesShowPage: , @@ -275,12 +308,20 @@ export default function (componentName, formId, formParam, data, formCode, formD WOSOPViewPage: , FMCustomImportPage: , FMNodeSchedulingPage: , - PFEntitySqlPage: , + PFEntitySqlPage: ( + + ), PFInitDestOrgPage: , - PFEntityFieldListPage: , + PFEntityFieldListPage: ( + + ), PFExecuteSqlPage: , - PFSendInfoToClientPage: , - PFFormConfigByNamePage: , + PFSendInfoToClientPage: ( + + ), + PFFormConfigByNamePage: ( + + ), BDPictureEditPage: , BDHmiPage: , BDWordPage: , @@ -323,7 +364,9 @@ export default function (componentName, formId, formParam, data, formCode, formD HMTasks: , FoPreOperSch: , - FoTeamActivityShowPrint: , + FoTeamActivityShowPrint: ( + + ), PFCommonApprove: , PFCommonApproveView: , PFTodayReminder: , @@ -374,7 +417,6 @@ export default function (componentName, formId, formParam, data, formCode, formD // CM043ShowPrint: , // CM045ShowPrint: , - BIView: , // BI001: , // BI050BSSafeCheck: , @@ -402,20 +444,38 @@ export default function (componentName, formId, formParam, data, formCode, formD // BI008FormRunAnalysis: , // BI009RiskAnalysis: , // BI010FormRunAnalysis: , - BI011FormRunAnalysis: , - BI011TrainSafeAnalysis: , + BI011FormRunAnalysis: ( + + ), + BI011TrainSafeAnalysis: ( + + ), // BI012NotificationTaskAnalysis: , // BI013RiskAnalysisModel: , - BI014RiskPerformanceModel: , - BI030FormRunAnalysis: , + BI014RiskPerformanceModel: ( + + ), + BI030FormRunAnalysis: ( + + ), // BI060MapeShow: , // BI060MapePoint: , // BI061MapeGISShow: , - BI009FormRunAnalysis: , - BI020ApproveAnalysis: , - BI012FormRunAnalysis: , - PF136FormRunAnalysis: , - PF139FormRunAnalysis: , + BI009FormRunAnalysis: ( + + ), + BI020ApproveAnalysis: ( + + ), + BI012FormRunAnalysis: ( + + ), + PF136FormRunAnalysis: ( + + ), + PF139FormRunAnalysis: ( + + ), FO025ShowPrint: , FM202ShowPrint: , PFApproveRole: , @@ -450,6 +510,6 @@ export default function (componentName, formId, formParam, data, formCode, formD SK041ShowPrint: , SK043ShowPrint: , SK045ShowPrint: , - - }[componentName] -} \ No newline at end of file + BI00FullScreen: , + }[componentName]; +} From 5260b510b6e3c0c543fe6822e2050d98f6c549a6 Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Wed, 21 Jan 2026 14:05:35 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layout/FullScreenInter.js | 1790 +++++++++++++++++++-------------- src/layout/fullinter.less | 4 +- 2 files changed, 1012 insertions(+), 782 deletions(-) diff --git a/src/layout/FullScreenInter.js b/src/layout/FullScreenInter.js index 8423e86..cbf1429 100644 --- a/src/layout/FullScreenInter.js +++ b/src/layout/FullScreenInter.js @@ -44,259 +44,15 @@ class FullScreen extends React.Component { sliderSize: '24px', nowDate: '', riskTypeRate: [], //风险等级占比 + linkSum: [], jobTodayTop3: [], //当日工作票排名前三 - hiddenRectifyRate: {}, //隐患整改率 + hiddenRectify: {}, //隐患整改率 taskTop3: [], //各事项排名前三 jobFinishRate: [], //作业现场完成情况统计 safeCheckSum: [], //各公司安全检查统计 - riskChangeData: [ - { name: '隐患数量', value: 103 }, - { name: '延期整改数', value: 18 }, - { name: '按期整改数', value: 85 }, - ], - configBanner: [ - { name: '首页', value: 103 }, - { name: '风险管控', value: 103 }, - { name: '隐患治理', value: 103 }, - { name: '班组建设', value: 103 }, - { name: '危险作业', value: 103 }, - { name: '安全培训', value: 103 }, - ], - checkData: [ - { name: '公司检查', value: 103 }, - { name: '部门检查', value: 79 }, - { name: '车间检查', value: 86 }, - { name: '班组检查', value: 94 }, - ], - widthp: '70%', - scrollConfig: { - header: ['检查类型', '检查次数', '完成率'], - data: [ - ['巡回检查', '322', '99%'], - ['例行检查', '255', '99%'], - ['日常检查', '253', '99%'], - ['专业检查', '123', '99%'], - ['巡回检查', '322', '99%'], - ['例行检查', '255', '99%'], - ['日常检查', '253', '99%'], - ['专业检查', '123', '99%'], - ], - waitTime: 200000, - }, - safescrollConfig: { - header: ['部门', '车间', '活动', '进度'], - data: [ - ['矿山部', '穿爆车间', '班前会议', '98%'], - ['矿山部', '金宇宁化分公司', '班前会议', '98%'], - ['选矿部', '破碎车间', '班前会议', '95%'], - ['矿山部', '磨重车间', '班前会议', '92%'], - ['矿山部', '机电设备管理科', '班前会议', '83%'], - ['矿山部', '钨细泥回收车间', '班前会议', '93%'], - ['矿山部', '穿爆车间', '班前会议', '90%'], - ['矿山部', '穿爆车间', '班前会议', '90%'], - ['矿山部', '穿爆车间', '班前会议', '90%'], - ], - index: true, - columnWidth: [80, 200, 300, 200, 200], - align: ['center'], - waitTime: 2000, - }, - chartConfig: { - data: [ - { - name: '电工日常班', - value: 97, - }, - { - name: '电工三班', - value: 95, - }, - { - name: '破碎一班', - value: 91, - }, - { - name: '磨重二班', - value: 86, - }, - { - name: '磨重三班', - value: 83, - }, - { - name: '电工日常班', - value: 97, - }, - { - name: '电工三班', - value: 95, - }, - { - name: '破碎一班', - value: 91, - }, - { - name: '磨重二班', - value: 86, - }, - { - name: '磨重三班', - value: 83, - }, - { - name: '电工日常班', - value: 97, - }, - { - name: '电工三班', - value: 95, - }, - { - name: '破碎一班', - value: 91, - }, - { - name: '磨重二班', - value: 86, - }, - { - name: '磨重三班', - value: 83, - }, - ], - showValue: true, - }, - riskData: [ - { color: '#c92a2a', value: 2, name: '重大风险' }, - { color: '#FF6710', value: 5, name: '较大风险' }, - { color: '#FFDD1E', value: 15, name: '一般风险' }, - { color: '#0091FF', value: 30, name: '低风险' }, - ], - WaterLevelPondconfig1: { - data: [75], - shape: 'round', - }, - WaterLevelPondconfig2: { - data: [85], - shape: 'round', - }, - WaterLevelPondconfig3: { - data: [95], - shape: 'round', - }, - completeData: [ - { - name: '班组会议完成率', - value: 75, - }, - { - name: '岗位交接班完成率', - value: 85, - }, - { - name: '岗位当班记录完成率', - value: 95, - }, - ], - // completeDatatwo: { - // name: "岗位交接班完成率", - // value: 85, - // id: "completetwo", - // }, - // completeDatathree: { - // name: "岗位当班记录完成率", - // value: 95, - // id: "completethree", - // }, - meetingData: [ - { - name: '班前会议', - value: 32, - }, - { - name: '班组活动', - value: 132, - }, - { - name: '岗位交接班', - value: 32, - }, - { - name: '岗位当班', - value: 132, - }, - { - name: '班前会议', - value: 32, - }, - { - name: '班组活动', - value: 132, - }, - { - name: '岗位交接班', - value: 32, - }, - { - name: '岗位当班', - value: 132, - }, - ], - roaData: [ - { - name: '总任务数', - value: 1456, - }, - { - name: '超时待办数', - value: 132, - }, - { - name: '安全检查数', - value: 1456, - }, - { - name: '检查完成率', - value: 32, - }, - { - name: '职业危害', - value: 132, - }, - { - name: '管控措施', - value: 1456, - }, - { - name: '安全检查库', - value: 132, - }, - { - name: '危险源库', - value: 32, - }, - { - name: '培训计划完成率', - value: 132, - }, - { - name: '用户活跃度', - value: 1456, - }, - { - name: '系统用户数', - value: 132, - }, - { - name: '正常已办数', - value: 32, - }, - { - name: '未完成数', - value: 132, - }, - ], + listSETrainSum: [], //各公司安全培训统计 scale: getScale(), + configBanner: ['首页', '风险管理', '安全检查', '隐患管理', '作业现场', '安全培训'], }; this.echartsInstances = { riskLevel: null, @@ -317,100 +73,33 @@ class FullScreen extends React.Component { // this.getHomeTitle(); this.getHomeDataArray(); this.setState({ activeTab: '首页' }); - this.riskLevel(); - this.safedanger(); - this.completeChart(this.state.completeData); + this.timer = setInterval(() => { this.setState({ nowDate: this.getDate(), }); }, 1000); } + executionChart = () => { + this.riskLevel(); + this.safeCheckChart(); + this.dangerOperation(); + this.completeChart(); + this.backLog(); + this.safedanger(); + }; componentDidUpdate(prevProps, prevState) { // 当从其他tab切换回首页时 if (prevState.activeTab !== this.state.activeTab && this.state.activeTab === '首页') { - console.log('切换到首页,初始化图表'); - // 延迟确保DOM已渲染 setTimeout(() => { - this.riskLevel(); - this.safedanger(); - this.completeChart(this.state.completeData); + this.executionChart(); }, 300); // 稍微增加延迟时间 } - - // 当离开首页时,清理图表 - if (prevState.activeTab === '首页' && this.state.activeTab !== '首页') { - console.log('离开首页,清理图表'); - this.cleanupCharts(); - } } - getHomeDataArray = () => { - var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 - let json = initFilter(orgId); - this.props.dispatch({ - type: 'app/getDataByPost', - payload: json, - url: 'BI/BIKanBanController/ReturnAllData', - onComplete: (ret) => { - console.log(ret, '877777'); - if (ret) { - console.log('首页标题数据', ret); - this.setState({ - riskTypeRate: ret.riskTypeRate, - jobTodayTop3: ret.jobTodayTop3, - hiddenRectifyRate: ret.hiddenRectifyRate, - taskTop3: ret.taskTop3, - jobFinishRate: ret.jobFinishRate, - safeCheckSum: ret.safeCheckSum, - }); - } - }, - }); - }; - - // 添加清理方法 - cleanupCharts = () => { - // 清理风险分级图表 - if (this.echartsInstances.riskLevel) { - this.echartsInstances.riskLevel.dispose(); - this.echartsInstances.riskLevel = null; - } - - // 清理运行走势图 - if (this.echartsInstances.opretionTrend) { - this.echartsInstances.opretionTrend.dispose(); - this.echartsInstances.opretionTrend = null; - } - - // 清理完成率图表 - if (this.echartsInstances.completeone) { - this.echartsInstances.completeone.dispose(); - this.echartsInstances.completeone = null; - } - - // 移除resize监听器 - if (this.riskResizeHandler) { - window.removeEventListener('resize', this.riskResizeHandler); - this.riskResizeHandler = null; - } - - if (this.trendResizeHandler) { - window.removeEventListener('resize', this.trendResizeHandler); - this.trendResizeHandler = null; - } - - if (this.completeResizeHandler) { - window.removeEventListener('resize', this.completeResizeHandler); - this.completeResizeHandler = null; - } - }; handleTabClick = (name) => { // 如果从首页切换到其他tab,先清理图表 - if (this.state.activeTab === '首页' && name !== '首页') { - this.cleanupCharts(); - } this.setState({ activeTab: name }); @@ -435,35 +124,7 @@ class FullScreen extends React.Component { componentWillUnmount() { window.removeEventListener('resize', this.setScale); clearInterval(this.timer); - this.cleanupCharts(); } - getHomeTitle = () => { - console.log('获取首页标题数据'); - var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 - let json = initFilter(orgId); - console.log(json, '首页标题数据'); - this.props.dispatch({ - type: 'app/getDataByPost', - payload: json, - url: 'PF/HomeTitle/OrderPaged', - onComplete: (ret) => { - console.log(ret, '877777'); - if (ret) { - console.log('首页标题数据', ret); - this.setState({ - safetySloganOne: ret[0].TITLE, - // safetySloganOne: "1.安全方针:以人为本、关注健康、依法治企、安全发展。 2.安全理念:一切风险皆可控,一切事故皆可防!3.安全方针:以人为本、关注健康、依法治企、安全发展。4.安全方针:以人为本、关注健康、依法治企、安全发展。5.安全方针:以人为本、关注健康、依法治企、安全发展。 6.安全理念:一切风险皆可控,一切事故皆可防!7.安全方针:以人为本、关注健康、依法治企、安全发展。8.安全方针:以人为本、关注健康、依法治企、安全发展。", - animationDuration: ret[0].SECOND, - sliderColor: ret[0].COCOR, - sliderSize: ret[0].FONTSIZE, - }); - } - }, - }); - }; - callback = (key) => { - console.log(key); - }; getDate = () => { var myDate = new Date(); var year = myDate.getFullYear(); //获取当前年 @@ -491,357 +152,33 @@ class FullScreen extends React.Component { var now = year + ' 年 ' + mon + ' 月 ' + date + ' 日 ' + '\t\t\t' + hours + ' : ' + minutes + ' : ' + seconds; return now; }; - completeChart = (evt) => { - if (this.echartsInstances.completeone) { - this.echartsInstances.completeone.dispose(); - this.echartsInstances.completeone = null; - } - - let completeCharts = document.getElementById('completeone'); - if (!completeCharts) { - requestAnimationFrame(() => { - this.completeChart(evt); - }); - return; - } - - console.log('初始化完成率图表'); - - this.echartsInstances.completeone = echarts.init(completeCharts); - let seriesArr = []; - let centerArr = [ - ['20%', '50%'], - ['50%', '50%'], - ['80%', '50%'], - ]; - evt.forEach((item, index) => { - seriesArr.push({ - center: centerArr[index], - axisLine: { - show: true, - lineStyle: { - color: [ - [0.25, '#c23531'], - [0.5, '#EFC631'], - [0.75, '#63869e'], - [1, '#91c7ae'], - ], - width: 8, - }, - radius: '90%', // 控制轴线本身的半径 - }, - axisTick: { - show: false, - }, - splitLine: { - length: 8, // 刻度线长度 - distance: 25, // 向内移动距离,负值越大越向内 - lineStyle: { - color: '#fff', // 刻度线颜色 - width: 2, // 刻度线宽度 - }, - }, - axisLabel: { - distance: 15, // 标签与刻度线的距离 - textStyle: { - color: '#fff', - fontSize: 10, - }, - // 调整标签偏移 - offset: [0, 0], // [水平偏移, 垂直偏移] - }, - itemStyle: { - normal: { - color: 'auto', - }, - }, - radius: '80%', - pointer: { - show: true, - width: '8%', - length: '20%', - }, - title: { - textStyle: { - // fontWeight: 'bolder', - fontSize: 14, - color: '#fff', - }, - offsetCenter: [0, '100%'], - }, - detail: { - textStyle: { - fontWeight: 'bolder', - fontSize: 20, - color: '#fff', - }, - offsetCenter: [0, '68%'], - // formatter: '{value}万\n(5048人)', - }, - min: 0, - max: 100, - // name: '米类仪表盘', - type: 'gauge', - show: false, - splitNumber: 10, - data: [ - { - name: item.name, - value: item.value, - }, - ], - }); + getHomeDataArray = () => { + var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 + let json = initFilter(orgId); + this.props.dispatch({ + type: 'app/getDataByPost', + payload: json, + url: 'BI/BIKanBanController/ReturnAllData', + onComplete: (ret) => { + if (ret) { + this.setState( + { + riskTypeRate: ret.riskTypeRate, + linkSum: ret.linkSum, + jobTodayTop3: ret.jobTodayTop3, + hiddenRectify: ret.hiddenRectify, + taskTop3: ret.taskTop3, + jobFinishRate: ret.jobFinishRate, + safeCheckSum: ret.safeCheckSum, + listSETrainSum: ret.listSETrainSum, + }, + () => { + this.executionChart(); + } + ); + } + }, }); - this.echartsInstances.completeone.setOption({ - series: seriesArr, - }); - - // 监听resize - const resizeHandler = () => { - if (this.echartsInstances.completeone) { - this.echartsInstances.completeone.resize(); - } - }; - - if (this.completeResizeHandler) { - window.removeEventListener('resize', this.completeResizeHandler); - } - - this.completeResizeHandler = resizeHandler; - window.addEventListener('resize', resizeHandler); - }; - safedanger = () => { - if (this.echartsInstances.opretionTrend) { - this.echartsInstances.opretionTrend.dispose(); - this.echartsInstances.opretionTrend = null; - } - - const opretionTrends = document.getElementById('opretionTrend'); - if (!opretionTrends) { - requestAnimationFrame(() => { - this.safedanger(); - }); - return; - } - - console.log('初始化运行走势图'); - this.echartsInstances.opretionTrend = echarts.init(opretionTrends); - - // ... 原有配置代码 - let bgColor = '#000'; - let color = [ - '#0090FF', - '#36CE9E', - '#e690d1', - '#FF515A', - '#8B5CFF', - '#00CA69', - '#FFC107', - '#E91E63', - '#9C27B0', - '#3F51B5', - '#2196F3', - '#4CAF50', - '#FF9800', - '#795548', - '#607D8B', - ]; - const seriesNames = [ - '选矿部门', - '矿山部门', - '尾矿部门', - '机电部门', - '安全部门', - '生产部门', - '技术部门', - '维修部门', - '运输部门', - '仓储部门', - '质检部门', - '环保部门', - '研发部门', - '行政部门', - '财务部门', - ]; - // 生成x轴数据(12个月) - let xAxisData = []; - for (let i = 1; i <= 12; i++) { - xAxisData.push(i.toString()); - } - - // 生成15个系列的数据 - let seriesArr = []; - for (let i = 0; i < 15; i++) { - let yAxisData = []; - for (let j = 0; j < 12; j++) { - // 生成60-100的随机数据 - yAxisData.push(Math.floor(Math.random() * 40) + 60); - } - - seriesArr.push({ - name: seriesNames[i], - type: 'line', - smooth: true, - symbolSize: 6, - data: yAxisData, - }); - } - - const hexToRgba = (hex, opacity) => { - let rgbaColor = ''; - let reg = /^#[\da-f]{6}$/i; - if (reg.test(hex)) { - rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt('0x' + hex.slice(3, 5))},${parseInt( - '0x' + hex.slice(5, 7) - )},${opacity})`; - } - return rgbaColor; - }; - const option = { - title: [ - { - text: '各家公司的安全教育培训学时统计', - x: 'center', - y: '5%', - textStyle: { - fontSize: 16, - color: '#fff', - }, - }, - ], - backgroundColor: '', - color: color, - legend: { - type: 'scroll', // 如果项目多可以使用滚动 - orient: 'vertical', // 设置为垂直排列 - right: 10, // 距离右侧的距离 - top: 'center', // 垂直居中 - align: 'left', // 文本左对齐 - textStyle: { - color: '#fff', // 文字颜色 - fontSize: 12, - }, - itemStyle: { - color: 'inherit', - borderWidth: 0, - opacity: 1, - }, - symbol: 'rect', // 实心矩形 - symbolSize: [12, 8], // 大小 - itemWidth: 10, // 图例标记的宽度 - itemHeight: 10, // 图例标记的高度 - itemGap: 15, // 图例每项之间的间隔 - pageButtonItemGap: 3, - pageButtonGap: 5, - pageButtonPosition: 'end', - pageIconColor: '#00caf7', - width: 100, // 限制宽度 - height: 250, // 限制高度,超出就会显示滚动 - }, - tooltip: { - trigger: 'axis', - formatter: function (params) { - let html = ''; - params.forEach((v) => { - html += `
    - - ${v.seriesName} - ${v.value} - %`; - }); - - return html; - }, - extraCssText: 'background: #fff; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;', - axisPointer: { - type: 'shadow', - shadowStyle: { - // color: "#ffffff", - shadowColor: 'rgba(225,225,225,1)', - shadowBlur: 5, - }, - }, - }, - grid: { - top: '15%', - left: '5%', - right: '15%', // 为图例留出空间 - bottom: '15%', - containLabel: true, - }, - xAxis: [ - { - type: 'category', - boundaryGap: false, - axisLabel: { - formatter: '{value}月', - textStyle: { - color: '#fff', - }, - }, - axisTick: { - show: false, - }, - axisLine: { - lineStyle: { - color: '#fff', - }, - }, - data: xAxisData, - }, - ], - yAxis: [ - { - type: 'value', - axisLabel: { - textStyle: { - color: '#fff', - }, - }, - nameTextStyle: { - color: '#fff', - fontSize: 12, - lineHeight: 40, - }, - splitLine: { - show: false, - lineStyle: { - type: 'dashed', - color: '#fff', - }, - }, - axisLine: { - show: false, - lineStyle: { - color: '#00c7ff', - width: 1, - type: 'solid', - }, - }, - axisTick: { - show: false, - }, - }, - ], - series: seriesArr, - }; - - this.echartsInstances.opretionTrend.setOption(option); - // 监听resize - const resizeHandler = () => { - if (this.echartsInstances.opretionTrend) { - this.echartsInstances.opretionTrend.resize(); - } - }; - - if (this.trendResizeHandler) { - window.removeEventListener('resize', this.trendResizeHandler); - } - - this.trendResizeHandler = resizeHandler; - window.addEventListener('resize', resizeHandler); }; riskLevel = () => { // 如果已有实例,先销毁 @@ -852,16 +189,12 @@ class FullScreen extends React.Component { const riskLevels = document.getElementById('riskLevelFull'); if (!riskLevels) { - console.warn('风险分级图表容器未找到'); // 使用requestAnimationFrame而不是setTimeout requestAnimationFrame(() => { - this.riskLevel(); + this.executionChart(); }); return; } - - console.log('初始化风险分级图表'); - // 初始化echarts实例并保存引用 this.echartsInstances.riskLevel = echarts.init(riskLevels); const option = { @@ -945,7 +278,10 @@ class FullScreen extends React.Component { show: false, }, }, - data: this.state.riskTypeRate, + data: this.state.riskTypeRate.map((item) => ({ + name: item.riskType, + value: item.count, + })), }, ], }; @@ -967,6 +303,849 @@ class FullScreen extends React.Component { this.riskResizeHandler = resizeHandler; window.addEventListener('resize', resizeHandler); }; + transformDat = (originalData, barTopColor, num) => { + // 添加空值检查 + if (!originalData || !Array.isArray(originalData) || originalData.length === 0) { + return { + companyNames: [], + series: [], + legendData: [], + }; + } + // 获取所有的类型名称(去重) + let allTypes = []; + if (num == 1) { + allTypes = [...new Set(originalData.flatMap((item) => item.details?.map((detail) => detail.jobName)))]; + } else { + allTypes = [...new Set(originalData.flatMap((item) => item.details?.map((detail) => detail.name)))]; + } + + // 获取所有的公司名称(作为 x 轴标签) + const companyNames = originalData?.map((item) => item.company); + + // 为每个类型创建数据系列 + const series = allTypes?.map((typeName, index) => { + return { + name: typeName, + type: 'bar', + itemStyle: { + normal: { + color: function (params) { + if (num == 1) { + return barTopColor[index]; + } else { + return new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: barTopColor[index][0], + }, + { + offset: 1, + color: barTopColor[index][1], + }, + ]); + } + }, + }, + }, + data: originalData?.map((company) => { + // 找到该公司对应类型的数据,如果没有则返回 0 + const detail = company.details?.find((d) => (num == 1 ? d.jobName : d.name) === typeName); + return detail ? detail.qty : 0; + }), + }; + }); + + return { + companyNames, // x 轴数据 + series, // 系列数据 + legendData: allTypes, // legend 的 data + }; + }; + + safeCheckChart = () => { + if (this.echartsInstances.safeCheckChart) { + this.echartsInstances.safeCheckChart.dispose(); + this.echartsInstances.safeCheckChart = null; + } + + let safeCheckCharts = document.getElementById('safeCheckChart'); + if (!safeCheckCharts) { + requestAnimationFrame(() => { + this.safeCheckChart(); + }); + return; + } + const barTopColor = ['#02c3f1', '#53e568', '#a154e9']; + + this.echartsInstances.safeCheckChart = echarts.init(safeCheckCharts); + let xdata = []; + xdata = this.transformDat(this.state.jobTodayTop3, barTopColor, 1); + this.echartsInstances.safeCheckChart.setOption({ + title: { + text: '当日工作票排名前三家的数据', + textStyle: { + fontSize: 16, + color: '#fff', + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + // 坐标轴指示器,坐标轴触发有效 + type: 'shadow', // 默认为直线,可选为:'line' | 'shadow' + }, + }, + legend: { + data: xdata.legendData, + align: 'right', + right: 10, + itemGap: 16, + itemWidth: 18, + itemHeight: 10, + textStyle: { + color: '#fff', + fontStyle: 'normal', + fontFamily: '微软雅黑', + fontSize: 14, + }, + }, + color: barTopColor, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true, + }, + xAxis: [ + { + type: 'category', + data: xdata.companyNames, + textStyle: { + fontSize: 18, + color: '#ffffff', + }, + //坐标轴 + axisLine: { + lineStyle: { + color: '#3eb2e8', + }, + }, + //坐标值标注 + axisLabel: { + show: true, + textStyle: { + color: '#fff', + }, + }, + }, + ], + yAxis: [ + { + type: 'value', + textStyle: { + fontSize: 14, + color: '#ffffff', + }, + //坐标轴 + axisLine: { + show: false, + }, + //坐标值标注 + axisLabel: { + show: true, + textStyle: { + color: '#fff', + }, + }, + //分格线 + splitLine: { + lineStyle: { + color: '#4784e8', + }, + }, + }, + ], + series: xdata.series, + }); + + // 监听resize + const resizeHandler = () => { + if (this.echartsInstances.safeCheckChart) { + this.echartsInstances.safeCheckChart.resize(); + } + }; + + if (this.safeCheckResizeHandler) { + window.removeEventListener('resize', this.safeCheckResizeHandler); + } + + this.safeCheckResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; + dangerOperation = () => { + // 如果已有实例,先销毁 + if (this.echartsInstances.dangerOperation) { + this.echartsInstances.dangerOperation.dispose(); + this.echartsInstances.dangerOperation = null; + } + + const dangerOperationCharts = document.getElementById('dangerOperationChart'); + if (!dangerOperationCharts) { + // 使用requestAnimationFrame而不是setTimeout + requestAnimationFrame(() => { + this.executionChart(); + }); + return; + } + + let legendData = []; + (this.state.linkSum.map((item) => { + legendData.push(item.name); + }), + // 初始化echarts实例并保存引用 + (this.echartsInstances.dangerOperation = echarts.init(dangerOperationCharts))); + + const option = { + color: [ + '#0090FF', + '#36CE9E', + '#e690d1', + '#FF515A', + '#8B5CFF', + '#00CA69', + '#FFC107', + '#E91E63', + '#9C27B0', + '#3F51B5', + '#2196F3', + '#4CAF50', + '#FF9800', + '#795548', + '#607D8B', + ], + title: [ + { + text: '各公司危险作业分类统计', + x: 'center', + y: '5%', + textStyle: { + fontSize: 16, + color: '#fff', + }, + }, + ], + legend: { + type: 'scroll', + orient: 'vertical', + left: '5%', + align: 'left', + top: '5%', + textStyle: { + color: '#fff', + }, + height: 250, + }, + tooltip: { + trigger: 'item', + formatter: function (params) { + const color = params.color; + return `
    + + ${params.name}: + ${params.value} +
    `; + }, + backgroundColor: 'rgba(255, 255, 255, 0.5)', + borderColor: '#FFFFFF', + borderWidth: 2, + textStyle: { + color: '#000', + fontSize: 14, + fontWeight: 'normal', + }, + }, + series: [ + { + name: '访问来源', + type: 'pie', + minAngle: 20, + center: ['55%', '50%'], + radius: ['40%', '65%'], + clockwise: true, + avoidLabelOverlap: true, + hoverOffset: 15, + label: { + show: true, + position: 'outside', + formatter: '{a|{b}:{c}}{e|({d}%)}\n', + // color: '#FFFFFF', + textBorderWidth: 0, + rich: { + a: { + padding: [-15, 0, 0, 0], + fontSize: 15, + // color: '#FFFFFF', + textBorderWidth: 0, + textShadow: 'none', + }, + e: { + fontSize: 14, + // color: '#FFFFFF', + padding: [-15, 0, 0, 5], + textBorderWidth: 0, + textShadow: 'none', + }, + }, + }, + labelLine: { + normal: { + length: 5, + length2: 3, + smooth: true, + }, + }, + data: this.state.linkSum.map((item) => ({ + name: item.name, + value: item.qty, + })), + }, + ], + }; + + this.echartsInstances.dangerOperation.setOption(option); + + // 监听窗口大小变化 + const resizeHandler = () => { + if (this.echartsInstances.dangerOperation) { + this.echartsInstances.dangerOperation.resize(); + } + }; + + // 移除旧的监听器 + if (this.dangerOperationResizeHandler) { + window.removeEventListener('resize', this.dangerOperationResizeHandler); + } + + this.dangerOperationResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; + backLog = () => { + if (this.echartsInstances.backLogChart) { + this.echartsInstances.backLogChart.dispose(); + this.echartsInstances.backLogChart = null; + } + + let backLogCharts = document.getElementById('backLogChart'); + if (!backLogCharts) { + requestAnimationFrame(() => { + this.backLogChart(); + }); + return; + } + const barTopColor = [ + ['#75baf3', '#2177d5'], + ['#ffa94d', '#f76707'], + ['#99ca6e', '#48a447'], + ]; + + this.echartsInstances.backLogChart = echarts.init(backLogCharts); + let xdata = []; + xdata = this.transformDat(this.state.taskTop3, barTopColor, 2); + // 创建图例的渐变色块 + const legendColors = barTopColor.map((gradient) => gradient[0]); + this.echartsInstances.backLogChart.setOption({ + title: { + text: '各事项排名前三名统计', + textStyle: { + fontSize: 16, + color: '#fff', + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + // 坐标轴指示器,坐标轴触发有效 + type: 'shadow', // 默认为直线,可选为:'line' | 'shadow' + }, + }, + legend: { + data: xdata.legendData.map((name, index) => ({ + name: name, + // 使用渐变的起始颜色作为图例颜色 + // icon: 'rect', + itemStyle: { + color: legendColors[index], + borderWidth: 0, + }, + textStyle: { + color: '#fff', + fontSize: 14, + }, + })), + align: 'right', + right: 10, + itemGap: 16, + itemWidth: 18, + itemHeight: 12, + textStyle: { + color: '#fff', + fontStyle: 'normal', + fontFamily: '微软雅黑', + fontSize: 14, + }, + }, + color: legendColors, // 设置全局颜色 + + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true, + }, + xAxis: [ + { + type: 'category', + data: xdata.companyNames, + textStyle: { + fontSize: 18, + color: '#ffffff', + }, + //坐标轴 + axisLine: { + lineStyle: { + color: '#3eb2e8', + }, + }, + //坐标值标注 + axisLabel: { + show: true, + textStyle: { + color: '#fff', + }, + }, + }, + ], + yAxis: [ + { + type: 'value', + textStyle: { + fontSize: 14, + color: '#ffffff', + }, + //坐标轴 + axisLine: { + show: false, + }, + //坐标值标注 + axisLabel: { + show: true, + textStyle: { + color: '#fff', + }, + }, + //分格线 + splitLine: { + lineStyle: { + color: '#4784e8', + }, + }, + }, + ], + series: xdata.series, + }); + + // 监听resize + const resizeHandler = () => { + if (this.echartsInstances.backLogChart) { + this.echartsInstances.backLogChart.resize(); + } + }; + + if (this.backLogResizeHandler) { + window.removeEventListener('resize', this.backLogResizeHandler); + } + + this.backLogResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; + completeChart = () => { + if (this.echartsInstances.completeone) { + this.echartsInstances.completeone.dispose(); + this.echartsInstances.completeone = null; + } + + let completeCharts = document.getElementById('completeone'); + if (!completeCharts) { + requestAnimationFrame(() => { + this.completeChart(); + }); + return; + } + + this.echartsInstances.completeone = echarts.init(completeCharts); + let seriesArr = []; + let centerArr = [ + ['20%', '50%'], + ['50%', '50%'], + ['80%', '50%'], + ]; + const completeData = this.state.jobFinishRate + .filter((item) => item.name === '班前会议' || item.name === '岗位当班' || item.name === '岗位交接班') + .map((item) => { + return { + name: item.name, + value: item.rate, + }; + }); + const colorArr = [ + [ + [0.2, '#2ec7c9'], + [0.8, '#b6a2de'], + [1, '#5ab1ef'], + ], + [ + [0.2, '#5470c6'], + [0.8, '#91cc75'], + [1, '#fac858'], + ], + [ + [0.2, '#4ea397'], + [0.8, '#22c3aa'], + [1, '#7bd9a5'], + ], + ]; + completeData.forEach((item, index) => { + seriesArr.push({ + center: centerArr[index], + axisLine: { + show: true, + lineStyle: { + color: colorArr[index], + width: 8, + }, + radius: '90%', // 控制轴线本身的半径 + }, + axisTick: { + show: false, + }, + splitLine: { + length: 8, // 刻度线长度 + distance: 25, // 向内移动距离,负值越大越向内 + lineStyle: { + color: '#fff', // 刻度线颜色 + width: 1, // 刻度线宽度 + }, + }, + axisLabel: { + distance: 15, // 标签与刻度线的距离 + textStyle: { + color: '#fff', + fontSize: 10, + }, + // 调整标签偏移 + offset: [0, 0], // [水平偏移, 垂直偏移] + }, + itemStyle: { + normal: { + color: 'auto', + }, + }, + radius: '80%', + pointer: { + show: true, + width: '8%', + length: '30%', + }, + title: { + textStyle: { + // fontWeight: 'bolder', + fontSize: 14, + color: '#fff', + }, + offsetCenter: [0, '100%'], + }, + detail: { + textStyle: { + fontWeight: 'bolder', + fontSize: 16, + color: '#fff', + }, + offsetCenter: [0, '68%'], + formatter: '{value}%', + // formatter: '{value}万\n(5048人)', + }, + min: 0, + max: 100, + // name: '米类仪表盘', + type: 'gauge', + show: false, + splitNumber: 10, + data: [ + { + name: item.name, + value: item.value, + }, + ], + }); + }); + this.echartsInstances.completeone.setOption({ + series: seriesArr, + }); + + // 监听resize + const resizeHandler = () => { + if (this.echartsInstances.completeone) { + this.echartsInstances.completeone.resize(); + } + }; + + if (this.completeResizeHandler) { + window.removeEventListener('resize', this.completeResizeHandler); + } + + this.completeResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; + safedanger = () => { + if (this.echartsInstances.opretionTrend) { + this.echartsInstances.opretionTrend.dispose(); + this.echartsInstances.opretionTrend = null; + } + + const opretionTrends = document.getElementById('opretionTrend'); + if (!opretionTrends) { + requestAnimationFrame(() => { + this.safedanger(); + }); + return; + } + + this.echartsInstances.opretionTrend = echarts.init(opretionTrends); + + // ... 原有配置代码 + let bgColor = '#000'; + let color = [ + '#0090FF', + '#36CE9E', + '#e690d1', + '#FF515A', + '#8B5CFF', + '#00CA69', + '#FFC107', + '#E91E63', + '#9C27B0', + '#3F51B5', + '#2196F3', + '#4CAF50', + '#FF9800', + '#795548', + '#607D8B', + ]; + const seriesNames = []; + this.state.listSETrainSum.map((item) => { + seriesNames.push(item.CN); + }); + + // 生成x轴数据(12个月) + let xAxisData = []; + xAxisData = Object.keys( + this.state.listSETrainSum[0] === undefined || this.state.listSETrainSum[0] === null + ? {} + : this.state.listSETrainSum[0] + ) + .filter((key) => key.startsWith('dtNowYM')) + .map((key) => this.state.listSETrainSum[0][key].substring(0, 7)) + .sort((a, b) => new Date(a) - new Date(b)); // 按日期升序 + + let yAxisData = []; + yAxisData = this.state.listSETrainSum.map((item) => { + const values = []; + for (let i = 0; i <= 5; i++) { + const key = i === 0 ? 'SUM_TRAIN_HOUR' : `SUM_TRAIN_HOUR_${i}`; + values.push(item[key]); + } + return values; + }); + + // 生成15个系列的数据 + let seriesArr = []; + for (let i = 0; i < this.state.listSETrainSum.length; i++) { + seriesArr.push({ + name: seriesNames[i], + type: 'line', + smooth: true, + symbolSize: 6, + data: yAxisData[i], + }); + } + + const hexToRgba = (hex, opacity) => { + let rgbaColor = ''; + let reg = /^#[\da-f]{6}$/i; + if (reg.test(hex)) { + rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt('0x' + hex.slice(3, 5))},${parseInt( + '0x' + hex.slice(5, 7) + )},${opacity})`; + } + return rgbaColor; + }; + const option = { + title: [ + { + text: '各家公司的安全教育培训学时统计', + x: 'center', + y: '5%', + textStyle: { + fontSize: 16, + color: '#fff', + }, + }, + ], + backgroundColor: '', + color: color, + legend: { + type: 'scroll', // 如果项目多可以使用滚动 + orient: 'vertical', // 设置为垂直排列 + right: 10, // 距离右侧的距离 + top: 'center', // 垂直居中 + align: 'left', // 文本左对齐 + textStyle: { + color: '#fff', // 文字颜色 + fontSize: 12, + }, + itemStyle: { + color: 'inherit', + borderWidth: 0, + opacity: 1, + }, + symbol: 'rect', // 实心矩形 + symbolSize: [12, 8], // 大小 + itemWidth: 10, // 图例标记的宽度 + itemHeight: 10, // 图例标记的高度 + itemGap: 15, // 图例每项之间的间隔 + pageButtonItemGap: 3, + pageButtonGap: 5, + pageButtonPosition: 'end', + pageIconColor: '#00caf7', + width: 100, // 限制宽度 + height: 250, // 限制高度,超出就会显示滚动 + }, + tooltip: { + trigger: 'axis', + formatter: function (params) { + let html = ''; + params.forEach((v) => { + html += `
    + + ${v.seriesName} + ${v.value} + `; + }); + + return html; + }, + extraCssText: 'background: #fff; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;', + axisPointer: { + type: 'shadow', + shadowStyle: { + // color: "#ffffff", + shadowColor: 'rgba(225,225,225,1)', + shadowBlur: 5, + }, + }, + }, + grid: { + top: '15%', + left: '5%', + right: '15%', // 为图例留出空间 + bottom: '15%', + containLabel: true, + }, + xAxis: [ + { + type: 'category', + boundaryGap: false, + axisLabel: { + textStyle: { + color: '#fff', + }, + }, + axisTick: { + show: false, + }, + axisLine: { + lineStyle: { + color: '#fff', + }, + }, + data: xAxisData, + }, + ], + yAxis: [ + { + type: 'value', + axisLabel: { + textStyle: { + color: '#fff', + }, + }, + nameTextStyle: { + color: '#fff', + fontSize: 12, + lineHeight: 40, + }, + splitLine: { + show: false, + lineStyle: { + type: 'dashed', + color: '#fff', + }, + }, + axisLine: { + show: false, + lineStyle: { + color: '#00c7ff', + width: 1, + type: 'solid', + }, + }, + axisTick: { + show: false, + }, + }, + ], + series: seriesArr, + }; + + this.echartsInstances.opretionTrend.setOption(option); + // 监听resize + const resizeHandler = () => { + if (this.echartsInstances.opretionTrend) { + this.echartsInstances.opretionTrend.resize(); + } + }; + + if (this.trendResizeHandler) { + window.removeEventListener('resize', this.trendResizeHandler); + } + + this.trendResizeHandler = resizeHandler; + window.addEventListener('resize', resizeHandler); + }; render() { const width = 1920, @@ -974,6 +1153,31 @@ class FullScreen extends React.Component { // 固定好16:9的宽高比,计算出最合适的缩放比,宽高比可根据需要自行更改 const { scale, safetySloganOne, animationDuration, sliderColor, sliderSize, activeTab } = this.state; const renderContent = () => { + const riskChangeData = [ + { + name: '隐患数', + value: this.state.hiddenRectify.qty, + }, + { + name: '按期整改数', + value: this.state.hiddenRectify.ontimeQty, + }, + { + name: '延期整改数', + value: this.state.hiddenRectify.delayQty, + }, + ]; + const chartConfig = { + data: this.state.safeCheckSum.map((item) => ({ + name: item.company, + value: item.qty, + })), + showValue: true, + }; + const meetingData = this.state.jobFinishRate.map((item) => ({ + name: item.name, + value: item.qty, + })); if (activeTab === '首页') { return ( <> @@ -1018,10 +1222,10 @@ class FullScreen extends React.Component { item.riskType === '重大风险' ? '#c92a2a' : item.riskType === '较大风险' - ? '#FF6710' - : item.riskType === '一般风险' - ? '#FFDD1E' - : '#0091FF', + ? '#FF6710' + : item.riskType === '一般风险' + ? '#FFDD1E' + : '#0091FF', margin: '10px 20px', padding: '5px 10px', fontSize: '16px', @@ -1069,6 +1273,7 @@ class FullScreen extends React.Component { justifyContent: 'center', width: '100%', height: '100%', + padding: '10px', }} >
    -
    +
    +
    +
    @@ -1194,11 +1412,21 @@ class FullScreen extends React.Component { justifyContent: 'center', width: '100%', height: '100%', + padding: '10px', }} > -
    - -
    +
    @@ -1246,30 +1474,31 @@ class FullScreen extends React.Component { }} > - {this.state.meetingData.map((item, index) => ( - -
    -
    -
    -
    {item.name}
    -
    - {item.value} - - 次 - + {meetingData && + meetingData.map((item, index) => ( + +
    +
    +
    +
    {item.name}
    +
    + {item.value} + + 次 + +
    -
    - - ))} + + ))}
    @@ -1303,23 +1532,24 @@ class FullScreen extends React.Component { }} >
    - {this.state.riskChangeData.map((item, index) => ( -
    -
    -
    -
    {item.name}
    -
    {item.value}
    + {riskChangeData && + riskChangeData.map((item, index) => ( +
    +
    +
    +
    {item.name}
    +
    {item.value}
    +
    -
    - ))} + ))}
    整改率
    -
    83.98%
    +
    {this.state.hiddenRectify.rate}%
    @@ -1369,7 +1599,7 @@ class FullScreen extends React.Component { 各家公司安全检查统计 - +
    @@ -1453,22 +1683,23 @@ class FullScreen extends React.Component { marginLeft: 'auto', }} > - {this.state.configBanner.slice(0, 3).map((item, index) => ( -
    this.handleTabClick(item.name)} - onKeyPress={(e) => e.key === 'Enter' && this.handleTabClick(item.name)} - tabIndex={0} - title={`点击进入${item.name}`} - role="button" - style={{ cursor: 'pointer' }} - > - {item.name} -
    - ))} + {this.state.configBanner && + this.state.configBanner.slice(0, 3).map((item, index) => ( +
    this.handleTabClick(item)} + onKeyPress={(e) => e.key === 'Enter' && this.handleTabClick(item)} + tabIndex={0} + title={`点击进入${item}`} + role="button" + style={{ cursor: 'pointer' }} + > + {item} +
    + ))}
    @@ -1493,22 +1724,21 @@ class FullScreen extends React.Component { style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', height: '100%' }} >
    - {this.state.configBanner.slice(3, 6).map((item, index) => ( -
    this.handleTabClick(item.name)} - onKeyPress={(e) => e.key === 'Enter' && this.handleTabClick(item.name)} - tabIndex={0} - title={`点击进入${item.name}`} - role="button" - style={{ cursor: 'pointer' }} - > - {item.name} -
    - ))} + {this.state.configBanner && + this.state.configBanner.slice(3, 6).map((item, index) => ( +
    this.handleTabClick(item)} + onKeyPress={(e) => e.key === 'Enter' && this.handleTabClick(item)} + tabIndex={0} + title={`点击进入${item}`} + role="button" + style={{ cursor: 'pointer' }} + > + {item} +
    + ))}
    {/* {this.state.nowWeek} */} diff --git a/src/layout/fullinter.less b/src/layout/fullinter.less index 409a83a..78156c9 100644 --- a/src/layout/fullinter.less +++ b/src/layout/fullinter.less @@ -137,14 +137,14 @@ } .otherTabContent { flex: 1; // 占据剩余空间 - width: 100%; + // width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: rgba(2, 20, 40, 0.7); border-radius: 10px; - margin: 10px; + margin: 0px 10px 10px 10px; border: 1px solid rgba(0, 202, 247, 0.3); } .row { From 45a2fec1445efa8fcf8bf707ae5caab43525e2a6 Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Wed, 21 Jan 2026 14:49:42 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/MainPage/GuideCanvas.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/MainPage/GuideCanvas.js b/src/components/MainPage/GuideCanvas.js index 357f1bd..840ea17 100644 --- a/src/components/MainPage/GuideCanvas.js +++ b/src/components/MainPage/GuideCanvas.js @@ -14,6 +14,12 @@ class GuideCanvas extends Component { }; } componentDidMount() { + const { baseConfig = {} } = this.props.login; + const sysName = baseConfig.SYS_NAME || ''; + let sysNameParam = ''; + if (sysName) { + sysNameParam = `&sysName=${btoa(encodeURIComponent(sysName))}`; + } QRCode.toCanvas(config.guideSeverHost, { errorCorrectionLevel: 'L', width: 140 }, function (err, canvas) { if (err) throw err; let container = document.getElementById('canvas1'); @@ -33,7 +39,7 @@ class GuideCanvas extends Component { } }); QRCode.toCanvas( - config.h5Web + '#/pages/index/index?OrgId=' + this.props.login.OrgId, + config.h5Web + '#/pages/index/index?OrgId=' + this.props.login.OrgId + sysNameParam, { errorCorrectionLevel: 'L', width: 140 }, function (err, canvas) { if (err) throw err; From e45852a864816bfdd2263a205e6549b1ba932b1d Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Mon, 26 Jan 2026 09:12:04 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/CustomPages/BI/BI00FullScreen.js | 5 +++-- src/layout/FullScreenInter.js | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/CustomPages/BI/BI00FullScreen.js b/src/components/CustomPages/BI/BI00FullScreen.js index 768479c..8af3302 100644 --- a/src/components/CustomPages/BI/BI00FullScreen.js +++ b/src/components/CustomPages/BI/BI00FullScreen.js @@ -49,15 +49,16 @@ class BI00FullScreen extends React.Component { borderStyle: 'solid', borderColor: '#ccc', borderWidth: '1px', + height: '100%', }} >

    金源公司生产安全管控平台

    ); diff --git a/src/layout/FullScreenInter.js b/src/layout/FullScreenInter.js index cbf1429..cec0895 100644 --- a/src/layout/FullScreenInter.js +++ b/src/layout/FullScreenInter.js @@ -28,7 +28,7 @@ const { TabPane } = Tabs; const getScale = () => { const width = 1920, - height = 1200; // 此处可以根据实际设计稿尺寸修改 + height = 1080; // 此处可以根据实际设计稿尺寸修改 let ww = window.innerWidth / width; let wh = window.innerHeight / height; return ww < wh ? ww : wh; @@ -1149,7 +1149,7 @@ class FullScreen extends React.Component { render() { const width = 1920, - height = 1200; + height = 1080; // 固定好16:9的宽高比,计算出最合适的缩放比,宽高比可根据需要自行更改 const { scale, safetySloganOne, animationDuration, sliderColor, sliderSize, activeTab } = this.state; const renderContent = () => { From 39133b3adcd034d30a74b42171dfd8c1a4a08327 Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Tue, 27 Jan 2026 14:19:46 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=83=85=E5=86=B5=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomPages/BI/BI064FormRunAnalysis.js | 372 ++++++++++++++++++ src/utils/customConfig.js | 28 +- 2 files changed, 388 insertions(+), 12 deletions(-) create mode 100644 src/components/CustomPages/BI/BI064FormRunAnalysis.js diff --git a/src/components/CustomPages/BI/BI064FormRunAnalysis.js b/src/components/CustomPages/BI/BI064FormRunAnalysis.js new file mode 100644 index 0000000..3a41aa1 --- /dev/null +++ b/src/components/CustomPages/BI/BI064FormRunAnalysis.js @@ -0,0 +1,372 @@ +import React from 'react'; +import { connect } from 'dva'; +import { initFilter } from '../../../utils/common'; +import { Table, Row, Spin, Card } from 'antd'; + +class BI064FormRunAnalysis extends React.Component { + constructor(props) { + super(props); + this.state = { + retData: [], // 表单运行数据 + companyData: [], // 公司数据 + loading: true, + tableData: [], // 处理后的表格数据 + columns: [], // 动态生成的列 + }; + } + + componentDidMount() { + this.loadData(); + } + + // 加载数据 + loadData = () => { + this.getBaseData(); + this.getrealData(); + }; + + // 获取公司数据 + getBaseData = () => { + const json = initFilter(this.props.login.OrgId); + this.props.dispatch({ + type: 'app/getDataByPost', + url: 'FM/Organization/OrderPaged', + payload: json, + onlyData: false, + onComplete: (ret) => { + if (ret && ret.Data) { + this.setState({ companyData: ret.Data }, () => { + this.processData(); + }); + } + }, + }); + }; + + // 获取表单运行数据 + getrealData = () => { + const json = initFilter(this.props.login.OrgId); + this.props.dispatch({ + type: 'app/getDataByPost', + url: 'BI/BIStatiscialAnalysisController/GetTaskViewInfo', + payload: json, + onlyData: false, + onComplete: (ret) => { + if (ret && ret.Data) { + this.setState({ retData: ret.Data, loading: false }, () => { + this.processData(); + }); + } else { + this.setState({ loading: false }); + } + }, + }); + }; + + // 处理数据,生成表格所需格式 + processData = () => { + const { retData, companyData } = this.state; + + if (!retData.length || !companyData.length) return; + + // 获取所有模块和表单的列表 + const modules = [...new Set(retData.map((item) => item.MOULD_NAME))]; + const forms = []; + + // 按模块组织表单 + modules.forEach((module) => { + const moduleForms = [ + ...new Set(retData.filter((item) => item.MOULD_NAME === module).map((item) => item.FORM_NAME)), + ]; + + moduleForms.forEach((form) => { + forms.push({ + module, + form, + key: `${module}_${form}`, + }); + }); + }); + + // 处理每个公司的数据 + const tableData = forms.map((formItem) => { + const { module, form, key } = formItem; + const rowData = { + key, + module, + form, + }; + + // 为每个公司添加数据 + companyData.forEach((company) => { + const companyName = company.NAME; + const companyDataKey = companyName.replace(/\s+/g, ''); + + // 查找该公司该表单的数据 + const formData = retData.find( + (item) => item.MOULD_NAME === module && item.FORM_NAME === form && item.COMPANY_NAME === companyName + ); + + if (formData) { + // 计算完成率和及时率 + // const finishRate = + // formData.TOTAL_QTY > 0 + // ? (((formData.NORMAL_FINISH + formData.OVER_FINISH + formData.DOING) / formData.TOTAL_QTY) * 100).toFixed( + // 0 + // ) + // : '0'; + + // const normalRate = + // formData.NORMAL_FINISH + formData.OVER_FINISH + formData.DOING > 0 + // ? ( + // (formData.NORMAL_FINISH / (formData.NORMAL_FINISH + formData.OVER_FINISH + formData.DOING)) * + // 100 + // ).toFixed(0) + // : '0'; + + rowData[`${companyDataKey}_total`] = formData.TOTAL_QTY; + rowData[`${companyDataKey}_normal`] = formData.NORMAL_FINISH; + rowData[`${companyDataKey}_overtime`] = formData.OVER_FINISH; + rowData[`${companyDataKey}_doing`] = formData.DOING; + rowData[`${companyDataKey}_unfinish`] = formData.UNFINISH; + rowData[`${companyDataKey}_overUnfinish`] = formData.OVER_UNFINISH; + rowData[`${companyDataKey}_finishRate`] = formData.FINISH_RATE; + rowData[`${companyDataKey}_normalRate`] = formData.NORMAL_RATE; + } else { + // 如果没有数据,设置默认值 + rowData[`${companyDataKey}_total`] = 0; + rowData[`${companyDataKey}_normal`] = 0; + rowData[`${companyDataKey}_overtime`] = 0; + rowData[`${companyDataKey}_doing`] = 0; + rowData[`${companyDataKey}_unfinish`] = 0; + rowData[`${companyDataKey}_overUnfinish`] = 0; + rowData[`${companyDataKey}_finishRate`] = '0'; + rowData[`${companyDataKey}_normalRate`] = '0'; + } + }); + + return rowData; + }); + + // 计算每个模块的行数,用于合并单元格 + const moduleRowCounts = {}; + let currentModule = null; + let count = 0; + + tableData.forEach((row, index) => { + if (row.module !== currentModule) { + if (currentModule !== null) { + moduleRowCounts[currentModule] = count; + } + currentModule = row.module; + count = 1; + } else { + count++; + } + + // 最后一个模块 + if (index === tableData.length - 1) { + moduleRowCounts[currentModule] = count; + } + }); + + // 将行数信息添加到tableData中,供render使用 + const tableDataWithRowSpan = tableData.map((row, index) => { + // 找到该模块的起始索引 + const moduleStartIndex = tableData.findIndex((item) => item.module === row.module); + + // 如果是该模块的第一行,设置rowSpan为该模块的行数 + if (index === moduleStartIndex) { + return { + ...row, + moduleRowSpan: moduleRowCounts[row.module] || 1, + }; + } else { + // 不是第一行,设置rowSpan为0,表示不显示 + return { + ...row, + moduleRowSpan: 0, + }; + } + }); + + // 生成表格列 + const columns = this.generateColumns(companyData, tableDataWithRowSpan); + + this.setState({ tableData: tableDataWithRowSpan, columns }); + }; + + // 动态生成表格列 + generateColumns = (companyData) => { + const baseColumns = [ + { + width: '150px', + title: '模块', + dataIndex: 'module', + key: 'module', + fixed: 'left', + align: 'center', + render: (value, row, index) => { + const obj = { + children: value, + props: {}, + }; + + // 设置rowSpan属性 + if (row.moduleRowSpan !== undefined) { + obj.props.rowSpan = row.moduleRowSpan; + } + + return obj; + }, + }, + { + width: '200px', + title: '表单', + dataIndex: 'form', + key: 'form', + fixed: 'left', + align: 'center', + }, + ]; + + // 为每个公司生成列组 + companyData.forEach((company) => { + const companyName = company.NAME; + const companyDataKey = companyName.replace(/\s+/g, ''); + + const companyColumns = { + title: `${companyName}运行数据`, + children: [ + { + title: '总任务数', + dataIndex: `${companyDataKey}_total`, + key: `${companyDataKey}_total`, + width: '80px', + align: 'center', + }, + { + title: '正常完成', + dataIndex: `${companyDataKey}_normal`, + key: `${companyDataKey}_normal`, + width: '80px', + align: 'center', + }, + { + title: '超时完成', + dataIndex: `${companyDataKey}_overtime`, + key: `${companyDataKey}_overtime`, + width: '80px', + align: 'center', + }, + { + title: '进行中', + dataIndex: `${companyDataKey}_doing`, + key: `${companyDataKey}_doing`, + width: '80px', + align: 'center', + }, + { + title: '超期未完成', + dataIndex: `${companyDataKey}_overUnfinish`, + key: `${companyDataKey}_overUnfinish`, + width: '80px', + align: 'center', + }, + { + title: '完成率', + dataIndex: `${companyDataKey}_finishRate`, + key: `${companyDataKey}_finishRate`, + width: '80px', + align: 'center', + render: (text) => {text}%, + }, + { + title: '及时率', + dataIndex: `${companyDataKey}_normalRate`, + key: `${companyDataKey}_normalRate`, + width: '80px', + align: 'center', + render: (text) => {text}%, + }, + ], + }; + + baseColumns.push(companyColumns); + }); + + return baseColumns; + }; + + render() { + const { tableData, columns, loading } = this.state; + + return ( +
    +
    +

    + 系统运行情况统计分析 +

    + + + + {/* */} + ( + + + + 汇总 + + {columns.slice(2).map((col, index) => ( + + {col.title === '总任务数' && ( + {tableData.reduce((sum, row) => sum + (row[col.dataIndex] || 0), 0)} + )} + + ))} + + + )} + /> + {/* */} + + + + + ); + } +} + +export default connect(({ login, app }) => ({ login, app }))(BI064FormRunAnalysis); diff --git a/src/utils/customConfig.js b/src/utils/customConfig.js index 64cc789..3fc4ebe 100644 --- a/src/utils/customConfig.js +++ b/src/utils/customConfig.js @@ -26,8 +26,8 @@ const SC022ImportData = createLoadableComponent(() => import('../components/Cust const FMUserEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/UserEditPage')); const FMUserEditPageAuth = createLoadableComponent(() => import('../components/CustomPages/FM/UserEditPageAuth')); const FMUserGroupEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/UserGroupEditPage')); -const PFCustomPageConfigPage = createLoadableComponent(() => - import('../components/CustomPages/PF/CustomPageConfigPage') +const PFCustomPageConfigPage = createLoadableComponent( + () => import('../components/CustomPages/PF/CustomPageConfigPage') ); const FMRoleGroupEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/RoleGroupEditPage')); const FMRoleEditPage = createLoadableComponent(() => import('../components/CustomPages/FM/RoleEditPage')); @@ -59,12 +59,12 @@ const PFEntityFieldListPage = createLoadableComponent(() => import('../component const PFExecuteSqlPage = createLoadableComponent(() => import('../components/CustomPages/PF/ExecuteSqlPage')); -const PFSendInfoToClientPage = createLoadableComponent(() => - import('../components/CustomPages/PF/SendInfoToClientPage') +const PFSendInfoToClientPage = createLoadableComponent( + () => import('../components/CustomPages/PF/SendInfoToClientPage') ); -const PFFormConfigByNamePage = createLoadableComponent(() => - import('../components/CustomPages/PF/FormConfigByNamePage') +const PFFormConfigByNamePage = createLoadableComponent( + () => import('../components/CustomPages/PF/FormConfigByNamePage') ); const BDPictureEditPage = createLoadableComponent(() => import('../components/CustomPages/BD/PictureEditPage')); @@ -75,8 +75,8 @@ const BDWordPage = createLoadableComponent(() => import('../components/CustomPag const FoPreOperSch = createLoadableComponent(() => import('../components/CustomPages/FO/FoPreOperSch')); -const FoTeamActivityShowPrint = createLoadableComponent(() => - import('../components/CustomPages/FO/FoTeamActivityShowPrint') +const FoTeamActivityShowPrint = createLoadableComponent( + () => import('../components/CustomPages/FO/FoTeamActivityShowPrint') ); const PFCommonApprove = createLoadableComponent(() => import('../components/CustomPages/PF/PFCommonApprove')); @@ -174,8 +174,8 @@ const BI005LoginRecord = createLoadableComponent(() => import('../components/Cus // const BI009RiskAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI009RiskAnalysis')) // const BI010FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI010FormRunAnalysis')) const BI011FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI011FormRunAnalysis')); -const BI011TrainSafeAnalysis = createLoadableComponent(() => - import('../components/CustomPages/BI/BI011TrainSafeAnalysis') +const BI011TrainSafeAnalysis = createLoadableComponent( + () => import('../components/CustomPages/BI/BI011TrainSafeAnalysis') ); // const BI012NotificationTaskAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI012NotificationTaskAnalysis')) // const BI013RiskAnalysisModel = createLoadableComponent(() => import('../components/CustomPages/BI/BI013RiskAnalysisModel')) @@ -200,8 +200,8 @@ const BI056Performance = createLoadableComponent(() => import('../components/Cus // const BI056Dilg3_2 = createLoadableComponent(() => import('../components/CustomPages/BI/BI056Dilg3_2')) // const BI003StatiscialAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI003StatiscialAnalysis')) const BI020ApproveAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI020ApproveAnalysis')); -const BI014RiskPerformanceModel = createLoadableComponent(() => - import('../components/CustomPages/BI/BI014RiskPerformanceModel') +const BI014RiskPerformanceModel = createLoadableComponent( + () => import('../components/CustomPages/BI/BI014RiskPerformanceModel') ); const BI012FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI012FormRunAnalysis')); @@ -263,6 +263,7 @@ const SK041ShowPrint = createLoadableComponent(() => import('../components/Custo const SK043ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK043ShowPrint')); const SK045ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK045ShowPrint')); const BI00FullScreen = createLoadableComponent(() => import('../components/CustomPages/BI/BI00FullScreen')); +const BI064FormRunAnalysis = createLoadableComponent(() => import('../components/CustomPages/BI/BI064FormRunAnalysis')); export default function (componentName, formId, formParam, data, formCode, formData) { return { @@ -511,5 +512,8 @@ export default function (componentName, formId, formParam, data, formCode, formD SK043ShowPrint: , SK045ShowPrint: , BI00FullScreen: , + BI064FormRunAnalysis: ( + + ), }[componentName]; } From b62f972e187c86cbd72f0d7f84784ff9fa2709c1 Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Tue, 27 Jan 2026 17:04:24 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomPages/BI/BI064FormRunAnalysis.js | 147 +++++++++++++++++- 1 file changed, 145 insertions(+), 2 deletions(-) diff --git a/src/components/CustomPages/BI/BI064FormRunAnalysis.js b/src/components/CustomPages/BI/BI064FormRunAnalysis.js index 3a41aa1..d73da14 100644 --- a/src/components/CustomPages/BI/BI064FormRunAnalysis.js +++ b/src/components/CustomPages/BI/BI064FormRunAnalysis.js @@ -1,7 +1,7 @@ import React from 'react'; import { connect } from 'dva'; import { initFilter } from '../../../utils/common'; -import { Table, Row, Spin, Card } from 'antd'; +import { Table, Row, Spin, Card, Modal } from 'antd'; class BI064FormRunAnalysis extends React.Component { constructor(props) { @@ -12,6 +12,55 @@ class BI064FormRunAnalysis extends React.Component { loading: true, tableData: [], // 处理后的表格数据 columns: [], // 动态生成的列 + scoreVisible: false, + scoreTitle: '', + standardScoreTemp: [], + scoreColumns: [ + // { + // title: '序号', + // render: (text, record, index) => `${index + 1}` + // }, + { + title: '待办名称', + dataIndex: 'NOTICE_TITLE', + }, + { + title: '姓名', + dataIndex: 'USER_NAME', + }, + { + title: '开始时间', + dataIndex: 'TASK_STARTDT', + }, + { + title: '结束时间', + dataIndex: 'TASK_ENDDT', + }, + { + title: '实际处理时间', + dataIndex: 'TASK_DT', + }, + { + title: '处理状态', + dataIndex: 'NOTICE_STATUS', + render: (text, record) => { + const currentTime = new Date(); + const endTime = new Date(record.TASK_ENDDT); + + if (text == 1) { + return '正常完成'; + } else if (text == 2) { + return '超时完成'; + } else if (text == 0 && endTime >= currentTime) { + return '进行中'; + } else if (text == 0 && endTime < currentTime) { + return '超期未完成'; + } else { + return '未知状态'; + } + }, + }, + ], }; } @@ -123,7 +172,7 @@ class BI064FormRunAnalysis extends React.Component { // 100 // ).toFixed(0) // : '0'; - + rowData[`${companyDataKey}_details`] = formData.details || []; // 假设返回数据中有details字段 rowData[`${companyDataKey}_total`] = formData.TOTAL_QTY; rowData[`${companyDataKey}_normal`] = formData.NORMAL_FINISH; rowData[`${companyDataKey}_overtime`] = formData.OVER_FINISH; @@ -134,6 +183,8 @@ class BI064FormRunAnalysis extends React.Component { rowData[`${companyDataKey}_normalRate`] = formData.NORMAL_RATE; } else { // 如果没有数据,设置默认值 + // 如果没有数据,设置默认值 + rowData[`${companyDataKey}_details`] = []; rowData[`${companyDataKey}_total`] = 0; rowData[`${companyDataKey}_normal`] = 0; rowData[`${companyDataKey}_overtime`] = 0; @@ -244,6 +295,11 @@ class BI064FormRunAnalysis extends React.Component { key: `${companyDataKey}_total`, width: '80px', align: 'center', + render: (text, record) => ( + + this.showDetail(record, 1, companyName)}>{record[`${companyDataKey}_total`]} + + ), }, { title: '正常完成', @@ -251,6 +307,11 @@ class BI064FormRunAnalysis extends React.Component { key: `${companyDataKey}_normal`, width: '80px', align: 'center', + render: (text, record) => ( + + this.showDetail(record, 2, companyName)}>{record[`${companyDataKey}_normal`]} + + ), }, { title: '超时完成', @@ -258,6 +319,11 @@ class BI064FormRunAnalysis extends React.Component { key: `${companyDataKey}_overtime`, width: '80px', align: 'center', + render: (text, record) => ( + + this.showDetail(record, 3, companyName)}>{record[`${companyDataKey}_overtime`]} + + ), }, { title: '进行中', @@ -265,6 +331,11 @@ class BI064FormRunAnalysis extends React.Component { key: `${companyDataKey}_doing`, width: '80px', align: 'center', + render: (text, record) => ( + + this.showDetail(record, 4, companyName)}>{record[`${companyDataKey}_doing`]} + + ), }, { title: '超期未完成', @@ -272,6 +343,13 @@ class BI064FormRunAnalysis extends React.Component { key: `${companyDataKey}_overUnfinish`, width: '80px', align: 'center', + render: (text, record) => ( + + this.showDetail(record, 5, companyName)}> + {record[`${companyDataKey}_overUnfinish`]} + + + ), }, { title: '完成率', @@ -297,6 +375,54 @@ class BI064FormRunAnalysis extends React.Component { return baseColumns; }; + showDetail = (record, type, companyName) => { + const currentTime = new Date(); + const companyDataKey = companyName.replace(/\s+/g, ''); + + // 从record中获取该公司的明细数据 + const details = record[`${companyDataKey}_details`] || []; + + let filteredDetails = []; + switch (type) { + case 1: // 总任务数 + filteredDetails = details; + break; + case 2: // 正常完成 + filteredDetails = details.filter((item) => item.NOTICE_STATUS == 1); + break; + case 3: // 超时完成 + filteredDetails = details.filter((item) => item.NOTICE_STATUS == 2); + break; + case 4: // 进行中 + filteredDetails = details.filter((item) => item.NOTICE_STATUS == 0 && new Date(item.TASK_ENDDT) >= currentTime); + break; + case 5: // 超期未完成 + filteredDetails = details.filter((item) => item.NOTICE_STATUS == 0 && new Date(item.TASK_ENDDT) < currentTime); + break; + default: + filteredDetails = details; + } + + const typeTitles = { + 1: '总任务数', + 2: '正常完成', + 3: '超时完成', + 4: '进行中', + 5: '超期未完成', + }; + + this.setState({ + standardScoreTemp: filteredDetails, + scoreVisible: true, + scoreTitle: `${companyName} - ${record.module} - ${record.form} 的${typeTitles[type]}明细`, + }); + }; + clearScoreData = () => { + this.setState({ + scoreVisible: false, + // standardScore: [],//newtmpData + }); + }; render() { const { tableData, columns, loading } = this.state; @@ -315,6 +441,23 @@ class BI064FormRunAnalysis extends React.Component { padding: '20px', }} > + +
    +

    Date: Tue, 27 Jan 2026 17:07:27 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=B1=87=E6=80=BB?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomPages/SK/SK027ShowPrintNew.js | 533 ++++++++++++++++++ src/utils/customConfig.js | 2 + 2 files changed, 535 insertions(+) create mode 100644 src/components/CustomPages/SK/SK027ShowPrintNew.js diff --git a/src/components/CustomPages/SK/SK027ShowPrintNew.js b/src/components/CustomPages/SK/SK027ShowPrintNew.js new file mode 100644 index 0000000..d51d75f --- /dev/null +++ b/src/components/CustomPages/SK/SK027ShowPrintNew.js @@ -0,0 +1,533 @@ +import { Button, Descriptions, Modal } from 'antd'; +import React from 'react'; +import { initFilter, extendRule, GetFileModel, guid, showFiles, showApprove, showUsersSign, showUserSign,showFileImg,extendIgnoreDataRule } from '../../../utils/common'; +import ReactToPrint from 'react-to-print'; +import { ExportToExcel } from '@woowalker/feui' +import XLSX from 'xlsx'; +import { connect } from 'dva'; +import stylesStep from '../../../components/CustomPages/HI/StepForm.css'; +import config from '../../../config.js'; +import FormPage from '../../FormPage' +import moment from 'moment'; +class SK027ShowPrintNew extends React.Component { + constructor(props) { + super(props); + this.state = { + tmpData: {}, + data1: null, + data2: null, + data3: null, + data4: null, + detailUsers:[], + fileData: [], + fileForm: { + title: "", + visible: false, + }, + + } + } + + componentDidMount() { + if (this.props.data?.id) + this.loadData(this.props.data?.id); + } + + componentWillReceiveProps(NextProps) { + if (NextProps.data?.id && this.props.data?.id != NextProps.data?.id) { + this.loadData(NextProps.data?.id); + } + } + + onTableBtnExport() { + let TableWrap = document.getElementById('table1'); + let Table = TableWrap.getElementsByTagName('table1')[0]; + const wb = XLSX.utils.table_to_book(Table); + XLSX.writeFile(wb, this.props.record.Nav_Department.NAME + '.xlsx') + + } + + loadData = (id) => { + // id= CHECKID +'_'+SUBMITID CHECKID\SUBMITID 可能只有其一 但是一定会有_ + var orgId = this.props.login ? this.props.login.OrgId : ''; + let json = initFilter(orgId); + extendRule(json, 'ID', 1, id); + extendIgnoreDataRule(json) + this.props.dispatch({ + type: 'app/getDataByPost', + payload: json, + url: 'SK/SKSecurityInspectionRecordSummary/SKGetAll', + onComplete: (ret) => { + if (ret) { + let users=[] + let uniqueUsers =[] + if(ret.data1.Nav_CheckRecordDetails) + { + ret.data1.Nav_CheckRecordDetails.forEach(item => { + item.Nav_CheckRecordDetailUsers.forEach(item2=>{ + users.push(item2) + }) + }) + } + if(users) + { + uniqueUsers= users.reduce((acc, user) => { + // 如果累积数组中还没有这个 user_id,则添加 + if (!acc.some(item => item.USER_ID === user.USER_ID)) { + acc.push(user); + } + return acc; + }, []); + } + this.setState({ detailUsers:uniqueUsers,data1: ret.data1, + data2: ret.data2,data3: ret.data3, data4: ret.data4}) + } + } + }); + } + + render() { + const { data1,data2,data3,data4,detailUsers } = this.state; + const enums = this.props.data.enums ? this.props.data.enums : this.props.app.enums; + return
    +
    +

    + + {/* */} + {/* onClick={() => this.CheckerCheckToActual(10)} */} + + + +
    } content={() => this.componentRef} />
    +
    +
    (this.componentRef = el)} style={{ padding: '20px', paddingTop: '20px' }} id={'tableId' + this.props.data.id}> +

    安全检查记录汇总表

    + { + data1 ? +
    + + {moment(data1.CREATE_TIME).format('YYYY-MM-DD')} + {data1.Nav_ApplyDepartment ? data1.Nav_ApplyDepartment.NAME : ''} + {data1.Nav_ApplyUser ? data1.Nav_ApplyUser.NAME : ''} + {data1.Nav_ProductionUnit? data1.Nav_ProductionUnit.NAME : ''} + {data1.Nav_CheckType ? data1.Nav_CheckType.NAME : ''} + {enums.SKPLANCHECKFREQUENCYEnum.enums[data1.PLANCHECKFREQUENCY]} + {enums.SKDepartmentTypeEnum.enums[data1.DEPARTMENT_TYPE]} + {moment(data1.CHECK_TIME).format('YYYY-MM-DD HH:mm:ss')} + {data1.CHECK_PERSON} + { + showFiles(data1?.Nav_CheckRecordFiles, config.picServerHost, this) + } + +
    : null + } + + + + + + {/* + */} + + + + + + + + + { + data1?.Nav_CheckRecordDetails && data1.Nav_CheckRecordDetails?.sort((x, y) => (x.RISK_AREA_ID > y.RISK_AREA_ID) ? 1 : -1).map((item, i) => { + return + + + + {/* + }) + } + */} + {/* */} + + }) + } + + + + + + + + + }) + } +
    序号检查区域检查内容检查依据判定标准检查人员检查情况隐患描述隐患等级整改措施隐患地点隐患照片
    + {i + 1} + {/* {item.MARK !== 0 ? * : i + 1} */} + + { + item.Nav_RiskArea?.NAME + } + + { + item.Nav_Contents?.CHECKCONTENT + } + + { + item?.Nav_CheckRecordDetailBasics && item?.Nav_CheckRecordDetailBasics.map((item2, i) => { + + return {(i > 0 ? "," : "") + item2.Nav_Law.NAME} + + // return
    + { + item.CHECKSTANDARD + } + + { + item?.Nav_CheckRecordDetailUsers && item?.Nav_CheckRecordDetailUsers.map((item2, i) => { + if (item2.ISCHECK) { + return {(i > 0 ? "," : "") + item2.Nav_User.NAME} + } else { + return {(i > 0 ? "," : "") + item2.Nav_User.NAME} + } + //return
    + { + item.CHECK_RESULT == null? "无隐患" :enums.SKCheckResultEnum.enums[item.CHECK_RESULT] + } + + { + item.Nav_Question?.DESCREPTION + } + + { + enums.SKHiddenLevel.enums[item.HIDDEN_LEVEL] + } + + { + item.RECTIFICATION_MEASURES + } + + { + item.HIDDEN_PLACE + } + + { + showFiles(item?.Nav_CheckRecordDetailFiles, config.picServerHost, this) + } +
    + { + this.state.detailUsers ? +
    + + { + this.state.detailUsers?.filter(it => it.ISCHECK).map((item, i) => { + return showUserSign(item.Nav_User, config.picServerHost) + }) + } + +
    :null + } +

    {data2 && data2 != [] ?"隐患上报表":null}

    + + { + data2 ? +
    + + {moment(data2.CREATE_TIME).format('YYYY-MM-DD')} + {data2.Nav_ApplyDepartment ? data2.Nav_ApplyDepartment.NAME : ''} + {data2.Nav_ApplyUser ? data2.Nav_ApplyUser.NAME : ''} + {data2.Nav_ProductionUnit? data2.Nav_ProductionUnit.NAME : ''} + {data2.Nav_CheckType ? data2.Nav_CheckType.NAME : ''} + {enums.SKPLANCHECKFREQUENCYEnum.enums[data2.PLANCHECKFREQUENCY]} + {enums.SKDepartmentTypeEnum.enums[data2.DEPARTMENT_TYPE]} + {moment(data2.CHECK_TIME).format('YYYY-MM-DD HH:mm:ss')} + {data2.CHECK_PERSON} + { + showFiles(data2?.Nav_ReportFiles, config.picServerHost, this) + } + +
    : null + } + { data2 && data2.Nav_ReportDetails ? + + + + + + + + + + + + + + { + data2?.Nav_ReportDetails && data2.Nav_ReportDetails?.map((item, i) => { + return + + + + + + + + + + + + }) + } +
    序号检查区域检查内容隐患描述隐患等级整改措施隐患地点整改责任人整改期限隐患照片
    + {i + 1} + {/* {item.MARK !== 0 ? * : i + 1} */} + + { + item.Nav_RiskArea?.NAME + } + + { + item.Nav_Contents?.CHECKCONTENT + } + + { + item.Nav_Question?.DESCREPTION + } + + { + enums.SKHiddenLevel.enums[item.HIDDEN_LEVEL] + } + + { + item.RECTIFICATION_MEASURES + } + + { + item.HIDDEN_PLACE + } + + { + item.ISCHECK? {item.Nav_RecitifyUser?.NAME}: + {item.Nav_RecitifyUser?.NAME} + } + {/* { + item.Nav_RecitifyUser?.NAME + } */} + + { + moment(item.RECITIFY_TIME).format('YYYY-MM-DD') + } + + { + showFiles(item?.Nav_ReportDetailFiles, config.picServerHost, this) + } +
    :null + } + + { + data2 && data2.Nav_ReportDetails ? +
    + + { + data2.Nav_ReportDetails?.map((item, i) => { + if (item && item.ISCHECK ) { + showUserSign(item.Nav_RecitifyUser, config.picServerHost) + } + }) + } + +
    :null + } + + { + data3 && data3 != []? + + + + {data3 && data3 != [] ? :null} + + { + data3?.map(head => { + return + + + }) + } + +
    隐患整改通知
    + { + head ? +
    + + {moment(head.CREATE_TIME).format('YYYY-MM-DD')} + {head.Nav_ApplyDepartment ? head.Nav_ApplyDepartment.NAME : ''} + {head.Nav_ApplyUser ? head.Nav_ApplyUser.NAME : ''} + {head.Nav_ProductionUnit? head.Nav_ProductionUnit.NAME : ''} + {head.Nav_CheckType ? head.Nav_CheckType.NAME : ''} + {enums.SKPLANCHECKFREQUENCYEnum.enums[head.PLANCHECKFREQUENCY]} + {enums.SKDepartmentTypeEnum.enums[head.DEPARTMENT_TYPE]} + {head.CHECK_TIME ? moment(head.CHECK_TIME).format('YYYY-MM-DD HH:mm:ss') : null} + {head.CHECK_PERSON} + { + showFiles(head?.Nav_RectifyFiles, config.picServerHost, this) + } + +
    : null + } + + + + + {/* */} + + + + + + + + + + { + head?.Nav_RectifyDetails && head.Nav_RectifyDetails?.map((item, i) => { + return + + + {/* */} + + + + + + + + + + }) + } +
    序号检查区域检查内容隐患描述隐患等级隐患地点整改措施整改期限整改落实人验收人隐患照片
    + {i + 1} + + { + item.Nav_RiskArea?.NAME + } + + { + item.Nav_Contents?.CHECKCONTENT + } + + { + item.Nav_Question?.DESCREPTION?item.Nav_Question.DESCREPTION:item.HIDDEN_DESCRIPTION + } + + { + enums.SKHiddenLevel.enums[item.HIDDEN_LEVEL] + } + + { + item.HIDDEN_PLACE + } + + { + item.RECTIFICATION_MEASURES + } + + { + item.RECITIFY_TIME ? moment(item.RECITIFY_TIME).format('YYYY-MM-DD') : null + } + + { + item.Nav_ImplementUser?.NAME + } + + { + item.Nav_AcceptUser?.NAME + } + + { + showFiles(item?.Nav_RectifyDetailFiles, config.picServerHost, this) + } +
    +
    + : null + } + + { + data4 && data4 != []? + + + + {data4 && data4 != [] ? :null} + + { + data4?.map(head => { + return + + + }) + } + +
    隐患整改记录
    + { + head ? +
    + + {head.CODE} + {moment(head.CREATE_TIME).format('YYYY-MM-DD')} + {head.Nav_ApplyDepartment ? head.Nav_ApplyDepartment.NAME : ''} + {head.Nav_ApplyUser ? head.Nav_ApplyUser.NAME : ''} + {head.Nav_ProductionUnit? head.Nav_ProductionUnit.NAME : ''} + {head.Nav_RiskArea ? head.Nav_RiskArea.NAME : ''} + {head.Nav_Contents ? head.Nav_Contents.CHECKCONTENT : ''} + {head.HIDDEN_PLACE} + {head.Nav_Question?.DESCREPTION?head.Nav_Question.DESCREPTION:head.HIDDEN_DESCRIPTION} + {enums.SKHiddenLevel.enums[head.HIDDEN_LEVEL]} + {head.RECTIFICATION_MEASURES} + {moment(head.RECITIFY_TIME).format('YYYY-MM-DD')} + {head.Nav_RecitifyUser && head.Nav_RecitifyUser.Nav_Department ? head.Nav_RecitifyUser.Nav_Department.NAME : ''} + {head.Nav_RecitifyUser ? head.Nav_RecitifyUser.NAME : ''} + {head.RECTIFICATION_MONEY} + { + showFiles(head?.Nav_RectifyFiles, config.picServerHost, this) + } + {head.Nav_ImplementUser ? head.Nav_ImplementUser.NAME : ''} + + {head.RECTIFICATION_DESCRIPTION} + + {head.COMPLETE_DATE?moment(head.COMPLETE_DATE).format('YYYY-MM-DD'):null} + { + showFileImg(head?.Nav_RectifyPhotoas, config.picServerHost, this) + } + { + showFileImg(head?.Nav_RectifyPhotobs, config.picServerHost, this) + } + {head.Nav_AcceptUser ? head.Nav_AcceptUser.NAME : ''} + {head.ACCEPT_DATE?moment(head.ACCEPT_DATE).format('YYYY-MM-DD'):null} + {enums.SKAcceptResultEnum.enums[head.ACCEPT_RESULTE]} + {head.ACCEPT_OPINION} + { + head.Nav_RecitifyUser && head.Nav_RecitifyUser.FILE_PATH ? + showUserSign(head.Nav_RecitifyUser, config.picServerHost) + : head.Nav_RecitifyUser ? head.Nav_RecitifyUser.NAME : '' + } + { + (head.STATUS == 20 ||head.STATUS == 30) && head.Nav_AcceptUser && head.Nav_AcceptUser.FILE_PATH ? + showUserSign(head.Nav_AcceptUser, config.picServerHost) + : head.Nav_AcceptUser ? head.Nav_AcceptUser.NAME : '' + } + +
    : null + } +
    + : null + } + +
    + + + { + GetFileModel(Modal, FormPage, this, this.state.fileForm.visible) + } +
    + } +} +export default connect(({ login, app }) => ({ login, app }))(SK027ShowPrintNew) diff --git a/src/utils/customConfig.js b/src/utils/customConfig.js index 3fc4ebe..7be96ca 100644 --- a/src/utils/customConfig.js +++ b/src/utils/customConfig.js @@ -253,6 +253,7 @@ const SK022ShowPrint = createLoadableComponent(() => import('../components/Custo const SK024ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK024ShowPrint')); const SK026ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK026ShowPrint')); const SK027ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK027ShowPrint')); +const SK027ShowPrintNew = createLoadableComponent(() => import('../components/CustomPages/SK/SK027ShowPrintNew')); const SK031ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK031ShowPrint')); const SK033ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SK/SK033ShowPrint')); // 该组件已在上方声明,此处去除重复定义 @@ -502,6 +503,7 @@ export default function (componentName, formId, formParam, data, formCode, formD SK024ShowPrint: , SK026ShowPrint: , SK027ShowPrint: , + SK027ShowPrintNew: , SK031ShowPrint: , SK033ShowPrint: , SK035ShowPrint: , From e390373088ca6fa0f8ffaca02e9bf4fb589dd43c Mon Sep 17 00:00:00 2001 From: yunkexin <760754045@qq.com> Date: Wed, 28 Jan 2026 14:06:32 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E6=94=BE=E5=BC=80=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E6=89=AB=E7=A0=81=E4=B8=8B=E8=BD=BDapp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/MainPage/GuideCanvas.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/MainPage/GuideCanvas.js b/src/components/MainPage/GuideCanvas.js index 840ea17..16f2419 100644 --- a/src/components/MainPage/GuideCanvas.js +++ b/src/components/MainPage/GuideCanvas.js @@ -72,17 +72,17 @@ class GuideCanvas extends Component { return (
    - {/*
    -
    +
    APP下载 -
    */} +
    Date: Wed, 28 Jan 2026 14:20:34 +0800 Subject: [PATCH 11/11] 1 --- src/components/MainPage/GuideCanvas.js | 2 +- src/layout/Header.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/MainPage/GuideCanvas.js b/src/components/MainPage/GuideCanvas.js index 16f2419..ce3a5c0 100644 --- a/src/components/MainPage/GuideCanvas.js +++ b/src/components/MainPage/GuideCanvas.js @@ -74,7 +74,7 @@ class GuideCanvas extends Component {
    { { setshowCanvas(false);