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 } 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'; 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, }); }; class HomeMobile extends React.Component { constructor(props) { super(props); this.state = { visible: false, noticeTitle: '', tmpData: {}, tableKey: "1", pagination: {}, retData: [], chartData: [], columnData: [], columnFields: [], delayData: [], Workbench: { StockDetail: [], ApprovalCount: 0, InComingCount: 0, OutingCount: 0, ProductingCount: 0 },//工作台模型 showLoading: false, //待办事项数据刷新提示 searchVisible: false, //弹窗显示 columns: [ // { // title: '消息编号', // dataIndex: 'CODE', // key: 'CODE' // }, { 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: 'operation', render: (text, record) => this.ShowState(record) }, ], searchColumns: [ // { // title: '消息编号', // dataIndex: 'CODE', // key: 'CODE' // }, { 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: 'operation', render: (recode) => this.ShowState(recode) }, ], tableData: [{//工作台四个展示模块 key: '1', bgImg: backlog, title: '待办事项', total: '0', iconImg: backlog_i, iconDisplay: 'block', }, { key: '2', bgImg: flow, title: '已办事项', total: '0', iconImg: flow_i, iconDisplay: 'none', }, { key: '3', bgImg: finished, title: '今日新增', total: '0', iconImg: finished_i, iconDisplay: 'none', } , { key: '4', bgImg: remind, title: '待办超时', total: '0', iconImg: remind_i, iconDisplay: 'none', } ], visibleTitle: '',//点击title isSearch: false, // 是否搜索 querySearch: {},//搜索集合 visibleStartTime: [], visibleEndTime: [], currentpageIndex: "1" }; }; componentDidMount() { this.getBaseInfoData(1, "1", 5); //this.setMessageData(); //this.targetCheck();//个人指标考核(统计图) //this.defectTreatment();//隐患整改(统计图) //this.jobType();//岗位风险类别(统计图) //this.mainJobPie();//主要工作分布(饼图) //this.delayJobBar();// 超期事务(柱状图图) //定时器功能,暂时不开启 //this.timerID = setInterval(() => this.reloadData(), 50000); //this.showModalSign(); //验证是否有上传签名 this.showModalSign(); }; 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'); } } }); }; //个人指标考核 targetCheck = () => { let myChart = echarts.init(document.getElementById('targetCheck')); myChart.setOption({ tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { left: '3%', right: '4%', top: '3%', containLabel: true }, xAxis: { type: 'value' }, legend: { data: ['加分', '减分'], bottom: '10px' }, yAxis: { type: 'category', axisTick: { show: false }, axisLine: { show: false }, data: ["安全教育参加情况", "安全活动参加情况", "'三违'行为", "事故事件(否决项)"] }, series: [ { name: '加分', type: 'bar', stack: '总量', label: { show: true, position: 'inside', color: '#000' }, color: '#5B9BD5', data: [28, 56, 7, ''] }, { name: '减分', type: 'bar', stack: '总量', label: { show: true, position: 'inside', color: '#000' }, color: '#ED7D31', data: [-2, -4, -3, ''] }, ], }); } //隐患整改情况 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": 0, "D_COUNT": 0, "W_COUNT": 0, "T_COUNT": 0, "P_COUNT": 0, "C_F_COUNT": 0, "D_F_COUNT": 0, "W_F_COUNT": 0, "T_F_COUNT": 0, "P_F_COUNT": 0 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-09-01 00:00:00", "MONTHStr": "九月", "C_COUNT": 0, "D_COUNT": 0, "W_COUNT": 0, "T_COUNT": 0, "P_COUNT": 0, "C_F_COUNT": 0, "D_F_COUNT": 0, "W_F_COUNT": 0, "T_F_COUNT": 0, "P_F_COUNT": 0 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-10-01 00:00:00", "MONTHStr": "十月", "C_COUNT": 0, "D_COUNT": 0, "W_COUNT": 0, "T_COUNT": 0, "P_COUNT": 0, "C_F_COUNT": 0, "D_F_COUNT": 0, "W_F_COUNT": 0, "T_F_COUNT": 0, "P_F_COUNT": 0 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-11-01 00:00:00", "MONTHStr": "十一月", "C_COUNT": 0, "D_COUNT": 0, "W_COUNT": 0, "T_COUNT": 0, "P_COUNT": 0, "C_F_COUNT": 0, "D_F_COUNT": 0, "W_F_COUNT": 0, "T_F_COUNT": 0, "P_F_COUNT": 0 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2021-12-01 00:00:00", "MONTHStr": "十二月", "C_COUNT": 0, "D_COUNT": 0, "W_COUNT": 0, "T_COUNT": 0, "P_COUNT": 0, "C_F_COUNT": 0, "D_F_COUNT": 0, "W_F_COUNT": 0, "T_F_COUNT": 0, "P_F_COUNT": 0 }, { "USER_ID": "37c527b6-86cf-4549-8b2d-8528af5600d1", "DEPARTMENT_ID": "e3061909-1a7e-b60c-bc71-1845b79c4a11", "MONTH": "2022-01-01 00:00:00", "MONTHStr": "一月", "C_COUNT": 0, "D_COUNT": 0, "W_COUNT": 0, "T_COUNT": 0, "P_COUNT": 0, "C_F_COUNT": 0, "D_F_COUNT": 0, "W_F_COUNT": 0, "T_F_COUNT": 0, "P_F_COUNT": 0 }], "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 } ] }) } // } // }); } //获取数据 getBaseInfoData = (pagination, key, limit) => { const current = pagination ? pagination.current : 1 const json = initFilter(this.props.login.OrgId, "", "CODE", 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]) } } json.Limit = limit; json.Parameter1 = key;//1待办事项2已办事项3今日新增4待办超时 this.props.dispatch({ type: 'app/getDataByPost', url: 'FM/FMNotificationTask/OrderPaged', 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.doneCount; this.state.tableData[2].total = re.Data.todayNewCount; this.state.tableData[3].total = re.Data.timeOverCount; 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; this.setState({ visible: false, tmpData: newtmpData, }) } handleCancel = () => { // 退出弹窗 this.getBaseInfoData(1, this.state.tableKey, 5); this.clearData(); } closeModal = () => { // 退出弹窗 this.clearData(); } showEditModal = (dataId, formCode, TaskID, title, taskCode) => { const newtmpData = { data: { id: dataId, TaskID: TaskID, onCancel: this.handleCancel, taskCode: taskCode, homeReload: true }, formCode: formCode, } this.setState({ noticeTitle: title, taskCode: taskCode, tmpData: newtmpData }, () => 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) { _item.iconDisplay = 'block'; this.setState({ tableKey: item.key }) this.getBaseInfoData(1, item.key, 5); } else { _item.iconDisplay = 'none'; } }); }; // 双击切换四个统计模块获取全部信息 totalMoonDoubleClick = (item) => { const { tableData } = this.state; tableData.map((_item) => { if (_item.key == item.key) { this.setState({ searchVisible: true, querySearch: {} }) } }) this.setState({ tableData, currentpageIndex: item.key }, () => { this.getBaseInfoData(1, item.key); }) } // 开始时间 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 }) } ShowState(obj) { var thisResult = (Date.parse(obj.TASK_ENDDT) - Date.parse(Date())) / 3600 / 1000; if (thisResult > 0) { return ('正常'); } else { return (超期); } } handleSelect = (e) => { const { querySearch } = this.state if (e != undefined) { querySearch.status = e } else { querySearch.status = '' } this.setState({ querySearch }) } 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 }; return (
{/* 五个图标模块 */}
标准化得分
81.72

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

{ tableData.map((item) => { 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}
{item.total}
) }) }
{/* 通知 */}
{/* 列表 */}
{/* */}
this.getBaseInfoData(num, this.state.currentpageIndex, null)} loading={this.state.showLoading} size="small" /> ) } } export default connect(({ login }) => ({ login }))(HomeMobile)