echarts2实现双柱的甘特图_echarts vue 甘特图实现

厂家机型故障分析

.yn-main-wrapper__cloumn{

flex:1;

display:flex;

flex-direction: column;

}

.yn-br__graph{

flex:1;

}

.yn-br__graph:first-child {

display:flex;

}

.yn-br__graph-left{

flex:1;

box-sizing:border-box;

position:relative;

}

.yn-chart__title {

position:absolute;

top:10px;

z-index:2;

left:50%;

transform:translate3D(-50%,0,0);

display:flex;

}

.yn-chart__title-item {

display:inline-block;

margin-right:10px;

font-size:12px;

display:flex;

align-items:center;

}

.yn-chart__title-item > span {

display:inline-block;

width:18px;

height:18px;

margin-right:10px;

}

.yn-br__graph--body{

box-sizing:border-box;

}

.yn-line__graph--title,

.yn-br__graph--title {

margin-bottom:22px;

}

/*排名的表格padding*/

.yn-br__graph--range{

padding:0px 0px 0px 10px;

box-sizing:border-box;

}

.wrap-check-select {

width:240px;

}

.search-form__item{

margin-right:20px;

display:flex;

justify-content:space-between;

align-items:center;

margin-bottom:10px;

}

.search-form {

padding-left: 20px;

}

.check-select{

height:30px;

}

:title="'故障趋势分析'"

>

new Vue({el: '#forTitle'})

时间范围

分析维度

v-for="(group,index) in analysisLatitudues"

:key="index"

:label="group.label"

:value="group.value"

>

风场

v-for="group in options_farm"

:key="group.value"

:label="group.text"

:value="group.value"

>

机组

查询

{{item}}

var INDEX_NAME = '能量可利用率(%)';

var allData = {};

var STARTDATA = '';

var ENDDATA = '';

//头部

var vm = new Vue({

el: '#vue-head',

data: function(){

return {

options_farm:[],

//风场

farmValue:'',

//机组

farmModelValue:'',

//风场型号

farmModel:[],

//风场详细型号

farmFantype:[],

// 风场选中机型的list

farmModelList:{},

//analysisLatitudues分析维度

analysisLatitudues:[{label:'系统',value:'system'},{label:'检修',value:'repair'}],

//维度的value值

latituduesValue:"",

backValue:'',

//选中机型的value

groupValue:'',

province : '云南'

}

},

methods: {

getSelectValue: function (data) {

this.groupValue = data.join(',');

},

search: function () {

var rangeData = $('#range-date').val();

var arr = _.split(rangeData, ' - ', 2);

var startData = arr[0];

var endDate = arr[1];

if(!this.province || !startData || !endDate || !this.farmValue || !this.groupValue || !this.latituduesValue){

this.$message(

{

showClose: true,

message: '请填写需要筛选的数据!',

type: 'warning',

customClass:'messageClass',

iconClass:'icon-yn-warn'

}

)

return;

}

allData.ajaxObj={

province:this.province,

startDate: startData,

endDate: endDate,

farm:this.farmValue,

fantype:this.groupValue,

//新的属性

dimension:this.latituduesValue

}

//调用下面vue的初始化表的方法

vmRoot.shearchEcharts(allData.ajaxObj);

}

},

computed: {

forSaveFantype : function(){

var that = this;

that.farmModel=[];

that.farmFantype=[];

that.farmModelList =all_provinceData[this.farmValue];

_.forIn(that.farmModelList, function(value, key) {

that.farmModel.push({key:key,value:key,checked:true});

that.farmFantype.push(key);

});

that.backValue = that.farmFantype.join(',');

that.groupValue = that.backValue;

return that.farmModel;

},

},

mounted: function () {

var str = localStorage.getItem('basicInfo');

var baseInfoObj = JSON.parse(str);

this.options_farm = all_provinceSelect;

this.farmValue = this.options_farm[0].value;

this.farmModelList = all_provinceSelect[this.farmValue];

this.latituduesValue = 'system';

//初始化时间插件

laydate.render({

elem: '#range-date',

type: 'month',

range: true,

min:baseInfoObj.startDate,

max:baseInfoObj.endDateD

});

var str = STARTDATA + ' - ' + ENDDATA;

$('#range-date').val(str);

}

})

