cronsetting.jsp 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>Cron表达式生成器</title>
  7. <meta name="description" content="通过这个生成器,您可以在线生成任务调度比如Quartz的Cron表达式,对Quartz Cron 表达式的可视化双向解析和生成." />
  8. <meta name="keywords" content="cron creater,generate Cron Expression,Cron Expression online,Quartz Cron Expresssion,cron在线生成工具" />
  9. <meta name="baidu-tc-cerfication" content="52031c379393b942ce0d59195791f366" />
  10. <link href="plug-in/cron/themes/bootstrap/easyui.min.css" rel="stylesheet" type="text/css" />
  11. <link href="plug-in/cron/themes/icon.css" rel="stylesheet" type="text/css" />
  12. <link href="plug-in/cron/icon.css" rel="stylesheet" type="text/css" />
  13. <script src="plug-in/cron/jquery-1.6.2.min.js" type="text/javascript"></script>
  14. <script src="plug-in/cron/jquery.easyui.min.js" type="text/javascript"></script>
  15. <script src="plug-in/cron/cron.js" type="text/javascript"></script>
  16. <style type="text/css">
  17. .line
  18. {
  19. height: 25px;
  20. line-height: 25px;
  21. margin: 3px;
  22. }
  23. .imp
  24. {
  25. padding-left: 25px;
  26. }
  27. .col
  28. {
  29. width: 95px;
  30. }
  31. ul {
  32. list-style:none;
  33. padding-left:10px;
  34. }
  35. li {
  36. height:20px;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <center>
  42. <div class="easyui-layout" style="width:930px;height:560px; border: 1px rgb(202, 196, 196) solid;
  43. border-radius: 5px;">
  44. <div style="height: 100%;">
  45. <div class="easyui-tabs" data-options="fit:true,border:false">
  46. <div title="秒">
  47. <div class="line">
  48. <input type="radio" checked="checked" name="second" onclick="everyTime(this)">
  49. 每秒 允许的通配符[, - * /]</div>
  50. <div class="line">
  51. <input type="radio" name="second" onclick="cycle(this)">
  52. 周期从
  53. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:58" value="1"
  54. id="secondStart_0">
  55. -
  56. <input class="numberspinner" style="width: 60px;" data-options="min:2,max:59" value="2"
  57. id="secondEnd_0">
  58. 秒</div>
  59. <div class="line">
  60. <input type="radio" name="second" onclick="startOn(this)">
  61. <input class="numberspinner" style="width: 60px;" data-options="min:0,max:59" value="0"
  62. id="secondStart_1">
  63. 秒开始,每
  64. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:59" value="1"
  65. id="secondEnd_1">
  66. 秒执行一次</div>
  67. <div class="line">
  68. <input type="radio" name="second" id="sencond_appoint">
  69. 指定</div>
  70. <div class="imp secondList">
  71. <input type="checkbox" value="0">00
  72. <input type="checkbox" value="1">01
  73. <input type="checkbox" value="2">02
  74. <input type="checkbox" value="3">03
  75. <input type="checkbox" value="4">04
  76. <input type="checkbox" value="5">05
  77. <input type="checkbox" value="6">06
  78. <input type="checkbox" value="7">07
  79. <input type="checkbox" value="8">08
  80. <input type="checkbox" value="9">09
  81. </div>
  82. <div class="imp secondList">
  83. <input type="checkbox" value="10">10
  84. <input type="checkbox" value="11">11
  85. <input type="checkbox" value="12">12
  86. <input type="checkbox" value="13">13
  87. <input type="checkbox" value="14">14
  88. <input type="checkbox" value="15">15
  89. <input type="checkbox" value="16">16
  90. <input type="checkbox" value="17">17
  91. <input type="checkbox" value="18">18
  92. <input type="checkbox" value="19">19
  93. </div>
  94. <div class="imp secondList">
  95. <input type="checkbox" value="20">20
  96. <input type="checkbox" value="21">21
  97. <input type="checkbox" value="22">22
  98. <input type="checkbox" value="23">23
  99. <input type="checkbox" value="24">24
  100. <input type="checkbox" value="25">25
  101. <input type="checkbox" value="26">26
  102. <input type="checkbox" value="27">27
  103. <input type="checkbox" value="28">28
  104. <input type="checkbox" value="29">29
  105. </div>
  106. <div class="imp secondList">
  107. <input type="checkbox" value="30">30
  108. <input type="checkbox" value="31">31
  109. <input type="checkbox" value="32">32
  110. <input type="checkbox" value="33">33
  111. <input type="checkbox" value="34">34
  112. <input type="checkbox" value="35">35
  113. <input type="checkbox" value="36">36
  114. <input type="checkbox" value="37">37
  115. <input type="checkbox" value="38">38
  116. <input type="checkbox" value="39">39
  117. </div>
  118. <div class="imp secondList">
  119. <input type="checkbox" value="40">40
  120. <input type="checkbox" value="41">41
  121. <input type="checkbox" value="42">42
  122. <input type="checkbox" value="43">43
  123. <input type="checkbox" value="44">44
  124. <input type="checkbox" value="45">45
  125. <input type="checkbox" value="46">46
  126. <input type="checkbox" value="47">47
  127. <input type="checkbox" value="48">48
  128. <input type="checkbox" value="49">49
  129. </div>
  130. <div class="imp secondList">
  131. <input type="checkbox" value="50">50
  132. <input type="checkbox" value="51">51
  133. <input type="checkbox" value="52">52
  134. <input type="checkbox" value="53">53
  135. <input type="checkbox" value="54">54
  136. <input type="checkbox" value="55">55
  137. <input type="checkbox" value="56">56
  138. <input type="checkbox" value="57">57
  139. <input type="checkbox" value="58">58
  140. <input type="checkbox" value="59">59
  141. </div>
  142. </div>
  143. <div title="分钟">
  144. <div class="line">
  145. <input type="radio" checked="checked" name="min" onclick="everyTime(this)">
  146. 分钟 允许的通配符[, - * /]</div>
  147. <div class="line">
  148. <input type="radio" name="min" onclick="cycle(this)">
  149. 周期从
  150. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:58" value="1"
  151. id="minStart_0">
  152. -
  153. <input class="numberspinner" style="width: 60px;" data-options="min:2,max:59" value="2"
  154. id="minEnd_0">
  155. 分钟</div>
  156. <div class="line">
  157. <input type="radio" name="min" onclick="startOn(this)">
  158. <input class="numberspinner" style="width: 60px;" data-options="min:0,max:59" value="0"
  159. id="minStart_1">
  160. 分钟开始,每
  161. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:59" value="1"
  162. id="minEnd_1">
  163. 分钟执行一次</div>
  164. <div class="line">
  165. <input type="radio" name="min" id="min_appoint">
  166. 指定</div>
  167. <div class="imp minList">
  168. <input type="checkbox" value="0">00
  169. <input type="checkbox" value="1">01
  170. <input type="checkbox" value="2">02
  171. <input type="checkbox" value="3">03
  172. <input type="checkbox" value="4">04
  173. <input type="checkbox" value="5">05
  174. <input type="checkbox" value="6">06
  175. <input type="checkbox" value="7">07
  176. <input type="checkbox" value="8">08
  177. <input type="checkbox" value="9">09
  178. </div>
  179. <div class="imp minList">
  180. <input type="checkbox" value="10">10
  181. <input type="checkbox" value="11">11
  182. <input type="checkbox" value="12">12
  183. <input type="checkbox" value="13">13
  184. <input type="checkbox" value="14">14
  185. <input type="checkbox" value="15">15
  186. <input type="checkbox" value="16">16
  187. <input type="checkbox" value="17">17
  188. <input type="checkbox" value="18">18
  189. <input type="checkbox" value="19">19
  190. </div>
  191. <div class="imp minList">
  192. <input type="checkbox" value="20">20
  193. <input type="checkbox" value="21">21
  194. <input type="checkbox" value="22">22
  195. <input type="checkbox" value="23">23
  196. <input type="checkbox" value="24">24
  197. <input type="checkbox" value="25">25
  198. <input type="checkbox" value="26">26
  199. <input type="checkbox" value="27">27
  200. <input type="checkbox" value="28">28
  201. <input type="checkbox" value="29">29
  202. </div>
  203. <div class="imp minList">
  204. <input type="checkbox" value="30">30
  205. <input type="checkbox" value="31">31
  206. <input type="checkbox" value="32">32
  207. <input type="checkbox" value="33">33
  208. <input type="checkbox" value="34">34
  209. <input type="checkbox" value="35">35
  210. <input type="checkbox" value="36">36
  211. <input type="checkbox" value="37">37
  212. <input type="checkbox" value="38">38
  213. <input type="checkbox" value="39">39
  214. </div>
  215. <div class="imp minList">
  216. <input type="checkbox" value="40">40
  217. <input type="checkbox" value="41">41
  218. <input type="checkbox" value="42">42
  219. <input type="checkbox" value="43">43
  220. <input type="checkbox" value="44">44
  221. <input type="checkbox" value="45">45
  222. <input type="checkbox" value="46">46
  223. <input type="checkbox" value="47">47
  224. <input type="checkbox" value="48">48
  225. <input type="checkbox" value="49">49
  226. </div>
  227. <div class="imp minList">
  228. <input type="checkbox" value="50">50
  229. <input type="checkbox" value="51">51
  230. <input type="checkbox" value="52">52
  231. <input type="checkbox" value="53">53
  232. <input type="checkbox" value="54">54
  233. <input type="checkbox" value="55">55
  234. <input type="checkbox" value="56">56
  235. <input type="checkbox" value="57">57
  236. <input type="checkbox" value="58">58
  237. <input type="checkbox" value="59">59
  238. </div>
  239. </div>
  240. <div title="小时">
  241. <div class="line">
  242. <input type="radio" checked="checked" name="hour" onclick="everyTime(this)">
  243. 小时 允许的通配符[, - * /]</div>
  244. <div class="line">
  245. <input type="radio" name="hour" onclick="cycle(this)">
  246. 周期从
  247. <input class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
  248. id="hourStart_0">
  249. -
  250. <input class="numberspinner" style="width: 60px;" data-options="min:2,max:23" value="2"
  251. id="hourEnd_1">
  252. 小时</div>
  253. <div class="line">
  254. <input type="radio" name="hour" onclick="startOn(this)">
  255. <input class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
  256. id="hourStart_1">
  257. 小时开始,每
  258. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:23" value="1"
  259. id="hourEnd_1">
  260. 小时执行一次</div>
  261. <div class="line">
  262. <input type="radio" name="hour" id="hour_appoint">
  263. 指定</div>
  264. <div class="imp hourList">
  265. AM:
  266. <input type="checkbox" value="0">00
  267. <input type="checkbox" value="1">01
  268. <input type="checkbox" value="2">02
  269. <input type="checkbox" value="3">03
  270. <input type="checkbox" value="4">04
  271. <input type="checkbox" value="5">05
  272. <input type="checkbox" value="6">06
  273. <input type="checkbox" value="7">07
  274. <input type="checkbox" value="8">08
  275. <input type="checkbox" value="9">09
  276. <input type="checkbox" value="10">10
  277. <input type="checkbox" value="11">11
  278. </div>
  279. <div class="imp hourList">
  280. PM:
  281. <input type="checkbox" value="12">12
  282. <input type="checkbox" value="13">13
  283. <input type="checkbox" value="14">14
  284. <input type="checkbox" value="15">15
  285. <input type="checkbox" value="16">16
  286. <input type="checkbox" value="17">17
  287. <input type="checkbox" value="18">18
  288. <input type="checkbox" value="19">19
  289. <input type="checkbox" value="20">20
  290. <input type="checkbox" value="21">21
  291. <input type="checkbox" value="22">22
  292. <input type="checkbox" value="23">23
  293. </div>
  294. </div>
  295. <div title="日">
  296. <div class="line">
  297. <input type="radio" checked="checked" name="day" onclick="everyTime(this)">
  298. 日 允许的通配符[, - * / L W]</div>
  299. <div class="line">
  300. <input type="radio" name="day" onclick="unAppoint(this)">
  301. 不指定</div>
  302. <div class="line">
  303. <input type="radio" name="day" onclick="cycle(this)">
  304. 周期从
  305. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
  306. id="dayStart_0">
  307. -
  308. <input class="numberspinner" style="width: 60px;" data-options="min:2,max:31" value="2"
  309. id="dayEnd_0">
  310. 日</div>
  311. <div class="line">
  312. <input type="radio" name="day" onclick="startOn(this)">
  313. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
  314. id="dayStart_1">
  315. 日开始,每
  316. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
  317. id="dayEnd_1">
  318. 天执行一次</div>
  319. <div class="line">
  320. <input type="radio" name="day" onclick="workDay(this)">
  321. 每月
  322. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
  323. id="dayStart_2">
  324. 号最近的那个工作日</div>
  325. <div class="line">
  326. <input type="radio" name="day" onclick="lastDay(this)">
  327. 本月最后一天</div>
  328. <div class="line">
  329. <input type="radio" name="day" id="day_appoint">
  330. 指定</div>
  331. <div class="imp dayList">
  332. <input type="checkbox" value="1">1
  333. <input type="checkbox" value="2">2
  334. <input type="checkbox" value="3">3
  335. <input type="checkbox" value="4">4
  336. <input type="checkbox" value="5">5
  337. <input type="checkbox" value="6">6
  338. <input type="checkbox" value="7">7
  339. <input type="checkbox" value="8">8
  340. <input type="checkbox" value="9">9
  341. <input type="checkbox" value="10">10
  342. <input type="checkbox" value="11">11
  343. <input type="checkbox" value="12">12
  344. <input type="checkbox" value="13">13
  345. <input type="checkbox" value="14">14
  346. <input type="checkbox" value="15">15
  347. <input type="checkbox" value="16">16
  348. </div>
  349. <div class="imp dayList">
  350. <input type="checkbox" value="17">17
  351. <input type="checkbox" value="18">18
  352. <input type="checkbox" value="19">19
  353. <input type="checkbox" value="20">20
  354. <input type="checkbox" value="21">21
  355. <input type="checkbox" value="22">22
  356. <input type="checkbox" value="23">23
  357. <input type="checkbox" value="24">24
  358. <input type="checkbox" value="25">25
  359. <input type="checkbox" value="26">26
  360. <input type="checkbox" value="27">27
  361. <input type="checkbox" value="28">28
  362. <input type="checkbox" value="29">29
  363. <input type="checkbox" value="30">30
  364. <input type="checkbox" value="31">31
  365. </div>
  366. </div>
  367. <div title="月">
  368. <div class="line">
  369. <input type="radio" checked="checked" name="mouth" onclick="everyTime(this)">
  370. 月 允许的通配符[, - * /]</div>
  371. <div class="line">
  372. <input type="radio" name="mouth" onclick="unAppoint(this)">
  373. 不指定</div>
  374. <div class="line">
  375. <input type="radio" name="mouth" onclick="cycle(this)">
  376. 周期从
  377. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
  378. id="mouthStart_0">
  379. -
  380. <input class="numberspinner" style="width: 60px;" data-options="min:2,max:12" value="2"
  381. id="mouthEnd_0">
  382. 月</div>
  383. <div class="line">
  384. <input type="radio" name="mouth" onclick="startOn(this)">
  385. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
  386. id="mouthStart_1">
  387. 日开始,每
  388. <input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
  389. id="mouthEnd_1">
  390. 月执行一次</div>
  391. <div class="line">
  392. <input type="radio" name="mouth" id="mouth_appoint">
  393. 指定</div>
  394. <div class="imp mouthList">
  395. <input type="checkbox" value="1">1
  396. <input type="checkbox" value="2">2
  397. <input type="checkbox" value="3">3
  398. <input type="checkbox" value="4">4
  399. <input type="checkbox" value="5">5
  400. <input type="checkbox" value="6">6
  401. <input type="checkbox" value="7">7
  402. <input type="checkbox" value="8">8
  403. <input type="checkbox" value="9">9
  404. <input type="checkbox" value="10">10
  405. <input type="checkbox" value="11">11
  406. <input type="checkbox" value="12">12
  407. </div>
  408. </div>
  409. <div title="周">
  410. <div class="line">
  411. <input type="radio" checked="checked" name="week" onclick="everyTime(this)">
  412. 周 允许的通配符[, - * / L #]</div>
  413. <div class="line">
  414. <input type="radio" name="week" onclick="unAppoint(this)">
  415. 不指定</div>
  416. <div class="line">
  417. <input type="radio" name="week" onclick="startOn(this)">
  418. 周期 从星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
  419. id="weekStart_0" value="1">
  420. -
  421. <input class="numberspinner" style="width: 60px;" data-options="min:2,max:7" value="2"
  422. id="weekEnd_0"></div>
  423. <div class="line">
  424. <input type="radio" name="week" onclick="weekOfDay(this)">
  425. 第<input class="numberspinner" style="width: 60px;" data-options="min:1,max:4" value="1"
  426. id="weekStart_1">
  427. 周 的星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
  428. id="weekEnd_1" value="1"></div>
  429. <div class="line">
  430. <input type="radio" name="week" onclick="lastWeek(this)">
  431. 本月最后一个星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
  432. id="weekStart_2" value="1"></div>
  433. <div class="line">
  434. <input type="radio" name="week" id="week_appoint">
  435. 指定</div>
  436. <div class="imp weekList">
  437. <input type="checkbox" value="1">1
  438. <input type="checkbox" value="2">2
  439. <input type="checkbox" value="3">3
  440. <input type="checkbox" value="4">4
  441. <input type="checkbox" value="5">5
  442. <input type="checkbox" value="6">6
  443. <input type="checkbox" value="7">7
  444. </div>
  445. </div>
  446. <div title="年">
  447. <div class="line">
  448. <input type="radio" checked="checked" name="year" onclick="unAppoint(this)">
  449. 不指定 允许的通配符[, - * /] 非必填</div>
  450. <div class="line">
  451. <input type="radio" name="year" onclick="everyTime(this)">
  452. 每年</div>
  453. <div class="line">
  454. <input type="radio" name="year" onclick="cycle(this)">周期 从
  455. <input class="numberspinner" style="width: 90px;" data-options="min:2013,max:3000"
  456. id="yearStart_0" value="2013">
  457. -
  458. <input class="numberspinner" style="width: 90px;" data-options="min:2014,max:3000"
  459. id="yearEnd_0" value="2014"></div>
  460. </div>
  461. </div>
  462. </div>
  463. <div data-options="region:'south',border:false" style="height:250px">
  464. <fieldset style="border-radius: 3px; height: 220px;">
  465. <legend>表达式</legend>
  466. <table style="height: 100px;">
  467. <tbody>
  468. <tr>
  469. <td>
  470. </td>
  471. <td align="center">
  472. </td>
  473. <td align="center">
  474. 分钟
  475. </td>
  476. <td align="center">
  477. 小时
  478. </td>
  479. <td align="center">
  480. </td>
  481. <td align="center">
  482. 月<br />
  483. </td>
  484. <td align="center">
  485. 星期
  486. </td>
  487. <td align="center">
  488. </td>
  489. </tr>
  490. <tr>
  491. <td style="width: 120px; ">
  492. 表达式字段:
  493. </td>
  494. <td>
  495. <input type="text" name="v_second" class="col" value="*" readonly="readonly" />
  496. </td>
  497. <td>
  498. <input type="text" name="v_min" class="col" value="*" readonly="readonly" />
  499. </td>
  500. <td>
  501. <input type="text" name="v_hour" class="col" value="*" readonly="readonly" />
  502. </td>
  503. <td>
  504. <input type="text" name="v_day" class="col" value="*" readonly="readonly" />
  505. </td>
  506. <td>
  507. <input type="text" name="v_mouth" class="col" value="*" readonly="readonly" />
  508. </td>
  509. <td>
  510. <input type="text" name="v_week" class="col" value="?" readonly="readonly" />
  511. </td>
  512. <td>
  513. <input type="text" name="v_year" class="col" readonly="readonly" />
  514. </td>
  515. </tr>
  516. <tr>
  517. <td>Cron 表达式:</td>
  518. <td colspan="5"><input type="text" name="cron" style="width: 100%;" value="* * * * * ?" id="cron"
  519. /></td>
  520. <td><input type="button" value="反解析到UI " id="btnFan" onclick="btnFan()"/></td>
  521. <td><input type="button" value="反解析到UI " id="btnCN" onclick="btnCN()"/></td>
  522. </tr>
  523. <tr>
  524. <td>
  525. <label >中文描述: </label>
  526. </td>
  527. <td colspan="5">
  528. <input type="text" name="chinese" class="col" readonly="readonly" style="width:100%; "/>
  529. </td>
  530. </tr>
  531. <tr >
  532. <td colspan="8" >最近5次运行时间:</td>
  533. </tr>
  534. <tr>
  535. <td colspan="8" id="runTime">
  536. </td>
  537. </tr>
  538. </tbody>
  539. </table>
  540. </fieldset>
  541. <div style="text-align: center; margin-top: 5px;">
  542. <script type="text/javascript">
  543. /*killIe*/
  544. $.parser.parse($("body"));
  545. var cpro_id = "u1331261";
  546. function btnFan() {
  547. //获取参数中表达式的值
  548. var txt = $("#cron").val();
  549. if (txt) {
  550. var regs = txt.split(' ');
  551. $("input[name=v_second]").val(regs[0]);
  552. $("input[name=v_min]").val(regs[1]);
  553. $("input[name=v_hour]").val(regs[2]);
  554. $("input[name=v_day]").val(regs[3]);
  555. $("input[name=v_mouth]").val(regs[4]);
  556. $("input[name=v_week]").val(regs[5]);
  557. initObj(regs[0], "second");
  558. initObj(regs[1], "min");
  559. initObj(regs[2], "hour");
  560. initDay(regs[3]);
  561. initMonth(regs[4]);
  562. initWeek(regs[5]);
  563. if (regs.length > 6) {
  564. $("input[name=v_year]").val(regs[6]);
  565. initYear(regs[6]);
  566. }
  567. }
  568. }
  569. function btnCN() {
  570. //获取参数中表达式的值
  571. var txt = $("#cron").val();
  572. if (txt) {
  573. var regs = txt.split(' ');
  574. var description = "";
  575. $("input[name=chinese]").val(description);
  576. //$("input[name=v_min]").val(regs[1]);
  577. }
  578. }
  579. function initObj(strVal, strid) {
  580. var ary = null;
  581. var objRadio = $("input[name='" + strid + "'");
  582. if (strVal == "*") {
  583. objRadio.eq(0).attr("checked", "checked");
  584. } else if (strVal.split('-').length > 1) {
  585. ary = strVal.split('-');
  586. objRadio.eq(1).attr("checked", "checked");
  587. $("#" + strid + "Start_0").numberspinner('setValue', ary[0]);
  588. $("#" + strid + "End_0").numberspinner('setValue', ary[1]);
  589. } else if (strVal.split('/').length > 1) {
  590. ary = strVal.split('/');
  591. objRadio.eq(2).attr("checked", "checked");
  592. $("#" + strid + "Start_1").numberspinner('setValue', ary[0]);
  593. $("#" + strid + "End_1").numberspinner('setValue', ary[1]);
  594. } else {
  595. objRadio.eq(3).attr("checked", "checked");
  596. if (strVal != "?") {
  597. ary = strVal.split(",");
  598. for (var i = 0; i < ary.length; i++) {
  599. $("." + strid + "List input[value='" + ary[i] + "']").attr("checked", "checked");
  600. }
  601. }
  602. }
  603. }
  604. function initDay(strVal) {
  605. var ary = null;
  606. var objRadio = $("input[name='day'");
  607. if (strVal == "*") {
  608. objRadio.eq(0).attr("checked", "checked");
  609. } else if (strVal == "?") {
  610. objRadio.eq(1).attr("checked", "checked");
  611. } else if (strVal.split('-').length > 1) {
  612. ary = strVal.split('-');
  613. objRadio.eq(2).attr("checked", "checked");
  614. $("#dayStart_0").numberspinner('setValue', ary[0]);
  615. $("#dayEnd_0").numberspinner('setValue', ary[1]);
  616. } else if (strVal.split('/').length > 1) {
  617. ary = strVal.split('/');
  618. objRadio.eq(3).attr("checked", "checked");
  619. $("#dayStart_1").numberspinner('setValue', ary[0]);
  620. $("#dayEnd_1").numberspinner('setValue', ary[1]);
  621. } else if (strVal.split('W').length > 1) {
  622. ary = strVal.split('W');
  623. objRadio.eq(4).attr("checked", "checked");
  624. $("#dayStart_2").numberspinner('setValue', ary[0]);
  625. } else if (strVal == "L") {
  626. objRadio.eq(5).attr("checked", "checked");
  627. } else {
  628. objRadio.eq(6).attr("checked", "checked");
  629. ary = strVal.split(",");
  630. for (var i = 0; i < ary.length; i++) {
  631. $(".dayList input[value='" + ary[i] + "']").attr("checked", "checked");
  632. }
  633. }
  634. }
  635. function initMonth(strVal) {
  636. var ary = null;
  637. var objRadio = $("input[name='mouth'");
  638. if (strVal == "*") {
  639. objRadio.eq(0).attr("checked", "checked");
  640. } else if (strVal == "?") {
  641. objRadio.eq(1).attr("checked", "checked");
  642. } else if (strVal.split('-').length > 1) {
  643. ary = strVal.split('-');
  644. objRadio.eq(2).attr("checked", "checked");
  645. $("#mouthStart_0").numberspinner('setValue', ary[0]);
  646. $("#mouthEnd_0").numberspinner('setValue', ary[1]);
  647. } else if (strVal.split('/').length > 1) {
  648. ary = strVal.split('/');
  649. objRadio.eq(3).attr("checked", "checked");
  650. $("#mouthStart_1").numberspinner('setValue', ary[0]);
  651. $("#mouthEnd_1").numberspinner('setValue', ary[1]);
  652. } else {
  653. objRadio.eq(4).attr("checked", "checked");
  654. ary = strVal.split(",");
  655. for (var i = 0; i < ary.length; i++) {
  656. $(".mouthList input[value='" + ary[i] + "']").attr("checked", "checked");
  657. }
  658. }
  659. }
  660. function initWeek(strVal) {
  661. var ary = null;
  662. var objRadio = $("input[name='week'");
  663. if (strVal == "*") {
  664. objRadio.eq(0).attr("checked", "checked");
  665. } else if (strVal == "?") {
  666. objRadio.eq(1).attr("checked", "checked");
  667. } else if (strVal.split('/').length > 1) {
  668. ary = strVal.split('/');
  669. objRadio.eq(2).attr("checked", "checked");
  670. $("#weekStart_0").numberspinner('setValue', ary[0]);
  671. $("#weekEnd_0").numberspinner('setValue', ary[1]);
  672. } else if (strVal.split('-').length > 1) {
  673. ary = strVal.split('-');
  674. objRadio.eq(3).attr("checked", "checked");
  675. $("#weekStart_1").numberspinner('setValue', ary[0]);
  676. $("#weekEnd_1").numberspinner('setValue', ary[1]);
  677. } else if (strVal.split('L').length > 1) {
  678. ary = strVal.split('L');
  679. objRadio.eq(4).attr("checked", "checked");
  680. $("#weekStart_2").numberspinner('setValue', ary[0]);
  681. } else {
  682. objRadio.eq(5).attr("checked", "checked");
  683. ary = strVal.split(",");
  684. for (var i = 0; i < ary.length; i++) {
  685. $(".weekList input[value='" + ary[i] + "']").attr("checked", "checked");
  686. }
  687. }
  688. }
  689. function initYear(strVal) {
  690. var ary = null;
  691. var objRadio = $("input[name='year'");
  692. if (strVal == "*") {
  693. objRadio.eq(1).attr("checked", "checked");
  694. } else if (strVal.split('-').length > 1) {
  695. ary = strVal.split('-');
  696. objRadio.eq(2).attr("checked", "checked");
  697. $("#yearStart_0").numberspinner('setValue', ary[0]);
  698. $("#yearEnd_0").numberspinner('setValue', ary[1]);
  699. }
  700. }
  701. function getCron(){
  702. var checkret = cronValidate( $("#cron").val());
  703. if(typeof(checkret) == 'boolean')
  704. return $("#cron").val();
  705. else
  706. return 'false'+checkret;
  707. }
  708. /*!!!!!!!
  709. 以下为凶残的cron表达式验证,胆小肾虚及心脏病者慎入!!!
  710. 不听劝告者后果自负T T
  711. !!!!!!!
  712. cron表达式为秒,分,时,日,月,周,年
  713. 判断正误方法:错误的话返回错误信息,正确的话返回true
  714. */
  715. function cronValidate(cronExpression ){
  716. //返回错误信息用
  717. var message = '';
  718. //先将cron表达式进行分割
  719. var cronParams = cronExpression.split(" ");
  720. //判断cron表达式是否具有该具有的属性长度,没有年份的长度为6,带年份的长度为7,其他情况都是错误的
  721. if((cronParams.length < 6) || (cronParams.length > 7)){
  722. return "cron表达式需要输入6-7位参数,请重新输入";
  723. }else{
  724. //日和周必须有一个为?,或者全为*
  725. if((cronParams[3] == "?" && cronParams[5] != "?") || (cronParams[5] == "?" && cronParams[3] != "?") || (cronParams[3] == "*" && cronParams[5] == "*")){
  726. //检查第一位的秒是否正确
  727. message = checkSecondsField(cronParams[0]);
  728. if (message != true) {
  729. return message;
  730. }
  731. //检查第二位的分是否正确
  732. message = checkMinutesField(cronParams[1]);
  733. if (message != true) {
  734. return message;
  735. }
  736. //检查第三位的时是否正确
  737. message = checkHoursField(cronParams[2]);
  738. if (message != true) {
  739. return message;
  740. }
  741. //检查第四位的日是否正确
  742. message = checkDayOfMonthField(cronParams[3]);
  743. if (message != true) {
  744. return message;
  745. }
  746. //检查第五位的月是否正确
  747. message = checkMonthsField(cronParams[4]);
  748. if (message != true) {
  749. return message;
  750. }
  751. //检查第6位的周是否正确
  752. message = checkDayOfWeekField(cronParams[5]);
  753. if (message != true) {
  754. return message;
  755. }
  756. //检查第七位的年是否正确
  757. if(cronParams.length>6){
  758. message = checkYearField(cronParams[6]);
  759. if (message != true) {
  760. return message;
  761. }
  762. }
  763. return true;
  764. }else{
  765. return "指定日时周必须设为不指定(?),指定周时日必须设为不指定(?)"
  766. }
  767. }
  768. }
  769. //检查秒的函数方法
  770. function checkSecondsField(secondsField) {
  771. return checkField(secondsField, 0, 59, "秒");
  772. }
  773. //检查分的函数方法
  774. function checkMinutesField(minutesField) {
  775. return checkField(minutesField, 0, 59, "分");
  776. }
  777. //检查小时的函数方法
  778. function checkHoursField(hoursField) {
  779. return checkField(hoursField, 0, 23, "时");
  780. }
  781. //检查日期的函数方法
  782. function checkDayOfMonthField(dayOfMonthField) {
  783. if (dayOfMonthField == "?") {
  784. return true;
  785. }
  786. if (dayOfMonthField.indexOf("L") >= 0) {
  787. return checkFieldWithLetter(dayOfMonthField, "L", 1, 7, "日");
  788. } else if ( dayOfMonthField.indexOf("W") >= 0) {
  789. return checkFieldWithLetter(dayOfMonthField, "W", 1, 31, "日");
  790. } else if (dayOfMonthField.indexOf("C") >= 0) {
  791. return checkFieldWithLetter(dayOfMonthField, "C", 1, 31, "日");
  792. }
  793. return checkField( dayOfMonthField, 1, 31, "日");
  794. }
  795. //检查月份的函数方法
  796. function checkMonthsField(monthsField) {
  797. //月份简写处理
  798. if(monthsField != "*"){
  799. monthsField=monthsField.replace("JAN", "1");
  800. monthsField=monthsField.replace("FEB", "2");
  801. monthsField=monthsField.replace("MAR", "3");
  802. monthsField=monthsField.replace("APR", "4");
  803. monthsField=monthsField.replace("MAY", "5");
  804. monthsField=monthsField.replace("JUN", "6");
  805. monthsField=monthsField.replace("JUL", "7");
  806. monthsField=monthsField.replace("AUG", "8");
  807. monthsField=monthsField.replace("SEP", "9");
  808. monthsField=monthsField.replace("OCT", "10");
  809. monthsField=monthsField.replace("NOV", "11");
  810. monthsField=monthsField.replace("DEC", "12");
  811. return checkField(monthsField, 1, 12, "月份");
  812. }else{
  813. return true;
  814. }
  815. }
  816. //星期验证
  817. function checkDayOfWeekField(dayOfWeekField) {
  818. dayOfWeekField=dayOfWeekField.replace("SUN", "1" );
  819. dayOfWeekField=dayOfWeekField.replace("MON", "2" );
  820. dayOfWeekField=dayOfWeekField.replace("TUE", "3" );
  821. dayOfWeekField=dayOfWeekField.replace("WED", "4" );
  822. dayOfWeekField=dayOfWeekField.replace("THU", "5" );
  823. dayOfWeekField=dayOfWeekField.replace("FRI", "6" );
  824. dayOfWeekField=dayOfWeekField.replace("SAT", "7" );
  825. if (dayOfWeekField == "?") {
  826. return true;
  827. }
  828. if (dayOfWeekField.indexOf("L") >= 0) {
  829. return checkFieldWithLetterWeek(dayOfWeekField, "L", 1, 7, "星期");
  830. } else if (dayOfWeekField.indexOf("C") >= 0) {
  831. return checkFieldWithLetterWeek(dayOfWeekField, "C", 1, 7, "星期");
  832. } else if (dayOfWeekField.indexOf("#") >= 0) {
  833. return checkFieldWithLetterWeek(dayOfWeekField, "#", 1, 7, "星期");
  834. } else {
  835. return checkField(dayOfWeekField, 1, 7, "星期");
  836. }
  837. }
  838. //检查年份的函数方法
  839. function checkYearField(yearField) {
  840. return checkField(yearField, 1970, 2099, "年的");
  841. }
  842. //通用的检查值的大小范围的方法( - , / *)
  843. function checkField(value, minimal, maximal, attribute) {
  844. //校验值中是否有“-”,如果有“-”的话,下标会>0
  845. if (value.indexOf("-") > -1 ) {
  846. return checkRangeAndCycle(value, minimal, maximal,attribute);
  847. }
  848. //校验值中是否有“,”,如果有“,”的话,下标会>0
  849. else if (value.indexOf(",") > -1) {
  850. return checkListField(value, minimal, maximal,attribute);
  851. }
  852. //校验值中是否有“/”,如果有“/”的话,下标会>0
  853. else if (value.indexOf( "/" ) > -1) {
  854. return checkIncrementField( value, minimal, maximal ,attribute);
  855. }
  856. //校验值是否为“*”
  857. else if (value=="*") {
  858. return true;
  859. }
  860. //校验单独的数字,英文字母,以及各种神奇的符号等...
  861. else {
  862. return checkIntValue(value, minimal, maximal,true, attribute);
  863. }
  864. }
  865. //检测是否是整数以及是否在范围内,参数:检测的值,下限,上限,是否检查端点,检查的属性
  866. function checkIntValue(value, minimal, maximal, checkExtremity,attribute) {
  867. try {
  868. //用10进制犯法来进行整数转换
  869. var val = parseInt(value, 10);
  870. if (value == val) {
  871. if (checkExtremity) {
  872. if ((val < minimal) ||( val > maximal)) {
  873. return (attribute+"的参数取值范围必须在"+ minimal + "-" + maximal +"之间");
  874. }
  875. return true;
  876. }
  877. return true;
  878. }
  879. return (attribute+"的参数存在非法字符,必须为整数或允许的大写英文");
  880. } catch (e) {
  881. return (attribute+"的参数有非法字符,必须是整数~")
  882. }
  883. }
  884. //检验枚举类型的参数是否正确
  885. function checkListField(value, minimal, maximal,attribute) {
  886. var st = value.split(",");
  887. var values = new Array(st.length);
  888. //计算枚举的数字在数组中中出现的次数,出现一次为没有重复的。
  889. var count=0;
  890. for(var j = 0; j < st.length; j++) {
  891. values[j] = st[j];
  892. }
  893. //判断枚举类型的值是否重复
  894. for(var i=0;i<values.length;i++){
  895. //判断枚举的值是否在范围内
  896. message = checkIntValue(values[i], minimal, maximal, true, attribute);
  897. if (message!=true) {
  898. return message;
  899. }
  900. count=0;
  901. for(var j=0;j<values.length;j++){
  902. if(values[i]==values[j])
  903. {
  904. count++;
  905. }
  906. if(count>1){
  907. return (attribute+"中的参数重复");
  908. }
  909. }
  910. }
  911. var previousValue = -1;
  912. //判断枚举的值是否排序正确
  913. for (var i= 0; i < values.length; i++) {
  914. var currentValue = values[i];
  915. try {
  916. var val = parseInt(currentValue, 10);
  917. if (val < previousValue) {
  918. return (attribute+"的参数应该从小到大");
  919. } else {
  920. previousValue = val;
  921. }
  922. } catch (e) {
  923. //前面验证过了,这边的代码不可能跑到
  924. return ("这段提示用不到")
  925. }
  926. }
  927. return true;
  928. }
  929. //检验循环
  930. function checkIncrementField(value, minimal, maximal, attribute) {
  931. if(value.split("/").length>2){
  932. return (attribute + "中的参数只能有一个'/'");
  933. }
  934. var start = value.substring(0, value.indexOf("/"));
  935. var increment = value.substring(value.indexOf("/") + 1);
  936. if (start != "*") {
  937. //检验前值是否正确
  938. message = checkIntValue(start, minimal, maximal, true, attribute);
  939. if(message != true){
  940. return message;
  941. }
  942. //检验后值是否正确
  943. message = checkIntValue(increment, minimal, maximal, true, attribute);
  944. if(message != true){
  945. return message;
  946. }
  947. return true;
  948. } else {
  949. //检验后值是否正确
  950. return checkIntValue(increment, minimal, maximal, false, attribute);
  951. }
  952. }
  953. //检验范围
  954. function checkRangeAndCycle(params, minimal, maximal, attribute){
  955. //校验“-”符号是否只有一个
  956. if(params.split("-").length>2){
  957. return (attribute + "中的参数只能有一个'-'");
  958. }
  959. var value = null;
  960. var cycle = null;
  961. //检验范围内是否有嵌套周期
  962. if(params.indexOf("/") > -1){
  963. //校验“/”符号是否只有一个
  964. if(params.split("/").length>2){
  965. return (attribute + "中的参数只能有一个'/'");
  966. }
  967. value = params.split("/")[0];
  968. cycle = params.split("/")[1];
  969. //判断循环的参数是否正确
  970. message =checkIntValue(cycle, minimal, maximal, true, attribute);
  971. if (message!=true) {
  972. return message;
  973. }
  974. }else{
  975. value = params;
  976. }
  977. var startValue = value.substring(0, value.indexOf( "-" ));
  978. var endValue = value.substring(value.indexOf( "-" ) + 1);
  979. //判断参数范围的第一个值是否正确
  980. message =checkIntValue(startValue, minimal, maximal, true, attribute);
  981. if (message!=true) {
  982. return message;
  983. }
  984. //判断参数范围的第二个值是否正确
  985. message =checkIntValue(endValue, minimal, maximal, true, attribute);
  986. if(message!=true){
  987. return message;
  988. }
  989. //判断参数的范围前值是否小于后值
  990. try {
  991. var startVal = parseInt(startValue, 10);
  992. var endVal = parseInt(endValue, 10);
  993. if(endVal < startVal){
  994. return (attribute+"的取值范围错误,前值必须小于后值");
  995. }
  996. if((endVal-startVal)<parseInt(cycle,10)){
  997. return (attribute+"的取值范围内的循环无意义");
  998. }
  999. return true;
  1000. } catch (e) {
  1001. //用不到这行代码的
  1002. return (attribute+"的参数有非法字符,必须是整数");
  1003. }
  1004. }
  1005. //检查日中的特殊字符
  1006. function checkFieldWithLetter(value, letter, minimalBefore, maximalBefore,attribute) {
  1007. //判断是否只有一个字母
  1008. for(var i=0;i<value.length;i++){
  1009. var count = 0;
  1010. if(value.charAt(i)==letter){
  1011. count++;
  1012. }
  1013. if(count>1){
  1014. return (attribute+"的值的"+letter+"字母只能有一个")
  1015. }
  1016. }
  1017. //校验L
  1018. if(letter == "L"){
  1019. if(value == "LW"){
  1020. return true;
  1021. }
  1022. if(value=="L"){
  1023. return true;
  1024. }
  1025. if(value.endsWith("LW")&&value.length>2)
  1026. {
  1027. return (attribute + "中的参数,最后的LW前面不能有任何字母参数")
  1028. }
  1029. if(!value.endsWith("L"))
  1030. {
  1031. return (attribute + "中的参数,L字母后面不能有W以外的字符、数字等")
  1032. }else{
  1033. var num = value.substring(0,value.indexOf(letter));
  1034. return checkIntValue(num, minimalBefore, maximalBefore, true, attribute);
  1035. }
  1036. }
  1037. //校验W
  1038. if(letter == "W"){
  1039. if(!value.endsWith("W")){
  1040. return (attribute + "中的参数的W必须作为结尾")
  1041. }else{
  1042. if(value=="W"){
  1043. return (attribute + "中的参数的W前面必须有数字")
  1044. }
  1045. var num = value.substring(0,value.indexOf(letter));
  1046. return checkIntValue(num, minimalBefore, maximalBefore, true, attribute);
  1047. }
  1048. }
  1049. if(letter == "C"){
  1050. if(!value.endsWith("C")){
  1051. return (attribute + "中的参数的C必须作为结尾")
  1052. }else{
  1053. if(value=="C"){
  1054. return (attribute + "中的参数的C前面必须有数字")
  1055. }
  1056. var num = value.substring(0,value.indexOf(letter));
  1057. return checkIntValue(num, minimalBefore, maximalBefore, true, attribute);
  1058. }
  1059. }
  1060. }
  1061. //检查星期中的特殊字符
  1062. function checkFieldWithLetterWeek(value, letter, minimalBefore, maximalBefore,attribute) {
  1063. //判断是否只有一个字母
  1064. for(var i=0;i<value.length;i++){
  1065. var count = 0;
  1066. if(value.charAt(i)==letter){
  1067. count++;
  1068. }
  1069. if(count>1){
  1070. return (attribute+"的值的"+letter+"字母只能有一个")
  1071. }
  1072. }
  1073. //校验L
  1074. if(letter == "L"){
  1075. if(value=="L"){
  1076. return true;
  1077. }
  1078. if(!value.endsWith("L"))
  1079. {
  1080. return (attribute + "中的参数,L字母必须是最后一位")
  1081. }else{
  1082. var num = value.substring(0,value.indexOf(letter));
  1083. return checkIntValue(num, minimalBefore, maximalBefore, true, attribute);
  1084. }
  1085. }
  1086. if(letter == "C"){
  1087. if(!value.endsWith("C")){
  1088. return (attribute + "中的参数的C必须作为结尾")
  1089. }else{
  1090. if(value=="C"){
  1091. return (attribute + "中的参数的C前面必须有数字")
  1092. }
  1093. var num = value.substring(0,value.indexOf(letter));
  1094. return checkIntValue(num, minimalBefore, maximalBefore, true, attribute);
  1095. }
  1096. }
  1097. if(letter == "#"){
  1098. if(value=="#"){
  1099. return (attribute + "中的#前后必须有整数");
  1100. }
  1101. if(value.charAt(0)==letter){
  1102. return (attribute + "中的#前面必须有整数")
  1103. }
  1104. if(value.endsWith("#")){
  1105. return (attribute + "中的#后面必须有整数")
  1106. }
  1107. var num1 = value.substring(0,value.indexOf(letter));
  1108. var num2 = value.substring(value.indexOf(letter)+1,value.length)
  1109. message = checkIntValue(num1, 1, 4, true, (attribute+"的#前面"));
  1110. if(message!=true){
  1111. return message;
  1112. }
  1113. message = checkIntValue(num2, minimalBefore, maximalBefore, true, (attribute+"的#后面"));
  1114. if(message!=true){
  1115. return message;
  1116. }
  1117. return true;
  1118. }
  1119. }
  1120. </script>
  1121. <div>
  1122. </div>
  1123. </div>
  1124. </div>
  1125. <div>
  1126. </div>
  1127. </div>
  1128. </center>
  1129. </body>
  1130. </html>