You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1188 lines
36 KiB

<template>
<!-- <a-input @click="show" placeholder="corn表达式" v-model:value="value" v-bind="value" @change="handleOK">
<a-icon slot="prefix" type="schedule" title="corn控件" />
<a-icon v-if="cron" slot="suffix" type="close-circle" @click="handleEmpty" title="清空" />
</a-input> -->
<a-modal
title="corn表达式"
:width="modalWidth"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="close"
cancelText="关闭"
>
<div class="card-container">
<a-tabs type="card" v-model:activeKey="activeKey">
<a-tab-pane key="1" type="card">
<template #tab><a-icon type="schedule" /> 秒</template>
<a-radio-group v-model:value="result.second.cronEvery" name="group">
<a-row>
<a-radio value="1">每一秒钟</a-radio>
</a-row>
<a-row>
<a-radio value="2"
>每隔
<a-input-number
size="small"
name="test"
v-model:value="result.second.incrementIncrement"
:min="1"
:max="60"
></a-input-number>
秒执行 从
<a-input-number
size="small"
v-model:value="result.second.incrementStart"
:min="0"
:max="59"
></a-input-number>
秒开始
</a-radio>
</a-row>
<a-row>
<a-radio value="3">具体秒数(可多选)</a-radio>
<a-select
style="width: 354px"
size="small"
mode="multiple"
v-model:value="result.second.specificSpecific"
>
<a-select-option v-for="(val, index) in 60" :key="index" :value="index">{{
index
}}</a-select-option>
</a-select>
</a-row>
<a-row>
<a-radio value="4"
>周期从
<a-input-number
size="small"
v-model:value="result.second.rangeStart"
:min="1"
:max="60"
></a-input-number>
<a-input-number
size="small"
v-model:value="result.second.rangeEnd"
:min="0"
:max="59"
></a-input-number>
</a-radio>
</a-row>
</a-radio-group>
</a-tab-pane>
<a-tab-pane key="2">
<template #tab><a-icon type="schedule" /> 分</template>
<div class="tabBody">
<a-radio-group v-model:value="result.minute.cronEvery" name="group">
<a-row>
<a-radio value="1">每一分钟</a-radio>
</a-row>
<a-row>
<a-radio value="2"
>每隔
<a-input-number
size="small"
v-model:value="result.minute.incrementIncrement"
:min="1"
:max="60"
></a-input-number>
分执行 从
<a-input-number
size="small"
v-model:value="result.minute.incrementStart"
:min="0"
:max="59"
></a-input-number>
分开始
</a-radio>
</a-row>
<a-row>
<a-radio value="3">具体分钟数(可多选)</a-radio>
<a-select
style="width: 340px"
size="small"
mode="multiple"
v-model:value="result.minute.specificSpecific"
>
<a-select-option v-for="(val, index) in Array(60)" :key="index" :value="index">
{{ index }}</a-select-option
>
</a-select>
</a-row>
<a-row>
<a-radio value="4"
>周期从
<a-input-number
size="small"
v-model:value="result.minute.rangeStart"
:min="1"
:max="60"
></a-input-number>
<a-input-number
size="small"
v-model:value="result.minute.rangeEnd"
:min="0"
:max="59"
></a-input-number>
</a-radio>
</a-row>
</a-radio-group>
</div>
</a-tab-pane>
<a-tab-pane key="3">
<template #tab><a-icon type="schedule" /> 时</template>
<div class="tabBody">
<a-radio-group v-model:value="result.hour.cronEvery" name="group">
<a-row>
<a-radio value="1">每一小时</a-radio>
</a-row>
<a-row>
<a-radio value="2"
>每隔
<a-input-number
size="small"
v-model:value="result.hour.incrementIncrement"
:min="0"
:max="23"
></a-input-number>
小时执行 从
<a-input-number
size="small"
v-model:value="result.hour.incrementStart"
:min="0"
:max="23"
></a-input-number>
小时开始
</a-radio>
</a-row>
<a-row>
<a-radio class="long" value="3">具体小时数(可多选)</a-radio>
<a-select
style="width: 340px"
size="small"
mode="multiple"
v-model:value="result.hour.specificSpecific"
>
<a-select-option v-for="(val, index) in Array(24)" :key="index">{{
index
}}</a-select-option>
</a-select>
</a-row>
<a-row>
<a-radio value="4"
>周期从
<a-input-number
size="small"
v-model:value="result.hour.rangeStart"
:min="0"
:max="23"
></a-input-number>
<a-input-number
size="small"
v-model:value="result.hour.rangeEnd"
:min="0"
:max="23"
></a-input-number>
小时
</a-radio>
</a-row>
</a-radio-group>
</div>
</a-tab-pane>
<a-tab-pane key="4">
<template #tab><a-icon type="schedule" /> </template>
<div class="tabBody">
<a-radio-group v-model:value="result.day.cronEvery" name="group">
<a-row>
<a-radio value="1">每一天</a-radio>
</a-row>
<a-row>
<a-radio value="2"
>每隔
<a-input-number
size="small"
v-model:value="result.week.incrementIncrement"
:min="1"
:max="7"
></a-input-number>
周执行
<a-select size="small" v-model:value="result.week.incrementStart">
<a-select-option
v-for="(val, index) in Array(7)"
:key="index"
:value="index + 1"
>{{ weekDays[index] }}</a-select-option
>
</a-select>
开始
</a-radio>
</a-row>
<a-row>
<a-radio value="3"
>每隔
<a-input-number
size="small"
v-model:value="result.day.incrementIncrement"
:min="1"
:max="31"
></a-input-number>
天执行 从
<a-input-number
size="small"
v-model:value="result.day.incrementStart"
:min="1"
:max="31"
></a-input-number>
天开始
</a-radio>
</a-row>
<a-row>
<a-radio class="long" value="4">具体星期几(可多选)</a-radio>
<a-select
style="width: 340px"
size="small"
mode="multiple"
v-model:value="result.week.specificSpecific"
>
<a-select-option
v-for="(val, index) in Array(7)"
:key="index"
:value="index + 1"
>{{ weekDays[index] }}</a-select-option
>
</a-select>
</a-row>
<a-row>
<a-radio class="long" value="5">具体天数(可多选)</a-radio>
<a-select
style="width: 354px"
size="small"
mode="multiple"
v-model:value="result.day.specificSpecific"
>
<a-select-option
v-for="(val, index) in Array(31)"
:key="index"
:value="index + 1"
>{{ index + 1 }}</a-select-option
>
</a-select>
</a-row>
<a-row>
<a-radio value="6">在这个月的最后一天</a-radio>
</a-row>
<a-row>
<a-radio value="7">在这个月的最后一个工作日</a-radio>
</a-row>
<a-row>
<a-radio :value="8"
>在这个月的最后一个
<a-select size="small" v-model:value="result.day.cronLastSpecificDomDay">
<a-select-option
v-for="(val, index) in Array(7)"
:key="index"
:value="index + 1"
>{{ weekDays[index] }}</a-select-option
>
</a-select>
</a-radio>
</a-row>
<a-row>
<a-radio value="9">
在本月底前
<a-input-number
size="small"
v-model:value="result.day.cronDaysBeforeEomMinus"
:min="1"
:max="31"
></a-input-number>
</a-radio>
</a-row>
<a-row>
<a-radio value="10"
>最近的工作日(周一至周五)至本月
<a-input-number
size="small"
v-model:value="result.day.cronDaysNearestWeekday"
:min="1"
:max="31"
></a-input-number>
</a-radio>
</a-row>
<a-row>
<a-radio value="11"
>在这个月的第
<a-input-number
size="small"
v-model:value="result.week.cronNthDayNth"
:min="1"
:max="5"
></a-input-number>
<a-select size="small" v-model:value="result.week.cronNthDayDay">
<a-select-option
v-for="(val, index) in Array(7)"
:key="index"
:value="index + 1"
>{{ weekDays[index] }}</a-select-option
>
</a-select>
</a-radio>
</a-row>
</a-radio-group>
</div>
</a-tab-pane>
<a-tab-pane key="5">
<template #tab><a-icon type="schedule" /> 月</template>
<div class="tabBody">
<a-radio-group v-model:value="result.month.cronEvery" name="group">
<a-row>
<a-radio value="1">每一月</a-radio>
</a-row>
<a-row>
<a-radio value="2"
>每隔
<a-input-number
size="small"
v-model:value="result.month.incrementIncrement"
:min="0"
:max="12"
></a-input-number>
月执行 从
<a-input-number
size="small"
v-model:value="result.month.incrementStart"
:min="0"
:max="12"
></a-input-number>
月开始
</a-radio>
</a-row>
<a-row>
<a-radio class="long" value="3">具体月数(可多选)</a-radio>
<a-select
style="width: 354px"
size="small"
filterable
mode="multiple"
v-model:value="result.month.specificSpecific"
>
<a-select-option
v-for="(val, index) in Array(12)"
:key="index"
:value="index + 1"
>{{ index + 1 }}</a-select-option
>
</a-select>
</a-row>
<a-row>
<a-radio value="4"
>从
<a-input-number
size="small"
v-model:value="result.month.rangeStart"
:min="1"
:max="12"
></a-input-number>
<a-input-number
size="small"
v-model:value="result.month.rangeEnd"
:min="1"
:max="12"
></a-input-number>
月之间的每个月
</a-radio>
</a-row>
</a-radio-group>
</div>
</a-tab-pane>
<a-tab-pane key="6">
<template #tab><a-icon type="schedule" /> 年</template>
<div class="tabBody">
<a-radio-group v-model:value="result.year.cronEvery" name="group">
<a-row>
<a-radio value="1">每一年</a-radio>
</a-row>
<a-row>
<a-radio value="2"
>每隔
<a-input-number
size="small"
v-model:value="result.year.incrementIncrement"
:min="1"
:max="99"
></a-input-number>
年执行 从
<a-input-number
size="small"
v-model:value="result.year.incrementStart"
:min="2019"
:max="2119"
></a-input-number>
年开始
</a-radio>
</a-row>
<a-row>
<a-radio class="long" value="3">具体年份(可多选)</a-radio>
<a-select
style="width: 354px"
size="small"
filterable
mode="multiple"
v-model:value="result.year.specificSpecific"
>
<a-select-option
v-for="(val, index) in Array(100)"
:key="index"
:value="2019 + index"
>{{ 2019 + index }}</a-select-option
>
</a-select>
</a-row>
<a-row>
<a-radio value="4"
>从
<a-input-number
size="small"
v-model:value="result.year.rangeStart"
:min="2019"
:max="2119"
></a-input-number>
<a-input-number
size="small"
v-model:value="result.year.rangeEnd"
:min="2019"
:max="2119"
></a-input-number>
年之间的每一年
</a-radio>
</a-row>
</a-radio-group>
</div>
</a-tab-pane>
</a-tabs>
<div class="bottom">
<span class="value">{{ cron }}</span>
</div>
</div>
</a-modal>
</template>
<script>
import { defineComponent } from 'vue';
export default defineComponent({
name: 'VueCron',
props: ['data', 'value'],
data() {
return {
activeKey:'1',
visible: false,
confirmLoading: false,
size: 'large',
weekDays: ['天', '一', '二', '三', '四', '五', '六'].map((val) => '星期' + val),
result: {
second: {},
minute: {},
hour: {},
day: {},
week: {},
month: {},
year: {},
},
defaultValue: {
second: {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 1,
rangeEnd: 0,
specificSpecific: [],
},
minute: {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 1,
rangeEnd: '0',
specificSpecific: [],
},
hour: {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: '0',
rangeEnd: '0',
specificSpecific: [],
},
day: {
cronEvery: '',
incrementStart: 1,
incrementIncrement: '1',
rangeStart: '',
rangeEnd: '',
specificSpecific: [],
cronLastSpecificDomDay: 1,
cronDaysBeforeEomMinus: 1,
cronDaysNearestWeekday: 1,
},
week: {
cronEvery: '',
incrementStart: 1,
incrementIncrement: 1,
specificSpecific: [],
cronNthDayDay: 1,
cronNthDayNth: 1,
},
month: {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 1,
rangeEnd: 1,
specificSpecific: [],
},
year: {
cronEvery: '',
incrementStart: 2017,
incrementIncrement: 1,
rangeStart: 2019,
rangeEnd: 2019,
specificSpecific: [],
},
label: '',
},
modalWidth: 608,
};
},
computed: {
modalWidth() {
return 608;
},
secondsText() {
let seconds = '';
let cronEvery = this.result.second.cronEvery || '';
switch (cronEvery.toString()) {
case '1':
seconds = '*';
break;
case '2':
seconds = this.result.second.incrementStart + '/' + this.result.second.incrementIncrement;
break;
case '3':
this.result.second.specificSpecific.map((val) => {
seconds += val + ',';
});
seconds = seconds.slice(0, -1);
break;
case '4':
seconds = this.result.second.rangeStart + '-' + this.result.second.rangeEnd;
break;
}
return seconds;
},
minutesText() {
let minutes = '';
let cronEvery = this.result.minute.cronEvery || '';
switch (cronEvery.toString()) {
case '1':
minutes = '*';
break;
case '2':
minutes = this.result.minute.incrementStart + '/' + this.result.minute.incrementIncrement;
break;
case '3':
this.result.minute.specificSpecific.map((val) => {
minutes += val + ',';
});
minutes = minutes.slice(0, -1);
break;
case '4':
minutes = this.result.minute.rangeStart + '-' + this.result.minute.rangeEnd;
break;
}
return minutes;
},
hoursText() {
let hours = '';
let cronEvery = this.result.hour.cronEvery || '';
switch (cronEvery.toString()) {
case '1':
hours = '*';
break;
case '2':
hours = this.result.hour.incrementStart + '/' + this.result.hour.incrementIncrement;
break;
case '3':
this.result.hour.specificSpecific.map((val) => {
hours += val + ',';
});
hours = hours.slice(0, -1);
break;
case '4':
hours = this.result.hour.rangeStart + '-' + this.result.hour.rangeEnd;
break;
}
return hours;
},
daysText() {
let days = '';
let cronEvery = this.result.day.cronEvery || '';
switch (cronEvery.toString()) {
case '1':
break;
case '2':
case '4':
case '11':
days = '?';
break;
case '3':
days = this.result.day.incrementStart + '/' + this.result.day.incrementIncrement;
break;
case '5':
this.result.day.specificSpecific.map((val) => {
days += val + ',';
});
days = days.slice(0, -1);
break;
case '6':
days = 'L';
break;
case '7':
days = 'LW';
break;
case '8':
days = this.result.day.cronLastSpecificDomDay + 'L';
break;
case '9':
days = 'L-' + this.result.day.cronDaysBeforeEomMinus;
break;
case '10':
days = this.result.day.cronDaysNearestWeekday + 'W';
break;
}
return days;
},
weeksText() {
let weeks = '';
let cronEvery = this.result.day.cronEvery || '';
switch (cronEvery.toString()) {
case '1':
case '3':
case '5':
weeks = '?';
break;
case '2':
weeks = this.result.week.incrementStart + '/' + this.result.week.incrementIncrement;
break;
case '4':
this.result.week.specificSpecific.map((val) => {
weeks += val + ',';
});
weeks = weeks.slice(0, -1);
break;
case '6':
case '7':
case '8':
case '9':
case '10':
weeks = '?';
break;
case '11':
weeks = this.result.week.cronNthDayDay + '#' + this.result.week.cronNthDayNth;
break;
}
return weeks;
},
monthsText() {
let months = '';
let cronEvery = this.result.month.cronEvery || '';
switch (cronEvery.toString()) {
case '1':
months = '*';
break;
case '2':
months = this.result.month.incrementStart + '/' + this.result.month.incrementIncrement;
break;
case '3':
this.result.month.specificSpecific.map((val) => {
months += val + ',';
});
months = months.slice(0, -1);
break;
case '4':
months = this.result.month.rangeStart + '-' + this.result.month.rangeEnd;
break;
}
return months;
},
yearsText() {
let years = '';
let cronEvery = this.result.year.cronEvery || '';
switch (cronEvery.toString()) {
case '1':
years = '*';
break;
case '2':
years = this.result.year.incrementStart + '/' + this.result.year.incrementIncrement;
break;
case '3':
this.result.year.specificSpecific.map((val) => {
years += val + ',';
});
years = years.slice(0, -1);
break;
case '4':
years = this.result.year.rangeStart + '-' + this.result.year.rangeEnd;
break;
}
return years;
},
cron() {
return `${this.secondsText || '*'} ${this.minutesText || '*'} ${this.hoursText || '*'} ${
this.daysText || '*'
} ${this.monthsText || '*'} ${this.weeksText || '?'} ${this.yearsText || '*'}`;
},
},
watch: {
visible: {
handler() {
// if(this.data){
// //this. result = Object.keys(this.data.value).length>0?this.deepCopy(this.data.value):this.deepCopy(this.defaultValue);
// //this.result = Object.keys(this.data.value).length>0?clone(this.data.value):clone(this.defaultValue);
// //this.result = Object.keys(this.data.value).length>0?clone(JSON.parse(this.data.value)):clone(this.defaultValue);
// this.result = Object.keys(this.data.value).length>0?JSON.parse(this.data.value):JSON.parse(JSON.stringify(this.defaultValue));
// }else{
// //this.result = this.deepCopy(this.defaultValue);
// //this.result = clone(this.defaultValue);
// this.result = JSON.parse(JSON.stringify(this.defaultValue));
// }
let label = this.data;
if (label && label!=="executenowonce") {
this.secondsReverseExp(label);
this.minutesReverseExp(label);
this.hoursReverseExp(label);
this.daysReverseExp(label);
this.daysReverseExp(label);
this.monthsReverseExp(label);
this.yearReverseExp(label);
JSON.parse(JSON.stringify(label));
} else {
this.result = JSON.parse(JSON.stringify(this.defaultValue));
}
},
},
},
methods: {
handleEmpty() {
this.handleOK('');
},
setGroup(a, b) {
this.result;
},
show() {
this.visible = true;
// console.log('secondsReverseExp',this.secondsReverseExp(this.data));
// console.log('minutesReverseExp',this.minutesReverseExp(this.data));
// console.log('hoursReverseExp',this.hoursReverseExp(this.data));
// console.log('daysReverseExp',this.daysReverseExp(this.data));
// console.log('monthsReverseExp',this.monthsReverseExp(this.data));
// console.log('yearReverseExp',this.yearReverseExp(this.data));
},
handleSubmit() {
this.$emit('ok', this.cron);
this.close();
this.visible = false;
},
close() {
this.visible = false;
},
secondsReverseExp(seconds) {
let val = seconds.split(' ')[0];
//alert(val);
let second = {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 1,
rangeEnd: 0,
specificSpecific: [],
};
switch (true) {
case val.includes('*'):
second.cronEvery = '1';
break;
case val.includes('/'):
second.cronEvery = '2';
second.incrementStart = val.split('/')[0];
second.incrementIncrement = val.split('/')[1];
break;
case val.includes(','):
second.cronEvery = '3';
second.specificSpecific = val.split(',').map(Number).sort();
break;
case val.includes('-'):
second.cronEvery = '4';
second.rangeStart = val.split('-')[0];
second.rangeEnd = val.split('-')[1];
break;
default:
second.cronEvery = '3';
second.specificSpecific = val.split(',').map(Number).sort();
}
this.result.second = second;
},
minutesReverseExp(minutes) {
let val = minutes.split(' ')[1];
let minute = {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 1,
rangeEnd: 0,
specificSpecific: [],
};
switch (true) {
case val.includes('*'):
minute.cronEvery = '1';
break;
case val.includes('/'):
minute.cronEvery = '2';
minute.incrementStart = val.split('/')[0];
minute.incrementIncrement = val.split('/')[1];
break;
case val.includes(','):
minute.cronEvery = '3';
minute.specificSpecific = val.split(',').map(Number).sort();
break;
case val.includes('-'):
minute.cronEvery = '4';
minute.rangeStart = val.split('-')[0];
minute.rangeEnd = val.split('-')[1];
break;
default:
minute.cronEvery = '3';
minute.specificSpecific = val.split(',').map(Number).sort();
}
this.result.minute = minute;
},
hoursReverseExp(hours) {
let val = hours.split(' ')[2];
let hour = {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 1,
rangeEnd: '0',
specificSpecific: [],
};
switch (true) {
case val.includes('*'):
hour.cronEvery = '1';
break;
case val.includes('/'):
hour.cronEvery = '2';
hour.incrementStart = val.split('/')[0];
hour.incrementIncrement = val.split('/')[1];
break;
case val.includes(','):
hour.cronEvery = '3';
hour.specificSpecific = val.split(',').map(Number).sort();
break;
case val.includes('-'):
hour.cronEvery = '4';
hour.rangeStart = val.split('-')[0];
hour.rangeEnd = val.split('-')[1];
break;
default:
hour.cronEvery = '3';
hour.specificSpecific = val.split(',').map(Number).sort();
}
this.result.hour = hour;
},
daysReverseExp(cron) {
let days = cron.split(' ')[3];
let weeks = cron.split(' ')[5];
let day = {
cronEvery: '',
incrementStart: 1,
incrementIncrement: 1,
rangeStart: 1,
rangeEnd: 1,
specificSpecific: [],
cronLastSpecificDomDay: 1,
cronDaysBeforeEomMinus: 1,
cronDaysNearestWeekday: 1,
};
let week = {
cronEvery: '',
incrementStart: 1,
incrementIncrement: 1,
specificSpecific: [],
cronNthDayDay: 1,
cronNthDayNth: '1',
};
if (!days.includes('?')) {
switch (true) {
case days.includes('*'):
day.cronEvery = '1';
break;
case days.includes('?'):
// 2、4、11
break;
case days.includes('/'):
day.cronEvery = '3';
day.incrementStart = days.split('/')[0];
day.incrementIncrement = days.split('/')[1];
break;
case days.includes(','):
day.cronEvery = '5';
day.specificSpecific = days.split(',').map(Number).sort();
// day.specificSpecific.forEach(function (value, index) {
// day.specificSpecific[index] = value -1;
// });
break;
case days.includes('LW'):
day.cronEvery = '7';
break;
case days.includes('L-'):
day.cronEvery = '9';
day.cronDaysBeforeEomMinus = days.split('L-')[1];
break;
case days.includes('L'):
//alert(days);
if (days.len == 1) {
day.cronEvery = '6';
day.cronLastSpecificDomDay = '1';
} else {
day.cronEvery = '8';
day.cronLastSpecificDomDay = Number(days.split('L')[0]);
}
break;
case days.includes('W'):
day.cronEvery = '10';
day.cronDaysNearestWeekday = days.split('W')[0];
break;
default:
day.cronEvery = '5';
day.specificSpecific = days.split(',').map(Number).sort();
}
} else {
switch (true) {
case weeks.includes('/'):
day.cronEvery = '2';
week.incrementStart = weeks.split('/')[0];
week.incrementIncrement = weeks.split('/')[1];
break;
case weeks.includes(','):
day.cronEvery = '4';
week.specificSpecific = weeks.split(',').map(Number).sort();
break;
case '#':
day.cronEvery = '11';
week.cronNthDayDay = weeks.split('#')[0];
week.cronNthDayNth = weeks.split('#')[1];
break;
default:
day.cronEvery = '1';
week.cronEvery = '1';
}
}
this.result.day = day;
this.result.week = week;
},
monthsReverseExp(cron) {
let months = cron.split(' ')[4];
let month = {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 1,
rangeEnd: 1,
specificSpecific: [],
};
switch (true) {
case months.includes('*'):
month.cronEvery = '1';
break;
case months.includes('/'):
month.cronEvery = '2';
month.incrementStart = months.split('/')[0];
month.incrementIncrement = months.split('/')[1];
break;
case months.includes(','):
month.cronEvery = '3';
month.specificSpecific = months.split(',').map(Number).sort();
break;
case months.includes('-'):
month.cronEvery = '4';
month.rangeStart = months.split('-')[0];
month.rangeEnd = months.split('-')[1];
break;
default:
month.cronEvery = '3';
month.specificSpecific = months.split(',').map(Number).sort();
}
this.result.month = month;
},
yearReverseExp(cron) {
let years = cron.split(' ')[6];
let year = {
cronEvery: '',
incrementStart: 3,
incrementIncrement: 5,
rangeStart: 2019,
rangeEnd: 2019,
specificSpecific: [],
};
switch (true) {
case years.includes('*'):
year.cronEvery = '1';
break;
case years.includes('/'):
year.cronEvery = '2';
year.incrementStart = years.split('/')[0];
year.incrementIncrement = years.split('/')[1];
break;
case years.includes(','):
year.cronEvery = '3';
year.specificSpecific = years.split(',').map(Number).sort();
break;
case years.includes('-'):
year.cronEvery = '4';
year.rangeStart = years.split('-')[0];
year.rangeEnd = years.split('-')[1];
break;
default:
year.cronEvery = '3';
year.specificSpecific = years.split(',').map(Number).sort();
}
this.result.year = year;
},
},
});
</script>
<style lang="less">
.card-container {
background: #fff;
overflow: hidden;
padding: 12px;
position: relative;
width: 100%;
.ant-tabs {
border: 1px solid #e6ebf5;
padding: 0;
.ant-tabs-nav {
.ant-tabs-nav-wrap {
.ant-tabs-nav-list {
.ant-tabs-tab {
width: 50px;
text-align: center;
.ant-tabs-tab-btn {
width: 100%;
}
}
}
}
}
.ant-tabs-bar {
margin: 0;
outline: none;
border-bottom: none;
.ant-tabs-nav-container {
margin: 0;
.ant-tabs-tab {
padding: 0 24px !important;
background-color: #f5f7fa !important;
margin-right: 0px !important;
border-radius: 0;
line-height: 38px;
border: 1px solid transparent !important;
border-bottom: 1px solid #e6ebf5 !important;
}
.ant-tabs-tab-active.ant-tabs-tab {
color: #409eff;
background-color: #fff !important;
border-right: 1px solid #e6ebf5 !important;
border-left: 1px solid #e6ebf5 !important;
border-bottom: 1px solid #fff !important;
font-weight: normal;
transition: none !important;
}
}
}
.ant-tabs-tabpane {
padding: 15px;
.ant-row {
margin: 10px 0;
}
.ant-select,
.ant-input-number {
width: 100px;
}
}
}
}
</style>
<style lang="less" scoped>
.container-widthEn {
width: 755px;
}
.container-widthCn {
width: 608px;
}
.language {
text-align: center;
position: absolute;
right: 13px;
top: 13px;
border: 1px solid transparent;
height: 40px;
line-height: 38px;
font-size: 16px;
color: #409eff;
z-index: 1;
background: #f5f7fa;
outline: none;
width: 47px;
border-bottom: 1px solid #e6ebf5;
border-radius: 0;
}
.card-container {
.bottom {
display: flex;
justify-content: center;
padding: 10px 0 0 0;
.cronButton {
margin: 0 10px;
line-height: 40px;
}
}
}
.tabBody {
.a-row {
margin: 10px 0;
.long {
.a-select {
width: 354px;
}
}
.a-input-number {
width: 110px;
}
}
}
</style>