import React, { Component } from "react"; import style from "../index.less"; import { Radio} from '@commonComp'; import echarts from 'echarts'; import config from "@config"; import 'zrender/lib/svg/svg'; /** * 来源于后台数据 * 图表类型 * * * **/ class ChartItem extends Component { constructor(props) { super(props); this.getContainers = this.getContainers.bind(this); this.rangChange = this.rangChange.bind(this); this.getXAxisArr = this.getXAxisArr.bind(this); } getXAxisArr(type){ const endDate = this.props.endDate; let now = endDate?new Date(endDate).getTime():new Date().getTime(); let arr = [],temp=0; //近一周 switch(type){ case 'week': for(let i=0;i<7;i++){ temp=i*1000*60*60*24; arr.unshift(...this.getDayHours(now-temp,true)); } break; case 'month': for(let i=0;i<30;i++){ temp=i*1000*60*60*24; arr.unshift(this.getDayHours(now-temp)); } break; case 'sixMonth': for(let i=0;i<180;i++){ temp=i*1000*60*60*24; arr.unshift(this.getDayHours(now-temp)); } break; case 'year': for(let i=0;i<365;i++){ temp=i*1000*60*60*24; arr.unshift(this.getDayHours(now-temp)); } break; default: } return arr; } getDayHours(time,isHour){ const year = new Date(time).getFullYear(); const month = new Date(time).getMonth()+1; const date = new Date(time).getDate(); const hour = new Date(time).getHours(); let arr=[],temp=''; const str= year+'-'+(month<10?'0'+month:month)+'-'+(date<10?'0'+date:date); if(isHour){ for(let i=0;i<24;i++){ temp = hour-i>-1?hour-i:hour-i+24; arr.unshift(str+" "+(temp<10?'0'+temp:temp)); } return arr; }else{ return str; } } rangChange(type,i){ const {initFn,handleChange,data,pindex} = this.props; const times = this.getXAxisArr(type); const startTime=times[0]; const endTime=times[times.length-1]; const range = [startTime,endTime]; const temp=this.props.timeTypes; if(!data[startTime+endTime]){ initFn&&initFn({range,rangeType:type,index:i,pindex,getNew:false}); } handleChange&&handleChange(Object.assign(temp,{[i]:type})); } getContainers(){ const timeTypes = this.props.timeTypes; const range = this.getXAxisArr(config.chartDismen); const obj = this.props.data[range[0]+range[range.length-1]]; const {endDate} = this.props; let arr = []; for(let i in obj){ arr.push() } return arr; } componentDidMount(){ const {initFn,pindex} = this.props; const type = config.chartDismen; const times = this.getXAxisArr(config.chartDismen); const startTime=times[0]; const endTime=times[times.length-1]; const range = [startTime,endTime]; initFn&&initFn({range,rangeType:type,pindex,getNew:true}); } render() { const {title} = this.props; return

{title}

{this.getContainers()}
; } } class Chart extends Component{ constructor(props) { super(props); this.state={ chartObj:null, //timeRange:'year', week:props.getXAxisArr('week'), month:props.getXAxisArr('month'), sixMonth:props.getXAxisArr('sixMonth'), year:props.getXAxisArr('year') }; this.drawChart = this.drawChart.bind(this); this.timeSwitch = this.timeSwitch.bind(this); } drawChart(){ const {index,data,getXAxisArr,type,endDate} = this.props; const xAxis = getXAxisArr(type); const id = endDate?'chart'+endDate+index:'chart'+index; let series = [],names=[],inx=-1; let myChart = echarts.init(document.getElementById(id) ,null, {renderer: 'svg'}); const interval = { week:24, month:4, sixMonth:9, year:60 }; data&&data.map((it)=>{ let values=new Array(); let name=''; it&&it.creatTime.map((x,i)=>{ inx=xAxis.findIndex((a)=>{ name=type=='week'?x.substr(0,13):x.substr(0,10); return a==name; }); //日期对应横坐标的位置 if(inx!=-1){ values[inx] = it.indexValue[i]; //值对应横坐标的位置 } }); names.push(it.itemName); series.push({ name: it.itemName, type: 'line', data: values, showAllSymbol:true }); }); // 指定图表的配置项和数据 var option = { tooltip: { trigger: 'axis' }, legend: { data:names, bottom:210 }, grid:{ top:80 }, xAxis: { type: 'category', boundaryGap: false, data: xAxis, splitLine:{ show:false }, axisPointer:{ //show:false }, axisTick:{ show:false, interval:interval[type] }, axisLabel:{ show:true, showMaxLabel:true, interval:interval[type], rotate:65, fontSize:10 } }, yAxis: { type: 'value', axisTick:{ show:false }, axisLabel:{ show:true, showMaxLabel:true } }, series: series }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); } timeSwitch(type){ const {handleRangeChange,index} = this.props; handleRangeChange&&handleRangeChange(type,index); const that=this; setTimeout(()=>{ that.drawChart(); },300); } componentDidMount(){ this.drawChart(); } render(){ const {type,index,endDate} = this.props; return
this.timeSwitch("year")}>近一年 this.timeSwitch("sixMonth")}>近六个月 this.timeSwitch("month")}>近一个月 this.timeSwitch("week")}>近一周
; } } export default ChartItem;