jobinfo.index.1.js 17.4 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
	        data : function ( d ) {
X
xueli.xue 已提交
10 11
	        	d.jobGroup = $('#jobGroup').val();
                d.jobName = $('#jobName').val();
X
xueli.xue 已提交
12 13
            }
	    },
X
xueli.xue 已提交
14 15
	    "searching": false,
	    "ordering": false,
X
xueli.xue 已提交
16 17 18
	    //"scrollX": true,	// X轴滚动条,取消自适应
	    "columns": [
	                { "data": 'id', "bSortable": false, "visible" : false},
X
xueli.xue 已提交
19 20
	                { 
	                	"data": 'jobGroup', 
21
	                	"visible" : false,
X
xueli.xue 已提交
22 23 24 25 26 27 28 29 30 31 32
	                	"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;
	            		}
            		},
	                { "data": 'jobName'},
33
	                { "data": 'jobDesc', "visible" : true},
X
xueli.xue 已提交
34
	                { "data": 'jobCron', "visible" : true},
35
	                { "data": 'jobClass', "visible" : false},
X
xueli.xue 已提交
36 37 38 39
	                { 
	                	"data": 'jobData',
	                	"visible" : true,
	                	"render": function ( data, type, row ) {
40 41 42 43 44
	                		var _jobData = eval('(' + data + ')');	// row.jobData
	                		var html = "<p title='" + data + "'>执行器:" + _jobData.handler_name +
	                			"<br>执行参数:" + _jobData.handler_params + 
	                			"<br>执行机器:" + _jobData.handler_address + "</p>";
	                		return html;
X
xueli.xue 已提交
45 46
	                	}
	                },
X
xueli.xue 已提交
47 48
	                { 
	                	"data": 'addTime', 
X
xueli.xue 已提交
49
	                	"visible" : false, 
X
xueli.xue 已提交
50 51 52 53 54 55
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
	                { 
	                	"data": 'updateTime', 
X
xueli.xue 已提交
56
	                	"visible" : false, 
X
xueli.xue 已提交
57 58 59 60
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
X
xueli.xue 已提交
61 62 63 64 65 66 67 68 69 70
	                { "data": 'author', "visible" : true},
	                { "data": 'alarmEmail', "visible" : false},
	                { "data": 'alarmThreshold', "visible" : false},
	                { 
	                	"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){
71 72 73
								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 已提交
74 75 76 77 78
							}
	                		return data;
	                	}
	                },
	                { "data": '操作' ,
X
xueli.xue 已提交
79 80 81 82 83 84 85 86 87 88
	                	"render": function ( data, type, row ) {
	                		return function(){
	                			// status
	                			var pause_resume = "";
	                			if ('NORMAL' == row.jobStatus) {
	                				pause_resume = '<button class="btn btn-info btn-xs job_operate" type="job_pause" type="button">暂停</button>  ';
								} else if ('PAUSED' == row.jobStatus){
									pause_resume = '<button class="btn btn-info btn-xs job_operate" type="job_resume" type="button">恢复</button>  ';
								}
	                			// log url
X
xueli.xue 已提交
89
	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
X
xueli.xue 已提交
90 91 92 93
	                			
	                			// job data
	                			var jobDataMap = eval('(' + row.jobData + ')');
	                			
X
xueli.xue 已提交
94 95 96 97 98 99 100 101 102 103 104 105 106
	                			var html = '<p id="'+ row.id +'" '+
	                							' jobGroup="'+ row.jobGroup +'" '+
	                							' jobName="'+ row.jobName +'" '+
	                							' jobCron="'+ row.jobCron +'" '+
	                							' jobDesc="'+ row.jobDesc +'" '+
	                							' jobClass="'+ row.jobClass +'" '+
	                							' jobData="'+ row.jobData +'" '+
	                							' author="'+ row.author +'" '+
	                							' alarmEmail="'+ row.alarmEmail +'" '+
	                							' alarmThreshold="'+ row.alarmThreshold +'" '+
	                							' handler_params="'+jobDataMap.handler_params +'" '+
	                							' handler_address="'+ jobDataMap.handler_address +'" '+
	                							' handler_name="'+ jobDataMap.handler_name +'" '+
X
xueli.xue 已提交
107 108
	                							'>'+
	                					pause_resume +
109 110
										'<button class="btn btn-info btn-xs job_operate" type="job_trigger" type="button">执行</button>'+
										'<button class="btn btn-warning btn-xs update" type="button">编辑</button><br>'+
X
xueli.xue 已提交
111
									  	'<button class="btn btn-warning btn-xs" type="job_del" type="button" '+
X
xueli.xue 已提交
112 113
									  		'onclick="javascript:window.open(\'' + logUrl + '\')" >查看日志</button> '+
								  		'<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button>  '+
X
xueli.xue 已提交
114 115 116 117 118 119 120 121
									'</p>';
									
	                			
	                			return html;
	                		};
	                	}
	                }
	            ],
