jobinfo.index.1.js 17.2 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
fresh  
xueli.xue 已提交
13
	        	obj.executorHandler = $('#executorHandler').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 39 40 41 42 43 44 45
					{
						"data": 'childJobKey',
						"visible" : true,
						"render": function ( data, type, row ) {
							var jobKey = row.jobGroup + "_" + row.jobName;
							return jobKey;
						}
					},
46
	                { "data": 'jobDesc', "visible" : true},
X
xueli.xue 已提交
47
	                { "data": 'jobCron', "visible" : true},
X
xueli.xue 已提交
48
					{ "data": 'executorAppname', "visible" : false},
49
	                { "data": 'executorAddress', "visible" : false},
X
xueli.xue 已提交
50 51 52 53 54 55 56
					{
						"data": 'executorHandler',
						"visible" : true,
						"render": function ( data, type, row ) {
							return (row.glueSwitch > 0)? "GLUE模式" : data;
						}
					},
57
	                { "data": 'executorParam', "visible" : false},
X
xueli.xue 已提交
58 59
	                { 
	                	"data": 'addTime', 
X
xueli.xue 已提交
60
	                	"visible" : false, 
X
xueli.xue 已提交
61 62 63 64 65 66
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
	                { 
	                	"data": 'updateTime', 
X
xueli.xue 已提交
67
	                	"visible" : false, 
X
xueli.xue 已提交
68 69 70 71
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
X
xueli.xue 已提交
72 73
	                { "data": 'author', "visible" : true},
	                { "data": 'alarmEmail', "visible" : false},
74
	                { "data": 'glueSwitch', "visible" : false},
X
xueli.xue 已提交
75 76 77 78 79 80 81
	                { 
	                	"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){
82 83 84
								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 已提交
85 86 87 88 89
							}
	                		return data;
	                	}
	                },
	                { "data": '操作' ,
X
xueli.xue 已提交
90 91 92 93 94
	                	"render": function ( data, type, row ) {
	                		return function(){
	                			// status
	                			var pause_resume = "";
	                			if ('NORMAL' == row.jobStatus) {
X
xueli.xue 已提交
95
	                				pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_pause" type="button">暂停</button>  ';
X
xueli.xue 已提交
96
								} else if ('PAUSED' == row.jobStatus){
X
xueli.xue 已提交
97
									pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_resume" type="button">恢复</button>  ';
X
xueli.xue 已提交
98 99
								}
	                			// log url
X
xueli.xue 已提交
100
	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
101
	                			
X
xueli.xue 已提交
102
	                			// log url
103 104
	                			var codeBtn = "";
	                			if(row.glueSwitch > 0){
X
fresh  
xueli.xue 已提交
105 106 107
									var codeUrl = base_url +'/jobcode?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
									codeBtn = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button>  '
								}
X
xueli.xue 已提交
108

X
fresh  
xueli.xue 已提交
109 110 111 112 113 114 115 116
								// html
								var html = '<p id="'+ row.id +'" '+
									' jobGroup="'+ row.jobGroup +'" '+
									' jobName="'+ row.jobName +'" '+
									' jobCron="'+ row.jobCron +'" '+
									' jobDesc="'+ row.jobDesc +'" '+
									' author="'+ row.author +'" '+
									' alarmEmail="'+ row.alarmEmail +'" '+
X
xueli.xue 已提交
117
									' executorAppname="'+row.executorAppname +'" '+
X
fresh  
xueli.xue 已提交
118 119 120 121
									' executorAddress="'+row.executorAddress +'" '+
									' executorHandler="'+row.executorHandler +'" '+
									' executorParam="'+ row.executorParam +'" '+
									' glueSwitch="'+ row.glueSwitch +'" '+
122
                                    ' childJobKey="'+ row.childJobKey +'" '+
X
fresh  
xueli.xue 已提交
123 124 125 126 127 128 129
									'>'+
									'<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>  '+
									codeBtn +
									'<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button>  '+
X
xueli.xue 已提交
130
									'</p>';
X
fresh  
xueli.xue 已提交
131

X
xueli.xue 已提交
132
	                			return html;
X
fresh  
xueli.xue 已提交
133
							};
X
xueli.xue 已提交
134 135 136
	                	}
	                }
	            ],
