jquery:甘特图(gantt)使用总结

本文介绍了如何使用jQuery创建甘特图。首先,按步骤引入JS文件并汉化星期和月份。然后,通过AJAX从后台获取数据,展示在甘特图上。后台组装JSON数据,根据需求读取并处理任务信息。最后,调整甘特图的悬浮框样式以完善视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.按照网上步骤引入js文件
2.将星期以及月份汉化
修改jquery.fn.gantt.js的settting配置
dow: [“日”, “一”, “二”, “三”, “四”, “五”, “六”],
months: [“一月”, “二月”, “三月”, “四月”, “五月”, “六月”, “七月”, “八月”, “九月”, “十 月”, “十一月”, “十二月”],
3.使用ajax读取后台数据并展示,代码如下所示:
$.ajax({
url: “/application/zzpt/project/getProjectGanttData”, //请求后台,并返回甘特图需要的json数据
type: “post”,
dataType: “json”,
cache: false, //关闭AJAX缓存
data: {“projectCode”: projectCode}, //传入的查询参数
success: function (data) {
//初始化gantt
$(".gantt").gantt({
source: data,
navigate: ‘scroll’,//// 底部使用拖拽的刻度尺还是按钮:scroll和buttons
scale: “days”,// 这里是设置默认比例。这里总共有四个参数:months weeks days hours.
maxScale: “months”, // 这里是设置最大比例。这里总共有四个参数:months weeks days hours.
minScale: “days”, // 这里是设置最小比例。这里总共有四个参数:months weeks days hours.
itemsPerPage: 20, //设置甘特图每页显示多少条
onItemClick: function (data) {//有数据范围内的点击事件

                },
                onAddClick: function (dt, rowId) {//无数据范围内的点击事件
                    // alert("Empty space clicked - add an item!");
                },
                onRender: function () {//渲染事件
                    if (window.console && typeof console.log === "function") {
                        // console.log("chart rendered");
                    }
                }
            });
        }
    });

4.后台组装ajax所需的json数据
根据自己需求后台读取所需数据放入list组合,代码示例
/**
* 获取项目任务信息甘特图数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(“getProjectGanttData”)
@ResponseBody
private void getProjectGanttData(HttpServletRequest request, HttpServletResponse response, String projectCode) {
QueryHelper queryHelper = new QueryHelper(request);
ObjectMapper objMap = new ObjectMapper();
User user = null;
String sql = “”;
List<Map<String, String>> list = null;
List dataList = null;
try {
user = UserLoginHelper.getUserModel(request);
sql = " select ROW_NUMBER() over(order by t.plan_start_date)rownumber,te.employee_name,t.task_director,t.task_name,t.task_content,t.task_result,t.audit_flag,case when DATEDIFF(day,t.plan_start_date,GETDATE())<0 then ‘0’ else ‘1’ end isstart, "
+ " CAST(DATEDIFF(S,‘1970-01-01 00:00:00.0’,t.plan_start_date) as numeric)*1000 starttime,"
+ " CAST(DATEDIFF(S,‘1970-01-01 00:00:00.0’,t.plan_end_date) as numeric)*1000 endtime"
+ " from t_task t with(nolock) "
+ " left join td_employee te with(nolock) on t.company_id = t.company_id and t.task_director = te.employee_code"
+ " where t.company_id = ‘"+user.getCompanyId()+"’ and t.project_code = ‘"+projectCode+"’";
list = queryHelper.getMapList(sql);
if(!list.isEmpty()){
dataList = new ArrayList<>();
List planValueList = null;
SimpleDateFormat df = new SimpleDateFormat(“YYYY-MM-dd HH:mm:ss.SSS”);
for(int i=0;i<list.size();i++){
Map<String, Object> planItemMap = new HashMap<>();
//planItemMap.put(“name”, CommonUtil.getStrFrmMap(list.get(i), “task_code”));
planItemMap.put(“name”, CommonUtil.getStrFrmMap(list.get(i), “employee_name”));
planItemMap.put(“desc”, CommonUtil.getStrFrmMap(list.get(i), “task_name”));
Map<String, Object> valueMap = new HashMap<>();
valueMap.put(“from”, “/Date(” + CommonUtil.getStrFrmMap(list.get(i), “starttime”) + “)/”);
valueMap.put(“to”, “/Date(” + CommonUtil.getStrFrmMap(list.get(i), “endtime”) + “)/”);
// System.out.println(CommonUtil.getStrFrmMap(list.get(i), “plan_start_date”)+"-"+df.parse(CommonUtil.getStrFrmMap(list.get(i), “plan_start_date”)).getTime()
// +"-"+CommonUtil.getStrFrmMap(list.get(i), “plan_end_date”)+"-"+df.parse(CommonUtil.getStrFrmMap(list.get(i), “plan_end_date”)).getTime());
valueMap.put(“label”, CommonUtil.getStrFrmMap(list.get(i), “task_content”));

				 if("1".equals(CommonUtil.getStrFrmMap(list.get(i), "isstart"))){
					 //任务是否已结束
					 //
					 if("2".equals(CommonUtil.getStrFrmMap(list.get(i), "audit_flag"))){
						 if("C".equals(CommonUtil.getStrFrmMap(list.get(i), "task_result"))){
							 valueMap.put("customClass", "ganttGray1");//设置进度条样式
						 }else{
							 valueMap.put("customClass", "ganttGreen1"); 
						 }
					}else{
						 valueMap.put("customClass", "ganttRed1"); 
					}
				//计划还未开始执行,标识黄色
				}else if("0".equals(CommonUtil.getStrFrmMap(list.get(i), "isstart"))){
					valueMap.put("customClass", "ganttYellow1"); 
				 }
				 planValueList = new ArrayList<>();
	             planValueList.add(valueMap);
	             //将封装的value List集合添加到保存整个数据集的List里面去
	             planItemMap.put("values", planValueList);
	             dataList.add(planItemMap);
			}
		}
		 
		JSONArray jsonArr = JSONArray.fromObject(dataList);// json与对象的互换,list转换为json数据
		objMap.writeValue(response.getWriter(), jsonArr);
	} catch (Exception e2) {
		e2.printStackTrace();
		
	}
	
}

5.设置悬浮框:修改jquery.fn.gantt.js文件的createProgressBar函数
createProgressBar: function (label, desc, classNames, dataObj) {
label = label || “”;
var bar = $(’

’ + label + ‘
’)
.data(“dataObj”, dataObj);
// if (desc) {//desc为undefined,所以无法弹出悬浮框,需注释掉
bar
.mouseenter(function (e) {
var hint = $(’
’).html(label);//desc无法正常显示。可根据需求更换为需要悬浮显示的字段
$(“body”).append(hint);
hint.css(“left”, e.pageX);
hint.css(“top”, e.pageY);
hint.show();
})
.mouseleave(function () {
$(".fn-gantt-hint").remove();
})
.mousemove(function (e) {
$(".fn-gantt-hint").css(“left”, e.pageX);
$(".fn-gantt-hint").css(“top”, e.pageY + 15);
});
// }
if (classNames) {
bar.addClass(classNames);
}
bar.click(function (e) {
e.stopPropagation();
settings.onItemClick(label);
});
return bar;
},
6.自定义进度条样式:修改style.css文件
style.css自带ganttRed、ganttGreen、ganttOrange样式,可复制粘贴定义自己的样式,然后在后台中调用或者gantt中直接调用。

7.效果图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值