$(function () {
// init date tables
var jobTable = $("#job_list").dataTable({
"deferRender": true,
"processing": true,
"serverSide": true,
"ajax": {
url: base_url + "/jobinfo/pageList",
type: "post",
data: function (d) {
var obj = {};
obj.jobGroup = $('#jobGroup').val();
obj.jobDesc = $('#jobDesc').val();
obj.executorHandler = $('#executorHandler').val();
obj.start = d.start;
obj.length = d.length;
obj.type = 2;//定时
return obj;
}
},
"searching": false,
"ordering": false,
//"scrollX": true, // scroll x,close self-adaption
"columns": [
{
"data": 'id',
"bSortable": false,
"visible": true,
"width": '5%'
},
{
"data": 'jobGroup',
"visible": false,
"width": '20%',
"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": 'jobDesc',
"visible": true,
"width": '20%'
},
{
"data": 'glueType',
"width": '15%',
"visible": true,
"render": function (data, type, row) {
var glueTypeTitle = findGlueTypeTitle(row.glueType);
if (row.executorHandler) {
return glueTypeTitle + ":" + row.executorHandler;
} else {
return glueTypeTitle;
}
}
},
{"data": 'executorParam', "visible": false},
{
"data": 'startExecuteTime',
"visible": true,
"width": '10%'
},
{
"data": 'endExecuteTime',
"visible": true,
"width": '10%'
},
{
"data": 'addTime',
"visible": false,
"render": function (data, type, row) {
return data ? moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss") : "";
}
},
{
"data": 'updateTime',
"visible": false,
"render": function (data, type, row) {
return data ? moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss") : "";
}
},
{"data": 'author', "visible": true, "width": '10%'},
{"data": 'alarmEmail', "visible": false},
{
"data": 'jobStatus',
"width": '10%',
"visible": true,
"render": function (data, type, row) {
// status
if (data && data != 'NONE') {
if ('NORMAL' == data) {
return 'RUNNING';
} else {
return 'ERROR(' + data + ')';
}
} else {
return 'STOP';
}
}
},
{
"data": I18n.system_opt,
"width": '15%',
"render": function (data, type, row) {
return function () {
// status
var start_stop = "";
if (row.jobStatus && row.jobStatus != 'NONE') {
if ('NORMAL' == row.jobStatus) {
start_stop = ' ';
} else {
start_stop = ' ';
}
} else {
start_stop = ' ';
}
// log url
var logUrl = base_url + '/joblog?jobId=' + row.id;
// log url
var codeBtn = "";
if ('BEAN' != row.glueType) {
var codeUrl = base_url + '/jobcode?jobId=' + row.id;
codeBtn = ' '
}
// html
tableData['key' + row.id] = row;
var html = '
' +
' ' +
start_stop +
'
' +
' ' +
codeBtn +
' ' +
'
';
return html;
};
}
}
],
"language": {
"sProcessing": I18n.dataTable_sProcessing,
"sLengthMenu": I18n.dataTable_sLengthMenu,
"sZeroRecords": I18n.dataTable_sZeroRecords,
"sInfo": I18n.dataTable_sInfo,
"sInfoEmpty": I18n.dataTable_sInfoEmpty,
"sInfoFiltered": I18n.dataTable_sInfoFiltered,
"sInfoPostFix": "",
"sSearch": I18n.dataTable_sSearch,
"sUrl": "",
"sEmptyTable": I18n.dataTable_sEmptyTable,
"sLoadingRecords": I18n.dataTable_sLoadingRecords,
"sInfoThousands": ",",
"oPaginate": {
"sFirst": I18n.dataTable_sFirst,
"sPrevious": I18n.dataTable_sPrevious,
"sNext": I18n.dataTable_sNext,
"sLast": I18n.dataTable_sLast
},
"oAria": {
"sSortAscending": I18n.dataTable_sSortAscending,
"sSortDescending": I18n.dataTable_sSortDescending
}
}
});
// table data
var tableData = {};
// search btn
$('#searchBtn').on('click', function () {
jobTable.fnDraw();
});
// jobGroup change
$('#jobGroup').on('change', function () {
//reload
var jobGroup = $('#jobGroup').val();
window.location.href = base_url + "/jobinfo/index2?jobGroup=" + jobGroup;
});
// job operate
$("#job_list").on('click', '.job_operate', function () {
var typeName;
var url;
var needFresh = false;
var type = $(this).attr("_type");
if ("job_pause" == type) {
typeName = I18n.jobinfo_opt_stop;
url = base_url + "/jobinfo/stop";
needFresh = true;
} else if ("job_resume" == type) {
typeName = I18n.jobinfo_opt_start;
url = base_url + "/jobinfo/start";
needFresh = true;
} else if ("job_del" == type) {
typeName = I18n.system_opt_del;
url = base_url + "/jobinfo/remove";
needFresh = true;
} else {
return;
}
var id = $(this).parent('p').attr("id");
layer.confirm(I18n.system_ok + typeName + '?', {
icon: 3,
title: I18n.system_tips,
btn: [I18n.system_ok, I18n.system_cancel]
}, function (index) {
layer.close(index);
$.ajax({
type: 'POST',
url: url,
data: {
"id": id
},
dataType: "json",
success: function (data) {
if (data.code == 200) {
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: typeName + I18n.system_success,
icon: '1',
end: function (layero, index) {
if (needFresh) {
//window.location.reload();
jobTable.fnDraw(false);
}
}
});
} else {
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: (data.msg || typeName + I18n.system_fail),
icon: '2'
});
}
},
});
});
});
// job trigger
$("#job_list").on('click', '.job_trigger', function () {
var id = $(this).parent('p').attr("id");
var row = tableData['key' + id];
$("#jobTriggerModal .form input[name='id']").val(row.id);
$("#jobTriggerModal .form textarea[name='executorParam']").val(row.executorParam);
$('#jobTriggerModal').modal({backdrop: false, keyboard: false}).modal('show');
});
$("#jobTriggerModal .ok").on('click', function () {
$.ajax({
type: 'POST',
url: base_url + "/jobinfo/trigger",
data: {
"id": $("#jobTriggerModal .form input[name='id']").val(),
"executorParam": $("#jobTriggerModal .textarea[name='executorParam']").val()
},
dataType: "json",
success: function (data) {
if (data.code == 200) {
$('#jobTriggerModal').modal('hide');
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: I18n.jobinfo_opt_run + I18n.system_success,
icon: '1'
});
} else {
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: (data.msg || I18n.jobinfo_opt_run + I18n.system_fail),
icon: '2'
});
}
}
});
});
$("#jobTriggerModal").on('hide.bs.modal', function () {
$("#jobTriggerModal .form")[0].reset();
});
// add
$(".add").click(function () {
$('#addModal').modal({backdrop: false, keyboard: false}).modal('show');
var date = new Date();
date.setMinutes(date.getMinutes() + 5);//当前时间下加5分钟
laydate.render({
elem: '#startExecuteTime1',
type: 'datetime',
value: date,
format: 'yyyy-MM-dd HH:mm:ss'
});
});
var addModalValidate = $("#addModal .form").validate({
errorElement: 'span',
errorClass: 'help-block',
focusInvalid: true,
rules: {
jobDesc: {
required: true,
maxlength: 50
},
jobCron: {
required: true
},
author: {
required: true
},
executorTimeout: {
digits: true
},
executorFailRetryCount: {
digits: true
}
},
messages: {
jobDesc: {
required: I18n.system_please_input + I18n.jobinfo_field_jobdesc
},
jobCron: {
required: I18n.system_please_input + "Cron"
},
author: {
required: I18n.system_please_input + I18n.jobinfo_field_author
},
executorTimeout: {
digits: I18n.system_please_input + I18n.system_digits
},
executorFailRetryCount: {
digits: I18n.system_please_input + I18n.system_digits
}
},
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) {
// process
var executorTimeout = $("#addModal .form input[name='executorTimeout']").val();
if (!/^\d+$/.test(executorTimeout)) {
executorTimeout = 0;
}
$("#addModal .form input[name='executorTimeout']").val(executorTimeout);
var executorFailRetryCount = $("#addModal .form input[name='executorFailRetryCount']").val();
if (!/^\d+$/.test(executorFailRetryCount)) {
executorFailRetryCount = 0;
}
$("#addModal .form input[name='executorFailRetryCount']").val(executorFailRetryCount);
$.post(base_url + "/jobinfo/add", $("#addModal .form").serialize(), function (data, status) {
if (data.code == "200") {
$('#addModal').modal('hide');
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: I18n.system_add_suc,
icon: '1',
end: function (layero, index) {
jobTable.fnDraw();
//window.location.reload();
}
});
} else {
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: (data.msg || I18n.system_add_fail),
icon: '2'
});
}
});
}
});
$("#addModal").on('hide.bs.modal', function () {
$("#addModal .form")[0].reset();
//start end time
/* var startExecuteTime = $("#addModal .form input[name='startExecuteTime']").val();
var endExecuteTime = $("#addModal .form input[name='endExecuteTime']").val();*!/
if(startExecuteTime!=""&&endExecuteTime!=""&&d1 <= d2) {
alert("结束执行时间不能小于等于开始执行时间.");
return false;
}*/
addModalValidate.resetForm();
$("#addModal .form .form-group").removeClass("has-error");
$(".remote_panel").show(); // remote
$("#addModal .form input[name='executorHandler']").removeAttr("readonly");
});
// glueType change
$(".glueType").change(function () {
// executorHandler
var $executorHandler = $(this).parents("form").find("input[name='executorHandler']");
var glueType = $(this).val();
if ('BEAN' != glueType) {
$executorHandler.val("");
$executorHandler.attr("readonly", "readonly");
} else {
$executorHandler.removeAttr("readonly");
}
});
$("#addModal .glueType").change(function () {
// glueSource
var glueType = $(this).val();
if ('GLUE_GROOVY' == glueType) {
$("#addModal .form textarea[name='glueSource']").val($("#addModal .form .glueSource_java").val());
} else if ('GLUE_SHELL' == glueType) {
$("#addModal .form textarea[name='glueSource']").val($("#addModal .form .glueSource_shell").val());
} else if ('GLUE_PYTHON' == glueType) {
$("#addModal .form textarea[name='glueSource']").val($("#addModal .form .glueSource_python").val());
} else if ('GLUE_PHP' == glueType) {
$("#addModal .form textarea[name='glueSource']").val($("#addModal .form .glueSource_php").val());
} else if ('GLUE_NODEJS' == glueType) {
$("#addModal .form textarea[name='glueSource']").val($("#addModal .form .glueSource_nodejs").val());
} else if ('GLUE_POWERSHELL' == glueType) {
$("#addModal .form textarea[name='glueSource']").val($("#addModal .form .glueSource_powershell").val());
} else {
$("#addModal .form textarea[name='glueSource']").val("");
}
});
// update
$("#job_list").on('click', '.update', function () {
var id = $(this).parent('p').attr("id");
var row = tableData['key' + id];
// base data
$("#updateModal .form input[name='id']").val(row.id);
$('#updateModal .form select[name=jobGroup] option[value=' + row.jobGroup + ']').prop('selected', true);
$("#updateModal .form input[name='jobDesc']").val(row.jobDesc);
/*$("#updateModal .form input[name='jobCron']").val( row.jobCron );*/
$("#updateModal .form input[name='startExecuteTime']").val(row.startExecuteTime);
$("#updateModal .form input[name='endExecuteTime']").val(row.endExecuteTime);
$("#updateModal .form input[name='intervalSeconds']").val(row.intervalSeconds);
$("#updateModal .form input[name='repeatCount']").val(row.repeatCount);
$("#updateModal .form input[name='author']").val(row.author);
$("#updateModal .form input[name='alarmEmail']").val(row.alarmEmail);
$("#updateModal .form input[name='executorTimeout']").val(row.executorTimeout);
$("#updateModal .form input[name='executorFailRetryCount']").val(row.executorFailRetryCount);
$('#updateModal .form select[name=executorRouteStrategy] option[value=' + row.executorRouteStrategy + ']').prop('selected', true);
$("#updateModal .form input[name='executorHandler']").val(row.executorHandler);
$("#updateModal .form textarea[name='executorParam']").val(row.executorParam);
$("#updateModal .form input[name='childJobId']").val(row.childJobId);
$('#updateModal .form select[name=executorBlockStrategy] option[value=' + row.executorBlockStrategy + ']').prop('selected', true);
$('#updateModal .form select[name=glueType] option[value=' + row.glueType + ']').prop('selected', true);
$("#updateModal .form select[name=glueType]").change();
// show
$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
});
var updateModalValidate = $("#updateModal .form").validate({
errorElement: 'span',
errorClass: 'help-block',
focusInvalid: true,
rules: {
jobDesc: {
required: true,
maxlength: 50
},
jobCron: {
required: true
},
author: {
required: true
},
executorTimeout: {
digits: true
},
executorFailRetryCount: {
digits: true
}
},
messages: {
jobDesc: {
required: I18n.system_please_input + I18n.jobinfo_field_jobdesc
},
jobCron: {
required: I18n.system_please_input + "Cron"
},
author: {
required: I18n.system_please_input + I18n.jobinfo_field_author
},
executorTimeout: {
digits: I18n.system_please_input + I18n.system_digits
},
executorFailRetryCount: {
digits: I18n.system_please_input + I18n.system_digits
}
},
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) {
// process
var executorTimeout = $("#updateModal .form input[name='executorTimeout']").val();
if (!/^\d+$/.test(executorTimeout)) {
executorTimeout = 0;
}
$("#updateModal .form input[name='executorTimeout']").val(executorTimeout);
var executorFailRetryCount = $("#updateModal .form input[name='executorFailRetryCount']").val();
if (!/^\d+$/.test(executorFailRetryCount)) {
executorFailRetryCount = 0;
}
$("#updateModal .form input[name='executorFailRetryCount']").val(executorFailRetryCount);
// post
$.post(base_url + "/jobinfo/update", $("#updateModal .form").serialize(), function (data, status) {
if (data.code == "200") {
$('#updateModal').modal('hide');
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: I18n.system_update_suc,
icon: '1',
end: function (layero, index) {
//window.location.reload();
jobTable.fnDraw();
}
});
} else {
layer.open({
title: I18n.system_tips,
btn: [I18n.system_ok],
content: (data.msg || I18n.system_update_fail),
icon: '2'
});
}
});
}
});
$("#updateModal").on('hide.bs.modal', function () {
$("#updateModal .form")[0].reset()
});
/**
* find title by name, GlueType
*/
function findGlueTypeTitle(glueType) {
var glueTypeTitle;
$("#addModal .form select[name=glueType] option").each(function () {
var name = $(this).val();
var title = $(this).text();
if (glueType == name) {
glueTypeTitle = title;
return false
}
});
return glueTypeTitle;
}
//新增页面
laydate.render({
elem: '#startExecuteTime1',
type: 'datetime',
value: new Date(),
format: 'yyyy-MM-dd HH:mm:ss'
});
laydate.render({
elem: '#endExecuteTime1',
type: 'datetime'
});
//更新页面
laydate.render({
elem: '#startExecuteTime',
type: 'datetime'
});
laydate.render({
elem: '#endExecuteTime',
type: 'datetime'
});
});