X
init  
xueli.xue 已提交
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
		"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 已提交
161
	});
X
init  
xueli.xue 已提交
162
	
X
xueli.xue 已提交
163 164 165 166 167
	// 搜索按钮
	$('#searchBtn').on('click', function(){
		jobTable.fnDraw();
	});
	
X
init  
xueli.xue 已提交
168
	// job operate
X
xueli.xue 已提交
169
	$("#job_list").on('click', '.job_operate',function() {
X
init  
xueli.xue 已提交
170 171
		var typeName;
		var url;
172 173
		var needFresh = false;

X
init  
xueli.xue 已提交
174 175 176
		var type = $(this).attr("type");
		if ("job_pause" == type) {
			typeName = "暂停";
X
xueli.xue 已提交
177
			url = base_url + "/jobinfo/pause";
178
			needFresh = true;
X
init  
xueli.xue 已提交
179 180
		} else if ("job_resume" == type) {
			typeName = "恢复";
X
xueli.xue 已提交
181
			url = base_url + "/jobinfo/resume";
182
			needFresh = true;
X
init  
xueli.xue 已提交
183 184
		} else if ("job_del" == type) {
			typeName = "删除";
X
xueli.xue 已提交
185
			url = base_url + "/jobinfo/remove";
186
			needFresh = true;
X
init  
xueli.xue 已提交
187
		} else if ("job_trigger" == type) {
X
xueli.xue 已提交
188 189
			typeName = "执行";
			url = base_url + "/jobinfo/trigger";
X
init  
xueli.xue 已提交
190 191 192 193
		} else {
			return;
		}
		
X
xueli.xue 已提交
194 195
		var jobGroup = $(this).parent('p').attr("jobGroup");
		var jobName = $(this).parent('p').attr("jobName");
X
init  
xueli.xue 已提交
196 197 198 199 200 201
		
		ComConfirm.show("确认" + typeName + "?", function(){
			$.ajax({
				type : 'POST',
				url : url,
				data : {
X
xueli.xue 已提交
202 203
					"jobGroup" : jobGroup,
					"jobName"  : jobName
X
init  
xueli.xue 已提交
204 205 206 207 208
				},
				dataType : "json",
				success : function(data){
					if (data.code == 200) {
						ComAlert.show(1, typeName + "成功", function(){
209 210 211 212
							if (needFresh) {
								//window.location.reload();
								jobTable.fnDraw();
							}
X
init  
xueli.xue 已提交
213 214 215 216 217 218 219 220 221
						});
					} else {
						ComAlert.show(1, typeName + "失败");
					}
				},
			});
		});
	});
	
X
init  
xueli.xue 已提交
222 223 224 225 226 227 228
	// 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 已提交