X
init  
xueli.xue 已提交
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
		"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 已提交
146
	});
X
init  
xueli.xue 已提交
147
	
X
xueli.xue 已提交
148 149 150 151 152
	// 搜索按钮
	$('#searchBtn').on('click', function(){
		jobTable.fnDraw();
	});
	
X
init  
xueli.xue 已提交
153
	// job operate
X
xueli.xue 已提交
154
	$("#job_list").on('click', '.job_operate',function() {
X
init  
xueli.xue 已提交
155 156 157 158 159
		var typeName;
		var url;
		var type = $(this).attr("type");
		if ("job_pause" == type) {
			typeName = "暂停";
X
xueli.xue 已提交
160
			url = base_url + "/jobinfo/pause";
X
init  
xueli.xue 已提交
161 162
		} else if ("job_resume" == type) {
			typeName = "恢复";
X
xueli.xue 已提交
163
			url = base_url + "/jobinfo/resume";
X
init  
xueli.xue 已提交
164 165
		} else if ("job_del" == type) {
			typeName = "删除";
X
xueli.xue 已提交
166
			url = base_url + "/jobinfo/remove";
X
init  
xueli.xue 已提交
167
		} else if ("job_trigger" == type) {
X
xueli.xue 已提交
168 169
			typeName = "执行";
			url = base_url + "/jobinfo/trigger";
X
init  
xueli.xue 已提交
170 171 172 173
		} else {
			return;
		}
		
X
xueli.xue 已提交
174 175
		var jobGroup = $(this).parent('p').attr("jobGroup");
		var jobName = $(this).parent('p').attr("jobName");
X
init  
xueli.xue 已提交
176 177 178 179 180 181
		
		ComConfirm.show("确认" + typeName + "?", function(){
			$.ajax({
				type : 'POST',
				url : url,
				data : {
X
xueli.xue 已提交
182 183
					"jobGroup" : jobGroup,
					"jobName"  : jobName
X
init  
xueli.xue 已提交
184 185 186 187 188
				},
				dataType : "json",
				success : function(data){
					if (data.code == 200) {
						ComAlert.show(1, typeName + "成功", function(){
X
xueli.xue 已提交
189 190
							//window.location.reload();
							jobTable.fnDraw();
X
init  
xueli.xue 已提交
191 192 193 194 195 196 197 198 199
						});
					} else {
						ComAlert.show(1, typeName + "失败");
					}
				},
			});
		});
	});
	
X
init  
xueli.xue 已提交
200 201 202 203 204 205 206
	// 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 已提交
