$(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' }); });