import React, { useState, useEffect, useRef, Component } from 'react' import { connect } from 'dva' import storage from '../utils/storage' import { initFilter, addRuleAndGroups, guid, extendInclude, extendRule, extend } from "../utils/common" import './home.less' // 组件库 import { Table, Modal, Row, Col, Icon, Button, Input, DatePicker, Form, Select, notification, Divider, Space, Descriptions,message } from 'antd'; import { Chart, Geom, Axis, Tooltip, Legend } from "bizcharts"; import FormPage from '../components/FormPage' import backlog from '../assets/home/backlog.png'; import backlog_i from '../assets/home/backlog_icon.png'; import styles from './dashboard.css'; import Slider from "react-slick"; import 'slick-carousel/slick/slick.css'; import 'slick-carousel/slick/slick-theme.css'; import moment from 'moment'; import flow from '../assets/home/flow.png'; import flow_i from '../assets/home/flow_icon.png'; import finished from '../assets/home/finished.png'; import finished_i from '../assets/home/finished_icon.png'; import remind from '../assets/home/remind.png'; import remind_i from '../assets/home/remind_icon.png'; import noticeImg from '../assets/home/noticeImg.jpg'; import scoreImg from '../assets/home/score.jpg'; import echarts from 'echarts'; import config from '../config' const Option = Select.Option; const RangePicker = DatePicker.RangePicker const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 }, }; const openNotification = placement => { notification.info({ duration: null, top: 43, message: `签名照上传提示:`, description: '您还没上传自己的签名照片,请在我的资料中尽快上传您的签名照!', placement, }); }; const openNotificationMobile = placement => { notification.info({ duration: 20, message: `友情提示:`, description: '您当前用的是手机在访问,为有更好体验,建议使用电脑访问!', placement, }); }; class Home extends React.Component { constructor(props) { super(props); this.state = { isNaN: false, scoreVisible: false, scoreTotalVisible: false, scoreNaVisible: false, standardScore: [], standardScoreTemp: [], standardScoreNaN: [], visible: false, xlkDisplay: 'none', lyxtDisplay: 'none', dcjdDisplay: 'none', noticeTitle: '', tmpData: {}, tableKey: "1", pagination: {}, retData: [], chartData: [], displayStr: null, displayNum: 24, columnData: [], columnFields: [], delayData: [], Workbench: { StockDetail: [], ApprovalCount: 0, InComingCount: 0, OutingCount: 0, ProductingCount: 0 },//工作台模型 showLoading: false, //待办事项数据刷新提示 searchVisible: false, //弹窗显示 searchTodayVisible: false, //弹窗显示 columns: [ ], searchColumns: [ ], scoreColumns: [], scoreTotalColumns:[], tableData: [{//工作台四个展示模块 key: '1', bgImg: backlog, title: window.navigator.userAgent.indexOf("Windows") < 1 ? '待办' : '待办事项', total: '0', iconImg: backlog_i, iconDisplay: 'block', }, { key: '4', bgImg: remind, title: window.navigator.userAgent.indexOf("Windows") < 1 ? '超时' : '待办超时', total: '0', iconImg: remind_i, iconDisplay: 'none', }, { key: '2', bgImg: flow, title: window.navigator.userAgent.indexOf("Windows") < 1 ? '已办' : '已办事项', total: '0', iconImg: flow_i, iconDisplay: 'none', }, { key: '3', bgImg: finished, title: '今日提醒', total: '0', iconImg: finished_i, iconDisplay: 'none', } ], visibleTitle: '',//点击title isSearch: false, // 是否搜索 querySearch: {},//搜索集合 visibleStartTime: [], visibleEndTime: [], currentpageIndex: "1", departmentName: "", isModalVisible: false, isModalVisible2: false, isModalVisible3: false, isModalVisible4: false, isModalVisible5: false, isModalVisible6: false, isModalVisibleRisk: false, stardardScoreQty: "0", }; // this.enums = []; this.reportType = ""; this.hiddenTop = 10; this.jobTop = 10; this.teamTop = 8; this.tempTime = moment(new Date()).add(-3, "month").format('YYYY-MM-DD'); }; componentDidMount() { if (window.navigator.userAgent.indexOf("Windows") < 1) { openNotificationMobile('bottomRight'); this.state.displayStr = 'none'; this.state.displayNum = 24; //alert('手机'); } else { this.state.displayStr = ''; this.state.displayNum = 16; //alert('PC'); } this.state.columns = [ { width: "450px", title: '任务名称', dataIndex: 'NOTICE_TITLE', key: 'NOTICE_TITLE', render: (text, record) => ( this.showEditModal(record.SOURCE_DATA_ID, record.SOURCE_FORMCODE, record.ID, record.NOTICE_TITLE)}>{record.NOTICE_TITLE} ), }, { title: '开始时间', dataIndex: 'TASK_STARTDT', key: 'TASK_STARTDT' }, { title: '结束时间', dataIndex: 'TASK_ENDDT', key: 'TASK_ENDDT' }, { title: '预警状态', dataIndex: 'NOTICE_TYPE', key: 'NOTICE_TYPE', render: (text, record) => this.ShowState(record) },] this.getTeam(); // this.getEnums(); // this.targetCheck();//班组作业情况(统计图) // this.jobType();//岗位风险类别(统计图) // this.mainJobPie();//主要工作分布(饼图) // this.delayJobBar();// 超期事务(柱状图图) //定时器功能,暂时不开启 this.timerID = setInterval(() => this.getBaseInfoData(1, this.state.tableKey, 5), 120000); this.showModalSign(); this.getBaseInfoData(1, 1, 5); this.setMessageData(); this.state.scoreNoneColumns = [ { width: "50px", title: '生产单元', dataIndex: 'Nav_ProductionUnit.NAME', key: 'Nav_ProductionUnit.NAME', }, { width: "50px", title: '一级要素', dataIndex: 'Nav_Primary.NAME', key: 'Nav_Primary.NAME' }, { width: "50px", title: '二级要素', dataIndex: 'Nav_Second.NAME', key: 'Nav_Second.NAME' }, { width: "50px", title: '考评项目', dataIndex: 'EVALUATION_ITEM', key: 'EVALUATION_ITEM', render: (text, record) => ( {this.props.app.enums?.PEEvaluationItemEnum.enums[record.EVALUATION_ITEM]} ), }, { // width: "450px", title: '考评内容', dataIndex: 'CONTENTS', key: 'CONTENTS', }, // { // with: '100px', // title: '评分办法', // dataIndex: 'DESCRIPTION', // key: 'DESCRIPTION', // }, { width: "50px", title: '扣分分值', dataIndex: 'NON_STANDARDIZED_SCORE', key: 'NON_STANDARDIZED_SCORE', }, // { // with: '50px', // title: '标准分', // dataIndex: 'STANDARDIZED_SCORE', // key: 'STANDARDIZED_SCORE', // }, // { // with: '50px', // title: '实得分', // dataIndex: 'RESULT_SCORE', // key: 'RESULT_SCORE', // }, { width: "400px", title: '不符合说明', dataIndex: 'NON_CONFORMANCE', key: 'NON_CONFORMANCE', }, // { // with: '50px', // title: '评价结论', // dataIndex: 'EVALUATION_RESULT', // key: 'EVALUATION_RESULT', // render: (text, record) => ( // // {this.props.app.enums?.PEEvaluationResultEnum.enums[record.EVALUATION_RESULT]} // // ), // }, { width: "100px", title: '评价方法', dataIndex: 'Nav_EvaluationMethod', key: 'Nav_EvaluationMethod', render: (text, record) => ( { record.Nav_EvaluationMethod && record.Nav_EvaluationMethod?.map((item, i) => { return }) } ) }, ] this.state.scoreColumns = [ { width: "50px", title: '生产单元', dataIndex: 'Nav_ProductionUnit.NAME', key: 'Nav_ProductionUnit.NAME', }, { width: "50px", title: '一级要素', dataIndex: 'Nav_Primary.NAME', key: 'Nav_Primary.NAME' }, { width: "50px", title: '二级要素', dataIndex: 'Nav_Second.NAME', key: 'Nav_Second.NAME' }, { width: "50px", title: '三级要素', dataIndex: 'Nav_Three.NAME', key: 'Nav_Three.NAME', }, { width: "50px", title: '考评项目', dataIndex: 'EVALUATION_ITEM', key: 'EVALUATION_ITEM', render: (text, record) => ( {this.props.app.enums?.PEEvaluationItemEnum.enums[record.EVALUATION_ITEM]} ), }, { // width: "500px", title: '考评内容', dataIndex: 'CONTENTS', key: 'CONTENTS', }, { width: "100px", title: '评分办法', dataIndex: 'DESCRIPTION', key: 'DESCRIPTION', }, { width: "50px", title: '标准分', dataIndex: 'STANDARDIZED_SCORE', key: 'STANDARDIZED_SCORE', }, { width: "50px", title: '实得分', dataIndex: 'RESULT_SCORE', key: 'RESULT_SCORE', }, { width: "200px", title: '不符合说明', dataIndex: 'NON_CONFORMANCE', key: 'NON_CONFORMANCE', }, , { width: "50px", title: '评价结论', dataIndex: 'EVALUATION_RESULT', key: 'EVALUATION_RESULT', render: (text, record) => ( {this.props.app.enums?.PEEvaluationResultEnum.enums[record.EVALUATION_RESULT]} ), }, { width: "100px", title: '评价方法', dataIndex: 'Nav_EvaluationMethod', key: 'Nav_EvaluationMethod', render: (text, record) => ( { record.Nav_EvaluationMethod && record.Nav_EvaluationMethod?.map((item, i) => { return }) } ) }, ], this.state.scoreTotalColumns = [ { title: '生产单元', dataIndex: 'Nav_ProductionUnit.NAME', key: 'Nav_ProductionUnit.NAME', }, { title: '标准化得分', dataIndex: 'NON_STANDARDIZED_SCORE', key: 'NON_STANDARDIZED_SCORE', }, // { // with: '100px', // title: '一级要素', // dataIndex: 'Nav_Primary.NAME', // key: 'Nav_Primary.NAME' // }, // { // with: '50px', // title: '标准分', // dataIndex: 'STANDARDIZED_SCORE', // key: 'STANDARDIZED_SCORE', // }, // { // with: '50px', // title: '实得分', // dataIndex: 'RESULT_SCORE', // key: 'RESULT_SCORE', // }, { title: '操作', dataIndex: '', key: '', render: (text, record) => ( { } ) } ] }; componentWillUnmount() { this.timerID && clearTimeout(this.timerID); } showModalSign = () => { var userId = storage('lacal').getItem('userid')?.val; //登录后有存储登录信息 var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 let json = initFilter(orgId); this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'FM/User/UserSign', //验证是否有签名照 onComplete: (ret) => { //返回查询结果ret if (ret) { //判断是否有记录 openNotification('topRight'); } } }); }; getTeam = () => { var userId = storage('lacal').getItem('userid')?.val; //登录后有存储登录信息 var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 if (orgId == '8f1cf418-8bf3-ea3f-7a6d-fc5d61247008') { this.setState({ lyxtDisplay: 'block', xlkDisplay: 'none', dcjdDisplay: 'none' }); } else if (orgId == '8b3c41aa-51b1-7ce9-1879-248a038c1b5c') { this.setState({ lyxtDisplay: 'none', xlkDisplay: 'none', dcjdDisplay: 'block' }); } else { this.setState({ lyxtDisplay: 'none', xlkDisplay: 'block', dcjdDisplay: 'none' }); } let json = initFilter(orgId) extendRule(json, 'ID', 1, userId) extendInclude(json, 'Nav_Department') this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'FM/User/Get', onComplete: (ret) => { if (ret && ret.Nav_Department) { this.setState({ departmentName: ret.Nav_Department.NAME }); // this.hiddenDanger(); this.targetCheck();//班组作业情况(统计图) this.departmentCompletion();//班组作业完成率前八(统计图) this.workTicket();//工作票完成率前十(统计图) this.hiddenDangerDeal();//隐患整改完成率前十(统计图) this.riskType();//岗位风险类别(统计图) this.riskLevel();//岗位风险等级(饼图) this.getStandardScore(ret.MineType);//获取标准化评分 } } }); }; // hiddenDanger wyw hiddenDanger = () => { const userInfo = storage("lacal").getItem("webUserInfo").val; let json = initFilter(this.props.login.OrgId, "", "NUM"); this.props.dispatch({ type: "app/getDataByPost", url: "BI/BIHome/GetHomeInfo", // payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { this.hiddenTop = data.Data.length; this.setState({ dangerList: data.Data, }); this.hiddenDangerDeal(); // this.hiddenDangerTotal(); //图标2 } }, }); }; getStandardScore = (MineType) => { //标准化得分 var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 let json = initFilter(orgId, MineType) this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'PE/PESafetyEvaluationRecord/HomeGet', onComplete: (ret) => { if (ret && ret.Nav_Details) { this.setState({ standardScore: ret, stardardScoreQty: ret.STANDARDIZED_RESULT//(ret.RESULT_TOTAL / ret.STAND_TOTAL * 100).toFixed(2) }); } else { this.setState({ standardScore: [], stardardScoreQty: 0 }); } } }); } totalTime = () => { var orgId = storage('lacal').getItem('webOrgId')?.val; //登录后有存储登录信息 let json = initFilter(orgId) extendRule(json, 'SET_TYPE', 1, 85) this.props.dispatch({ type: 'app/getDataByPost', payload: json, url: 'PT/TimeSet/Get', onComplete: (ret) => { if (ret) { this.tempTime = moment(ret.RUNSETTIME).format('YYYY-MM-DD'); this.setState({ isModalVisible2: true }); } } }); } getEnums = () => { this.props.dispatch({ type: 'app/getDataByGet', url: 'PF/Extend/GetAllEnum', onComplete: (ret) => { if (ret) { this.enums = ret; } } }); }; //班组作业完成情况统计图 targetCheck = () => { const { departmentName } = this.state; const userInfo = storage('lacal').getItem('webUserInfo').val; let json = initFilter(this.props.login.OrgId, departmentName, "WAITTING_COUNT", "desc"); this.props.dispatch({ type: 'app/getDataByPost', url: "BI/BIStatiscialAnalysisController/GetClassCompletionSort", payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { // let enumsTemp = this.enums; // let formTypeEnums = enumsTemp ?enumsTemp.find(item => item.EnumName === "BIFormType"):[]; let formName = []; let wattingQty = []; let finishQty = []; let totalQty = []; let WattingRate = []; let finishRate = []; // let result = data.Data.filter(t => t.TEAM_NAME == departmentName); if (data.Data) { data.Data.forEach(item => { // let enums = formTypeEnums && formTypeEnums.options?formTypeEnums.options.find(t => t.value === item.FORM_TYPE):[]; // formName.push(enums?enums.label:item.FORM_TYPE); formName.push(item.FORM_NAME); wattingQty.push(item.WAITTING_COUNT); finishQty.push(item.FINISH_COUNT); totalQty.push(item.TOTAL_COUNT); let finishRateTemp = (item.FINISH_COUNT / item.TOTAL_COUNT * 100).toFixed(2); let WattingRateTemp = (item.WAITTING_COUNT / item.TOTAL_COUNT * 100).toFixed(2); finishRate.push(finishRateTemp); WattingRate.push(WattingRateTemp); }) var teamPre = data.Data.filter(t => t.FORM_NAME == "班前会议"); if (teamPre.length === 0) { formName.push("班前会议"); finishRate.push(0); WattingRate.push(100); } var teamCur = data.Data.filter(t => t.FORM_NAME == "岗位当班"); if (teamCur.length === 0) { formName.push("岗位当班"); finishRate.push(0); WattingRate.push(100); } var teamAft = data.Data.filter(t => t.FORM_NAME == "岗位交接班"); if (teamAft.length === 0) { formName.push("岗位交接班"); finishRate.push(0); WattingRate.push(100); } var teamAct = data.Data.filter(t => t.FORM_NAME == "班组安全活动记录"); if (teamAct.length === 0) { formName.push("班组安全活动记录"); finishRate.push(0); WattingRate.push(100); } } let targetChecks = document.getElementById('targetCheck'); if (targetChecks) { let myChart = echarts.init(targetChecks); myChart.setOption({ tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, // formatter:function (params) { // console.log(params); // 当我们想要自定义提示框内容时,可以先将鼠标悬浮的数据打印出来,然后根据需求提取出来即可 // let firstParams = params[0]; // let sndParams = params[1]; // let endParams = params[2]; // return firstParams.seriesName +' ' + firstParams.value +'
' +sndParams.seriesName +' ' + sndParams.value +'
' + endParams.seriesName +' ' + endParams.value; // } }, grid: { left: '3%', right: '4%', top: '3%', containLabel: true }, xAxis: { type: 'value', splitLine: { show: false, lineStyle: { color: '#172749' } }, axisLine: { show: false }, axisTick: { show: false }, axisLabel: { show: true, interval: 0, formatter: '{value} %', // 给每个数值添加% // fontSize: '22' }, }, legend: { data: ['完成率', '未完成'], bottom: '35px' }, yAxis: { type: 'category', axisTick: { show: false }, axisLine: { show: false }, splitLine: { show: false, lineStyle: { color: '#172749' } }, data: formName, }, series: [ // { // name: '总数', // type: 'bar', // stack: '', // label: { // show: true, // position: 'right', // color: '#000', // }, // data: totalQty, // barGap: '-100%', // z:-1, // itemStyle: { // normal: { // color: 'rgba(128, 128, 128, 0.3)' // } // }, // }, // { // name: '已办', // type: 'bar', // stack: '', // label: { // show: true, // position: 'right', // color: '#000', // }, // data: finishQty, // barGap: '-100%', // z:-1, // itemStyle: { // normal: { // color: '#5B9BD5', // } // }, // }, // { // name: '待办', // type: 'bar', // stack: '', // label: { // show: true, // position: 'right', // color: '#000', // }, // data: wattingQty, // barGap: '-100%', // z:-1, // itemStyle: { // normal: { // color: 'rgba(192, 192, 192)', // } // }, // }, { name: '完成率', type: 'bar', stack: '总量', // color: '#ED7D31',//#ED7D31、008000、ED7D31 data: finishRate.map(item => { return { value: item, label: { show: item > 0 ? true : false, position: 'inside', color: '#fff', formatter: '{c}%', fontSize: '16' }, // 每一个条目的样式配置 itemStyle: { // barBorderRadius: [0, 34, 34, 0], // 圆角 // 渐变色 1、指明颜色渐变的方向 2、指明不同百分比之下颜色的值 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: "#9999FF" },//rgba(187,162,227,0.6) { offset: 1, color: "#3366CC" },//rgba(102,140,218,0.6) ]), }, } }),//finishRate show: false, // 每一个条目的样式配置 itemStyle: { // barBorderRadius: [0, 34, 34, 0], // 圆角 // 渐变色 1、指明颜色渐变的方向 2、指明不同百分比之下颜色的值 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: "#9999FF" },//rgba(187,162,227,0.6) { offset: 1, color: "#3366CC" },//rgba(102,140,218,0.6) ]), }, }, { name: '未完成', type: 'bar', stack: '总量', // label: { // show: true, // position: 'inside', // color: '#000', // formatter:'{c}%', // fontSize: '16' // }, color: '#CCCCCC',//#5B9BD5、808080 rgba(192, 192, 192) data: WattingRate }, ], }); } } } }); // let data = { "IsSuccessful": true, "Data": // [{ "FORM_NAME": "班前会议作业情况", "WATTING_COUNT": 0, "FINISH_COUNT": 20, "TOTAL_COUNT": 20}, // { "FORM_NAME": "岗位当班作业情况", "WATTING_COUNT": 3, "FINISH_COUNT": 10, "TOTAL_COUNT": 0}, // {"FORM_NAME": "岗位交接班作业情况", "WATTING_COUNT": 5, "FINISH_COUNT": 8, "TOTAL_COUNT": 0}, // {"FORM_NAME": "岗位交接2班作业情况", "WATTING_COUNT": 5, "FINISH_COUNT": 10, "TOTAL_COUNT": 0} // ], "TotalCount": 0, "ErrorMessage": null } } //班组作业完成率前八 departmentCompletion = () => { const userInfo = storage('lacal').getItem('webUserInfo').val; let json = initFilter(this.props.login.OrgId, "", "NUM", "desc"); this.props.dispatch({ type: 'app/getDataByPost', url: "FM/DepartmentCompletionSort/OrderPaged", payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { this.teamTop = data.Data.length; // let enumsTemp = this.enums; // let formTypeEnums = enumsTemp ?enumsTemp.find(item => item.EnumName === "BIFormType"):[]; let teamName = []; let finishQty = []; let wattingQty = []; let totalQty = []; let finishRate = []; let WattingRate = []; data.Data.forEach(item => { // let enums = formTypeEnums && formTypeEnums.options?formTypeEnums.options.find(t => t.value === item.FORM_TYPE):[]; // formName.push(enums?enums.label:item.FORM_TYPE); teamName.push(item.TEAM_NAME); let totalTemp = item.TEAM_TOTAL_COUNT + item.POST_TOTAL_COUNT + item.HANDOVER_TOTAL_COUNT; let finishTemp = item.TEAM_FINISH_COUNT + item.POST_FINISH_COUNT + item.HANDOVER_FINISH_COUNT; let waittingTemp = totalTemp - finishTemp; finishQty.push(finishTemp); totalQty.push(totalTemp); wattingQty.push(waittingTemp); let finishRateTemp = (finishTemp / totalTemp * 100).toFixed(2); let WattingRateTemp = (waittingTemp / totalTemp * 100).toFixed(2); finishRate.push(finishRateTemp); WattingRate.push(WattingRateTemp); }) let departmentCompletions = document.getElementById('departmentCompletion'); if (departmentCompletions) { let myChart = echarts.init(departmentCompletions); myChart.setOption({ tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, // formatter:function (params) { // console.log(params); // 当我们想要自定义提示框内容时,可以先将鼠标悬浮的数据打印出来,然后根据需求提取出来即可 // let firstParams = params[0]; // let sndParams = params[1]; // let endParams = params[2]; // return firstParams.seriesName +' ' + firstParams.value +'
' +sndParams.seriesName +' ' + sndParams.value +'
' + endParams.seriesName +' ' + endParams.value; // } }, grid: { left: '3%', right: '4%', top: '10%', bottom: '10%', containLabel: true }, xAxis: { type: 'value', splitLine: { show: false, lineStyle: { color: '#172749' } }, axisLine: { show: false }, axisTick: { show: false }, axisLabel: { show: true, interval: 0, formatter: '{value} %', // 给每个数值添加% // fontSize: '22' }, }, legend: { data: ['完成率', '未完成'], bottom: '00px' }, yAxis: { type: 'category', axisTick: { show: false }, axisLine: { show: false }, splitLine: { show: false, lineStyle: { color: '#172749' } }, data: teamName, }, series: [ // { // name: '总数', // type: 'bar', // stack: '', // label: { // show: true, // position: 'right', // color: '#000', // }, // data: totalQty, // barGap: '-100%', // z:-1, // itemStyle: { // normal: { // color: 'rgba(128, 128, 128, 0.3)' // } // }, // }, // { // name: '已办', // type: 'bar', // stack: '', // label: { // show: true, // position: 'right', // color: '#000', // }, // data: finishQty, // barGap: '-100%', // z:-1, // itemStyle: { // normal: { // color: '#5B9BD5', // } // }, // }, // { // name: '待办', // type: 'bar', // stack: '', // label: { // show: true, // position: 'right', // color: '#000', // }, // data: wattingQty, // barGap: '-100%', // z:-1, // itemStyle: { // normal: { // color: 'rgba(192, 192, 192)', // } // }, // }, { name: '完成率', type: 'bar', stack: '总量', label: { show: true, position: 'inside', color: '#fff', formatter: '{c}%', fontSize: '12' }, // 每一个条目的样式配置 itemStyle: { // barBorderRadius: [0, 34, 34, 0], // 圆角 // 渐变色 1、指明颜色渐变的方向 2、指明不同百分比之下颜色的值 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: "#01AEF6" }, { offset: 1, color: "#9999FF" },//rgba(16,36,95,0.6) ]), }, // color: '#5B9BD5',//#ED7D31、008000、ED7D31 data: finishRate, show: false }, { name: '未完成', type: 'bar', stack: '总量', // label: { // show: true, // position: 'inside', // color: '#000', // formatter:'{c}%', // fontSize: '16' // }, color: '#CCCCCC',//#5B9BD5、808080 rgba(192, 192, 192) data: WattingRate }, ], }); } } } }); // let data = { "IsSuccessful": true, "Data": // [{ "FORM_NAME": "班前会议作业情况", "WATTING_COUNT": 0, "FINISH_COUNT": 20, "TOTAL_COUNT": 20}, // { "FORM_NAME": "岗位当班作业情况", "WATTING_COUNT": 3, "FINISH_COUNT": 10, "TOTAL_COUNT": 0}, // {"FORM_NAME": "岗位交接班作业情况", "WATTING_COUNT": 5, "FINISH_COUNT": 8, "TOTAL_COUNT": 0}, // {"FORM_NAME": "岗位交接2班作业情况", "WATTING_COUNT": 5, "FINISH_COUNT": 10, "TOTAL_COUNT": 0} // ], "TotalCount": 0, "ErrorMessage": null } } //工作票完成情况统计图 workTicket = () => { const userInfo = storage('lacal').getItem('webUserInfo').val; let json = initFilter(this.props.login.OrgId, "", "NUM"); this.props.dispatch({ type: 'app/getDataByPost', url: "FM/WorkTicketCompletion/OrderPaged", payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { this.jobTop = data.Data.length; let teamName = []; let wattingQty = []; let finishQty = []; let overFinishQty = []; let totalQty = []; data.Data.forEach(item => { teamName.push(item.TEAM_NAME); wattingQty.push(item.WAITTING_COUNT); finishQty.push(item.FINISH_COUNT); overFinishQty.push(item.OVER_FINISH_COUNT); totalQty.push(item.TOTAL_COUNT); }) //图标2 let workTickets = document.getElementById('workTicket'); if (workTickets) { let myChart = echarts.init(workTickets); myChart.setOption({ tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, }, grid: { left: '3%', right: '4%', top: '10%', bottom: '10%', containLabel: true }, xAxis: { type: 'category', data: teamName, axisLine: { show: false, // lineStyle: { // color: 'rgba(192, 192, 102)' // } }, axisTick: { show: false }, axisLabel: { color: '#000', rotate: 40, formatter: function (value) { // 自定义文字超出部分 ... if (value.length > 5) { return `${value.slice(0, 5)}...`; } return value; } } }, legend: { data: ['正常已办', '超时已办'], bottom: '0px' }, yAxis: { type: 'value', splitLine: { show: false, lineStyle: { color: '#172749' } }, axisLine: { show: false, // lineStyle: { // color: 'rgba(192, 192, 102)' // } }, axisTick: { show: false }, }, series: [ { name: '总数', type: 'bar', stack: '', label: { show: true, position: 'top', color: '#000', }, data: totalQty, barGap: '-100%', z: -1, itemStyle: { normal: { color: '#CCCCCC'//rgba(128, 128, 128, 0.3) } }, }, { name: '正常已办', type: 'bar', stack: '总量', label: { show: true, position: 'inside', color: '#000', }, emphasis: {//折线图的高亮状态。 focus: "series",//聚焦当前高亮的数据所在的系列的所有图形。 }, data: finishQty, barGap: '-100%', z: -1, itemStyle: { // 渐变色 1、指明颜色渐变的方向 2、指明不同百分比之下颜色的值 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: "#01AEF6" }, { offset: 1, color: "rgba(16,36,95,0.6)" },//rgba(16,36,95,0.6) #9999FF ]), // normal: { // color: '#5B9BD5', // } }, }, { name: '超时已办', type: 'bar', stack: '总量', label: { show: true, position: 'inside', color: '#000', }, emphasis: {//折线图的高亮状态。 focus: "series",//聚焦当前高亮的数据所在的系列的所有图形。 }, data: overFinishQty, barGap: '-100%', z: -1, itemStyle: { // 渐变色 1、指明颜色渐变的方向 2、指明不同百分比之下颜色的值 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: "#ED7D31" }, { offset: 1, color: "#FFFF33" },//rgba(255,255,0,0.6) ]), // normal: { // color: '#ED7D31', // } }, }, ], }); } } } }); } // //工作票完成情况统计图 // workTicket = () => { // const userInfo = storage('lacal').getItem('webUserInfo').val; // let json = initFilter(this.props.login.OrgId, "", "NUM"); // this.props.dispatch({ // type: 'app/getDataByPost', // url: "FM/WorkTicketCompletion/OrderPaged", // payload: json, // onlyData: false, // onComplete: (data) => { // if (data && data.IsSuccessful) { // let teamName = []; // let wattingQty = []; // let finishQty = []; // let overFinishQty = []; // let totalQty = []; // data.Data.forEach(item => { // teamName.push(item.TEAM_NAME); // wattingQty.push(item.WAITTING_COUNT); // finishQty.push(item.FINISH_COUNT); // overFinishQty.push(item.OVER_FINISH_COUNT); // totalQty.push(item.TOTAL_COUNT); // }) // //图标2 // let myChart = echarts.init(document.getElementById('workTicket')); // // x y 用来设置柱状的大小 // const offsetX = 12; // const offsetY = 6; // // 绘制左侧面 // const CubeLeft = echarts.graphic.extendShape({ // shape: { // x: 0, // y: 0 // }, // buildPath: function (ctx, shape) { // // 会canvas的应该都能看得懂,shape是从custom传入的 // const xAxisPoint = shape.xAxisPoint; // // console.log(shape); // const c0 = [shape.x, shape.y]; // const c1 = [shape.x - offsetX, shape.y - offsetY]; // const c2 = [xAxisPoint[0] - offsetX, xAxisPoint[1] - offsetY]; // const c3 = [xAxisPoint[0], xAxisPoint[1]]; // ctx.moveTo(c0[0], c0[1]).lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath(); // } // }); // // 绘制右侧面 // const CubeRight = echarts.graphic.extendShape({ // shape: { // x: 0, // y: 0 // }, // buildPath: function (ctx, shape) { // const xAxisPoint = shape.xAxisPoint; // const c1 = [shape.x, shape.y]; // const c2 = [xAxisPoint[0], xAxisPoint[1]]; // const c3 = [xAxisPoint[0] + offsetX, xAxisPoint[1] - offsetY]; // const c4 = [shape.x + offsetX, shape.y - offsetY]; // ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath(); // } // }); // // 绘制顶面 // const CubeTop = echarts.graphic.extendShape({ // shape: { // x: 0, // y: 0 // }, // buildPath: function (ctx, shape) { // const c1 = [shape.x, shape.y]; // const c2 = [shape.x + offsetX, shape.y - offsetY]; // 右点 // const c3 = [shape.x, shape.y - offsetX]; // const c4 = [shape.x - offsetX, shape.y - offsetY]; // ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath(); // } // }); // // 注册三个面图形 // echarts.graphic.registerShape('CubeLeft', CubeLeft); // echarts.graphic.registerShape('CubeRight', CubeRight); // echarts.graphic.registerShape('CubeTop', CubeTop); // myChart.setOption({ // tooltip: { // show: true, // trigger: 'axis', // axisPointer: { // type: 'shadow' // }, // formatter: function (params, ticket, callback) { // const item = params[1]; // return item.name + ' : ' + item.value; // } // }, // grid: { // top: '12%', // left: '3%', // right: '5%', // bottom: '10%', // containLabel: true // }, // xAxis: { // type: 'category', // data: teamName, // axisLine: { // show: false, // lineStyle: { // width: 1, // color: '#344761' // } // }, // axisTick: { // show: false // }, // axisLabel: { // color: '#000', // rotate: 40, // formatter: function (value) { // 自定义文字超出部分 ... // if (value.length > 5) { // return `${value.slice(0, 5)}...`; // } // return value; // } // } // }, // legend: { // data: ['正常已办', '超时已办'], // bottom: '0px' // }, // yAxis: { // type: 'value', // name: '', // nameTextStyle: { // color: '#fff' // }, // axisLine: { // show: false, // lineStyle: { // width: 1, // color: '#344761' // } // }, // splitLine: { // show: false, // lineStyle: { // color: '#172749' // } // }, // axisTick: { // show: false // }, // axisLabel: { // color: '#000' // } // }, // series: [ // { // type: 'custom', // renderItem: (params, api) => { // const location = api.coord([api.value(0), api.value(1)]); // return { // type: 'group', // children: [ // { // type: 'CubeLeft', // barWidth: 20, // shape: { // api, // xValue: api.value(0), // yValue: api.value(1), // x: location[0], // y: location[1], // xAxisPoint: api.coord([api.value(0), 0]) // }, // style: { // fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ // { // offset: 0, // color: '#01f0ff' // }, // { // offset: 1, // color: '#005559' // } // ]) // } // }, // { // type: 'CubeRight', // shape: { // api, // xValue: api.value(0), // yValue: api.value(1), // x: location[0], // y: location[1], // xAxisPoint: api.coord([api.value(0), 0]) // }, // style: { // fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ // { // offset: 0, // color: '#01f0ff' // }, // { // offset: 1, // color: '#005559' // } // ]) // } // }, // { // type: 'CubeTop', // shape: { // api, // xValue: api.value(0), // yValue: api.value(1), // x: location[0], // y: location[1], // xAxisPoint: api.coord([api.value(0), 0]) // }, // style: { // fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ // { // offset: 0, // color: '#01f0ff' // }, // { // offset: 1, // color: '#005559' // } // ]) // } // } // ] // }; // }, // data: totalQty // }, // { // type: 'bar', // label: { // normal: { // show: true, // position: 'top', // fontSize: 16, // color: '#000', // offset: [0, -5] // } // }, // itemStyle: { // color: 'transparent' // }, // tooltip: {}, // data: totalQty // } // ] // }); // } // } // }); // } //隐患整改完成情况统计图 hiddenDangerDeal = () => { const userInfo = storage('lacal').getItem('webUserInfo').val; let json = initFilter(this.props.login.OrgId, "", "NUM"); this.props.dispatch({ type: 'app/getDataByPost', url: "FM/HiddenDangerRectification/OrderPaged", payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { this.hiddenTop = data.Data.length; let teamName = []; let wattingQty = []; let finishQty = []; let overFinishQty = []; let totalQty = []; let dataList = []; data.Data.forEach(item => { teamName.push(item.TEAM_NAME); wattingQty.push(item.WAITTING_COUNT); finishQty.push(item.FINISH_COUNT); overFinishQty.push(item.OVER_FINISH_COUNT); totalQty.push(item.TOTAL_COUNT); dataList.push({ value: item.FINISH_COUNT, name: item.TEAM_NAME }) }) //图标2 let hiddenDangerDeals = document.getElementById('hiddenDangerDeal'); if (hiddenDangerDeals) { let myChart = echarts.init(hiddenDangerDeals); myChart.setOption({ tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, }, grid: { left: '3%', right: '4%', top: '10%', bottom: '10%', containLabel: true }, xAxis: { type: 'category', data: teamName, axisLine: { show: false, // lineStyle: { // color: 'rgba(192, 192, 102)' // } }, axisTick: { show: false }, axisLabel: { color: '#000', rotate: 40, formatter: function (value) { // 自定义文字超出部分 ... if (value.length > 5) { return `${value.slice(0, 5)}...`; } return value; } } }, legend: { data: ['按时完成', '超时完成'], bottom: '0px' }, yAxis: { type: 'value', splitLine: { show: false, lineStyle: { color: '#172749' } }, axisLine: { show: false, // lineStyle: { // color: 'rgba(192, 192, 102)' // } }, axisTick: { show: false }, }, series: [ { name: '隐患总数', type: 'bar', stack: '', label: { show: true, position: 'top', color: '#000', }, data: totalQty, barGap: '-100%', z: -1, itemStyle: { normal: { color: '#CCCCCC'//rgba(128, 128, 128, 0.3) } }, }, { name: '按时完成', type: 'bar', stack: '总量', label: { show: true, position: 'inside', color: '#000', }, emphasis: {//折线图的高亮状态。 focus: "series",//聚焦当前高亮的数据所在的系列的所有图形。 }, data: finishQty, barGap: '-100%', z: -1, itemStyle: { // 渐变色 1、指明颜色渐变的方向 2、指明不同百分比之下颜色的值 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: "#99FF99" },//rgba(128,255,128) { offset: 1, color: "#333366" },//rgba(16,36,95,0.6) ]), // normal: { // color: '#ED7D31', // } }, }, { name: '超时完成', type: 'bar', stack: '总量', label: { show: true, position: 'inside', color: '#000', }, emphasis: {//折线图的高亮状态。 focus: "series",//聚焦当前高亮的数据所在的系列的所有图形。 }, data: overFinishQty, barGap: '-100%', z: -1, itemStyle: { // 渐变色 1、指明颜色渐变的方向 2、指明不同百分比之下颜色的值 color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: "#ED7D31" }, { offset: 1, color: "#FFFF33" },//rgba(255,255,0,0.6) ]), // normal: { // color: '#ED7D31', // } }, }, ], }); } } } }); } // //隐患整改完成情况统计图 // hiddenDangerDeal = () => { // const userInfo = storage('lacal').getItem('webUserInfo').val; // let json = initFilter(this.props.login.OrgId, "", "NUM"); // this.props.dispatch({ // type: 'app/getDataByPost', // url: "FM/HiddenDangerRectification/OrderPaged", // payload: json, // onlyData: false, // onComplete: (data) => { // if (data && data.IsSuccessful) { // let teamName = []; // let wattingQty = []; // let finishQty = []; // let overFinishQty = []; // let totalQty = []; // let dataList = []; // let bdata = []; // data.Data.forEach(item => { // teamName.push(item.TEAM_NAME); // wattingQty.push(item.WAITTING_COUNT); // finishQty.push(item.FINISH_COUNT); // overFinishQty.push(item.OVER_FINISH_COUNT); // totalQty.push(item.TOTAL_COUNT); // dataList.push({ value: item.TOTAL_COUNT, name: item.TEAM_NAME}) // bdata.push(1) // }) // //图标2 // let myChart = echarts.init(document.getElementById('hiddenDangerDeal')); // myChart.setOption({ // }); // } // } // }); // } // //隐患整改情况 // defectTreatment = () => { // const userInfo = storage('lacal').getItem('webUserInfo').val; // let json = initFilter(this.props.login.OrgId); // // this.props.dispatch({ // // type: 'app/getDataByPost', // // url: "FM/MainRpt/GetRNQCount", // // payload: json, // // onlyData: false, // // onComplete: (data) => { // let data = { // "IsSuccessful": true, "Data": [{ "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-08-01 00:00:00", "MONTHStr": "八月", "C_COUNT": 1, "D_COUNT": 2, "W_COUNT": 3, "T_COUNT": 4, "P_COUNT": 5, "C_F_COUNT": 6, "D_F_COUNT": 7, "W_F_COUNT": 5, "T_F_COUNT": 2, "P_F_COUNT": 1 }, // { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-09-01 00:00:00", "MONTHStr": "九月", "C_COUNT": 4, "D_COUNT": 5, "W_COUNT": 1, "T_COUNT": 3, "P_COUNT": 1, "C_F_COUNT": 4, "D_F_COUNT": 6, "W_F_COUNT": 3, "T_F_COUNT": 3, "P_F_COUNT": 1 }, // { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-10-01 00:00:00", "MONTHStr": "十月", "C_COUNT": 3, "D_COUNT": 5, "W_COUNT": 2, "T_COUNT": 4, "P_COUNT": 6, "C_F_COUNT": 3, "D_F_COUNT": 1, "W_F_COUNT": 2, "T_F_COUNT": 5, "P_F_COUNT": 2 }, // { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-11-01 00:00:00", "MONTHStr": "十一月", "C_COUNT": 2, "D_COUNT": 6, "W_COUNT": 3, "T_COUNT": 4, "P_COUNT": 1, "C_F_COUNT": 5, "D_F_COUNT": 3, "W_F_COUNT": 1, "T_F_COUNT": 5, "P_F_COUNT": 3 }, // { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-12-01 00:00:00", "MONTHStr": "十二月", "C_COUNT": 1, "D_COUNT": 4, "W_COUNT": 5, "T_COUNT": 3, "P_COUNT": 2, "C_F_COUNT": 1, "D_F_COUNT": 3, "W_F_COUNT": 6, "T_F_COUNT": 4, "P_F_COUNT": 4 }, // { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2022-01-01 00:00:00", "MONTHStr": "一月", "C_COUNT": 5, "D_COUNT": 6, "W_COUNT": 2, "T_COUNT": 1, "P_COUNT": 2, "C_F_COUNT": 4, "D_F_COUNT": 5, "W_F_COUNT": 2, "T_F_COUNT": 6, "P_F_COUNT": 5 }], "TotalCount": 0, "ErrorMessage": null // } // if (data && data.IsSuccessful) { // let month = []; // let company = []; // let department = []; // let workshop = []; // let team = []; // let personal = []; // data.Data.forEach(item => { // month.push(item.MONTHStr); // company.push(item.C_COUNT); // department.push(item.D_COUNT); // workshop.push(item.W_COUNT); // team.push(item.T_COUNT); // personal.push(item.P_COUNT); // }) // let myChart = echarts.init(document.getElementById('defectTreatment')); // myChart.setOption({ // // title: { // // text: '折线图堆叠' // // }, // tooltip: { // trigger: 'axis' // }, // legend: { // // data: ['部门'], // data: ['公司', '部门', '车间', '班组', '个人'], // bottom: '10px' // }, // grid: { // left: '3%', // right: '4%', // top: '3%', // containLabel: true // }, // toolbox: { // feature: { // // saveAsImage: {} // } // }, // xAxis: { // type: 'category', // boundaryGap: false, // data: month // }, // yAxis: { // type: 'value', // }, // series: [ // { // name: '公司', // type: 'line', // color: '#4b9bf3', // data: company // }, // { // name: '部门', // type: 'line', // color: '#d61c7e', // data: department // }, // { // name: '车间', // type: 'line', // color: '#6052ea', // data: workshop // } // , // { // name: '班组', // type: 'line', // color: '#8cc539', // data: team // } // , // { // name: '个人', // type: 'line', // color: '#FCD149', // data: personal // } // ] // }) // } // // } // // }); // } //岗位风险类别 jobType = () => { let jobTypes = document.getElementById('jobType'); if (jobType) { let myChart = echarts.init(jobTypes); myChart.setOption({ tooltip: { trigger: 'item', formatter: '{b}:({d}%)' }, legend: { bottom: '0px', // left: 'center', data: ['高空坠落', '火药爆炸', '机械伤害', '物体打击'] }, series: [ { name: '访问来源', type: 'pie', radius: ['40%', '55%'], center: ['50%', '42%'], label: { formatter: '{b}:({d}%)', rich: { a: { color: '#999', lineHeight: 22, align: 'center' }, hr: { borderColor: '#aaa', width: '100%', borderWidth: 0.5, height: 0 }, b: { fontSize: 16, lineHeight: 33 }, per: { color: '#eee', backgroundColor: '#334455', padding: [2, 4], borderRadius: 2 } } }, color: ['#CD0505', '#F6861B', '#FCD149', '#60A9F8'], data: [ { value: 335, name: '高空坠落' }, { value: 310, name: '火药爆炸' }, { value: 234, name: '机械伤害' }, { value: 135, name: '物体打击' }, ] } ] }) } } //风险类别占比 riskType = () => { let json = initFilter(this.props.login.OrgId); this.props.dispatch({ type: 'app/getDataByPost', url: "FM/RiskTypeProportion/OrderPaged", payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { let riskType = [] let color = [] let showData = [] data.Data.forEach(item => { riskType.push(item.RISK_TYPE) color.push(item.COLOR) showData.push({ value: item.COUNT, name: item.RISK_TYPE }) }) let riskTypes = document.getElementById('riskType'); if (riskTypes) { let myChart = echarts.init(riskTypes); myChart.setOption({ tooltip: { trigger: 'item', formatter: '{b}:({d}%)' }, legend: { bottom: '0px', // left: 'center', data: riskType }, series: [ { name: '访问来源', type: 'pie', radius: ['30%', '45%'], center: ['45%', '37%'], label: { formatter: '{b}:({d}%)', rich: { a: { color: '#999', lineHeight: 22, align: 'center' }, hr: { borderColor: '#aaa', width: '100%', borderWidth: 0.5, height: 0 }, b: { fontSize: 16, lineHeight: 33 }, per: { color: '#eee', backgroundColor: '#334455', padding: [2, 4], borderRadius: 2 } } }, color: color, data: showData, } ] }) } } } }); } //风险等级占比 riskLevel = () => { const userInfo = storage('lacal').getItem('webUserInfo').val; let json = initFilter(this.props.login.OrgId); this.props.dispatch({ type: 'app/getDataByPost', url: "FM/RiskLevelProportion/OrderPaged", payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { let riskLevel = [] let showData = [] let color = [] data.Data.forEach(item => { riskLevel.push(item.RISK_LEVEL) color.push(item.COLOR) showData.push({ value: item.COUNT, name: item.RISK_LEVEL }) }) let riskLevels = document.getElementById('riskLevel'); if (riskLevels) { let myChart = echarts.init(riskLevels); myChart.setOption({ tooltip: { trigger: 'item', //formatter: '{a}
{b} : {c} ({d}%)' formatter: '{b} : {c} ({d}%)' }, legend: { bottom: '0px', data: riskLevel }, series: [ { name: '主要工作分布', type: 'pie', radius: '55%', center: ['50%', '42%'], label: { formatter: '{b}:({d}%)', }, data: showData, color: color, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, //shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }); } } } }); } //主要工作分布图(饼图) mainJobPie = () => { const userInfo = storage('lacal').getItem('webUserInfo').val; let json = initFilter(this.props.login.OrgId); // this.props.dispatch({ // type: 'app/getDataByPost', // url: "FM/MainRpt/GetPersonalWorkCount", // payload: json, // onlyData: false, // onComplete: (data) => { let data = { "IsSuccessful": true, "Data": [{ "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MODULE": "安全检查", "COUNT": 3, "COLOR": "#CD0505" }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MODULE": "作业现场", "COUNT": 2, "COLOR": "#FCD149" }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MODULE": "应急管理", "COUNT": 1, "COLOR": "#60A9F8" }], "TotalCount": 0, "ErrorMessage": null } if (data && data.IsSuccessful) { let moduleData = [] let showData = [] let dataColor = [] data.Data.forEach(item => { moduleData.push(item.MODULE) showData.push({ value: item.COUNT, name: item.MODULE }) dataColor.push(item.COLOR) }) let myChart = echarts.init(document.getElementById('mainJobPie')); myChart.setOption({ tooltip: { trigger: 'item', //formatter: '{a}
{b} : {c} ({d}%)' formatter: '{b} : {c} ({d}%)' }, legend: { bottom: '10px', data: moduleData }, series: [ { name: '主要工作分布', type: 'pie', radius: '55%', center: ['50%', '42%'], label: { formatter: '{b}:({d}%)', }, data: showData, color: dataColor, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, //shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }); } // } // }); } //主要工作分布图(柱状图) delayJobBar = () => { const userInfo = storage('lacal').getItem('webUserInfo').val; let json = initFilter(this.props.login.OrgId); // this.props.dispatch({ // type: 'app/getDataByPost', // url: "FM/MainRpt/GetPersonalDelayCount", // payload: json, // onlyData: false, // onComplete: (data) => { let data = { "IsSuccessful": true, "Data": [{ "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": null, "MONTH": "2021-08-01 00:00:00", "MONTHStr": "八月", "COUNT": 1 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": null, "MONTH": "2021-09-01 00:00:00", "MONTHStr": "九月", "COUNT": 2 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": null, "MONTH": "2021-10-01 00:00:00", "MONTHStr": "十月", "COUNT": 3 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": null, "MONTH": "2021-11-01 00:00:00", "MONTHStr": "十一月", "COUNT": 4 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": null, "MONTH": "2021-12-01 00:00:00", "MONTHStr": "十二月", "COUNT": 5 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": null, "MONTH": "2022-01-01 00:00:00", "MONTHStr": "一月", "COUNT": 6 }], "TotalCount": 21, "ErrorMessage": null } if (data && data.IsSuccessful) { let monthList = [] let countList = [] let dataList = [] data.Data.forEach(item => { monthList.push(item.MONTHStr) dataList.push({ value: item.COUNT, name: item.MONTHStr }) countList.push(item.COUNT) }) this.setState({ delayData: dataList }); } } // }); // } loadWorkBench = () => { const userInfo = storage('lacal').getItem('webUserInfo').val || {}; if (!userInfo) { this.props.dispatch(routerRedux.push('/login')); return; } let json = initQueryFilter(userInfo.ORG_ID, 1, 12, "CREATE_TIME", 1); this.props.dispatch({ type: 'app/getDataByPost', url: "BR/PanelInfos/Workbench", payload: json, onlyData: false, onComplete: (data) => { if (data && data.IsSuccessful) { var tmpCharData = []; var tmpColumnData = []; var tmpColumnFields = []; if (data.Data && data.Data.OrderOnTimes) { data.Data.OrderOnTimes.forEach((n) => { let dayJson = { day: n.Time, '交付率': n.Rate, '标准': 0.8 }; tmpCharData.push(dayJson); }); } if (data.Data && data.Data.OrderTotals) { data.Data.OrderTotals.forEach((n) => { let dayJson = { name: n.Name } if (n.DayCounts) { n.DayCounts.forEach((m) => { let day = m.Day.substring(0, 10).replace('-', '').replace('-', ''); dayJson[day] = m.Count; if (tmpColumnFields.indexOf(day) < 0) { tmpColumnFields.push(day); } }); } tmpColumnData.push(dayJson); }); } this.setState({ Workbench: data.Data ? data.Data : {}, chartData: tmpCharData, columnData: tmpColumnData, columnFields: tmpColumnFields }); } } }); } //获取数据 getBaseInfoData = (pagination, key, limit) => { const current = pagination ? pagination.current : 1 const json = initFilter(this.props.login.OrgId, "", "", 1, current) //extendRule(json, "NOTICE_STATUS", 1, 0); const querySearch = this.state.querySearch; for (var item in querySearch) { if (item == 'searchName') { extendRule(json, 'NOTICE_TITLE', 9, querySearch[item]) } if (item == 'searchCode') { extendRule(json, 'CODE', 9, querySearch[item]) } if (item == 'startTime1') { extendRule(json, 'TASK_STARTDT', 6, querySearch[item]) } if (item == 'startTime2') { extendRule(json, 'TASK_STARTDT', 4, querySearch[item]) } if (item == 'endTime1') { extendRule(json, 'TASK_ENDDT', 6, querySearch[item]) } if (item == 'endTime2') { extendRule(json, 'TASK_ENDDT', 4, querySearch[item]) } if (item == 'searchStatus') { extendRule(json, 'NOTICE_STATUS', 1, querySearch[item]) } } json.Limit = limit; //json.Limit = 10; json.Parameter1 = key; //1待办事项2已办事项3今日新增4待办超时 this.props.dispatch({ type: 'app/getDataByPost', url: 'FM/FMNotificationTask/HomeOrderPaged', payload: json, onlyData: false, onComplete: (re) => { if (re && re.IsSuccessful && re.Data.newData) { this.state.tableData[0].total = re.Data.todoCount; this.state.tableData[1].total = re.Data.timeOverCount; this.state.tableData[2].total = re.Data.doneCount; this.state.tableData[3].total = re.Data.todayNewCount; if (limit != null || limit != undefined) { this.setState({ retData: re.Data.newData, }) } else { var pageInfo = {} pageInfo.current = current; pageInfo.total = Math.ceil(re.Data.TotalCount, 10); this.setState({ retDataAll: re.Data.newData, pagination: pageInfo, }) } } } }) }; clearData = () => { let newtmpData = { ...this.state.tmpData } newtmpData["data"].id = ''; newtmpData["data"].homeReload = false; newtmpData.formCode = ''; this.setState({ visible: false, tmpData: [],//newtmpData }) } clearScoreData = () => { this.setState({ scoreVisible: false, // standardScore: [],//newtmpData }) } clearScoreTotalData = () => { this.setState({ scoreTotalVisible:false // standardScore: [],//newtmpData }) } clearScoreNaData = () => { this.setState({ scoreNaVisible:false // standardScore: [],//newtmpData }) } handleCancel = () => { // 退出弹窗 this.getBaseInfoData(1, this.state.tableKey, 5); this.clearData(); } closeModal = () => { // 退出弹窗 this.clearData(); } showEditModal = (dataId, formCode, TaskID, title, taskCode) => { this.props.dispatch({ type: 'app/getDataByPost', url: 'BI/BIController/getVersion', onComplete: (ret) => { if (ret > config.version) { window.localStorage.clear() message.success('清除成功,即将重新加载页面', 2, () => { setTimeout(() => window.location.reload(true), 500) }) } } }) const newtmpData = { data: { id: dataId, TaskID: TaskID, onCancel: this.handleCancel, taskCode: taskCode, tableKey: this.state.tableKey, homeReload: true }, formCode: formCode, } this.setState({ noticeTitle: title, taskCode: taskCode, tmpData: newtmpData, currActivatedMenu: '' }, () => this.setState({ visible: true })); } showTodayModal = (dataId, formCode, TaskID, title, taskCode, taskStartdt, taskStatus) => { const newtmpData = { data: { id: dataId, TaskID: TaskID, onCancel: this.handleCancel, taskCode: taskCode, tableKey: this.state.tableKey, noticeTitle: title, taskStartdt: taskStartdt, taskStatus: taskStatus, homeReload: true }, formCode: 'PF135', } this.setState({ noticeTitle: "今日提醒", taskCode: taskCode, tmpData: newtmpData, currActivatedMenu: '' }, () => this.setState({ visible: true })); } setMessageData = (dataSource) => { const data = dataSource ? dataSource : this.props.taskData; } //点击切换四个统计模块更改列表数据 totalModuleClick = (item) => { const { tableData } = this.state; tableData.map((_item, i) => { if (_item.key == item.key) { if (item.key == '2') { this.state.columns = [ { width: "450px", title: '任务名称', dataIndex: 'NOTICE_TITLE', key: 'NOTICE_TITLE', render: (text, record) => ( this.showEditModal(record.SOURCE_DATA_ID, record.SOURCE_FORMCODE, record.ID, record.NOTICE_TITLE, record.CODE)}>{record.NOTICE_TITLE} ), }, { title: '开始时间', dataIndex: 'TASK_STARTDT', key: 'TASK_STARTDT' }, { title: '结束时间', dataIndex: 'TASK_ENDDT', key: 'TASK_ENDDT' }, { title: '办结时间', dataIndex: 'TASK_DT', key: 'TASK_DT', },] } else if (item.key == '3') { this.state.columns = [ { title: '提醒内容', dataIndex: 'NOTICE_TITLE', key: 'NOTICE_TITLE', render: (text, record) => ( this.showTodayModal(record.SOURCE_DATA_ID, record.SOURCE_FORMCODE, record.ID, record.NOTICE_TITLE, record.CODE, record.TASK_STARTDT, record.NOTICE_STATUS)}>{record.NOTICE_TITLE} ), }, { width: "150px", title: '提醒时间', dataIndex: 'TASK_STARTDT', key: 'TASK_STARTDT' }, { width: "150px", title: '状态', dataIndex: 'NOTICE_STATUS', key: 'NOTICE_STATUS', render: (text, record) => this.ShowStatus(record) },] } else { this.state.columns = [ { width: "450px", title: '任务名称', dataIndex: 'NOTICE_TITLE', key: 'NOTICE_TITLE', render: (text, record) => ( this.showEditModal(record.SOURCE_DATA_ID, record.SOURCE_FORMCODE, record.ID, record.NOTICE_TITLE, record.CODE)}>{record.NOTICE_TITLE} ), }, { title: '开始时间', dataIndex: 'TASK_STARTDT', key: 'TASK_STARTDT' }, { title: '结束时间', dataIndex: 'TASK_ENDDT', key: 'TASK_ENDDT' }, { title: '预警状态', dataIndex: 'NOTICE_TYPE', key: 'NOTICE_TYPE', render: (text, record) => this.ShowState(record) },] } _item.iconDisplay = 'block'; this.setState({ tableKey: item.key }) if (window.navigator.userAgent.indexOf("Windows") < 1) { this.getBaseInfoData(1, item.key, 10); } else { this.getBaseInfoData(1, item.key, 5); } } else { _item.iconDisplay = 'none'; } }); }; // 双击切换四个统计模块获取全部信息 totalMoonDoubleClick = (item) => { const { tableData } = this.state; tableData.map((_item) => { if (_item.key == item.key) { if (item.key == '2') { this.state.searchColumns = [ { width: "450px", title: '任务名称', dataIndex: 'NOTICE_TITLE', key: 'NOTICE_TITLE', render: (text, record) => ( this.showEditModal(record.SOURCE_DATA_ID, record.SOURCE_FORMCODE, record.ID, record.NOTICE_TITLE, record.CODE)}>{record.NOTICE_TITLE} ), }, { title: '开始时间', dataIndex: 'TASK_STARTDT', key: 'TASK_STARTDT' }, { title: '结束时间', dataIndex: 'TASK_ENDDT', key: 'TASK_ENDDT' }, { title: '办结时间', dataIndex: 'TASK_DT', key: 'TASK_DT', },] this.setState({ searchVisible: true, searchTodayVisible: false, querySearch: {} }) } else if (item.key === '3') { this.state.searchColumns = [ { title: '提醒内容', dataIndex: 'NOTICE_TITLE', key: 'NOTICE_TITLE', render: (text, record) => ( this.showTodayModal(record.SOURCE_DATA_ID, record.SOURCE_FORMCODE, record.ID, record.NOTICE_TITLE, record.CODE, record.TASK_STARTDT, record.NOTICE_STATUS)}>{record.NOTICE_TITLE} ), }, { width: "200px", title: '提醒时间', dataIndex: 'TASK_STARTDT', key: 'TASK_STARTDT' }, { width: "150px", title: '状态', dataIndex: 'NOTICE_STATUS', key: 'NOTICE_STATUS', render: (text, record) => this.ShowStatus(record) },] this.setState({ searchVisible: false, searchTodayVisible: true, querySearch: {} }) } else { this.state.searchColumns = [ { width: "450px", title: '任务名称', dataIndex: 'NOTICE_TITLE', key: 'NOTICE_TITLE', render: (text, record) => ( this.showEditModal(record.SOURCE_DATA_ID, record.SOURCE_FORMCODE, record.ID, record.NOTICE_TITLE, record.CODE)}>{record.NOTICE_TITLE} ), }, { title: '开始时间', dataIndex: 'TASK_STARTDT', key: 'TASK_STARTDT' }, { title: '结束时间', dataIndex: 'TASK_ENDDT', key: 'TASK_ENDDT' }, { title: '预警状态', dataIndex: 'NOTICE_TYPE', key: 'NOTICE_TYPE', render: (text, record) => this.ShowState(record) },] this.setState({ searchVisible: true, searchTodayVisible: false, querySearch: {} }) } } }) this.setState({ tableData, currentpageIndex: item.key }, () => { this.getBaseInfoData(1, item.key); }) } // 开始时间 selectChange = (value) => { const { querySearch } = this.state querySearch.searchStatus = value; this.setState({ querySearch }, () => { }) } // 开始时间 startChange = (dates, dateStr) => { const { querySearch } = this.state if (dates.length != 2) { // querySearch['startTime1'] = '' // querySearch['startTime2'] = '' this.setState({ visibleStartTime: [], querySearch: {} }) return; } this.state.visibleStartTime = dates querySearch.startTime1 = this.state.visibleStartTime[0].format("YYYY-MM-DD HH:mm:ss") querySearch.startTime2 = this.state.visibleStartTime[1].format("YYYY-MM-DD HH:mm:ss") this.setState({ querySearch // visibleStartTime: dates }, () => { }) } // 结束时间 endChange = (dates, dateStr) => { const { querySearch } = this.state if (dates.length != 2) { // querySearch['endTime1'] = '' // querySearch['endTime2'] = '' this.setState({ visibleEndTime: [], querySearch: {} }) return; } this.state.visibleEndTime = dates querySearch.endTime1 = this.state.visibleEndTime[0].format("YYYY-MM-DD HH:mm:ss") querySearch.endTime2 = this.state.visibleEndTime[1].format("YYYY-MM-DD HH:mm:ss") this.setState({ querySearch }) } // 搜索 handleSearch = (item) => { this.getBaseInfoData(1, item, null); } // input输入 vauleChange = (e) => { const { querySearch } = this.state if (e.target.value) { switch (e.target.name) { case 'searchName': querySearch[e.target.name] = e.target.value this.setState({ querySearch }) break case 'searchCode': querySearch[e.target.name] = e.target.value this.setState({ querySearch }) break case 'searchType': querySearch[e.target.name] = e.target.value this.setState({ querySearch }) break case 'searchContent': querySearch[e.target.name] = e.target.value this.setState({ querySearch }) break } } else { this.setState({ querySearch: {} }) } } closeModal = () => { this.setState({ searchVisible: false, searchTodayVisible: false, }) } ShowState(obj) { var thisResult = (Date.parse(obj.TASK_ENDDT) - Date.parse(Date())) / 3600 / 1000; if (thisResult > 0) { return ('正常'); } else { return (超期); } } ShowStatus(obj) { if (obj.NOTICE_STATUS === 0) { return (未读); } else if(obj.NOTICE_STATUS === 3){ return ('已读'); } else { return ('已办'); } } handleSelect = (e) => { const { querySearch } = this.state if (e != undefined) { querySearch.status = e } else { querySearch.status = '' } this.setState({ querySearch }) } showDescriptionModal = (value) => { if (value === "1") { this.setState({ isModalVisible: true }); } else if (value === "2") { this.totalTime(); } else if (value === "3") { this.setState({ isModalVisible3: true }); } else if (value === "4") { this.setState({ isModalVisible4: true }); } else if (value === "5") { this.setState({ isModalVisible5: true }); } else if (value === "6") { this.setState({ isModalVisible6: true }); } else if (value === "risk") { this.setState({ isModalVisibleRisk: true }); } }; closeDescriptionModal = () => { this.setState({ isModalVisible: false, isModalVisible2: false, isModalVisible3: false, isModalVisible4: false, isModalVisible5: false, isModalVisible6: false, isModalVisibleRisk: false, }); }; showStandardScoreTotalModal = () => { // const newtmpData = { // data: { // tempData:this.state.standardScore , onCancel: this.handleCancel, noticeTitle: "标准化得分明细", // homeReload: true // }, // formCode: 'PF136', // } this.setState({ scoreTotalVisible: true }); } showStandardScoreModal = (item) => { // const newtmpData = { // data: { // tempData:this.state.standardScore , onCancel: this.handleCancel, noticeTitle: "标准化得分明细", // homeReload: true // }, // formCode: 'PF136', // } let temp = false; if (this.state.standardScore && this.state.standardScore.Nav_Details) { this.state.standardScore.Nav_Details.forEach(t => { if (t.THREE_ELEMENTS_ID) { temp = true; } }); } if(item) { let dataTemp=this.state.standardScore.Nav_Details.filter(t=>t.NON_CONFORMANCE !=null && t.NON_CONFORMANCE !="") let tmpData = dataTemp.map((item, i) => { item['ROW_NO'] = i + 1; return item; }); let aa={"CONTENTS":"合计扣分:","NON_STANDARDIZED_SCORE":this.state.standardScore.NON_STANDARDIZED_SCORE} tmpData.push(aa) this.setState({ isNaN: temp, standardScoreNaN:tmpData, scoreNaVisible: true }); } else { let dataTemp=this.state.standardScore.Nav_Details; let tmpData = dataTemp.map((item, i) => { item['ROW_NO'] = i + 1; return item; }); let aa={"DESCRIPTION":"合计:","STANDARDIZED_SCORE":this.state.standardScore.STAND_TOTAL,"RESULT_SCORE":this.state.standardScore.RESULT_TOTAL,"NON_CONFORMANCE":"标准化得分:"+this.state.standardScore.STANDARDIZED_RESULT} tmpData.push(aa) this.setState({ isNaN: temp, standardScoreTemp:tmpData, scoreVisible: true }); } } render() { const { tableData } = this.state; const thingsData = this.state.delayData; const settings = { dots: true, autoplay: false, infinite: true, speed: 500, slidesToShow: 1, slidesToScroll: 1, className: styles.slideHeight, fade: true, }; const empty = ( ); return (
{/*
*/}