function changeAlgorithm(algorithm) {

vm.search();

}

var FANTYPE = '';

var FARMNAMES = JSON.parse(FANTYPE);

var vmRoot = new Vue({

el: '#app',

data:function(){

return {

option: {},

//时序图图标

myChart:null,

types: [],

categories: [],

status : [],

startTime:'',

endTime:'',

//头部传来的时间

vmStartTime : '',

vmEndTime : '',

dataCount:10,

data:[],

//对应的名称

farmnames : {},

//为不同的状态分配不同的颜色

colorList : [

'#ffee58',

'#2196f3',

'#1de9b6',

'#f9a825',

'#e040fb',

'#d32f2f',

'#43a047',

'#26c6da',

'#3d5afe',

'#9ccc65',

'#ff5722',

'#9c27b0',

'#ccff90',

'#7b1fa2',

'#0288d1',

],

peerColor: {},

//控制请求接口显示不显示

loading : false,

//请求锁

searchLock : false,

//存入数据

totalData : [],

}

},

methods : {

shearchEcharts:function (data){

if(this.searchLock){

this.$message(

{

showClose: true,

message: '请等数据加载完成!',

type: 'warning',

customClass:'messageClass',

iconClass:'icon-yn-warn'

}

)

return;

}

this.searchLock= true;

//让设备与显示的名称对应的方法

this.farmnames = FARMNAMES[vm.province][data.farm];

var obj = {};

var arr = [];

var addDate = [];

var forSaveFantype = [];

if(data.fantype.indexOf(',')>-1){

arr = data.fantype.split(',');

}else{

arr.push(data.fantype)

}

arr.forEach(function(item) {

forSaveFantype.push({name:'fantype',value : item});

})

//为了获得当全部选择相同时间的时候得出当前月的最后一天

addDate=data.endDate.split('-');

this.vmStartTime=data.startDate+'-01';

this.vmEndTime=data.endDate+"-"+this.getLastDay(addDate[0],addDate[1]);

obj = {

startDate: data.startDate,

endDate: data.endDate,

province: data.province,

dimension: data.dimension,

farm: data.farm,

forSaveFantype: forSaveFantype

}

this.getSeqData(obj);

},

//请求完成调用方法为echart传递参数

initParams: function(data,currentChose){

var obj = {};

_.forIn(this.farmnames[vm.farmValue], function(value, key) {

_.assign(obj,value);

});

var that = this;

that.data=[];

that.startTime = new Date(that.vmStartTime);

that.startTime = that.startTime.getTime()/1000;

that.endTime = new Date(that.vmEndTime);

that.endTime = that.endTime.getTime()/1000;

if(data){

for (var i = 0; i < data.length; i++) {

var j = 0;

that.categories.forEach(function(item,index){

if(item == data[i].taskName){

j = index;

}

})

var opacity = 1;

if(!currentChose){

opacity = 1;

}else{

if(currentChose && currentChose == data[i].status){

opacity = 1;

}else{

opacity = 0.1;

}

}

that.data.push({

name: data[i].taskName,

value: [

j,

data[i].startDate,

data[i].endDate,

data[i].endDate-data[i].startDate

],

itemStyle: {

normal: {

color: that.peerColor[data[i].status],

opacity : opacity

},

}

});

}

}

//控制图标中元素的大小样式

this.paramOption();

if(this.myChart){

this.myChart.dispose();

}

this.myChart = echarts.init(this.$refs.scatter);

this.myChart.setOption(this.option);

that.searchLock= false;

},

paramOption: function(data){

var that = this;

this.option = {

tooltip: {

trigger : 'item',

show:true,

showDelay: 0,

hideDelay: 0,

transitionDuration:0,

backgroundColor : '#061934',

borderColor : '#00f6ff',

borderRadius : 8,

borderWidth: 2,

padding: 10, // [5, 10, 15, 20]

formatter: function (params) {

return '开始时间 : ' + that.timestampToTime(params.value[1],true) + '
' + '结束时间 : ' + that.timestampToTime(params.value[2],true) + '
' +'风机名称 : ' + params.name ;

}

},

grid:{

x:70,

y:5,

x2:40,

y2:70,

borderWidth:1

},

xAxis: {

min : that.startTime,

max : that.endTime,

scale: true,

axisLabel: {

formatter: function (val) {

return that.timestampToTime(val);

},

textStyle: {

color: '#fff'

},

// rotate:-20,

},

axisLine: {

lineStyle: {

type: 'solid',

color: '#6286a8',//左边线的颜色

width:'1'//坐标线的宽度

}

},

//去掉刻度线

axisTick: {

show: false

},

//x轴上面的线

splitLine:{

show:false

},

},

yAxis: {

data: that.categories,

axisLabel: {

textStyle: {

color: '#fff'

},

// rotate:-20,

},

axisLine: {

lineStyle: {

type: 'solid',

color: '#6286a8',//左边线的颜色

width:'1'//坐标线的宽度

},

textStyle:{

fontSize:15,

color:'#fff'

}

},

axisTick: {

show: false

},

splitLine:{

show:false

},

},

series: [{

type: 'custom',

renderItem: that.renderItem,

itemStyle: {

normal: {

opacity: 0.8

}

},

encode: {

x: [1, 2],

y: 0

},

data: that.data

}]

};

},

//修改echarts自定义画图规则

renderItem: function(params, api) {

var categoryIndex = api.value(0);

var start = api.coord([api.value(1), categoryIndex]);

var end = api.coord([api.value(2), categoryIndex]);

var height = api.size([0, 1])[1] * 0.6;

return {

type: 'rect',

shape: echarts.graphic.clipRectByRect({

x: start[0],

y: start[1] - height / 2,

width: end[0] - start[0],

height: height

}, {

x: params.coordSys.x,

y: params.coordSys.y,

width: params.coordSys.width,

height: params.coordSys.height

}),

style: api.style()

};

},

//获取序列图数据

getSeqData: function(obj) {

var that = this;

that.loading = true;

$.ajax({

url: "/apps/fault/getSeqData.php",

dataType: "json",

async: true,

type: "post",

data: obj,

success: function(data) { //此处data为返回值

if(data.error_code){

that.$message(

{

showClose: true,

message: '链接错误请求失败!',

type: 'warning',

customClass:'messageClass',

iconClass:'icon-yn-warn'

}

)

if(that.myChart){

that.myChart.dispose();

}

that.myChart=null;

that.loading = false;

}

var arr = [];

var status = [];

var objName = {};

if(data){

_.forIn(that.farmnames, function(value, key) {

_.assign(objName,value);

});

data.forEach(function(item){

item.taskName = objName[item.taskName];

arr.push(item.taskName);

status.push(item.status);

item.startDate = new Date(item.startDate).getTime()/1000;

item.endDate = new Date(item.endDate).getTime()/1000;

})

that.status = _.uniq(status);

that.status.forEach(function(item,index){

that.peerColor[item] = that.colorList[index];

});

that.categories = _.uniq(arr);

that.totalData = data;

that.initParams(data);

that.loading = false;

}

},

error: function() {

that.searchLock= false;

that.loading = false;

console.log('接口错误');

}

})

},

timestampToTime : function(timestamp ,flag) {

var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000

var Y = date.getFullYear() + '-';

var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';

var D = date.getDate() <10 ? '0'+date.getDate() : date.getDate() + ' ';

var h = date.getHours() + ':';

var m = date.getMinutes() + ':';

var s = date.getSeconds();

if(flag){

return Y+M+D+" "+h+m+s;

}else{

return Y+M+D;

}

},

backgroundComputed : function(data) {

return {backgroundColor : this.peerColor[data]};

},

getLastDay : function(year,month) {

var new_year = year; //取当前的年份

var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)

if(month>12) //如果当前大于12月,则年份转到下一年

{

new_month -=12; //月份减

new_year++; //年份增

}

var new_date = new Date(new_year,new_month,1); //取当年当月中的第一天

return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期

},

barClick : function(item) {

this.initParams(this.totalData,item);

},

bodyClick :function(item) {

this.initParams(this.totalData);

},

},

created: function(){

},

mounted: function(){

var that = this;

this.farmnames = FARMNAMES[vm.province][vm.farmValue];

this.initParams();

//一开始默认值请求

setTimeout(function(){

vm.search();

},10)

window.addEventListener('resize', function () {

if(that.myChart){

that.myChart.resize();

}

});

}

})

你可能感兴趣的:(echarts2实现双柱的甘特图_echarts vue 甘特图实现)