jobinfo.index.1.js 16.3 KB
Newer Older
X
init  
xueli.xue 已提交
1 2
$(function() {
	// init date tables
X
xueli.xue 已提交
3 4 5 6 7
	var jobTable = $("#job_list").dataTable({
		"deferRender": true,
		"processing" : true, 
	    "serverSide": true,
		"ajax": {
X
xueli.xue 已提交
8
			url: base_url + "/jobinfo/pageList",
X
xueli.xue 已提交
9
			type:"post",
X
xueli.xue 已提交
10
	        data : function ( d ) {
X
xueli.xue 已提交
11 12
	        	var obj = {};
	        	obj.jobGroup = $('#jobGroup').val();
X
xueli.xue 已提交
13
	        	obj.jobDesc = $('#jobDesc').val();
X
xueli.xue 已提交
14 15
	        	obj.start = d.start;
	        	obj.length = d.length;
X
xueli.xue 已提交
16
                return obj;
X
xueli.xue 已提交
17 18
            }
	    },
X
xueli.xue 已提交
19 20
	    "searching": false,
	    "ordering": false,
X
xueli.xue 已提交
21 22 23
	    //"scrollX": true,	// X轴滚动条,取消自适应
	    "columns": [
	                { "data": 'id', "bSortable": false, "visible" : false},
X
xueli.xue 已提交
24 25
	                { 
	                	"data": 'jobGroup', 
26
	                	"visible" : false,
X
xueli.xue 已提交
27 28 29 30 31 32 33 34 35 36
	                	"render": function ( data, type, row ) {
	            			var groupMenu = $("#jobGroup").find("option");
	            			for ( var index in $("#jobGroup").find("option")) {
	            				if ($(groupMenu[index]).attr('value') == data) {
									return $(groupMenu[index]).html();
								}
							}
	            			return data;
	            		}
            		},
X
xueli.xue 已提交
37
	                { "data": 'jobName', "visible" : false},
38
	                { "data": 'jobDesc', "visible" : true},
X
xueli.xue 已提交
39
	                { "data": 'jobCron', "visible" : true},
40
	                { "data": 'jobClass', "visible" : false},
41 42 43
	                { "data": 'executorAddress', "visible" : false},
	                { "data": 'executorHandler', "visible" : false},
	                { "data": 'executorParam', "visible" : false},
X
xueli.xue 已提交
44 45
	                { 
	                	"data": 'addTime', 
X
xueli.xue 已提交
46
	                	"visible" : false, 
X
xueli.xue 已提交
47 48 49 50 51 52
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
	                { 
	                	"data": 'updateTime', 
X
xueli.xue 已提交
53
	                	"visible" : false, 
X
xueli.xue 已提交
54 55 56 57
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
X
xueli.xue 已提交
58 59 60
	                { "data": 'author', "visible" : true},
	                { "data": 'alarmEmail', "visible" : false},
	                { "data": 'alarmThreshold', "visible" : false},
61
	                { "data": 'glueSwitch', "visible" : false},
X
xueli.xue 已提交
62 63 64 65 66 67 68
	                { 
	                	"data": 'jobStatus', 
	                	"visible" : true,
	                	"render": function ( data, type, row ) {
	                		if ('NORMAL' == data) {
	                			return '<small class="label label-success" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
							} else if ('PAUSED' == data){
69 70 71
								return '<small class="label label-default" title="暂停" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
							} else if ('BLOCKED' == data){
								return '<small class="label label-default" title="阻塞[串行]" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
X
xueli.xue 已提交
72 73 74 75 76
							}
	                		return data;
	                	}
	                },
	                { "data": '操作' ,
X
xueli.xue 已提交
77 78 79 80 81
	                	"render": function ( data, type, row ) {
	                		return function(){
	                			// status
	                			var pause_resume = "";
	                			if ('NORMAL' == row.jobStatus) {
X
xueli.xue 已提交
82
	                				pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_pause" type="button">暂停</button>  ';
X
xueli.xue 已提交
83
								} else if ('PAUSED' == row.jobStatus){
X
xueli.xue 已提交
84
									pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_resume" type="button">恢复</button>  ';
X
xueli.xue 已提交
85 86
								}
	                			// log url
X
xueli.xue 已提交
87
	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
88
	                			
X
xueli.xue 已提交
89
	                			// log url
90 91
	                			var codeBtn = "";
	                			if(row.glueSwitch > 0){
92
	                				var codeUrl = base_url +'/jobcode?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
93
	                				codeBtn = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button>  '
94
	                			}
X
xueli.xue 已提交
95
	                			
X
xueli.xue 已提交
96 97 98 99 100 101
	                			var html = '<p id="'+ row.id +'" '+
	                							' jobGroup="'+ row.jobGroup +'" '+
	                							' jobName="'+ row.jobName +'" '+
	                							' jobCron="'+ row.jobCron +'" '+
	                							' jobDesc="'+ row.jobDesc +'" '+
	                							' jobClass="'+ row.jobClass +'" '+
102 103 104
	                							' executorAddress="'+row.executorAddress +'" '+
	                							' executorHandler="'+ row.executorHandler +'" '+
	                							' executorParam="'+ row.executorParam +'" '+
105 106 107 108
	                							' author="'+ row.author +'" '+
	                							' alarmEmail="'+ row.alarmEmail +'" '+
	                							' alarmThreshold="'+ row.alarmThreshold +'" '+
	                							' glueSwitch="'+ row.glueSwitch +'" '+
X
xueli.xue 已提交
109
	                							'>'+
X
xueli.xue 已提交
110 111 112 113
										'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button>  '+
										pause_resume +
										'<button class="btn btn-primary btn-xs" type="job_del" type="button" onclick="javascript:window.open(\'' + logUrl + '\')" >日志</button><br>  '+
										'<button class="btn btn-warning btn-xs update" type="button">编辑</button>  '+
114
										codeBtn +
X
xueli.xue 已提交
115
								  		'<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button>  '+
X
xueli.xue 已提交
116 117 118 119 120 121 122 123
									'</p>';
									
	                			
	                			return html;
	                		};
	                	}
	                }
	            ],
X
init  
xueli.xue 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
		"language" : {
			"sProcessing" : "处理中...",
			"sLengthMenu" : "每页 _MENU_ 条记录",
			"sZeroRecords" : "没有匹配结果",
			"sInfo" : "第 _PAGE_ 页 ( 总共 _PAGES_ 页 )",
			"sInfoEmpty" : "无记录",
			"sInfoFiltered" : "(由 _MAX_ 项结果过滤)",
			"sInfoPostFix" : "",
			"sSearch" : "搜索:",
			"sUrl" : "",
			"sEmptyTable" : "表中数据为空",
			"sLoadingRecords" : "载入中...",
			"sInfoThousands" : ",",
			"oPaginate" : {
				"sFirst" : "首页",
				"sPrevious" : "上页",
				"sNext" : "下页",
				"sLast" : "末页"
			},
			"oAria" : {
				"sSortAscending" : ": 以升序排列此列",
				"sSortDescending" : ": 以降序排列此列"
			}
		}
X
init  
xueli.xue 已提交
148
	});
X
init  
xueli.xue 已提交
149
	
X
xueli.xue 已提交
150 151 152 153 154
	// 搜索按钮
	$('#searchBtn').on('click', function(){
		jobTable.fnDraw();
	});
	
X
init  
xueli.xue 已提交
155
	// job operate
X
xueli.xue 已提交
156
	$("#job_list").on('click', '.job_operate',function() {
X
init  
xueli.xue 已提交
157 158 159 160 161
		var typeName;
		var url;
		var type = $(this).attr("type");
		if ("job_pause" == type) {
			typeName = "暂停";
X
xueli.xue 已提交
162
			url = base_url + "/jobinfo/pause";
X
init  
xueli.xue 已提交
163 164
		} else if ("job_resume" == type) {
			typeName = "恢复";
X
xueli.xue 已提交
165
			url = base_url + "/jobinfo/resume";
X
init  
xueli.xue 已提交
166 167
		} else if ("job_del" == type) {
			typeName = "删除";
X
xueli.xue 已提交
168
			url = base_url + "/jobinfo/remove";
X
init  
xueli.xue 已提交
169
		} else if ("job_trigger" == type) {
X
xueli.xue 已提交
170 171
			typeName = "执行";
			url = base_url + "/jobinfo/trigger";
X
init  
xueli.xue 已提交
172 173 174 175
		} else {
			return;
		}
		
X
xueli.xue 已提交
176 177
		var jobGroup = $(this).parent('p').attr("jobGroup");
		var jobName = $(this).parent('p').attr("jobName");
X
init  
xueli.xue 已提交
178 179 180 181 182 183
		
		ComConfirm.show("确认" + typeName + "?", function(){
			$.ajax({
				type : 'POST',
				url : url,
				data : {
X
xueli.xue 已提交
184 185
					"jobGroup" : jobGroup,
					"jobName"  : jobName
X
init  
xueli.xue 已提交
186 187 188 189 190
				},
				dataType : "json",
				success : function(data){
					if (data.code == 200) {
						ComAlert.show(1, typeName + "成功", function(){
X
xueli.xue 已提交
191 192
							//window.location.reload();
							jobTable.fnDraw();
X
init  
xueli.xue 已提交
193 194 195 196 197 198 199 200 201
						});
					} else {
						ComAlert.show(1, typeName + "失败");
					}
				},
			});
		});
	});
	
X
init  
xueli.xue 已提交
202 203 204 205 206 207 208
	// jquery.validate 自定义校验 “英文字母开头,只含有英文字母、数字和下划线”
	jQuery.validator.addMethod("myValid01", function(value, element) {
		var length = value.length;
		var valid = /^[a-zA-Z][a-zA-Z0-9_]*$/;
		return this.optional(element) || valid.test(value);
	}, "只支持英文字母开头,只含有英文字母、数字和下划线");
	
X
init  
xueli.xue 已提交
209 210
	// 新增
	$(".add").click(function(){
X
init  
xueli.xue 已提交
211
		$('#addModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
212 213 214 215 216
	});
	var addModalValidate = $("#addModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
        focusInvalid : true,  
X
xueli.xue 已提交
217 218 219 220 221 222 223
        rules : {
			jobDesc : {
				required : true,
				maxlength: 50
			},
            jobCron : {
            	required : true
X
init  
xueli.xue 已提交
224
            },
225
            executorAddress : {
X
xueli.xue 已提交
226
            	required : true
X
init  
xueli.xue 已提交
227
            },
228
            executorHandler : {
X
xueli.xue 已提交
229
            	required : true
X
xueli.xue 已提交
230
            },
231
            alarmEmail : {
X
xueli.xue 已提交
232
            	required : true
X
xueli.xue 已提交
233
            },
234
            alarmThreshold : {
X
xueli.xue 已提交
235 236
            	required : true ,
            	digits:true
X
xueli.xue 已提交
237 238 239 240
            },
			author : {
				required : true
			}
X
init  
xueli.xue 已提交
241 242
        }, 
        messages : {  
X
xueli.xue 已提交
243
            jobDesc : {
X
xueli.xue 已提交
244 245 246 247 248
            	required :"请输入“名称”."
            },
            jobCron : {
            	required :"请输入“Cron”."
            },
249
            executorAddress : {
X
xueli.xue 已提交
250
            	required :"请输入“执行器地址”."
X
init  
xueli.xue 已提交
251
            },
252
            executorHandler : {
X
xueli.xue 已提交
253
            	required : "请输入“JobHandler”."
X
xueli.xue 已提交
254
            },
255
            alarmEmail : {
X
xueli.xue 已提交
256
            	required : "请输入“报警邮件”."
X
xueli.xue 已提交
257
            },
258
            alarmThreshold : {
X
xueli.xue 已提交
259 260
            	required : "请输入“报警阈值”."  ,
            	digits:"阀值应该为整数."
X
xueli.xue 已提交
261 262 263
            },
            author : {
            	required : "请输入“负责人”."
X
init  
xueli.xue 已提交
264
            }
X
xueli.xue 已提交
265
        },
X
init  
xueli.xue 已提交
266 267 268 269 270 271 272 273 274 275 276
		highlight : function(element) {  
            $(element).closest('.form-group').addClass('has-error');  
        },
        success : function(label) {  
            label.closest('.form-group').removeClass('has-error');  
            label.remove();  
        },
        errorPlacement : function(error, element) {  
            element.parent('div').append(error);  
        },
        submitHandler : function(form) {
X
xueli.xue 已提交
277 278
        	$.post(base_url + "/jobinfo/add",  $("#addModal .form").serialize(), function(data, status) {
    			if (data.code == "200") {
279 280
    				ComAlert.show(1, "新增任务成功", function(){
    					window.location.reload();
X
xueli.xue 已提交
281 282 283 284 285 286 287 288 289
    				});
    			} else {
    				if (data.msg) {
    					ComAlert.show(2, data.msg);
    				} else {
    					ComAlert.show(2, "新增失败");
    				}
    			}
    		});
X
init  
xueli.xue 已提交
290 291 292
		}
	});
	$("#addModal").on('hide.bs.modal', function () {
293
		$("#addModal .form")[0].reset();
294 295
		addModalValidate.resetForm();
		$("#addModal .form .form-group").removeClass("has-error");
296
		$(".remote_panel").show();	// remote
X
init  
xueli.xue 已提交
297 298
	});
	
299 300 301
	// GLUE模式开启
	$("#addModal .form .ifGLUE").click(function(){
		var ifGLUE = $(this).is(':checked');
X
xueli.xue 已提交
302
		var $executorHandler = $("#addModal .form input[name='executorHandler']");
303 304
		var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
		if (ifGLUE) {
X
xueli.xue 已提交
305 306
			$executorHandler.val("");
			$executorHandler.attr("readonly","readonly");
307 308
			$glueSwitch.val(1);
		} else {
X
xueli.xue 已提交
309
			$executorHandler.removeAttr("readonly");
310 311 312 313 314
			$glueSwitch.val(0);
		}
	});
	$("#updateModal .form .ifGLUE").click(function(){
		var ifGLUE = $(this).is(':checked');
X
xueli.xue 已提交
315
		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
316 317
		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
		if (ifGLUE) {
X
xueli.xue 已提交
318 319
			$executorHandler.val("");
			$executorHandler.attr("readonly","readonly");
320 321
			$glueSwitch.val(1);
		} else {
X
xueli.xue 已提交
322
			$executorHandler.removeAttr("readonly");
323 324 325 326
			$glueSwitch.val(0);
		}
	});
	
X
init  
xueli.xue 已提交
327
	// 更新
X
xueli.xue 已提交
328
	$("#job_list").on('click', '.update',function() {
X
xueli.xue 已提交
329 330 331

		// base data
		$("#updateModal .form input[name='jobGroupTitle']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").attr("selected",true);
332 333 334
		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
X
xueli.xue 已提交
335
		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
336 337 338
		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
		$("#updateModal .form input[name='executorHandler']").val($(this).parent('p').attr("executorHandler"));
		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
339 340 341
		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
		$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
342
		$("#updateModal .form input[name='glueSwitch']").val($(this).parent('p').attr("glueSwitch"));
X
xueli.xue 已提交
343

344 345
		// GLUE check
		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
X
xueli.xue 已提交
346
		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
347
		if ($glueSwitch.val() != 0) {
X
xueli.xue 已提交
348
			$executorHandler.attr("readonly","readonly");
349 350
			$("#updateModal .form .ifGLUE").attr("checked", true);
		} else {
X
xueli.xue 已提交
351
			$executorHandler.removeAttr("readonly");
352 353
			$("#updateModal .form .ifGLUE").attr("checked", false);
		}
354
		
X
init  
xueli.xue 已提交
355
		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
356 357 358 359
	});
	var updateModalValidate = $("#updateModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
X
xueli.xue 已提交
360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411
        focusInvalid : true,

		rules : {
			jobDesc : {
				required : true,
				maxlength: 50
			},
			jobCron : {
				required : true
			},
			executorAddress : {
				required : true
			},
			executorHandler : {
				required : true
			},
			alarmEmail : {
				required : true
			},
			alarmThreshold : {
				required : true ,
				digits:true
			},
			author : {
				required : true
			}
		},
		messages : {
			jobDesc : {
				required :"请输入“名称”."
			},
			jobCron : {
				required :"请输入“Cron”."
			},
			executorAddress : {
				required :"请输入“执行器地址”."
			},
			executorHandler : {
				required : "请输入“JobHandler”."
			},
			alarmEmail : {
				required : "请输入“报警邮件”."
			},
			alarmThreshold : {
				required : "请输入“报警阈值”."  ,
				digits:"阀值应该为整数."
			},
			author : {
				required : "请输入“负责人”."
			}
		},
		highlight : function(element) {
X
init  
xueli.xue 已提交
412 413 414 415 416 417 418 419 420 421
            $(element).closest('.form-group').addClass('has-error');  
        },
        success : function(label) {  
            label.closest('.form-group').removeClass('has-error');  
            label.remove();  
        },
        errorPlacement : function(error, element) {  
            element.parent('div').append(error);  
        },
        submitHandler : function(form) {
422
    		$.post(base_url + "/jobinfo/reschedule", $("#updateModal .form").serialize(), function(data, status) {
X
init  
xueli.xue 已提交
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440
    			if (data.code == "200") {
    				ComAlert.show(1, "更新成功", function(){
    					window.location.reload();
    				});
    			} else {
    				if (data.msg) {
    					ComAlert.show(2, data.msg);
					} else {
						ComAlert.show(2, "更新失败");
					}
    			}
    		});
		}
	});
	$("#updateModal").on('hide.bs.modal', function () {
		$("#updateModal .form")[0].reset()
	});
	
X
xueli.xue 已提交
441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456
	
	/*
	// 新增-添加参数
	$("#addModal .addParam").on('click', function () {
		var html = '<div class="form-group newParam">'+
				'<label for="lastname" class="col-sm-2 control-label">参数&nbsp;<button class="btn btn-danger btn-xs removeParam" type="button">移除</button></label>'+
				'<div class="col-sm-4"><input type="text" class="form-control" name="key" placeholder="请输入参数key[将会强转为String]" maxlength="200" /></div>'+
				'<div class="col-sm-6"><input type="text" class="form-control" name="value" placeholder="请输入参数value[将会强转为String]" maxlength="200" /></div>'+
			'</div>';
		$(this).parents('.form-group').parent().append(html);
		
		$("#addModal .removeParam").on('click', function () {
			$(this).parents('.form-group').remove();
		});
	});
	*/
X
init  
xueli.xue 已提交
457
});