echarts制作甘特图

html

<div id="SpeciaEchartBox" style="width: 90%;height:500px; margin:0 auto"></div>
</div>

initEchartBox: function() {
    var chartBox = echarts.init(document.getElementById('echartBox'));
    function dateAfter(dateStr, num) {
    var date1 = new Date(Date.parse(dateStr.replace(/-/g, "/")));

   var date2 = new Date(date1);
   date2.setDate(date1.getDate() + num);
   var times = date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + date2.getDate();
   return times;
}

function GetDateDiff(startDate, endDate) {
   var startTime = new Date(Date.parse(startDate.replace(/-/g, "/"))).getTime();
   var endTime = new Date(Date.parse(endDate.replace(/-/g, "/"))).getTime();
  var dates = (startTime - endTime) / (1000 * 60 * 60 * 24);
  return dates;
}
var totalCategory = 0,
category = [],
planData = [],
planBase = [],
actualData = [],
actualBase = [],
legend = [];
var globalmin = null;
var json = {
"currStageIndexList": [
8,
9
],
"currStageList": [
"初步验收",
"试运行"
],
"stageList": [{
"planBeginDate": "2018-03-31",
"name": "各级风委会机制常态化",
"endDate": "2018-05-01",
"beginDate": "2018-04-03",
"planEndDate": "2018-04-06"
}, {
"planBeginDate": "2018-02-05",
"name": "统筹管理企业风险信息",
"endDate": "2018-03-22",
"beginDate": "2018-02-07",
"planEndDate": "2018-03-12"
}, {
"planBeginDate": "2018-04-12",
"name": "统筹应用资金分级授权",
"endDate": "2018-04-31",
"beginDate": "2018-04-22",
"planEndDate": "2018-04-28"
}, {
"planBeginDate": "2018-03-26",
"name": "统筹建设财务管理标准体系",
"endDate": "2018-04-22",
"beginDate": "2018-03-22",
"planEndDate": "2018-04-25"
}, {
"planBeginDate": "2018-01-25",
"name": "重大风险预判预控",
"endDate": "2018-02-28",
"beginDate": "2018-01-26",
"planEndDate": "2018-02-25"
},

],
"projectId": 8211
};
if (json && json.stageList) {
totalCategory = json.stageList.length;
var minPlan = null,
minActual = null,
max = null;
for (var i = (totalCategory - 1); i >= 0; i--) {
var planStart = json.stageList[i].planBeginDate;
var actualStart = json.stageList[i].beginDate;
if (i == (json.stageList.length - 1)) {
var dateTT = new Date();
var dstr = dateTT.getFullYear() + "-" + (dateTT.getMonth() + 1) + "-" + dateTT.getDate();
minPlan = planStart || dstr;
minActual = actualStart || dstr;
max = planStart;
}

console.log(max)
if (GetDateDiff(max, json.stageList[i].planEndDate) < 0) {
max = json.stageList[i].planEndDate;
}
if (GetDateDiff(max, json.stageList[i].endDate) < 0) {
max = json.stageList[i].endDate;
}
if (GetDateDiff(minPlan, planStart) > 0) {
minPlan = planStart;
}
if (GetDateDiff(minActual, actualStart) > 0) {
minActual = actualStart;
}
}
var min = null;
if (GetDateDiff(minPlan, minActual) >= 0) {
min = minActual;
} else {
min = minPlan;
}
globalmin = min;
for (var i = (totalCategory - 1); i >= 0; i--) {
var planStart = json.stageList[i].planBeginDate;
var planEnd = json.stageList[i].planEndDate;
var actualStart = json.stageList[i].beginDate;
var actualEnd = json.stageList[i].endDate;

category.push(json.stageList[i].name);
planBase.push(GetDateDiff(planStart, globalmin));
var pd = {};
pd.value = GetDateDiff(actualEnd, actualStart);
pd.color = '#FF0000';
var currentStage = json.currStageList;
var sName = json.stageList[i].name;
if (currentStage && $.inArray(sName, currentStage) > -1) {
pd.color = '#FFFF00';
}
planData.push(GetDateDiff(planEnd, planStart));
actualBase.push(GetDateDiff(actualStart, globalmin));
actualData.push(pd);

}
for (var i = 0; i < GetDateDiff(max, min); i++) {
var dt = dateAfter(min, i);
legend.push(dt);
}
var option = {
title: {
text: '',
subtext: ''
},
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
},
formatter: function(params) {
var tar0 = params[0];
var tar1 = params[1];
var tar2 = params[2]
var tar3 = params[3];
var result = tar2.seriesName + ' : ' + dateAfter(globalmin, tar2.value - 0) + '<br/>' +
tar3.seriesName + ' : ' + dateAfter(globalmin, tar2.value + tar3.value) + '<br/>' +
tar0.seriesName + ' : ' + dateAfter(globalmin, tar0.value - 0) + '<br/>' +
tar1.seriesName + ' : ' + dateAfter(globalmin, tar0.value + tar1.value);
return result;
}
},
xAxis: [{
type: 'value',

splitNumber: legend.length - 1,
max: legend.length - 1,
axisLabel: {
show: false
},
splitLine: {
show: false
},
axisTick: {
show: false
}
}, {
type: 'category',
position: 'bottom',
boundaryGap: false,
data: legend,

}],
yAxis: [{
type: 'category',
splitLine: {
show: false
},
data: category
}],
series: [{
name: '实际开始时间',
type: 'bar',
stack: '总量1',
barWidth: '20',

itemStyle: {
normal: {
barBorderColor: 'rgba(0,0,0,0)',
color: 'rgba(0,0,0,0)'
},
emphasis: {
barBorderColor: 'rgba(0,0,0,0)',
color: 'rgba(0,0,0,0)'
}
},
data: actualBase
}, {
name: '实际完成时间',
type: 'bar',
barWidth: '20',
barGap: '0',
stack: '总量1',
itemStyle: {
normal: {
color: function(params) {
//alert(JSON.stringify(params));
return 'rgba(175, 220, 240, 1)';
},
label: {
show: true,
position: 'inside'
}
}
},
data: actualData
}, {
name: '计划开始时间',
type: 'bar',
stack: '总量',
barWidth: '20',
barGap: '0',
itemStyle: {
normal: {
barBorderColor: 'rgba(0,0,0,0)',
color: 'rgba(0,0,0,0)'
},
emphasis: {
barBorderColor: 'rgba(0,0,0,0)',
color: 'rgba(0,0,0,0)'
}
},
data: planBase
}, {
name: '计划完成时间',
type: 'bar',
stack: '总量',
barWidth: '20',
barGap: '0',
itemStyle: {
normal: {
color: 'rgba(102, 255, 0, 0.498039215686275)',
label: {
show: true,
position: 'inside'
}
}
},
data: planData
}]
};

}
// 使用刚指定的配置项和数据显示图表。
chartBox.setOption(option);
window.onresize = chartBox.resize;

  • },

 

