import React, { useState, useEffect, useRef, Component } from "react"; import { connect } from "dva"; import { initFilter, extendOrder, guid } from "../../../utils/common"; import { Row, Col, Select, Modal, Table, Button, DatePicker, message } from "antd"; import echarts from "echarts"; // 年度安全检查统计 弹窗 年度安全检查统计 按月 按生产单元 class BI056Dilg1_1 extends React.Component { constructor(props) { super(props); var month = (new Date()).getMonth() + 1 var selectSeason = 1 var isShowbtn2 = false var isShowbtn3 = false var isShowbtn4 = false switch (month) { case 4: case 5: case 6: selectSeason = 2 isShowbtn2 = true break; case 7: case 8: case 9: selectSeason = 3 isShowbtn2 = true isShowbtn3 = true break; case 10: case 11: case 12: selectSeason = 4 isShowbtn2 = true isShowbtn3 = true isShowbtn4 = true break; } this.state = { ColorShow: this.props.data.ColorShow,// ["#c02e30", "#f7aa52", "#fbe06a", "#5185f3", "#EF9494", "#51b5f3"], month: month, barWidth: this.props.data.barWidth, seasonIndex: selectSeason, isShowbtn2: isShowbtn2, isShowbtn3: isShowbtn3, isShowbtn4: isShowbtn4, dtStart: null,//开始时间 dtEnd: null,//结束时间 mineType: 0,//生产单元 detailForm: { formCode: "", title: "", }, Data: { legendName: ["公司级", "部门级", "车间级", "班组级"], axisLabelMonth: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], mineTypeName: ["露天矿", "选矿厂", "尾矿库", "职能部门"], checkCountMonth: [ //有几月的数据就统计到几月 时间不到不统计 也不能放入0 // 公司级 、 部门级 车间级 班组级 各一个数组 // [公司级露天矿1月数据,公司级选矿厂1月数据,公司级尾矿库1月数据,公司级职能部门1月数据 ,公司级露天矿2月数据,公司级选矿厂2月数据,公司级尾矿库2月数据,公司级职能部门2月数据] // 公司级 [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12], // 部门级 [4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], // 车间级 [28, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // 班组级 [55, 56, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60] ] } } } componenthidMount() { // this.getBaseInfoData(); this.getBaseInfoDataOnline(); } componentDidMount() { // this.getBaseInfoData(); this.getBaseInfoDataOnline(); } //获取数据 getBaseInfoDataOnline = (mineType, seasonIndex) => { const json = initFilter(this.props.login.OrgId); // extendOrder(json, "CREATE_TIME", 1); json.Parameter1 = mineType; json.Keyword = (seasonIndex == undefined ? this.state.seasonIndex : seasonIndex) this.props.dispatch({ type: "app/getDataByPost", url: "BI/BISafe/GetBI056_1_1", payload: json, onlyData: false, onComplete: (ret) => { if (ret && ret.IsSuccessful) { this.setState({ //设置setState全局变量 Data: { legendName: ret.Data.lisLevelOrder,// ["公司级", "部门级", "车间级", "班组级"], axisLabelMonth: this.state.Data.axisLabelMonth,// ret.Data.lisMineTypeOrder,//["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], mineTypeName: ret.Data.lisMineTypeOrder,//["露天矿", "选矿厂", "尾矿库", "职能部门"], checkCountMonth: ret.Data.Count,// [ }, //将ret对象赋值给data, data供页面调用 }) this.CheckCount(this.state.Data, this.state.seasonIndex - 1); } else { message.error("获取信息失败,请刷新后再试!"); } }, }); }; getBaseInfoData = (mineType) => { this.CheckCount(this.state.Data, this.state.seasonIndex - 1); }; onSelectChange(seasonIndex) { // this.CheckCount(this.state.Data, seasonIndex - 1); this.getBaseInfoDataOnline(null, seasonIndex) }; // seasonIndex 从0开始 CheckCount = (Data, seasonIndex) => { let divShow = document.getElementById("divShow"); if (divShow) { let myChart = echarts.init(divShow); // 3 一个季度 3个月 var axisLabelMonth = [] for (let i = 0; i < 3; i++) { axisLabelMonth.push((i + 1 + seasonIndex * 3) + '月'); } var xAxisName = [] for (let i = 0; i < 3; i++) { for (let j = 0; j < Data.mineTypeName.length; j++) { xAxisName.push((i + 1 + seasonIndex * 3) + '月 ' + Data.mineTypeName[j])//3个月一图表 } } const labelOption = { show: true, position: 'top', formatter: '{c}', textStyle: { fontSize: 12, // 字体大小 color: '#333', // 字体颜色 } }; var month = this.state.month var seriesShow = [] for (let i = 0; i < Data.mineTypeName.length; i++) { var seriesData = []//数据 在每组数据中获取 Data.checkCountMonth[i] var dateIndexMin = 0 var dateIndexMax = 0 if ((seasonIndex * 3) < month) { dateIndexMin = (seasonIndex * 3) * Data.mineTypeName.length // 12 = 3*Data.mineTypeName.length dateIndexMax = (dateIndexMin + 12) > (month * Data.mineTypeName.length) ? (month * Data.mineTypeName.length) : (dateIndexMin + 12) } else { dateIndexMin = (seasonIndex * 3) * Data.mineTypeName.length dateIndexMax = month * Data.mineTypeName.length if (dateIndexMin > dateIndexMax) { dateIndexMin = dateIndexMax } } // for (let j = dateIndexMin; j < dateIndexMax; j++) { // if (Data.checkCountMonth[i].length > j) { // seriesData.push(Data.checkCountMonth[i][j]) // } // } seriesData = Data.checkCountMonth[i] seriesShow.push({ name: Data.legendName[i], barWidth: this.state.barWidth, type: 'bar', barGap: 0, label: labelOption, emphasis: { focus: 'series' }, data: seriesData, itemStyle: { color: this.state.ColorShow[i] }, }) } myChart.setOption( { tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' }, }, legend: { left: "center", align: "left", bottom: "-2%", textStyle: { color: "#000", }, itemWidth: 10, itemHeight: 10, data: Data.legendName }, xAxis: [ { type: 'category', axisTick: { show: false }, data: xAxisName, axisLine: { lineStyle: { color: "#0c3b71", }, }, axisLabel: { show: true, color: "rgb(170,170,170)", interval: 0, textStyle: { lineHeight: 14, }, formatter: function (param) { return param.split("月")[1];//X轴显示 把月份去除 加是以为 鼠标事件要显示月份 }, }, }, { type: 'category', position: 'bottom', // 将分组x轴位置定至底部,不然默认在顶部 offset: 40, // 向下偏移,使分组文字显示位置不与原x轴重叠 axisLine: { show: false // 隐藏分组x轴的轴线 }, axisTick: { show: true, length: 40, // 延长刻度线做分组线 inside: true, // 使刻度线相对轴线在上面与原x轴相接,默认在轴线下方 // lineStyle: { // color: '#ff9800' // }, // 非必须,仅为了演示,明显标示出分组刻度线 }, axisLabel: { inside: true, // 使刻度名称相对轴线在上面与原x轴相接,默认在轴线下方 interval: 0, // 强制显示全部刻度名 formatter: function (val, index) { // console.log('测试999 val--- ', val); // console.log('测试999 index--- ', index); return ' ' + val // 这儿可以根据 返回 空字符串,来调整 第二个 x 轴值出现的位置。 } }, data: axisLabelMonth// ['1月', '2月','3月'] } ], yAxis: [ { type: 'value' } ], series: seriesShow }, true ); } }; render() { return (