vue3cron.vue 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. <template>
  2. <div class="vue3-cron-div">
  3. <!-- <el-button class="language" type="text" @click="state.language = state.language === 'en' ? 'cn' : 'en'">{{
  4. state.language === 'en' ? 'cn' : 'en'
  5. }}</el-button> -->
  6. <el-tabs type="border-card">
  7. <el-tab-pane>
  8. <template #label>
  9. <span><i class="el-icon-date"></i> {{ state.text.Seconds.name }}</span>
  10. </template>
  11. <div class="tabBody myScroller" :style="{ 'max-height': maxHeight }">
  12. <el-row>
  13. <el-radio v-model="state.second.cronEvery" label="1">{{ state.text.Seconds.every }}</el-radio>
  14. </el-row>
  15. <el-row>
  16. <el-radio v-model="state.second.cronEvery" label="2">{{ state.text.Seconds.interval[0] }}
  17. <el-input-number size="small" v-model="state.second.incrementIncrement" :min="1" :max="60"></el-input-number>
  18. {{ state.text.Seconds.interval[1] || '' }}
  19. <el-input-number size="small" v-model="state.second.incrementStart" :min="0" :max="59"></el-input-number>
  20. {{ state.text.Seconds.interval[2] || '' }}
  21. </el-radio>
  22. </el-row>
  23. <el-row>
  24. <el-radio class="long" v-model="state.second.cronEvery" label="3">{{ state.text.Seconds.specific }}
  25. <el-select size="small" multiple v-model="state.second.specificSpecific">
  26. <el-option v-for="(val, index) in 60" :key="index" :value="val - 1">{{
  27. val - 1
  28. }}</el-option>
  29. </el-select>
  30. </el-radio>
  31. </el-row>
  32. <el-row>
  33. <el-radio v-model="state.second.cronEvery" label="4">{{ state.text.Seconds.cycle[0] }}
  34. <el-input-number size="small" v-model="state.second.rangeStart" :min="1" :max="60"></el-input-number>
  35. {{ state.text.Seconds.cycle[1] || '' }}
  36. <el-input-number size="small" v-model="state.second.rangeEnd" :min="0" :max="59"></el-input-number>
  37. {{ state.text.Seconds.cycle[2] || '' }}
  38. </el-radio>
  39. </el-row>
  40. </div>
  41. </el-tab-pane>
  42. <el-tab-pane>
  43. <template #label>
  44. <span><i class="el-icon-date"></i> {{ state.text.Minutes.name }}</span>
  45. </template>
  46. <div class="tabBody myScroller" :style="{ 'max-height': maxHeight }">
  47. <el-row>
  48. <el-radio v-model="state.minute.cronEvery" label="1">{{ state.text.Minutes.every }}</el-radio>
  49. </el-row>
  50. <el-row>
  51. <el-radio v-model="state.minute.cronEvery" label="2">{{ state.text.Minutes.interval[0] }}
  52. <el-input-number size="small" v-model="state.minute.incrementIncrement" :min="1" :max="60"></el-input-number>
  53. {{ state.text.Minutes.interval[1] }}
  54. <el-input-number size="small" v-model="state.minute.incrementStart" :min="0" :max="59"></el-input-number>
  55. {{ state.text.Minutes.interval[2] || '' }}
  56. </el-radio>
  57. </el-row>
  58. <el-row>
  59. <el-radio class="long" v-model="state.minute.cronEvery" label="3">{{ state.text.Minutes.specific }}
  60. <el-select size="small" multiple v-model="state.minute.specificSpecific">
  61. <el-option v-for="(val, index) in 60" :key="index" :value="val - 1">{{
  62. val - 1
  63. }}</el-option>
  64. </el-select>
  65. </el-radio>
  66. </el-row>
  67. <el-row>
  68. <el-radio v-model="state.minute.cronEvery" label="4">{{ state.text.Minutes.cycle[0] }}
  69. <el-input-number size="small" v-model="state.minute.rangeStart" :min="1" :max="60"></el-input-number>
  70. {{ state.text.Minutes.cycle[1] }}
  71. <el-input-number size="small" v-model="state.minute.rangeEnd" :min="0" :max="59"></el-input-number>
  72. {{ state.text.Minutes.cycle[2] }}
  73. </el-radio>
  74. </el-row>
  75. </div>
  76. </el-tab-pane>
  77. <el-tab-pane>
  78. <template #label>
  79. <span><i class="el-icon-date"></i> {{ state.text.Hours.name }}</span>
  80. </template>
  81. <div class="tabBody myScroller" :style="{ 'max-height': maxHeight }">
  82. <el-row>
  83. <el-radio v-model="state.hour.cronEvery" label="1">{{ state.text.Hours.every }}</el-radio>
  84. </el-row>
  85. <el-row>
  86. <el-radio v-model="state.hour.cronEvery" label="2">{{ state.text.Hours.interval[0] }}
  87. <el-input-number size="small" v-model="state.hour.incrementIncrement" :min="0" :max="23"></el-input-number>
  88. {{ state.text.Hours.interval[1] }}
  89. <el-input-number size="small" v-model="state.hour.incrementStart" :min="0" :max="23"></el-input-number>
  90. {{ state.text.Hours.interval[2] }}
  91. </el-radio>
  92. </el-row>
  93. <el-row>
  94. <el-radio class="long" v-model="state.hour.cronEvery" label="3">{{ state.text.Hours.specific }}
  95. <el-select size="small" multiple v-model="state.hour.specificSpecific">
  96. <el-option v-for="(val, index) in 24" :key="index" :value="val - 1">{{
  97. val - 1
  98. }}</el-option>
  99. </el-select>
  100. </el-radio>
  101. </el-row>
  102. <el-row>
  103. <el-radio v-model="state.hour.cronEvery" label="4">{{ state.text.Hours.cycle[0] }}
  104. <el-input-number size="small" v-model="state.hour.rangeStart" :min="0" :max="23"></el-input-number>
  105. {{ state.text.Hours.cycle[1] }}
  106. <el-input-number size="small" v-model="state.hour.rangeEnd" :min="0" :max="23"></el-input-number>
  107. {{ state.text.Hours.cycle[2] }}
  108. </el-radio>
  109. </el-row>
  110. </div>
  111. </el-tab-pane>
  112. <el-tab-pane>
  113. <template #label>
  114. <span><i class="el-icon-date"></i> {{ state.text.Day.name }}</span>
  115. </template>
  116. <div class="tabBody myScroller" :style="{ 'max-height': maxHeight }">
  117. <el-row>
  118. <el-radio v-model="state.day.cronEvery" label="1">{{ state.text.Day.every }}</el-radio>
  119. </el-row>
  120. <el-row>
  121. <el-radio v-model="state.day.cronEvery" label="2">{{ state.text.Day.intervalWeek[0] }}
  122. <el-input-number size="small" v-model="state.week.incrementIncrement" :min="1" :max="7"></el-input-number>
  123. {{ state.text.Day.intervalWeek[1] }}
  124. <el-select size="small" v-model="state.week.incrementStart">
  125. <el-option v-for="(val, index) in 7" :key="index" :label="state.text.Week[val - 1]" :value="val"></el-option>
  126. </el-select>
  127. {{ state.text.Day.intervalWeek[2] }}
  128. </el-radio>
  129. </el-row>
  130. <el-row>
  131. <el-radio v-model="state.day.cronEvery" label="3">{{ state.text.Day.intervalDay[0] }}
  132. <el-input-number size="small" v-model="state.day.incrementIncrement" :min="1" :max="31"></el-input-number>
  133. {{ state.text.Day.intervalDay[1] }}
  134. <el-input-number size="small" v-model="state.day.incrementStart" :min="1" :max="31"></el-input-number>
  135. {{ state.text.Day.intervalDay[2] }}
  136. </el-radio>
  137. </el-row>
  138. <el-row>
  139. <el-radio class="long" v-model="state.day.cronEvery" label="4">{{ state.text.Day.specificWeek }}
  140. <el-select size="small" multiple v-model="state.week.specificSpecific">
  141. <el-option v-for="(val, index) in 7" :key="index" :label="state.text.Week[val - 1]" :value="['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'][val - 1]"></el-option>
  142. </el-select>
  143. </el-radio>
  144. </el-row>
  145. <el-row>
  146. <el-radio class="long" v-model="state.day.cronEvery" label="5">{{ state.text.Day.specificDay }}
  147. <el-select size="small" multiple v-model="state.day.specificSpecific">
  148. <el-option v-for="(val, index) in 31" :key="index" :value="val">{{ val }}</el-option>
  149. </el-select>
  150. </el-radio>
  151. </el-row>
  152. <el-row>
  153. <el-radio v-model="state.day.cronEvery" label="6">{{ state.text.Day.lastDay }}</el-radio>
  154. </el-row>
  155. <el-row>
  156. <el-radio v-model="state.day.cronEvery" label="7">{{ state.text.Day.lastWeekday }}</el-radio>
  157. </el-row>
  158. <el-row>
  159. <el-radio v-model="state.day.cronEvery" label="8">{{ state.text.Day.lastWeek[0] }}
  160. <el-select size="small" v-model="state.day.cronLastSpecificDomDay">
  161. <el-option v-for="(val, index) in 7" :key="index" :label="state.text.Week[val - 1]" :value="val"></el-option>
  162. </el-select>
  163. {{ state.text.Day.lastWeek[1] || '' }}
  164. </el-radio>
  165. </el-row>
  166. <el-row>
  167. <el-radio v-model="state.day.cronEvery" label="9">
  168. <el-input-number size="small" v-model="state.day.cronDaysBeforeEomMinus" :min="1" :max="31"></el-input-number>
  169. {{ state.text.Day.beforeEndMonth[0] }}
  170. </el-radio>
  171. </el-row>
  172. <el-row>
  173. <el-radio v-model="state.day.cronEvery" label="10">{{ state.text.Day.nearestWeekday[0] }}
  174. <el-input-number size="small" v-model="state.day.cronDaysNearestWeekday" :min="1" :max="31"></el-input-number>
  175. {{ state.text.Day.nearestWeekday[1] }}
  176. </el-radio>
  177. </el-row>
  178. <el-row>
  179. <el-radio v-model="state.day.cronEvery" label="11">{{ state.text.Day.someWeekday[0] }}
  180. <el-input-number size="small" v-model="state.week.cronNthDayNth" :min="1" :max="5"></el-input-number>
  181. <el-select size="small" v-model="state.week.cronNthDayDay">
  182. <el-option v-for="(val, index) in 7" :key="index" :label="state.text.Week[val - 1]" :value="val"></el-option>
  183. </el-select>
  184. {{ state.text.Day.someWeekday[1] }}
  185. </el-radio>
  186. </el-row>
  187. </div>
  188. </el-tab-pane>
  189. <el-tab-pane>
  190. <template #label>
  191. <span><i class="el-icon-date"></i> {{ state.text.Month.name }}</span>
  192. </template>
  193. <div class="tabBody myScroller" :style="{ 'max-height': maxHeight }">
  194. <el-row>
  195. <el-radio v-model="state.month.cronEvery" label="1">{{ state.text.Month.every }}</el-radio>
  196. </el-row>
  197. <el-row>
  198. <el-radio v-model="state.month.cronEvery" label="2">{{ state.text.Month.interval[0] }}
  199. <el-input-number size="small" v-model="state.month.incrementIncrement" :min="0" :max="12"></el-input-number>
  200. {{ state.text.Month.interval[1] }}
  201. <el-input-number size="small" v-model="state.month.incrementStart" :min="0" :max="12"></el-input-number>
  202. </el-radio>
  203. </el-row>
  204. <el-row>
  205. <el-radio class="long" v-model="state.month.cronEvery" label="3">{{ state.text.Month.specific }}
  206. <el-select size="small" multiple v-model="state.month.specificSpecific">
  207. <el-option v-for="(val, index) in 12" :key="index" :label="val" :value="val"></el-option>
  208. </el-select>
  209. </el-radio>
  210. </el-row>
  211. <el-row>
  212. <el-radio v-model="state.month.cronEvery" label="4">{{ state.text.Month.cycle[0] }}
  213. <el-input-number size="small" v-model="state.month.rangeStart" :min="1" :max="12"></el-input-number>
  214. {{ state.text.Month.cycle[1] }}
  215. <el-input-number size="small" v-model="state.month.rangeEnd" :min="1" :max="12"></el-input-number>
  216. </el-radio>
  217. </el-row>
  218. </div>
  219. </el-tab-pane>
  220. <el-tab-pane>
  221. <template #label>
  222. <span><i class="el-icon-date"></i> {{ state.text.Year.name }}</span>
  223. </template>
  224. <div class="tabBody myScroller" :style="{ 'max-height': maxHeight }">
  225. <el-row>
  226. <el-radio v-model="state.year.cronEvery" label="1">{{ state.text.Year.every }}</el-radio>
  227. </el-row>
  228. <el-row>
  229. <el-radio v-model="state.year.cronEvery" label="2">{{ state.text.Year.interval[0] }}
  230. <el-input-number size="small" v-model="state.year.incrementIncrement" :min="1" :max="99"></el-input-number>
  231. {{ state.text.Year.interval[1] }}
  232. <el-input-number size="small" v-model="state.year.incrementStart" :min="2018" :max="2118"></el-input-number>
  233. </el-radio>
  234. </el-row>
  235. <el-row>
  236. <el-radio class="long" v-model="state.year.cronEvery" label="3">{{ state.text.Year.specific }}
  237. <el-select size="small" filterable multiple v-model="state.year.specificSpecific">
  238. <el-option v-for="(val, index) in 100" :key="index" :label="2017 + val" :value="2017 + val"></el-option>
  239. </el-select>
  240. </el-radio>
  241. </el-row>
  242. <el-row>
  243. <el-radio v-model="state.year.cronEvery" label="4">{{ state.text.Year.cycle[0] }}
  244. <el-input-number size="small" v-model="state.year.rangeStart" :min="2018" :max="2118"></el-input-number>
  245. {{ state.text.Year.cycle[1] }}
  246. <el-input-number size="small" v-model="state.year.rangeEnd" :min="2018" :max="2118"></el-input-number>
  247. </el-radio>
  248. </el-row>
  249. </div>
  250. </el-tab-pane>
  251. </el-tabs>
  252. <div class="bottom">
  253. <div class="value" style="margin: 10px;">
  254. <span> cron预览: </span>
  255. <el-tag type="primary">
  256. {{ state.cron }}
  257. </el-tag>
  258. </div>
  259. <div class="buttonDiv" style="text-align: right;">
  260. <el-button type="primary" size="mini" @click.stop="handleChange">{{ state.text.Save }}</el-button>
  261. <el-button type="primary" size="mini" @click="close">{{ state.text.Close }}</el-button>
  262. </div>
  263. </div>
  264. </div>
  265. </template>
  266. <script>
  267. import Language from './language';
  268. import { reactive, computed, toRefs, defineComponent } from 'vue';
  269. export default defineComponent({
  270. name: 'vue3Cron',
  271. props: {
  272. cronValue: {},
  273. type: '',
  274. i18n: {},
  275. maxHeight: {}
  276. },
  277. setup(props, { emit }) {
  278. const { i18n } = toRefs(props);
  279. const state = reactive({
  280. language: i18n.value,
  281. second: {
  282. cronEvery: '1',
  283. incrementStart: 3,
  284. incrementIncrement: 5,
  285. rangeStart: 0,
  286. rangeEnd: 0,
  287. specificSpecific: []
  288. },
  289. minute: {
  290. cronEvery: '1',
  291. incrementStart: 3,
  292. incrementIncrement: 5,
  293. rangeStart: 0,
  294. rangeEnd: 0,
  295. specificSpecific: []
  296. },
  297. hour: {
  298. cronEvery: '1',
  299. incrementStart: 3,
  300. incrementIncrement: 5,
  301. rangeStart: 0,
  302. rangeEnd: 0,
  303. specificSpecific: []
  304. },
  305. day: {
  306. cronEvery: '1',
  307. incrementStart: 1,
  308. incrementIncrement: 1,
  309. rangeStart: 0,
  310. rangeEnd: 0,
  311. specificSpecific: [],
  312. cronLastSpecificDomDay: 1,
  313. cronDaysBeforeEomMinus: 0,
  314. cronDaysNearestWeekday: 0
  315. },
  316. week: {
  317. cronEvery: '1',
  318. incrementStart: 1,
  319. incrementIncrement: 1,
  320. specificSpecific: [],
  321. cronNthDayDay: 1,
  322. cronNthDayNth: 1
  323. },
  324. month: {
  325. cronEvery: '1',
  326. incrementStart: 3,
  327. incrementIncrement: 5,
  328. rangeStart: 0,
  329. rangeEnd: 0,
  330. specificSpecific: []
  331. },
  332. year: {
  333. cronEvery: '1',
  334. incrementStart: 2017,
  335. incrementIncrement: 1,
  336. rangeStart: 0,
  337. rangeEnd: 0,
  338. specificSpecific: []
  339. },
  340. output: {
  341. second: '',
  342. minute: '',
  343. hour: '',
  344. day: '',
  345. month: '',
  346. Week: '',
  347. year: ''
  348. },
  349. text: computed(() => Language[state.language || 'cn']),
  350. secondsText: computed(() => {
  351. let seconds = '';
  352. let cronEvery = state.second.cronEvery;
  353. switch (cronEvery.toString()) {
  354. case '1':
  355. seconds = '*';
  356. break;
  357. case '2':
  358. seconds = state.second.incrementStart + '/' + state.second.incrementIncrement;
  359. break;
  360. case '3':
  361. state.second.specificSpecific.map(val => {
  362. seconds += val + ',';
  363. });
  364. seconds = seconds.slice(0, -1);
  365. break;
  366. case '4':
  367. seconds = state.second.rangeStart + '-' + state.second.rangeEnd;
  368. break;
  369. }
  370. return seconds;
  371. }),
  372. minutesText: computed(() => {
  373. let minutes = '';
  374. let cronEvery = state.minute.cronEvery;
  375. switch (cronEvery.toString()) {
  376. case '1':
  377. minutes = '*';
  378. break;
  379. case '2':
  380. minutes = state.minute.incrementStart + '/' + state.minute.incrementIncrement;
  381. break;
  382. case '3':
  383. state.minute.specificSpecific.map(val => {
  384. minutes += val + ',';
  385. });
  386. minutes = minutes.slice(0, -1);
  387. break;
  388. case '4':
  389. minutes = state.minute.rangeStart + '-' + state.minute.rangeEnd;
  390. break;
  391. }
  392. return minutes;
  393. }),
  394. hoursText: computed(() => {
  395. let hours = '';
  396. let cronEvery = state.hour.cronEvery;
  397. switch (cronEvery.toString()) {
  398. case '1':
  399. hours = '*';
  400. break;
  401. case '2':
  402. hours = state.hour.incrementStart + '/' + state.hour.incrementIncrement;
  403. break;
  404. case '3':
  405. state.hour.specificSpecific.map(val => {
  406. hours += val + ',';
  407. });
  408. hours = hours.slice(0, -1);
  409. break;
  410. case '4':
  411. hours = state.hour.rangeStart + '-' + state.hour.rangeEnd;
  412. break;
  413. }
  414. return hours;
  415. }),
  416. daysText: computed(() => {
  417. let days = '';
  418. let cronEvery = state.day.cronEvery;
  419. switch (cronEvery.toString()) {
  420. case '1':
  421. break;
  422. case '2':
  423. case '4':
  424. case '11':
  425. days = '?';
  426. break;
  427. case '3':
  428. days = state.day.incrementStart + '/' + state.day.incrementIncrement;
  429. break;
  430. case '5':
  431. state.day.specificSpecific.map(val => {
  432. days += val + ',';
  433. });
  434. days = days.slice(0, -1);
  435. break;
  436. case '6':
  437. days = 'L';
  438. break;
  439. case '7':
  440. days = 'LW';
  441. break;
  442. case '8':
  443. days = state.day.cronLastSpecificDomDay + 'L';
  444. break;
  445. case '9':
  446. days = 'L-' + state.day.cronDaysBeforeEomMinus;
  447. break;
  448. case '10':
  449. days = state.day.cronDaysNearestWeekday + 'W';
  450. break;
  451. }
  452. return days;
  453. }),
  454. weeksText: computed(() => {
  455. let weeks = '';
  456. let cronEvery = state.day.cronEvery;
  457. switch (cronEvery.toString()) {
  458. case '1':
  459. case '3':
  460. case '5':
  461. weeks = '?';
  462. break;
  463. case '2':
  464. weeks = state.week.incrementStart + '/' + state.week.incrementIncrement;
  465. break;
  466. case '4':
  467. state.week.specificSpecific.map(val => {
  468. weeks += val + ',';
  469. });
  470. weeks = weeks.slice(0, -1);
  471. break;
  472. case '6':
  473. case '7':
  474. case '8':
  475. case '9':
  476. case '10':
  477. weeks = '?';
  478. break;
  479. case '11':
  480. weeks = state.week.cronNthDayDay + '#' + state.week.cronNthDayNth;
  481. break;
  482. }
  483. return weeks;
  484. }),
  485. monthsText: computed(() => {
  486. let months = '';
  487. let cronEvery = state.month.cronEvery;
  488. switch (cronEvery.toString()) {
  489. case '1':
  490. months = '*';
  491. break;
  492. case '2':
  493. months = state.month.incrementStart + '/' + state.month.incrementIncrement;
  494. break;
  495. case '3':
  496. state.month.specificSpecific.map(val => {
  497. months += val + ',';
  498. });
  499. months = months.slice(0, -1);
  500. break;
  501. case '4':
  502. months = state.month.rangeStart + '-' + state.month.rangeEnd;
  503. break;
  504. }
  505. return months;
  506. }),
  507. yearsText: computed(() => {
  508. let years = '';
  509. let cronEvery = state.year.cronEvery;
  510. switch (cronEvery.toString()) {
  511. case '1':
  512. years = '*';
  513. break;
  514. case '2':
  515. years = state.year.incrementStart + '/' + state.year.incrementIncrement;
  516. break;
  517. case '3':
  518. state.year.specificSpecific.map(val => {
  519. years += val + ',';
  520. });
  521. years = years.slice(0, -1);
  522. break;
  523. case '4':
  524. years = state.year.rangeStart + '-' + state.year.rangeEnd;
  525. break;
  526. }
  527. return years;
  528. }),
  529. cron: computed(() => {
  530. let cron = `${state.secondsText || '*'} ${state.minutesText || '*'} ${state.hoursText || '*'} ${state.daysText || '*'
  531. } ${state.monthsText || '*'} ${state.weeksText || '?'} ${state.yearsText || '*'}`;
  532. return cron
  533. })
  534. });
  535. const getValue = () => {
  536. return state.cron;
  537. };
  538. const close = () => {
  539. emit('close');
  540. };
  541. const handleChange = () => {
  542. emit('handlelisten', {
  543. cron: state.cron,
  544. type: props.type
  545. });
  546. close();
  547. };
  548. const rest = data => {
  549. for (let i in data) {
  550. if (data[i] instanceof Object) {
  551. this.rest(data[i]);
  552. } else {
  553. switch (typeof data[i]) {
  554. case 'object':
  555. data[i] = [];
  556. break;
  557. case 'string':
  558. data[i] = '';
  559. break;
  560. }
  561. }
  562. }
  563. };
  564. return {
  565. state,
  566. getValue,
  567. close,
  568. handleChange,
  569. rest
  570. };
  571. }
  572. });
  573. </script>
  574. <style >
  575. .vue3-cron-div {
  576. .el-input-number__decrease,
  577. .el-input-number__increase {
  578. top: 2px !important;
  579. }
  580. .language {
  581. position: absolute;
  582. right: 25px;
  583. z-index: 1;
  584. }
  585. .el-tabs {
  586. box-shadow: none;
  587. }
  588. .tabBody {
  589. overflow: auto;
  590. .el-row {
  591. margin: 20px 0;
  592. .long {
  593. .el-select {
  594. width: 350px;
  595. }
  596. }
  597. .el-input-number {
  598. width: 110px;
  599. }
  600. }
  601. }
  602. .myScroller {
  603. &::-webkit-scrollbar {
  604. /*滚动条整体样式*/
  605. width: 5px;
  606. /*高宽分别对应横竖滚动条的尺寸*/
  607. height: 1px;
  608. }
  609. &::-webkit-scrollbar-thumb {
  610. /*滚动条里面小方块*/
  611. border-radius: 10px;
  612. background-color: skyblue;
  613. background-image: -webkit-linear-gradient(45deg,
  614. rgba(255, 255, 255, 0.2) 25%,
  615. transparent 25%,
  616. transparent 50%,
  617. rgba(255, 255, 255, 0.2) 50%,
  618. rgba(255, 255, 255, 0.2) 75%,
  619. transparent 75%,
  620. transparent);
  621. }
  622. &::-webkit-scrollbar-track {
  623. /*滚动条里面轨道*/
  624. box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  625. background: #ededed;
  626. border-radius: 10px;
  627. }
  628. }
  629. .bottom {
  630. width: 100%;
  631. margin-top: 5px;
  632. display: flex;
  633. align-items: center;
  634. justify-content: space-around;
  635. .value {
  636. float: left;
  637. font-size: 14px;
  638. vertical-align: middle;
  639. span:nth-child(1) {
  640. color: red;
  641. }
  642. }
  643. }
  644. }
  645. </style>