计算规则:完成率 = 已办数 / 总数 * 100%

计算规则:完成率 = (班前会议已办数 + 岗位当班已办数 + 岗位交接已办数) / (班前会议总数 + 岗位当班总数 + 岗位交接总数) * 100%

统计时间:{this.tempTime} ~ 至今

计算规则:待办 = 总数 - 正常已办 - 超时已办

公司、部门、车间、班组、个人,每个月的隐患整改数量

计算规则:占比率= 当前风险类别数量 / 风险类别总数 * 100%

计算规则:占比率 = 当前风险等级数量 / 风险等级总数 * 100%

计算规则:待办 = 隐患总数 - 按时完成 - 超时完成

{/* 五个图标模块 */}
标准化得分
this.showStandardScoreTotalModal()}>{this.state.stardardScoreQty}
{/* {this.state.stardardScoreQty} */} {/*
*/}

安全第一、综合治理、控制风险、科学发展。

以人为本、关注健康、依法治企、安全发展。

安全第一,预防为主,科学管理,持续改进。

{ tableData.map((item, key) => { return (
this.totalModuleClick(item)} onDoubleClick={() => this.totalMoonDoubleClick(item)} style={{ padding: '0px', background: `url(${item.bgImg}) 0 0 no-repeat`, height: '126px', backgroundSize: '100% 100%', borderRadius: '10px', cursor: 'pointer' }} >
{item.title}
9999 ? 'backlog-style4' : 'backlog-style'}>{item.total}
) }) } {/* 通知 */} {/*
通知 更多
1工程整改截止时间20200622
2工程整改截止时间20200622
3工程整改截止时间20200622
*/}
{this.state.departmentName}作业完成情况 this.showDescriptionModal("1")}>详细说明
{/* 列表 */}
e.ID} dataSource={this.state.retData} columns={this.state.columns} pagination={false} loading={this.state.showLoading} size="small" padding="100px" />
this.getBaseInfoData(num, this.state.currentpageIndex, null)} loading={this.state.showLoading} size="small" />
{/* */}
this.getBaseInfoData(num, this.state.currentpageIndex, null)} loading={this.state.showLoading} size="small" /> {/* 岗位风险类别 */}
班组作业完成率TOP {this.teamTop} this.showDescriptionModal("2")}>详细说明

{/* 工作票完成情况前十 */}{/* 隐患整改完成情况排名前十 */}
工作票完成数TOP {this.jobTop} this.showDescriptionModal("3")}>详细说明

{/*
隐患整改情况 this.showDescriptionModal("4")}>详细说明

*/}
{/* 工作票完成情况前十 */} {/*
工作票完成数排名前十
*/} {/* 隐患整改情况 */}
隐患整改完成情况TOP {this.hiddenTop} this.showDescriptionModal("risk")}>详细说明

{/*
隐患整改情况 this.showDescriptionModal("4")}>详细说明

*/}
{/* 风险类别占比、风险等级占比 */}
{/* { return { name: '超期数量', value: value }; }]} > */}
) } } export default connect(({ login, app }) => ({ login, app }))(Home)