207 208
	// 新增
	$(".add").click(function(){
X
init  
xueli.xue 已提交
209
		$('#addModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
210 211 212 213 214 215
	});
	var addModalValidate = $("#addModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
        focusInvalid : true,  
        rules : {  
X
xueli.xue 已提交
216
        	jobName : {  
X
init  
xueli.xue 已提交
217 218
        		required : true ,
                minlength: 4,
X
init  
xueli.xue 已提交
219 220
                maxlength: 100,
                myValid01:true
X
init  
xueli.xue 已提交
221
            },  
X
xueli.xue 已提交
222
            jobCron : {  
X
init  
xueli.xue 已提交
223 224 225
            	required : true ,
                maxlength: 100
            },  
X
xueli.xue 已提交
226
            jobDesc : {  
X
init  
xueli.xue 已提交
227
            	required : true ,
X
init  
xueli.xue 已提交
228 229
                maxlength: 200
            },
X
xueli.xue 已提交
230
            handler_address : {
X
init  
xueli.xue 已提交
231 232 233
            	required : true ,
                maxlength: 200
            },
X
xueli.xue 已提交
234
            handler_name : {
X
init  
xueli.xue 已提交
235 236
            	required : true ,
                maxlength: 200
X
xueli.xue 已提交
237 238 239 240 241
            },
            author : {
            	required : true ,
                maxlength: 200
            },
242
            alarmEmail : {
X
xueli.xue 已提交
243 244 245
            	required : true ,
                maxlength: 200
            },
246
            alarmThreshold : {
X
xueli.xue 已提交
247 248
            	required : true ,
            	digits:true
X
init  
xueli.xue 已提交
249 250 251
            }
        }, 
        messages : {  
X
xueli.xue 已提交
252 253 254 255
        	jobName : {  
        		required :"请输入“任务名”"  ,
                minlength:"“任务名”长度不应低于4位",
                maxlength:"“任务名”长度不应超过100位"
X
init  
xueli.xue 已提交
256
            },  
X
xueli.xue 已提交
257 258 259
            jobCron : {
            	required :"请输入“Corn”."  ,
                maxlength:"“Corn”长度不应超过100位"
X
init  
xueli.xue 已提交
260
            },  
X
xueli.xue 已提交
261
            jobDesc : {
X
init  
xueli.xue 已提交
262
            	required :"请输入“任务描述”."  ,
X
init  
xueli.xue 已提交
263 264
                maxlength:"“任务描述”长度不应超过200位"
            },  
X
xueli.xue 已提交
265 266 267
            handler_address : {
            	required :"请输入“远程-机器地址”."  ,
                maxlength:"“远程-机器地址”长度不应超过200位"
X
init  
xueli.xue 已提交
268
            },
X
xueli.xue 已提交
269 270 271 272 273 274 275 276
            handler_name : {
            	required : "请输入“远程-执行器”."  ,
                maxlength: "“远程-执行器”长度不应超过200位"
            },
            author : {
            	required : "请输入“负责人”."  ,
                maxlength: "“负责人”长度不应超过50位"
            },
277
            alarmEmail : {
X
xueli.xue 已提交
278 279 280
            	required : "请输入“报警邮件”."  ,
                maxlength: "“报警邮件”长度不应超过200位"
            },
281
            alarmThreshold : {
X
xueli.xue 已提交
282 283
            	required : "请输入“报警阈值”."  ,
            	digits:"阀值应该为整数."
X
init  
xueli.xue 已提交
284 285 286 287 288 289 290 291 292 293 294 295 296
            }
        }, 
		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 已提交
297 298
        	$.post(base_url + "/jobinfo/add",  $("#addModal .form").serialize(), function(data, status) {
    			if (data.code == "200") {
299 300
    				ComAlert.show(1, "新增任务成功", function(){
    					window.location.reload();
X
xueli.xue 已提交
301 302 303 304 305 306 307 308 309
    				});
    			} else {
    				if (data.msg) {
    					ComAlert.show(2, data.msg);
    				} else {
    					ComAlert.show(2, "新增失败");
    				}
    			}
    		});
X
init  
xueli.xue 已提交
310 311 312
		}
	});
	$("#addModal").on('hide.bs.modal', function () {
313
		$("#addModal .form")[0].reset();
314 315
		addModalValidate.resetForm();
		$("#addModal .form .form-group").removeClass("has-error");
316
		$(".remote_panel").show();	// remote
X
init  
xueli.xue 已提交
317 318
	});
	
