eb5919bc6f366ac38ac16591b825d835be5e37c7.svn-base 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928
  1. <template>
  2. <a-modal
  3. title="cron表达式"
  4. :width="modalWidth"
  5. :visible="visible"
  6. :confirmLoading="confirmLoading"
  7. @ok="handleSubmit"
  8. @cancel="close"
  9. cancelText="关闭">
  10. <div class="card-container">
  11. <a-tabs type="card">
  12. <a-tab-pane key="1" type="card">
  13. <span slot="tab"><a-icon type="schedule" /> 秒</span>
  14. <a-radio-group v-model="result.second.cronEvery">
  15. <a-row>
  16. <a-radio value="1">每一秒钟</a-radio>
  17. </a-row>
  18. <a-row>
  19. <a-radio value="2">每隔
  20. <a-input size="small" v-model="result.second.incrementIncrement" :min="1" :max="59"></a-input>
  21. 秒执行 从
  22. <a-input size="small" v-model="result.second.incrementStart" :min="0" :max="59"></a-input>
  23. 秒开始
  24. </a-radio>
  25. </a-row>
  26. <a-row>
  27. <a-radio value="3">具体秒数(可多选)</a-radio>
  28. <a-select style="width:354px;" size="small" mode="multiple" v-model="result.second.specificSpecific">
  29. <a-select-option v-for="(val,index) in 60" :key="index" :value="index">{{ index }}</a-select-option>
  30. </a-select>
  31. </a-row>
  32. <a-row>
  33. <a-radio value="4">周期从
  34. <a-input size="small" v-model="result.second.rangeStart" :min="1" :max="59"></a-input>
  35. <a-input size="small" v-model="result.second.rangeEnd" :min="0" :max="59"></a-input>
  36. </a-radio>
  37. </a-row>
  38. </a-radio-group>
  39. </a-tab-pane>
  40. <a-tab-pane key="2">
  41. <span slot="tab"><a-icon type="schedule" />分</span>
  42. <div class="tabBody">
  43. <a-radio-group v-model="result.minute.cronEvery">
  44. <a-row>
  45. <a-radio value="1">每一分钟</a-radio>
  46. </a-row>
  47. <a-row>
  48. <a-radio value="2">每隔
  49. <a-input size="small" v-model="result.minute.incrementIncrement" :min="1" :max="60"></a-input>
  50. 分执行 从
  51. <a-input size="small" v-model="result.minute.incrementStart" :min="0" :max="59"></a-input>
  52. 分开始
  53. </a-radio>
  54. </a-row>
  55. <a-row>
  56. <a-radio value="3">具体分钟数(可多选)</a-radio>
  57. <a-select style="width:340px;" size="small" mode="multiple" v-model="result.minute.specificSpecific">
  58. <a-select-option v-for="(val,index) in Array(60)" :key="index" :value="index"> {{ index }}</a-select-option>
  59. </a-select>
  60. </a-row>
  61. <a-row>
  62. <a-radio value="4">周期从
  63. <a-input size="small" v-model="result.minute.rangeStart" :min="1" :max="60"></a-input>
  64. <a-input size="small" v-model="result.minute.rangeEnd" :min="0" :max="59"></a-input>
  65. </a-radio>
  66. </a-row>
  67. </a-radio-group>
  68. </div>
  69. </a-tab-pane>
  70. <a-tab-pane key="3">
  71. <span slot="tab"><a-icon type="schedule" /> 时</span>
  72. <div class="tabBody">
  73. <a-radio-group v-model="result.hour.cronEvery">
  74. <a-row>
  75. <a-radio value="1">每一小时</a-radio>
  76. </a-row>
  77. <a-row>
  78. <a-radio value="2">每隔
  79. <a-input size="small" v-model="result.hour.incrementIncrement" :min="0" :max="23"></a-input>
  80. 小时执行 从
  81. <a-input size="small" v-model="result.hour.incrementStart" :min="0" :max="23"></a-input>
  82. 小时开始
  83. </a-radio>
  84. </a-row>
  85. <a-row>
  86. <a-radio class="long" value="3">具体小时数(可多选)</a-radio>
  87. <a-select style="width:340px;" size="small" mode="multiple" v-model="result.hour.specificSpecific">
  88. <a-select-option v-for="(val,index) in Array(24)" :key="index" >{{ index }}</a-select-option>
  89. </a-select>
  90. </a-row>
  91. <a-row>
  92. <a-radio value="4">周期从
  93. <a-input size="small" v-model="result.hour.rangeStart" :min="0" :max="23"></a-input>
  94. <a-input size="small" v-model="result.hour.rangeEnd" :min="0" :max="23"></a-input>
  95. 小时
  96. </a-radio>
  97. </a-row>
  98. </a-radio-group>
  99. </div>
  100. </a-tab-pane>
  101. <a-tab-pane key="4">
  102. <span slot="tab"><a-icon type="schedule" /> 天</span>
  103. <div class="tabBody">
  104. <a-radio-group v-model="result.day.cronEvery">
  105. <a-row>
  106. <a-radio value="1">每一天</a-radio>
  107. </a-row>
  108. <a-row>
  109. <a-radio value="2">每隔
  110. <a-input size="small" v-model="result.week.incrementIncrement" :min="1" :max="7"></a-input>
  111. 周执行 从
  112. <a-select size="small" v-model="result.week.incrementStart">
  113. <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option>
  114. </a-select>
  115. 开始
  116. </a-radio>
  117. </a-row>
  118. <a-row>
  119. <a-radio value="3">每隔
  120. <a-input size="small" v-model="result.day.incrementIncrement" :min="1" :max="31"></a-input>
  121. 天执行 从
  122. <a-input size="small" v-model="result.day.incrementStart" :min="1" :max="31"></a-input>
  123. 天开始
  124. </a-radio>
  125. </a-row>
  126. <a-row>
  127. <a-radio class="long" value="4">具体星期几(可多选)</a-radio>
  128. <a-select style="width:340px;" size="small" mode="multiple" v-model="result.week.specificSpecific">
  129. <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option>
  130. </a-select>
  131. </a-row>
  132. <a-row>
  133. <a-radio class="long" value="5">具体天数(可多选)</a-radio>
  134. <a-select style="width:354px;" size="small" mode="multiple" v-model="result.day.specificSpecific">
  135. <a-select-option v-for="(val,index) in Array(31)" :key="index" :value="index+1">{{ index+1 }}</a-select-option>
  136. </a-select>
  137. </a-row>
  138. <a-row>
  139. <a-radio value="6">在这个月的最后一天</a-radio>
  140. </a-row>
  141. <a-row>
  142. <a-radio value="7">在这个月的最后一个工作日</a-radio>
  143. </a-row>
  144. <a-row>
  145. <a-radio value="8">在这个月的最后一个
  146. <a-select size="small" v-model="result.day.cronLastSpecificDomDay">
  147. <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option>
  148. </a-select>
  149. </a-radio>
  150. </a-row>
  151. <a-row>
  152. <a-radio value="9">
  153. 在本月底前
  154. <a-input size="small" v-model="result.day.cronDaysBeforeEomMinus" :min="1" :max="31"></a-input>
  155. </a-radio>
  156. </a-row>
  157. <a-row>
  158. <a-radio value="10">最近的工作日(周一至周五)至本月
  159. <a-input size="small" v-model="result.day.cronDaysNearestWeekday" :min="1" :max="31"></a-input>
  160. </a-radio>
  161. </a-row>
  162. <a-row>
  163. <a-radio value="11">在这个月的第
  164. <a-input size="small" v-model="result.week.cronNthDayNth" :min="1" :max="5"></a-input>
  165. <a-select size="small" v-model="result.week.cronNthDayDay">
  166. <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option>
  167. </a-select>
  168. </a-radio>
  169. </a-row>
  170. </a-radio-group>
  171. </div>
  172. </a-tab-pane>
  173. <a-tab-pane key="5">
  174. <span slot="tab"><a-icon type="schedule" /> 月</span>
  175. <div class="tabBody">
  176. <a-radio-group v-model="result.month.cronEvery">
  177. <a-row>
  178. <a-radio value="1">每一月</a-radio>
  179. </a-row>
  180. <a-row>
  181. <a-radio value="2">每隔
  182. <a-input size="small" v-model="result.month.incrementIncrement" :min="0" :max="12"></a-input>
  183. 月执行 从
  184. <a-input size="small" v-model="result.month.incrementStart" :min="0" :max="12"></a-input>
  185. 月开始
  186. </a-radio>
  187. </a-row>
  188. <a-row>
  189. <a-radio class="long" value="3">具体月数(可多选)</a-radio>
  190. <a-select style="width:354px;" size="small" filterable mode="multiple" v-model="result.month.specificSpecific">
  191. <a-select-option v-for="(val,index) in Array(12)" :key="index" :value="index+1">{{ index+1 }}</a-select-option>
  192. </a-select>
  193. </a-row>
  194. <a-row>
  195. <a-radio value="4">从
  196. <a-input size="small" v-model="result.month.rangeStart" :min="1" :max="12"></a-input>
  197. <a-input size="small" v-model="result.month.rangeEnd" :min="1" :max="12"></a-input>
  198. 月之间的每个月
  199. </a-radio>
  200. </a-row>
  201. </a-radio-group>
  202. </div>
  203. </a-tab-pane>
  204. <a-tab-pane key="6">
  205. <span slot="tab"><a-icon type="schedule" /> 年</span>
  206. <div class="tabBody">
  207. <a-radio-group v-model="result.year.cronEvery">
  208. <a-row>
  209. <a-radio value="1">每一年</a-radio>
  210. </a-row>
  211. <a-row>
  212. <a-radio value="2">每隔
  213. <a-input size="small" v-model="result.year.incrementIncrement" :min="1" :max="99"></a-input>
  214. 年执行 从
  215. <a-input size="small" v-model="result.year.incrementStart" :min="2019" :max="2119"></a-input>
  216. 年开始
  217. </a-radio>
  218. </a-row>
  219. <a-row>
  220. <a-radio class="long" value="3">具体年份(可多选)</a-radio>
  221. <a-select style="width:354px;" size="small" filterable mode="multiple" v-model="result.year.specificSpecific">
  222. <a-select-option v-for="(val,index) in Array(100)" :key="index" :value="2019+index">{{ 2019+index }}</a-select-option>
  223. </a-select>
  224. </a-row>
  225. <a-row>
  226. <a-radio value="4">从
  227. <a-input size="small" v-model="result.year.rangeStart" :min="2019" :max="2119"></a-input>
  228. <a-input size="small" v-model="result.year.rangeEnd" :min="2019" :max="2119"></a-input>
  229. 年之间的每一年
  230. </a-radio>
  231. </a-row>
  232. </a-radio-group>
  233. </div>
  234. </a-tab-pane>
  235. </a-tabs>
  236. <div class="bottom">
  237. <span class="value">{{this.cron }}</span>
  238. </div>
  239. </div>
  240. </a-modal>
  241. </template>
  242. <script>
  243. export default {
  244. name:'VueCron',
  245. props:['data'],
  246. data(){
  247. return {
  248. visible: false,
  249. confirmLoading:false,
  250. size:'large',
  251. weekDays:['天','一','二','三','四','五','六'].map(val=>'星期'+val),
  252. result: {
  253. second:{},
  254. minute:{},
  255. hour:{},
  256. day:{},
  257. week:{},
  258. month:{},
  259. year:{}
  260. },
  261. defaultValue: {
  262. second:{
  263. cronEvery:'',
  264. incrementStart:3,
  265. incrementIncrement:5,
  266. rangeStart:1,
  267. rangeEnd:0,
  268. specificSpecific:[],
  269. },
  270. minute:{
  271. cronEvery:'',
  272. incrementStart:3,
  273. incrementIncrement:5,
  274. rangeStart:1,
  275. rangeEnd:'0',
  276. specificSpecific:[],
  277. },
  278. hour:{
  279. cronEvery:'',
  280. incrementStart:3,
  281. incrementIncrement:5,
  282. rangeStart:'0',
  283. rangeEnd:'0',
  284. specificSpecific:[],
  285. },
  286. day:{
  287. cronEvery:'',
  288. incrementStart:1,
  289. incrementIncrement:'1',
  290. rangeStart:'',
  291. rangeEnd:'',
  292. specificSpecific:[],
  293. cronLastSpecificDomDay:1,
  294. cronDaysBeforeEomMinus:1,
  295. cronDaysNearestWeekday:1,
  296. },
  297. week:{
  298. cronEvery:'',
  299. incrementStart:1,
  300. incrementIncrement:1,
  301. specificSpecific:[],
  302. cronNthDayDay:1,
  303. cronNthDayNth:1,
  304. },
  305. month:{
  306. cronEvery:'',
  307. incrementStart:3,
  308. incrementIncrement:5,
  309. rangeStart:1,
  310. rangeEnd:1,
  311. specificSpecific:[],
  312. },
  313. year:{
  314. cronEvery:'',
  315. incrementStart:2017,
  316. incrementIncrement:1,
  317. rangeStart:2019,
  318. rangeEnd: 2019,
  319. specificSpecific:[],
  320. },
  321. label:''
  322. }
  323. }
  324. },
  325. computed: {
  326. modalWidth(){
  327. return 608;
  328. },
  329. secondsText() {
  330. let seconds = '';
  331. let cronEvery=this.result.second.cronEvery||'';
  332. switch (cronEvery.toString()){
  333. case '1':
  334. seconds = '*';
  335. break;
  336. case '2':
  337. seconds = this.result.second.incrementStart+'/'+this.result.second.incrementIncrement;
  338. break;
  339. case '3':
  340. this.result.second.specificSpecific.map(val=> {seconds += val+','});
  341. seconds = seconds.slice(0, -1);
  342. break;
  343. case '4':
  344. seconds = this.result.second.rangeStart+'-'+this.result.second.rangeEnd;
  345. break;
  346. }
  347. return seconds;
  348. },
  349. minutesText() {
  350. let minutes = '';
  351. let cronEvery=this.result.minute.cronEvery||'';
  352. switch (cronEvery.toString()){
  353. case '1':
  354. minutes = '*';
  355. break;
  356. case '2':
  357. minutes = this.result.minute.incrementStart+'/'+this.result.minute.incrementIncrement;
  358. break;
  359. case '3':
  360. this.result.minute.specificSpecific.map(val=> {
  361. minutes += val+','
  362. });
  363. minutes = minutes.slice(0, -1);
  364. break;
  365. case '4':
  366. minutes = this.result.minute.rangeStart+'-'+this.result.minute.rangeEnd;
  367. break;
  368. }
  369. return minutes;
  370. },
  371. hoursText() {
  372. let hours = '';
  373. let cronEvery=this.result.hour.cronEvery||'';
  374. switch (cronEvery.toString()){
  375. case '1':
  376. hours = '*';
  377. break;
  378. case '2':
  379. hours = this.result.hour.incrementStart+'/'+this.result.hour.incrementIncrement;
  380. break;
  381. case '3':
  382. this.result.hour.specificSpecific.map(val=> {
  383. hours += val+','
  384. });
  385. hours = hours.slice(0, -1);
  386. break;
  387. case '4':
  388. hours = this.result.hour.rangeStart+'-'+this.result.hour.rangeEnd;
  389. break;
  390. }
  391. return hours;
  392. },
  393. daysText() {
  394. let days='';
  395. let cronEvery=this.result.day.cronEvery||'';
  396. switch (cronEvery.toString()){
  397. case '1':
  398. break;
  399. case '2':
  400. case '4':
  401. case '11':
  402. days = '?';
  403. break;
  404. case '3':
  405. days = this.result.day.incrementStart+'/'+this.result.day.incrementIncrement;
  406. break;
  407. case '5':
  408. this.result.day.specificSpecific.map(val=> {
  409. days += val+','
  410. });
  411. days = days.slice(0, -1);
  412. break;
  413. case '6':
  414. days = "L";
  415. break;
  416. case '7':
  417. days = "LW";
  418. break;
  419. case '8':
  420. days = this.result.day.cronLastSpecificDomDay + 'L';
  421. break;
  422. case '9':
  423. days = 'L-' + this.result.day.cronDaysBeforeEomMinus;
  424. break;
  425. case '10':
  426. days = this.result.day.cronDaysNearestWeekday+"W";
  427. break
  428. }
  429. return days;
  430. },
  431. weeksText() {
  432. let weeks = '';
  433. let cronEvery=this.result.day.cronEvery||'';
  434. switch (cronEvery.toString()){
  435. case '1':
  436. case '3':
  437. case '5':
  438. weeks = '?';
  439. break;
  440. case '2':
  441. weeks = this.result.week.incrementStart+'/'+this.result.week.incrementIncrement;
  442. break;
  443. case '4':
  444. this.result.week.specificSpecific.map(val=> {
  445. weeks += val+','
  446. });
  447. weeks = weeks.slice(0, -1);
  448. break;
  449. case '6':
  450. case '7':
  451. case '8':
  452. case '9':
  453. case '10':
  454. weeks = "?";
  455. break;
  456. case '11':
  457. weeks = this.result.week.cronNthDayDay+"#"+this.result.week.cronNthDayNth;
  458. break;
  459. }
  460. return weeks;
  461. },
  462. monthsText() {
  463. let months = '';
  464. let cronEvery=this.result.month.cronEvery||'';
  465. switch (cronEvery.toString()){
  466. case '1':
  467. months = '*';
  468. break;
  469. case '2':
  470. months = this.result.month.incrementStart+'/'+this.result.month.incrementIncrement;
  471. break;
  472. case '3':
  473. this.result.month.specificSpecific.map(val=> {
  474. months += val+','
  475. });
  476. months = months.slice(0, -1);
  477. break;
  478. case '4':
  479. months = this.result.month.rangeStart+'-'+this.result.month.rangeEnd;
  480. break;
  481. }
  482. return months;
  483. },
  484. yearsText() {
  485. let years = '';
  486. let cronEvery=this.result.year.cronEvery||'';
  487. switch (cronEvery.toString()){
  488. case '1':
  489. years = '*';
  490. break;
  491. case '2':
  492. years = this.result.year.incrementStart+'/'+this.result.year.incrementIncrement;
  493. break;
  494. case '3':
  495. this.result.year.specificSpecific.map(val=> {
  496. years += val+','
  497. });
  498. years = years.slice(0, -1);
  499. break;
  500. case '4':
  501. years = this.result.year.rangeStart+'-'+this.result.year.rangeEnd;
  502. break;
  503. }
  504. return years;
  505. },
  506. cron(){
  507. return `${this.secondsText||'*'} ${this.minutesText||'*'} ${this.hoursText||'*'} ${this.daysText||'*'} ${this.monthsText||'*'} ${this.weeksText||'?'} ${this.yearsText||'*'}`
  508. },
  509. },
  510. watch:{
  511. visible:{
  512. handler() {
  513. // if(this.data){
  514. // //this. result = Object.keys(this.data.value).length>0?this.deepCopy(this.data.value):this.deepCopy(this.defaultValue);
  515. // //this.result = Object.keys(this.data.value).length>0?clone(this.data.value):clone(this.defaultValue);
  516. // //this.result = Object.keys(this.data.value).length>0?clone(JSON.parse(this.data.value)):clone(this.defaultValue);
  517. // this.result = Object.keys(this.data.value).length>0?JSON.parse(this.data.value):JSON.parse(JSON.stringify(this.defaultValue));
  518. // }else{
  519. // //this.result = this.deepCopy(this.defaultValue);
  520. // //this.result = clone(this.defaultValue);
  521. // this.result = JSON.parse(JSON.stringify(this.defaultValue));
  522. // }
  523. let label = this.data;
  524. if(label){
  525. this.secondsReverseExp(label)
  526. this.minutesReverseExp(label);
  527. this.hoursReverseExp(label);
  528. this.daysReverseExp(label);
  529. this.daysReverseExp(label);
  530. this.monthsReverseExp(label);
  531. this.yearReverseExp(label);
  532. JSON.parse(JSON.stringify(label));
  533. }else {
  534. this.result = JSON.parse(JSON.stringify(this.defaultValue));
  535. }
  536. }
  537. }
  538. },
  539. methods: {
  540. show(){
  541. this.visible = true;
  542. // console.log('secondsReverseExp',this.secondsReverseExp(this.data));
  543. // console.log('minutesReverseExp',this.minutesReverseExp(this.data));
  544. // console.log('hoursReverseExp',this.hoursReverseExp(this.data));
  545. // console.log('daysReverseExp',this.daysReverseExp(this.data));
  546. // console.log('monthsReverseExp',this.monthsReverseExp(this.data));
  547. // console.log('yearReverseExp',this.yearReverseExp(this.data));
  548. },
  549. handleSubmit(){
  550. this.$emit('ok',this.cron);
  551. this.close();
  552. this.visible = false;
  553. },
  554. close(){
  555. this.visible = false;
  556. },
  557. secondsReverseExp(seconds) {
  558. let val = seconds.split(" ")[0];
  559. //alert(val);
  560. let second = {
  561. cronEvery:'',
  562. incrementStart:3,
  563. incrementIncrement:5,
  564. rangeStart:1,
  565. rangeEnd:0,
  566. specificSpecific:[]
  567. };
  568. switch (true) {
  569. case val.includes('*'):
  570. second.cronEvery = '1';
  571. break;
  572. case val.includes('/'):
  573. second.cronEvery = '2';
  574. second.incrementStart = val.split('/')[0];
  575. second.incrementIncrement = val.split('/')[1];
  576. break;
  577. case val.includes(','):
  578. second.cronEvery = '3';
  579. second.specificSpecific = val.split(',').map(Number).sort();
  580. break;
  581. case val.includes('-'):
  582. second.cronEvery = '4';
  583. second.rangeStart = val.split('-')[0];
  584. second.rangeEnd = val.split('-')[1];
  585. break;
  586. default:
  587. second.cronEvery = '1';
  588. }
  589. this.result.second = second;
  590. },
  591. minutesReverseExp(minutes) {
  592. let val = minutes.split(" ")[1];
  593. let minute = {
  594. cronEvery:'',
  595. incrementStart:3,
  596. incrementIncrement:5,
  597. rangeStart:1,
  598. rangeEnd:0,
  599. specificSpecific:[],
  600. }
  601. switch (true) {
  602. case val.includes('*'):
  603. minute.cronEvery = '1';
  604. break;
  605. case val.includes('/'):
  606. minute.cronEvery = '2';
  607. minute.incrementStart = val.split('/')[0];
  608. minute.incrementIncrement = val.split('/')[1];
  609. break;
  610. case val.includes(','):
  611. minute.cronEvery = '3';
  612. minute.specificSpecific = val.split(',').map(Number).sort();
  613. break;
  614. case val.includes('-'):
  615. minute.cronEvery = '4';
  616. minute.rangeStart = val.split('-')[0];
  617. minute.rangeEnd = val.split('-')[1];
  618. break;
  619. default:
  620. minute.cronEvery = '1';
  621. }
  622. this.result.minute = minute;
  623. },
  624. hoursReverseExp(hours) {
  625. let val = hours.split(" ")[2];
  626. let hour ={
  627. cronEvery:'',
  628. incrementStart:3,
  629. incrementIncrement:5,
  630. rangeStart:1,
  631. rangeEnd:'0',
  632. specificSpecific:[],
  633. };
  634. switch (true) {
  635. case val.includes('*'):
  636. hour.cronEvery = '1';
  637. break;
  638. case val.includes('/'):
  639. hour.cronEvery = '2';
  640. hour.incrementStart = val.split('/')[0];
  641. hour.incrementIncrement = val.split('/')[1];
  642. break;
  643. case val.includes(','):
  644. hour.cronEvery = '3';
  645. hour.specificSpecific = val.split(',').map(Number).sort();
  646. break;
  647. case val.includes('-'):
  648. hour.cronEvery = '4';
  649. hour.rangeStart = val.split('-')[0];
  650. hour.rangeEnd = val.split('-')[1];
  651. break;
  652. default:
  653. hour.cronEvery = '1';
  654. }
  655. this.result.hour = hour;
  656. },
  657. daysReverseExp(cron) {
  658. let days = cron.split(" ")[3];
  659. let weeks = cron.split(" ")[5];
  660. let day ={
  661. cronEvery:'',
  662. incrementStart:1,
  663. incrementIncrement:1,
  664. rangeStart:1,
  665. rangeEnd:1,
  666. specificSpecific:[],
  667. cronLastSpecificDomDay:1,
  668. cronDaysBeforeEomMinus:1,
  669. cronDaysNearestWeekday:1,
  670. };
  671. let week = {
  672. cronEvery:'',
  673. incrementStart:1,
  674. incrementIncrement:1,
  675. specificSpecific:[],
  676. cronNthDayDay:1,
  677. cronNthDayNth:'1',
  678. };
  679. if (!days.includes('?')) {
  680. switch (true) {
  681. case days.includes('*'):
  682. day.cronEvery = '1';
  683. break;
  684. case days.includes('?'):
  685. // 2、4、11
  686. break;
  687. case days.includes('/'):
  688. day.cronEvery = '3';
  689. day.incrementStart = days.split('/')[0];
  690. day.incrementIncrement = days.split('/')[1];
  691. break;
  692. case days.includes(','):
  693. day.cronEvery = '5';
  694. day.specificSpecific = days.split(',').map(Number).sort();
  695. // day.specificSpecific.forEach(function (value, index) {
  696. // day.specificSpecific[index] = value -1;
  697. // });
  698. break;
  699. case days.includes('LW'):
  700. day.cronEvery = '7';
  701. break;
  702. case days.includes('L-'):
  703. day.cronEvery = '9';
  704. day.cronDaysBeforeEomMinus = days.split('L-')[1];
  705. break;
  706. case days.includes('L'):
  707. //alert(days);
  708. if(days.len == 1){
  709. day.cronEvery = '6';
  710. day.cronLastSpecificDomDay = '1';
  711. }
  712. else
  713. {
  714. day.cronEvery = '8';
  715. day.cronLastSpecificDomDay = Number(days.split('L')[0]);
  716. }
  717. break;
  718. case days.includes('W'):
  719. day.cronEvery = '10';
  720. day.cronDaysNearestWeekday = days.split('W')[0];
  721. break;
  722. default:
  723. day.cronEvery = '1';
  724. }
  725. }else {
  726. switch (true){
  727. case weeks.includes('/'):
  728. day.cronEvery = '2';
  729. week.incrementStart = weeks.split("/")[0];
  730. week.incrementIncrement = weeks.split("/")[1];
  731. break;
  732. case weeks.includes(','):
  733. day.cronEvery = '4';
  734. week.specificSpecific = weeks.split(',').map(Number).sort();
  735. break;
  736. case '#':
  737. day.cronEvery = '11';
  738. week.cronNthDayDay = weeks.split("#")[0];
  739. week.cronNthDayNth = weeks.split("#")[1];
  740. break;
  741. default:
  742. day.cronEvery = '1';
  743. week.cronEvery = '1';
  744. }
  745. }
  746. this.result.day = day;
  747. this.result.week = week;
  748. },
  749. monthsReverseExp(cron) {
  750. let months = cron.split(" ")[4];
  751. let month = {
  752. cronEvery:'',
  753. incrementStart:3,
  754. incrementIncrement:5,
  755. rangeStart:1,
  756. rangeEnd:1,
  757. specificSpecific:[],
  758. };
  759. switch (true){
  760. case months.includes('*'):
  761. month.cronEvery = '1';
  762. break;
  763. case months.includes('/'):
  764. month.cronEvery = '2';
  765. month.incrementStart = months.split('/')[0];
  766. month.incrementIncrement = months.split('/')[1];
  767. break;
  768. case months.includes(','):
  769. month.cronEvery = '3';
  770. month.specificSpecific = months.split(',').map(Number).sort();
  771. break;
  772. case months.includes('-'):
  773. month.cronEvery = '4';
  774. month.rangeStart = months.split('-')[0];
  775. month.rangeEnd = months.split('-')[1];
  776. break;
  777. default:
  778. month.cronEvery = '1';
  779. }
  780. this.result.month = month;
  781. },
  782. yearReverseExp(cron) {
  783. let years = cron.split(" ")[6];
  784. let year = {
  785. cronEvery:'',
  786. incrementStart:3,
  787. incrementIncrement:5,
  788. rangeStart:2019,
  789. rangeEnd:2019,
  790. specificSpecific:[],
  791. };
  792. switch (true){
  793. case years.includes('*'):
  794. year.cronEvery = '1';
  795. break;
  796. case years.includes('/'):
  797. year.cronEvery = '2';
  798. year.incrementStart = years.split('/')[0];
  799. year.incrementIncrement = years.split('/')[1];
  800. break;
  801. case years.includes(','):
  802. year.cronEvery = '3';
  803. year.specificSpecific = years.split(',').map(Number).sort();
  804. break;
  805. case years.includes('-'):
  806. year.cronEvery = '4';
  807. year.rangeStart = years.split('-')[0];
  808. year.rangeEnd = years.split('-')[1];
  809. break;
  810. default:
  811. year.cronEvery = '1';
  812. }
  813. this.result.year = year;
  814. }
  815. }
  816. }
  817. </script>
  818. <style lang="less">
  819. .card-container {
  820. background: #fff;
  821. overflow: hidden;
  822. padding: 12px;
  823. position: relative;
  824. width: 100%;
  825. .ant-tabs{
  826. border:1px solid #e6ebf5;
  827. padding: 0;
  828. .ant-tabs-bar {
  829. margin: 0;
  830. outline: none;
  831. border-bottom: none;
  832. .ant-tabs-nav-container{
  833. margin: 0;
  834. .ant-tabs-tab {
  835. padding: 0 24px!important;
  836. background-color: #f5f7fa!important;
  837. margin-right: 0px!important;
  838. border-radius: 0;
  839. line-height: 38px;
  840. border: 1px solid transparent!important;
  841. border-bottom: 1px solid #e6ebf5!important;
  842. }
  843. .ant-tabs-tab-active.ant-tabs-tab{
  844. color: #409eff;
  845. background-color: #fff!important;
  846. border-right:1px solid #e6ebf5!important;
  847. border-left:1px solid #e6ebf5!important;
  848. border-bottom:1px solid #fff!important;
  849. font-weight: normal;
  850. transition:none!important;
  851. }
  852. }
  853. }
  854. .ant-tabs-tabpane{
  855. padding: 15px;
  856. .ant-row{
  857. margin: 10px 0;
  858. }
  859. .ant-select,.ant-input-number{
  860. width: 100px;
  861. }
  862. }
  863. }
  864. }
  865. </style>
  866. <style lang="less" scoped>
  867. .container-widthEn{
  868. width: 755px;
  869. }
  870. .container-widthCn{
  871. width: 608px;
  872. }
  873. .language{
  874. text-align: center;
  875. position: absolute;
  876. right: 13px;
  877. top: 13px;
  878. border: 1px solid transparent;
  879. height: 40px;
  880. line-height: 38px;
  881. font-size: 16px;
  882. color: #409eff;
  883. z-index: 1;
  884. background: #f5f7fa;
  885. outline: none;
  886. width: 47px;
  887. border-bottom: 1px solid #e6ebf5;
  888. border-radius: 0;
  889. }
  890. .card-container{
  891. .bottom{
  892. display: flex;
  893. justify-content: center;
  894. padding: 10px 0 0 0;
  895. .cronButton{
  896. margin: 0 10px;
  897. line-height: 40px;
  898. }
  899. }
  900. }
  901. .tabBody{
  902. .a-row{
  903. margin: 10px 0;
  904. .long{
  905. .a-select{
  906. width:354px;
  907. }
  908. }
  909. .a-input{
  910. width: 110px;
  911. }
  912. }
  913. }
  914. </style>