转载于:https://www.cnblogs.com/yazhng/p/9100711.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts是一款功能强大的数据可视化工具,可以帮助我们轻松创建各种类型的图表,包括甘特图甘特图是一种用于展示项目进度和任务分配的图表,通过横轴表示时间段,纵轴表示任务,每个任务用条形图表示,条形图的长度代表任务的持续时间。 在Echarts中使用甘特图,首先需要导入相应的库文件,并创建一个div容器作为图表的展示区域。 接下来,通过配置项设置甘特图的样式和数据,包括整体的样式、坐标轴的设置、任务条的样式和数据等。 比如,可以设置甘特图的标题、背景颜色、字体样式等整体样式,通过配置x轴和y轴的属性,可以设置时间段的范围、坐标轴刻度、坐标轴标签等。 然后,根据任务的数据,可以通过配置项设置每个任务条的样式,比如名称、颜色、开始时间、结束时间、持续时间等。可以使用Echarts提供的数据格式,或者根据自己的需求进行数据格式的转换。 最后,通过调用Echarts的绘制函数,在指定的div容器中生成甘特图。 在绘制完成后,可以对甘特图进行进一步的交互操作,比如放大缩小、拖拽滚动、选择任务等。也可以通过Echarts提供的API进行事件绑定和响应,实现动态更新和交互效果。 总而言之,Echarts作为一个功能强大且易于使用的数据可视化工具,可以帮助我们简单快捷地创建甘特图,展示项目进度和任务分配情况,为项目管理提供有益的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值