X
xueli.xue 已提交
319 320
	// 远程任务/本地任务,切换
	$("#addModal select[name='jobClass']").change(function() {
321 322 323
		//console.log( $(this).val().indexOf('RemoteHttpJobBean') );
		
		if($(this).val().indexOf('RemoteHttpJobBean') > -1){
X
xueli.xue 已提交
324
			$(".remote_panel").show();	// remote
325
		} else if($(this).val().indexOf('RemoteHttpJobBean') == -1){
X
xueli.xue 已提交
326 327 328
			$(".remote_panel").hide();	// local
		}
    });
X
init  
xueli.xue 已提交
329
	
X
init  
xueli.xue 已提交
330
	// 更新
X
xueli.xue 已提交
331
	$("#job_list").on('click', '.update',function() {
332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350
		$("#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='jobCron']").val($(this).parent('p').attr("jobCron"));
		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
		$("#updateModal .form input[name='jobClass']").val($(this).parent('p').attr("jobClass"));
		$("#updateModal .form input[name='handler_params']").val($(this).parent('p').attr("handler_params"));
		$("#updateModal .form input[name='handler_address']").val($(this).parent('p').attr("handler_address"));
		$("#updateModal .form input[name='handler_name']").val($(this).parent('p').attr("handler_name"));
		$("#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"));
		
		var _jobClass = $(this).parent('p').attr("jobClass");
		if(_jobClass.indexOf('RemoteHttpJobBean') > -1){
			$(".remote_panel").show();	// remote
		} else if($(this).val().indexOf('RemoteHttpJobBean') == -1){
			$(".remote_panel").hide();	// local
		}
		
X
init  
xueli.xue 已提交
351
		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
352 353 354 355 356 357
	});
	var updateModalValidate = $("#updateModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
        focusInvalid : true,  
        rules : {  
358
            jobCron : {  
X
init  
xueli.xue 已提交
359 360
            	required : true ,
                maxlength: 100
X
xueli.xue 已提交
361
            },  
362
            jobDesc : {  
X
xueli.xue 已提交
363 364 365
            	required : true ,
                maxlength: 200
            },
366
            handler_address : {
X
xueli.xue 已提交
367 368 369
            	required : true ,
                maxlength: 200
            },
370
            handler_name : {
X
xueli.xue 已提交
371 372
            	required : true ,
                maxlength: 200
373 374 375 376 377 378 379 380 381 382 383 384
            },
            author : {
            	required : true ,
                maxlength: 200
            },
            alarmEmail : {
            	required : true ,
                maxlength: 200
            },
            alarmThreshold : {
            	required : true ,
            	digits:true
X
init  
xueli.xue 已提交
385 386 387
            }
        }, 
        messages : {  
388 389 390
            jobCron : {
            	required :"请输入“Corn”."  ,
                maxlength:"“Corn”长度不应超过100位"
X
xueli.xue 已提交
391
            },  
392
            jobDesc : {
X
xueli.xue 已提交
393 394 395
            	required :"请输入“任务描述”."  ,
                maxlength:"“任务描述”长度不应超过200位"
            },  
396 397 398
            handler_address : {
            	required :"请输入“远程-机器地址”."  ,
                maxlength:"“远程-机器地址”长度不应超过200位"
X
xueli.xue 已提交
399
            },
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414
            handler_name : {
            	required : "请输入“远程-执行器”."  ,
                maxlength: "“远程-执行器”长度不应超过200位"
            },
            author : {
            	required : "请输入“负责人”."  ,
                maxlength: "“负责人”长度不应超过50位"
            },
            alarmEmail : {
            	required : "请输入“报警邮件”."  ,
                maxlength: "“报警邮件”长度不应超过200位"
            },
            alarmThreshold : {
            	required : "请输入“报警阈值”."  ,
            	digits:"阀值应该为整数."
X
init  
xueli.xue 已提交
415 416 417 418 419 420 421 422 423 424 425 426 427
            }
        }, 
		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) {
428
    		$.post(base_url + "/jobinfo/reschedule", $("#updateModal .form").serialize(), function(data, status) {
X
init  
xueli.xue 已提交
429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446
    			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 已提交
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462
	
	/*
	// 新增-添加参数
	$("#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 已提交
463
});