新增作业计划调度管理,支持界面化配置,支持集群,支持日志查询

This commit is contained in:
thinkgem
2018-01-14 23:43:06 +08:00
parent 951287f062
commit 3e48e4f400
15 changed files with 1988 additions and 15749 deletions

View File

@@ -31,7 +31,7 @@ jdbc:
# testSql: SELECT 1
# PostgreSql 数据库配置
# type: postgre
# type: postgresql
# driver: org.postgresql.Driver
# url: jdbc:postgresql://localhost:5432/jeesite
# username: jeesite
@@ -186,11 +186,21 @@ user:
# 任务调度
job:
# 是否自动启动任务调度(集群情况下开启一个服务
# 是否自动启动任务调度(可关闭
autoStartup: true
# 任务调度启动延迟设置(单位:秒)(建议设置项目启动完成后的时间)
startupDelay: 60
# 任务调度线程池
threadPool:
threadCount: 10
threadPriority: 5
# 任务调度集群设置
jobStore:
isClustered: true
clusterCheckinInterval: 1000
# 内容管理
cms:

View File

@@ -1,528 +0,0 @@
/**
* 每周期
*/
function everyTime(dom) {
var item = $("input[name=v_" + dom.name + "]");
item.val("*");
item.change();
}
/**
* 不指定
*/
function unAppoint(dom) {
var name = dom.name;
var val = "?";
if (name == "year"){
val = "";
}
var item = $("input[name=v_" + name + "]");
item.val(val);
item.change();
}
/**
* 周期
*/
function cycle(dom) {
var name = dom.name;
var ns = $(dom).parent().find(".numberspinner");
var start = ns.eq(0).numberspinner("getValue");
var end = ns.eq(1).numberspinner("getValue");
var item = $("input[name=v_" + name + "]");
item.val(start + "-" + end);
item.change();
}
/**
* 从开始
*/
function startOn(dom) {
var name = dom.name;
var ns = $(dom).parent().find(".numberspinner");
var start = ns.eq(0).numberspinner("getValue");
var end = ns.eq(1).numberspinner("getValue");
var item = $("input[name=v_" + name + "]");
item.val(start + "/" + end);
item.change();
}
/**
* 本月最后一天
*/
function lastDay(dom){
var item = $("input[name=v_" + dom.name + "]");
item.val("L");
item.change();
}
/**
* 星期几的第几周
*/
function weekOfDay(dom){
var name = dom.name;
var ns = $(dom).parent().find(".numberspinner");
var start = ns.eq(0).numberspinner("getValue");
var end = ns.eq(1).numberspinner("getValue");
var item = $("input[name=v_" + name + "]");
item.val(start + "#" + end);
item.change();
}
/**
* 本月最后一个星期
*/
function lastWeek(dom){
var item = $("input[name=v_" + dom.name + "]");
var ns = $(dom).parent().find(".numberspinner");
var start = ns.eq(0).numberspinner("getValue");
item.val(start+"L");
item.change();
}
/**
* 每月几号的最近工作日
*/
function workDay(dom) {
var name = dom.name;
var ns = $(dom).parent().find(".numberspinner");
var start = ns.eq(0).numberspinner("getValue");
var item = $("input[name=v_" + name + "]");
item.val(start + "W");
item.change();
}
/**
* 获取URL地址参数
*/
function getQueryString(paramName, url) {
var reg = new RegExp("(^|&)" + paramName + "=([^&]*)(&|$)", "i");
if (!url || url == ""){
url = window.location.search;
}else{
url = url.substring(url.indexOf("?"));
}
r = url.substr(1).match(reg)
if (r != null) {
return unescape(r[2]);
}
return null;
}
/**
* 事件绑定
*/
$(function() {
$(".numberspinner").numberspinner({
onChange:function(){
$(this).closest("div.line").children().eq(0).click();
}
});
var cron = $("#cron");
cron.change(function () {
btnFan();
//设置最近五次运行时间
$.ajax({
type: 'post',
url: getQueryString('ctx') + "/sys/job/checkCron",
dataType: "json",
data: { "cron": $("#cron").val() },
success: function (data) {
$("#runTime").html(data.message);
}
});
});
var vals = $("input[name^='v_']");
vals.change(function() {
var item = [];
vals.each(function() {
item.push(this.value);
});
//获取当前选中tab
var currentIndex = 0;
$(".tabs>li").each(function (i, item) {
if($(item).hasClass("tabs-selected")){
currentIndex =i;
return false;
}
});
//如果当前选中项是日日和周互斥ThinkGem 2016-10-12
if (currentIndex == 3){
if (item[currentIndex] == "?"){
item[currentIndex + 2] = "1";
}else{
item[currentIndex + 2] = "?";
}
}
//如果当前选中项是星期日和周互斥ThinkGem 2016-10-12
if (currentIndex == 5){
if (item[currentIndex] == "?"){
item[currentIndex - 2] = "1";
}else{
item[currentIndex - 2] = "?";
}
}
//日和周同为?的时候取舍周日和周互斥ThinkGem 2016-10-12
if (item[3] == "?" && item[5] == "?"){
item[3] = "1";
}
//如果后一项不为* 那么前一项肯定不为为*,要不然就成了每秒执行了 ThinkGem 2016-10-12
for (var i = currentIndex; i >= 1; i--) {
if ((item[i] != "*" && item[i - 1] == "*") || currentIndex == "6") {
if (i == 4){
item[i - 1] = "1";
}else if (i <= 3){
item[i - 1] = "0";
}
}
}
//当前选中项之后的如果不为*则都设置成*
if (item[currentIndex] == "*") {
for (var i = currentIndex + 1; i < item.length; i++) {
if (i == 5) {
item[i] = "?";
} else {
item[i] = "*";
}
}
}
cron.val(item.join(" ")).change();
});
var secondList = $(".secondList").children();
$("#sencond_appoint").click(function(){
if (this.checked) {
if ($(secondList).filter(":checked").length == 0) {
$(secondList.eq(0)).attr("checked", true);
}
secondList.eq(0).change();
}
});
secondList.change(function() {
var sencond_appoint = $("#sencond_appoint").prop("checked");
if (sencond_appoint) {
var vals = [];
secondList.each(function() {
if (this.checked) {
vals.push(this.value);
}
});
var val = "?";
if (vals.length > 0 && vals.length < 59) {
val = vals.join(",");
}else if(vals.length == 59){
val = "*";
}
var item = $("input[name=v_second]");
item.val(val);
item.change();
}
});
var minList = $(".minList").children();
$("#min_appoint").click(function(){
if (this.checked) {
if ($(minList).filter(":checked").length == 0) {
$(minList.eq(0)).attr("checked", true);
}
minList.eq(0).change();
}
});
minList.change(function() {
var min_appoint = $("#min_appoint").prop("checked");
if (min_appoint) {
var vals = [];
minList.each(function() {
if (this.checked) {
vals.push(this.value);
}
});
var val = "?";
if (vals.length > 0 && vals.length < 59) {
val = vals.join(",");
}else if(vals.length == 59){
val = "*";
}
var item = $("input[name=v_min]");
item.val(val);
item.change();
}
});
var hourList = $(".hourList").children();
$("#hour_appoint").click(function(){
if (this.checked) {
if ($(hourList).filter(":checked").length == 0) {
$(hourList.eq(0)).attr("checked", true);
}
hourList.eq(0).change();
}
});
hourList.change(function() {
var hour_appoint = $("#hour_appoint").prop("checked");
if (hour_appoint) {
var vals = [];
hourList.each(function() {
if (this.checked) {
vals.push(this.value);
}
});
var val = "?";
if (vals.length > 0 && vals.length < 24) {
val = vals.join(",");
}else if(vals.length == 24){
val = "*";
}
var item = $("input[name=v_hour]");
item.val(val);
item.change();
}
});
var dayList = $(".dayList").children();
$("#day_appoint").click(function(){
if (this.checked) {
if ($(dayList).filter(":checked").length == 0) {
$(dayList.eq(0)).attr("checked", true);
}
dayList.eq(0).change();
}
});
dayList.change(function() {
var day_appoint = $("#day_appoint").prop("checked");
if (day_appoint) {
var vals = [];
dayList.each(function() {
if (this.checked) {
vals.push(this.value);
}
});
var val = "?";
if (vals.length > 0 && vals.length < 31) {
val = vals.join(",");
}else if(vals.length == 31){
val = "*";
}
var item = $("input[name=v_day]");
item.val(val);
item.change();
}
});
var mouthList = $(".mouthList").children();
$("#mouth_appoint").click(function(){
if (this.checked) {
if ($(mouthList).filter(":checked").length == 0) {
$(mouthList.eq(0)).attr("checked", true);
}
mouthList.eq(0).change();
}
});
mouthList.change(function() {
var mouth_appoint = $("#mouth_appoint").prop("checked");
if (mouth_appoint) {
var vals = [];
mouthList.each(function() {
if (this.checked) {
vals.push(this.value);
}
});
var val = "?";
if (vals.length > 0 && vals.length < 12) {
val = vals.join(",");
}else if(vals.length == 12){
val = "*";
}
var item = $("input[name=v_mouth]");
item.val(val);
item.change();
}
});
var weekList = $(".weekList").children();
$("#week_appoint").click(function(){
if (this.checked) {
if ($(weekList).filter(":checked").length == 0) {
$(weekList.eq(0)).attr("checked", true);
}
weekList.eq(0).change();
}
});
weekList.change(function() {
var week_appoint = $("#week_appoint").prop("checked");
if (week_appoint) {
var vals = [];
weekList.each(function() {
if (this.checked) {
vals.push(this.value);
}
});
var val = "?";
if (vals.length > 0 && vals.length < 7) {
val = vals.join(",");
}else if(vals.length == 7){
val = "*";
}
var item = $("input[name=v_week]");
item.val(val);
item.change();
}
});
});
// =========== 以下是反解析代码 =============
function btnFan() {
//获取参数中表达式的值
var txt = $("#cron").val();
if (txt) {
var regs = txt.split(' ');
$("input[name=v_second]").val(regs[0]);
$("input[name=v_min]").val(regs[1]);
$("input[name=v_hour]").val(regs[2]);
$("input[name=v_day]").val(regs[3]);
$("input[name=v_mouth]").val(regs[4]);
$("input[name=v_week]").val(regs[5]);
initObj(regs[0], "second");
initObj(regs[1], "min");
initObj(regs[2], "hour");
initDay(regs[3]);
initMonth(regs[4]);
initWeek(regs[5]);
if (regs.length > 6) {
$("input[name=v_year]").val(regs[6]);
initYear(regs[6]);
}
}
}
function initObj(strVal, strid) {
var ary = null;
var objRadio = $("input[name='" + strid + "'");
if (strVal == "*") {
objRadio.eq(0).attr("checked", "checked");
} else if (strVal.split('-').length > 1) {
ary = strVal.split('-');
objRadio.eq(1).attr("checked", "checked");
$("#" + strid + "Start_0").numberspinner('setValue', ary[0]);
$("#" + strid + "End_0").numberspinner('setValue', ary[1]);
} else if (strVal.split('/').length > 1) {
ary = strVal.split('/');
objRadio.eq(2).attr("checked", "checked");
$("#" + strid + "Start_1").numberspinner('setValue', ary[0]);
$("#" + strid + "End_1").numberspinner('setValue', ary[1]);
} else {
objRadio.eq(3).attr("checked", "checked");
if (strVal != "?") {
ary = strVal.split(",");
for (var i = 0; i < ary.length; i++) {
$("." + strid + "List input[value='" + ary[i] + "']").attr("checked", "checked");
}
}
}
}
function initDay(strVal) {
var ary = null;
var objRadio = $("input[name='day'");
if (strVal == "*") {
objRadio.eq(0).attr("checked", "checked");
} else if (strVal == "?") {
objRadio.eq(1).attr("checked", "checked");
} else if (strVal.split('-').length > 1) {
ary = strVal.split('-');
objRadio.eq(2).attr("checked", "checked");
$("#dayStart_0").numberspinner('setValue', ary[0]);
$("#dayEnd_0").numberspinner('setValue', ary[1]);
} else if (strVal.split('/').length > 1) {
ary = strVal.split('/');
objRadio.eq(3).attr("checked", "checked");
$("#dayStart_1").numberspinner('setValue', ary[0]);
$("#dayEnd_1").numberspinner('setValue', ary[1]);
} else if (strVal.split('W').length > 1) {
ary = strVal.split('W');
objRadio.eq(4).attr("checked", "checked");
$("#dayStart_2").numberspinner('setValue', ary[0]);
} else if (strVal == "L") {
objRadio.eq(5).attr("checked", "checked");
} else {
objRadio.eq(6).attr("checked", "checked");
ary = strVal.split(",");
for (var i = 0; i < ary.length; i++) {
$(".dayList input[value='" + ary[i] + "']").attr("checked", "checked");
}
}
}
function initMonth(strVal) {
var ary = null;
var objRadio = $("input[name='mouth'");
if (strVal == "*") {
objRadio.eq(0).attr("checked", "checked");
// } else if (strVal == "?") {
// objRadio.eq(1).attr("checked", "checked");
} else if (strVal.split('-').length > 1) {
ary = strVal.split('-');
objRadio.eq(2-1).attr("checked", "checked");
$("#mouthStart_0").numberspinner('setValue', ary[0]);
$("#mouthEnd_0").numberspinner('setValue', ary[1]);
} else if (strVal.split('/').length > 1) {
ary = strVal.split('/');
objRadio.eq(3-1).attr("checked", "checked");
$("#mouthStart_1").numberspinner('setValue', ary[0]);
$("#mouthEnd_1").numberspinner('setValue', ary[1]);
} else {
objRadio.eq(4-1).attr("checked", "checked");
ary = strVal.split(",");
for (var i = 0; i < ary.length; i++) {
$(".mouthList input[value='" + ary[i] + "']").attr("checked", "checked");
}
}
}
function initWeek(strVal) {
var ary = null;
var objRadio = $("input[name='week'");
if (strVal == "*") {
objRadio.eq(0).attr("checked", "checked");
} else if (strVal == "?") {
objRadio.eq(1).attr("checked", "checked");
} else if (strVal.split('-').length > 1) {
ary = strVal.split('-');
objRadio.eq(2).attr("checked", "checked");
$("#weekStart_0").numberspinner('setValue', ary[0]);
$("#weekEnd_0").numberspinner('setValue', ary[1]);
} else if (strVal.split('#').length > 1) {
ary = strVal.split('#');
objRadio.eq(3).attr("checked", "checked");
$("#weekStart_1").numberspinner('setValue', ary[0]);
$("#weekEnd_1").numberspinner('setValue', ary[1]);
} else if (strVal.split('L').length > 1) {
ary = strVal.split('L');
objRadio.eq(4).attr("checked", "checked");
$("#weekStart_2").numberspinner('setValue', ary[0]);
} else {
objRadio.eq(5).attr("checked", "checked");
ary = strVal.split(",");
for (var i = 0; i < ary.length; i++) {
$(".weekList input[value='" + ary[i] + "']").attr("checked", "checked");
}
}
}
function initYear(strVal) {
var ary = null;
var objRadio = $("input[name='year'");
if (strVal == "*") {
objRadio.eq(1).attr("checked", "checked");
} else if (strVal.split('-').length > 1) {
ary = strVal.split('-');
objRadio.eq(2).attr("checked", "checked");
$("#yearStart_0").numberspinner('setValue', ary[0]);
$("#yearEnd_0").numberspinner('setValue', ary[1]);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,354 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Cron表达式生成器</title>
<script src="../../jquery/jquery-1.12.4.min.js" type="text/javascript"></script>
<link href="easyui/themes/bootstrap/easyui.css" rel="stylesheet" type="text/css" />
<script src="easyui/jquery.easyui.min.js" type="text/javascript"></script>
<script src="cron.js" type="text/javascript"></script>
</head>
<body style="margin:0">
<div class="easyui-layout"
style="width: 630px; height: 520px; border: 1px rgb(202, 196, 196) solid; border-radius: 5px;">
<div style="height: 100%;">
<a href="javascript:location=location" style="position:absolute;top:7px;right:10px;z-index:100;font-size:12px">刷新</a>
<div class="easyui-tabs" data-options="fit:true,border:false">
<div title="秒">
<div class="line">
<input type="radio" checked="checked" name="second" onclick="everyTime(this)"> 每秒
允许的通配符[, - * /]
</div>
<div class="line">
<input type="radio" name="second" onclick="cycle(this)"> 周期从 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:58" value="1"
id="secondStart_0">- <input class="numberspinner" style="width: 60px;"
data-options="min:2,max:59" value="2" id="secondEnd_0">
</div>
<div class="line">
<input type="radio" name="second" onclick="startOn(this)"><input
class="numberspinner" style="width: 60px;" data-options="min:0,max:59" value="0"
id="secondStart_1">秒开始,每 <input class="numberspinner" style="width: 60px;"
data-options="min:1,max:59" value="1" id="secondEnd_1">秒执行一次
</div>
<div class="line">
<input type="radio" name="second" id="sencond_appoint"> 指定
</div>
<div class="imp secondList">
<input type="checkbox" value="0">00 <input type="checkbox" value="1">01 <input
type="checkbox" value="2">02 <input type="checkbox" value="3">03 <input
type="checkbox" value="4">04 <input type="checkbox" value="5">05 <input
type="checkbox" value="6">06 <input type="checkbox" value="7">07 <input
type="checkbox" value="8">08 <input type="checkbox" value="9">09
</div>
<div class="imp secondList">
<input type="checkbox" value="10">10 <input type="checkbox" value="11">11 <input
type="checkbox" value="12">12 <input type="checkbox" value="13">13 <input
type="checkbox" value="14">14 <input type="checkbox" value="15">15 <input
type="checkbox" value="16">16 <input type="checkbox" value="17">17 <input
type="checkbox" value="18">18 <input type="checkbox" value="19">19
</div>
<div class="imp secondList">
<input type="checkbox" value="20">20 <input type="checkbox" value="21">21 <input
type="checkbox" value="22">22 <input type="checkbox" value="23">23 <input
type="checkbox" value="24">24 <input type="checkbox" value="25">25 <input
type="checkbox" value="26">26 <input type="checkbox" value="27">27 <input
type="checkbox" value="28">28 <input type="checkbox" value="29">29
</div>
<div class="imp secondList">
<input type="checkbox" value="30">30 <input type="checkbox" value="31">31 <input
type="checkbox" value="32">32 <input type="checkbox" value="33">33 <input
type="checkbox" value="34">34 <input type="checkbox" value="35">35 <input
type="checkbox" value="36">36 <input type="checkbox" value="37">37 <input
type="checkbox" value="38">38 <input type="checkbox" value="39">39
</div>
<div class="imp secondList">
<input type="checkbox" value="40">40 <input type="checkbox" value="41">41 <input
type="checkbox" value="42">42 <input type="checkbox" value="43">43 <input
type="checkbox" value="44">44 <input type="checkbox" value="45">45 <input
type="checkbox" value="46">46 <input type="checkbox" value="47">47 <input
type="checkbox" value="48">48 <input type="checkbox" value="49">49
</div>
<div class="imp secondList">
<input type="checkbox" value="50">50 <input type="checkbox" value="51">51 <input
type="checkbox" value="52">52 <input type="checkbox" value="53">53 <input
type="checkbox" value="54">54 <input type="checkbox" value="55">55 <input
type="checkbox" value="56">56 <input type="checkbox" value="57">57 <input
type="checkbox" value="58">58 <input type="checkbox" value="59">59
</div>
</div>
<div title="分钟">
<div class="line">
<input type="radio" checked="checked" name="min" onclick="everyTime(this)"> 分钟
允许的通配符[, - * /]
</div>
<div class="line">
<input type="radio" name="min" onclick="cycle(this)"> 周期从 <input class="numberspinner"
style="width: 60px;" data-options="min:1,max:58" value="1" id="minStart_0">- <input
class="numberspinner" style="width: 60px;" data-options="min:2,max:59" value="2"
id="minEnd_0">分钟
</div>
<div class="line">
<input type="radio" name="min" onclick="startOn(this)"><input class="numberspinner"
style="width: 60px;" data-options="min:0,max:59" value="0" id="minStart_1">分钟开始,每 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:59" value="1"
id="minEnd_1">分钟执行一次
</div>
<div class="line">
<input type="radio" name="min" id="min_appoint"> 指定
</div>
<div class="imp minList">
<input type="checkbox" value="0">00 <input type="checkbox" value="1">01 <input
type="checkbox" value="2">02 <input type="checkbox" value="3">03 <input
type="checkbox" value="4">04 <input type="checkbox" value="5">05 <input
type="checkbox" value="6">06 <input type="checkbox" value="7">07 <input
type="checkbox" value="8">08 <input type="checkbox" value="9">09
</div>
<div class="imp minList">
<input type="checkbox" value="10">10 <input type="checkbox" value="11">11 <input
type="checkbox" value="12">12 <input type="checkbox" value="13">13 <input
type="checkbox" value="14">14 <input type="checkbox" value="15">15 <input
type="checkbox" value="16">16 <input type="checkbox" value="17">17 <input
type="checkbox" value="18">18 <input type="checkbox" value="19">19
</div>
<div class="imp minList">
<input type="checkbox" value="20">20 <input type="checkbox" value="21">21 <input
type="checkbox" value="22">22 <input type="checkbox" value="23">23 <input
type="checkbox" value="24">24 <input type="checkbox" value="25">25 <input
type="checkbox" value="26">26 <input type="checkbox" value="27">27 <input
type="checkbox" value="28">28 <input type="checkbox" value="29">29
</div>
<div class="imp minList">
<input type="checkbox" value="30">30 <input type="checkbox" value="31">31 <input
type="checkbox" value="32">32 <input type="checkbox" value="33">33 <input
type="checkbox" value="34">34 <input type="checkbox" value="35">35 <input
type="checkbox" value="36">36 <input type="checkbox" value="37">37 <input
type="checkbox" value="38">38 <input type="checkbox" value="39">39
</div>
<div class="imp minList">
<input type="checkbox" value="40">40 <input type="checkbox" value="41">41 <input
type="checkbox" value="42">42 <input type="checkbox" value="43">43 <input
type="checkbox" value="44">44 <input type="checkbox" value="45">45 <input
type="checkbox" value="46">46 <input type="checkbox" value="47">47 <input
type="checkbox" value="48">48 <input type="checkbox" value="49">49
</div>
<div class="imp minList">
<input type="checkbox" value="50">50 <input type="checkbox" value="51">51 <input
type="checkbox" value="52">52 <input type="checkbox" value="53">53 <input
type="checkbox" value="54">54 <input type="checkbox" value="55">55 <input
type="checkbox" value="56">56 <input type="checkbox" value="57">57 <input
type="checkbox" value="58">58 <input type="checkbox" value="59">59
</div>
</div>
<div title="小时">
<div class="line">
<input type="radio" checked="checked" name="hour" onclick="everyTime(this)"> 小时
允许的通配符[, - * /]
</div>
<div class="line">
<input type="radio" name="hour" onclick="cycle(this)"> 周期从 <input
class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
id="hourStart_0">- <input class="numberspinner" style="width: 60px;"
data-options="min:2,max:23" value="2" id="hourEnd_1">小时
</div>
<div class="line">
<input type="radio" name="hour" onclick="startOn(this)"><input
class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
id="hourStart_1">小时开始,每 <input class="numberspinner" style="width: 60px;"
data-options="min:1,max:23" value="1" id="hourEnd_1">小时执行一次
</div>
<div class="line">
<input type="radio" name="hour" id="hour_appoint"> 指定
</div>
<div class="imp hourList">
上午: <input type="checkbox" value="0">00 <input type="checkbox" value="1">01 <input
type="checkbox" value="2">02 <input type="checkbox" value="3">03 <input
type="checkbox" value="4">04 <input type="checkbox" value="5">05 <input
type="checkbox" value="6">06 <input type="checkbox" value="7">07 <input
type="checkbox" value="8">08 <input type="checkbox" value="9">09 <input
type="checkbox" value="10">10 <input type="checkbox" value="11">11
</div>
<div class="imp hourList">
下午: <input type="checkbox" value="12">12 <input type="checkbox" value="13">13
<input type="checkbox" value="14">14 <input type="checkbox" value="15">15 <input
type="checkbox" value="16">16 <input type="checkbox" value="17">17 <input
type="checkbox" value="18">18 <input type="checkbox" value="19">19 <input
type="checkbox" value="20">20 <input type="checkbox" value="21">21 <input
type="checkbox" value="22">22 <input type="checkbox" value="23">23
</div>
</div>
<div title="日">
<div class="line">
<input type="radio" checked="checked" name="day" onclick="everyTime(this)"> 日 允许的通配符[,
- * / L W]
</div>
<div class="line">
<input type="radio" name="day" onclick="unAppoint(this)"> 不指定
</div>
<div class="line">
<input type="radio" name="day" onclick="cycle(this)"> 周期从 <input class="numberspinner"
style="width: 60px;" data-options="min:1,max:31" value="1" id="dayStart_0">- <input
class="numberspinner" style="width: 60px;" data-options="min:2,max:31" value="2"
id="dayEnd_0">
</div>
<div class="line">
<input type="radio" name="day" onclick="startOn(this)"><input class="numberspinner"
style="width: 60px;" data-options="min:1,max:31" value="1" id="dayStart_1">日开始,每 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
id="dayEnd_1">天执行一次
</div>
<div class="line">
<input type="radio" name="day" onclick="workDay(this)"> 每月 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
id="dayStart_2">号最近的那个工作日
</div>
<div class="line">
<input type="radio" name="day" onclick="lastDay(this)"> 本月最后一天
</div>
<div class="line">
<input type="radio" name="day" id="day_appoint"> 指定
</div>
<div class="imp dayList">
<input type="checkbox" value="1">1 <input type="checkbox" value="2">2 <input
type="checkbox" value="3">3 <input type="checkbox" value="4">4 <input
type="checkbox" value="5">5 <input type="checkbox" value="6">6 <input
type="checkbox" value="7">7 <input type="checkbox" value="8">8 <input
type="checkbox" value="9">9 <input type="checkbox" value="10">10 <input
type="checkbox" value="11">11 <input type="checkbox" value="12">12 <input
type="checkbox" value="13">13 <input type="checkbox" value="14">14 <input
type="checkbox" value="15">15 <input type="checkbox" value="16">16
</div>
<div class="imp dayList">
<input type="checkbox" value="17">17 <input type="checkbox" value="18">18 <input
type="checkbox" value="19">19 <input type="checkbox" value="20">20 <input
type="checkbox" value="21">21 <input type="checkbox" value="22">22 <input
type="checkbox" value="23">23 <input type="checkbox" value="24">24 <input
type="checkbox" value="25">25 <input type="checkbox" value="26">26 <input
type="checkbox" value="27">27 <input type="checkbox" value="28">28 <input
type="checkbox" value="29">29 <input type="checkbox" value="30">30 <input
type="checkbox" value="31">31
</div>
</div>
<div title="月">
<div class="line">
<input type="radio" checked="checked" name="mouth" onclick="everyTime(this)">
允许的通配符[, - * /]
</div>
<!-- <div class="line"> -->
<!-- <input type="radio" name="mouth" onclick="unAppoint(this)"> 不指定</div> -->
<div class="line">
<input type="radio" name="mouth" onclick="cycle(this)"> 周期从 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
id="mouthStart_0">- <input class="numberspinner" style="width: 60px;"
data-options="min:2,max:12" value="2" id="mouthEnd_0">
</div>
<div class="line">
<input type="radio" id="mouth_3" name="mouth" onclick="startOn(this)"><input
class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
id="mouthStart_1">日开始,每 <input class="numberspinner" style="width: 60px;"
data-options="min:1,max:12" value="1" id="mouthEnd_1">月执行一次
</div>
<div class="line">
<input type="radio" name="mouth" id="mouth_appoint"> 指定
</div>
<div class="imp mouthList">
<input type="checkbox" value="1">1 <input type="checkbox" value="2">2 <input
type="checkbox" value="3">3 <input type="checkbox" value="4">4 <input
type="checkbox" value="5">5 <input type="checkbox" value="6">6 <input
type="checkbox" value="7">7 <input type="checkbox" value="8">8 <input
type="checkbox" value="9">9 <input type="checkbox" value="10">10 <input
type="checkbox" value="11">11 <input type="checkbox" value="12">12
</div>
</div>
<div title="周">
<div class="line">
<input type="radio" checked="checked" name="week" onclick="everyTime(this)">
允许的通配符[, - * / L #]
</div>
<div class="line">
<input type="radio" name="week" onclick="unAppoint(this)"> 不指定
</div>
<div class="line">
<input type="radio" name="week" onclick="cycle(this)"> 周期 从星期 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:7" value="1"
id="weekStart_0">- <input class="numberspinner" style="width: 60px;"
data-options="min:2,max:7" value="2" id="weekEnd_0">
</div>
<div class="line">
<input type="radio" name="week" onclick="weekOfDay(this)"> 星期 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:7" value="1"
id="weekStart_1">的, 第 <input class="numberspinner" style="width: 60px;"
data-options="min:1,max:4" value="1" id="weekEnd_1">
</div>
<div class="line">
<input type="radio" name="week" onclick="lastWeek(this)"> 本月最后一个星期 <input
class="numberspinner" style="width: 60px;" data-options="min:1,max:7" id="weekStart_2"
value="1">
</div>
<div class="line">
<input type="radio" name="week" id="week_appoint"> 指定
</div>
<div class="imp weekList">
<input type="checkbox" value="1">1 周日 <input type="checkbox" value="2">2 周一 <input
type="checkbox" value="3">3 周二 <input type="checkbox" value="4">4 周三 <input
type="checkbox" value="5">5 周四 <input type="checkbox" value="6">6 周五 <input
type="checkbox" value="7">7 周六
</div>
</div>
<div title="年">
<div class="line">
<input type="radio" checked="checked" name="year" onclick="unAppoint(this)"> 不指定
允许的通配符[, - * /] 非必填
</div>
<div class="line">
<input type="radio" name="year" onclick="everyTime(this)"> 每年
</div>
<div class="line">
<input type="radio" name="year" onclick="cycle(this)"> 周期 从 <input
class="numberspinner" style="width: 90px;" data-options="min:2013,max:3000" id="yearStart_0"
value="2016">- <input class="numberspinner" style="width: 90px;"
data-options="min:2014,max:3000" id="yearEnd_0" value="2019">
</div>
</div>
</div>
</div>
<div data-options="region:'south',border:false" style="height: 245px">
<fieldset style="border-radius: 3px; height: 200px;">
<legend>表达式</legend>
<table style="width: 100%">
<tbody>
<tr>
<td></td>
<td align="center"></td>
<td align="center">分钟</td>
<td align="center">小时</td>
<td align="center"></td>
<td align="center"><br /></td>
<td align="center">星期</td>
<td align="center"></td>
</tr>
<tr>
<td>表达式字段:</td>
<td><input type="text" name="v_second" class="col" value="*" readonly="readonly" /></td>
<td><input type="text" name="v_min" class="col" value="*" readonly="readonly" /></td>
<td><input type="text" name="v_hour" class="col" value="*" readonly="readonly" /></td>
<td><input type="text" name="v_day" class="col" value="*" readonly="readonly" /></td>
<td><input type="text" name="v_mouth" class="col" value="*" readonly="readonly" /></td>
<td><input type="text" name="v_week" class="col" value="?" readonly="readonly" /></td>
<td><input type="text" name="v_year" class="col" readonly="readonly" /></td>
</tr>
<tr>
<td>Cron 表达式:</td>
<td colspan="5"><input type="text" name="cron" style="width: 98%;" value="* * * * * ?"
id="cron" /></td>
<td colspan="2"><input type="button" value="表达式反解析到界面" id="btnFan" onclick="btnFan()" /></td>
</tr>
<tr>
<td colspan="8"><div id="runTime" style="height: 120px; overflow: auto;"></div></td>
</tr>
</tbody>
</table>
</fieldset>
</div>
</div>
</body>
</html>