229 230
	// 新增
	$(".add").click(function(){
X
init  
xueli.xue 已提交
231
		$('#addModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
232 233 234 235 236
	});
	var addModalValidate = $("#addModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
        focusInvalid : true,  
X
xueli.xue 已提交
237 238 239 240 241 242 243
        rules : {
			jobDesc : {
				required : true,
				maxlength: 50
			},
            jobCron : {
            	required : true
X
init  
xueli.xue 已提交
244
            },
245
            executorAddress : {
X
xueli.xue 已提交
246
            	required : true
X
init  
xueli.xue 已提交
247
            },
X
fresh  
xueli.xue 已提交
248 249 250
			executorHandler : {
				required : false
			},
251
            alarmEmail : {
X
xueli.xue 已提交
252 253 254 255 256
            	required : true
            },
			author : {
				required : true
			}
X
init  
xueli.xue 已提交
257 258
        }, 
        messages : {  
X
xueli.xue 已提交
259
            jobDesc : {
X
xueli.xue 已提交
260
            	required :"请输入“描述”."
X
xueli.xue 已提交
261 262 263 264
            },
            jobCron : {
            	required :"请输入“Cron”."
            },
265
            executorAddress : {
X
xueli.xue 已提交
266
            	required :"请输入“执行器地址”."
X
init  
xueli.xue 已提交
267
            },
X
fresh  
xueli.xue 已提交
268 269 270
			executorHandler : {
				required : "请输入“jobHandler”."
			},
271
            alarmEmail : {
X
xueli.xue 已提交
272
            	required : "请输入“报警邮件”."
X
xueli.xue 已提交
273
            },
X
xueli.xue 已提交
274 275
            author : {
            	required : "请输入“负责人”."
X
init  
xueli.xue 已提交
276
            }
X
xueli.xue 已提交
277
        },
X
init  
xueli.xue 已提交
278 279 280 281 282 283 284 285 286 287 288
		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 已提交
289 290
        	$.post(base_url + "/jobinfo/add",  $("#addModal .form").serialize(), function(data, status) {
    			if (data.code == "200") {
291 292 293 294 295 296 297
					$('#addModal').modal('hide');
					setTimeout(function () {
						ComAlert.show(1, "新增任务成功", function(){
							jobTable.fnDraw();
							//window.location.reload();
						});
					}, 315);
X
xueli.xue 已提交
298 299 300 301 302 303 304 305
    			} else {
    				if (data.msg) {
    					ComAlert.show(2, data.msg);
    				} else {
    					ComAlert.show(2, "新增失败");
    				}
    			}
    		});
X
init  
xueli.xue 已提交
306 307 308
		}
	});
	$("#addModal").on('hide.bs.modal', function () {
309
		$("#addModal .form")[0].reset();
310 311
		addModalValidate.resetForm();
		$("#addModal .form .form-group").removeClass("has-error");
312
		$(".remote_panel").show();	// remote
313 314

		$("#addModal .form input[name='executorHandler']").removeAttr("readonly");
X
xueli.xue 已提交
315

X
xueli.xue 已提交
316
		// 注册模式
X
xueli.xue 已提交
317 318
		$("#addModal .form .executorAddress").show();
		$("#addModal .form .executorAppname").hide();
X
init  
xueli.xue 已提交
319
	});
X
fresh  
xueli.xue 已提交
320

X
xueli.xue 已提交
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
	// 注册模式
	$(".ifAppName").click(function(){
		var ifAppName = $(this).is(':checked');

		var $executorAddress = $(this).parents("form").find("input[name='executorAddress']");
		var $executorAppname = $(this).parents("form").find("input[name='executorAppname']");
		$($executorAddress).val("");
		$($executorAppname).val("");

		var $executorAddressDiv = $(this).parents("form").find(".executorAddress");
		var $executorAppnameDiv = $(this).parents("form").find(".executorAppname");
		if (ifAppName) {
			$($executorAddressDiv).hide();
			$($executorAppnameDiv).show();
		} else {
			$($executorAddressDiv).show();
			$($executorAppnameDiv).hide();
		}
	});

X
fresh  
xueli.xue 已提交
341 342 343 344 345 346 347 348 349 350 351 352 353 354
	// GLUE模式开启
	$(".ifGLUE").click(function(){
		var ifGLUE = $(this).is(':checked');
		var $executorHandler = $(this).parents("form").find("input[name='executorHandler']");
		var $glueSwitch = $(this).parents("form").find("input[name='glueSwitch']");
		if (ifGLUE) {
			$executorHandler.val("");
			$executorHandler.attr("readonly","readonly");
			$glueSwitch.val(1);
		} else {
			$executorHandler.removeAttr("readonly");
			$glueSwitch.val(0);
		}
	});
X
init  
xueli.xue 已提交
355 356
	
	// 更新
X
xueli.xue 已提交
357
	$("#job_list").on('click', '.update',function() {
X
xueli.xue 已提交
358 359

		// base data
360 361 362
		$("#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 已提交
363
		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
364 365
		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
X
xueli.xue 已提交
366
		$("#updateModal .form input[name='executorAppname']").val($(this).parent('p').attr("executorAppname"));
X
fresh  
xueli.xue 已提交
367 368 369
		$("#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"));
370
        $("#updateModal .form input[name='childJobKey']").val($(this).parent('p').attr("childJobKey"));
371

X
xueli.xue 已提交
372
		// jobGroupTitle
X
xueli.xue 已提交
373
		var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text();
X
xueli.xue 已提交
374 375
		$("#updateModal .form .jobGroupTitle").val(jobGroupTitle);

X
xueli.xue 已提交
376 377 378 379 380 381 382 383 384 385 386 387
		// appname / address, switch
		var $executorAppname = $(this).parent('p').attr("executorAppname");
		if ($executorAppname) {
			$("#updateModal .form .ifAppName").attr("checked", true);
			$("#updateModal .form .executorAppname").show();
			$("#updateModal .form .executorAddress").hide();
		} else {
			$("#updateModal .form .ifAppName").attr("checked", false);
			$("#updateModal .form .executorAppname").hide();
			$("#updateModal .form .executorAddress").show();
		}

X
fresh  
xueli.xue 已提交
388 389 390 391 392 393 394 395 396 397 398 399 400
        // glueSwitch
		var glueSwitch = $(this).parent('p').attr("glueSwitch");
		$("#updateModal .form input[name='glueSwitch']").val(glueSwitch);
		var $ifGLUE = $("#updateModal .form .ifGLUE");
		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
		if (glueSwitch == 1) {
			$ifGLUE.attr("checked", true);
			$executorHandler.val("");
			$executorHandler.attr("readonly","readonly");
		} else {
			$ifGLUE.attr("checked", false);
			$executorHandler.removeAttr("readonly");
		}
401

X
xueli.xue 已提交
402
		// show
X
init  
xueli.xue 已提交
403
		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
404 405 406 407
	});
	var updateModalValidate = $("#updateModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
X
xueli.xue 已提交
408 409 410 411 412 413 414 415 416 417 418
        focusInvalid : true,

		rules : {
			jobDesc : {
				required : true,
				maxlength: 50
			},
			jobCron : {
				required : true
			},
			executorAddress : {
X
xueli.xue 已提交
419
				required : false
X
xueli.xue 已提交
420
			},
X
fresh  
xueli.xue 已提交
421 422 423
			executorHandler : {
				required : false
			},
X
xueli.xue 已提交
424 425 426 427 428 429 430 431 432
			alarmEmail : {
				required : true
			},
			author : {
				required : true
			}
		},
		messages : {
			jobDesc : {
X
xueli.xue 已提交
433
				required :"请输入“描述”."
X
xueli.xue 已提交
434 435 436 437 438 439 440
			},
			jobCron : {
				required :"请输入“Cron”."
			},
			executorAddress : {
				required :"请输入“执行器地址”."
			},
X
fresh  
xueli.xue 已提交
441 442 443
			executorHandler : {
				required : "请输入“jobHandler”."
			},
X
xueli.xue 已提交
444 445 446 447 448 449 450 451
			alarmEmail : {
				required : "请输入“报警邮件”."
			},
			author : {
				required : "请输入“负责人”."
			}
		},
		highlight : function(element) {
X
init  
xueli.xue 已提交
452 453 454 455 456 457 458 459 460 461
            $(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) {
462
			// post
463
    		$.post(base_url + "/jobinfo/reschedule", $("#updateModal .form").serialize(), function(data, status) {
X
init  
xueli.xue 已提交
464
    			if (data.code == "200") {
465 466 467 468 469 470 471
					$('#updateModal').modal('hide');
					setTimeout(function () {
						ComAlert.show(1, "更新成功", function(){
							//window.location.reload();
							jobTable.fnDraw();
						});
					}, 315);
X
init  
xueli.xue 已提交
472 473 474 475 476 477 478 479 480 481 482 483 484
    			} else {
    				if (data.msg) {
    					ComAlert.show(2, data.msg);
					} else {
						ComAlert.show(2, "更新失败");
					}
    			}
    		});
		}
	});
	$("#updateModal").on('hide.bs.modal', function () {
		$("#updateModal .form")[0].reset()
	});
485 486


X
xueli.xue 已提交
487 488 489 490 491 492 493 494 495 496 497 498 499 500 501
	/*
	// 新增-添加参数
	$("#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();
		});
	});
	*/
502

X
init  
xueli.xue 已提交
503
});