Files
dvcp_v2_webapp/ui/packages/basic/AiCron.vue

523 lines
18 KiB
Vue

<template>
<section class="AiCron">
<div id="changeContab">
<el-tabs type="border-card">
<el-tab-pane>
<span slot="label"><i class="el-icon-date"></i></span>
<div class="tabBody">
<el-row>
<el-radio v-model="second.cronEvery" label="1">每一秒中</el-radio>
</el-row>
<el-row>
<el-radio v-model="second.cronEvery" label="2">每隔
<el-input-number size="small" v-model="second.incrementIncrement" :min="1" :max="60"></el-input-number>
秒执行
<el-input-number size="small" v-model="second.incrementStart" :min="0" :max="59"></el-input-number>
秒开始
</el-radio>
</el-row>
<el-row>
<el-radio class="long" v-model="second.cronEvery" label="3">具体秒数(可多选)
<el-select size="small" multiple v-model="second.specificSpecific">
<el-option v-for="(val,i) in 60" :key="i" :value="val-1">{{val-1}}</el-option>
</el-select>
</el-radio>
</el-row>
<el-row>
<el-radio v-model="second.cronEvery" label="4">周期从
<el-input-number size="small" v-model="second.rangeStart" :min="1" :max="60"></el-input-number>
<el-input-number size="small" v-model="second.rangeEnd" :min="0" :max="59"></el-input-number>
</el-radio>
</el-row>
</div>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><i class="el-icon-date"></i></span>
<div class="tabBody">
<el-row>
<el-radio v-model="minute.cronEvery" label="1">每一分钟</el-radio>
</el-row>
<el-row>
<el-radio v-model="minute.cronEvery" label="2">每隔
<el-input-number size="small" v-model="minute.incrementIncrement" :min="1" :max="60"></el-input-number>
分执行
<el-input-number size="small" v-model="minute.incrementStart" :min="0" :max="59"></el-input-number>
分开始
</el-radio>
</el-row>
<el-row>
<el-radio class="long" v-model="minute.cronEvery" label="3">具体分钟数(可多选)
<el-select size="small" multiple v-model="minute.specificSpecific">
<el-option v-for="(val,i) in 60" :key="i" :value="val-1">{{val-1}}</el-option>
</el-select>
</el-radio>
</el-row>
<el-row>
<el-radio v-model="minute.cronEvery" label="4">周期从
<el-input-number size="small" v-model="minute.rangeStart" :min="1" :max="60"></el-input-number>
<el-input-number size="small" v-model="minute.rangeEnd" :min="0" :max="59"></el-input-number>
</el-radio>
</el-row>
</div>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><i class="el-icon-date"></i></span>
<div class="tabBody">
<el-row>
<el-radio v-model="hour.cronEvery" label="1">每一小时</el-radio>
</el-row>
<el-row>
<el-radio v-model="hour.cronEvery" label="2">每隔
<el-input-number size="small" v-model="hour.incrementIncrement" :min="0" :max="23"></el-input-number>
小时执行
<el-input-number size="small" v-model="hour.incrementStart" :min="0" :max="23"></el-input-number>
小时开始
</el-radio>
</el-row>
<el-row>
<el-radio class="long" v-model="hour.cronEvery" label="3">具体小时数(可多选)
<el-select size="small" multiple v-model="hour.specificSpecific">
<el-option v-for="(val,i) in 24" :key="i" :value="val-1">{{val-1}}</el-option>
</el-select>
</el-radio>
</el-row>
<el-row>
<el-radio v-model="hour.cronEvery" label="4">周期从
<el-input-number size="small" v-model="hour.rangeStart" :min="0" :max="23"></el-input-number>
<el-input-number size="small" v-model="hour.rangeEnd" :min="0" :max="23"></el-input-number>
小时
</el-radio>
</el-row>
</div>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><i class="el-icon-date"></i></span>
<div class="tabBody">
<el-row>
<el-radio v-model="day.cronEvery" label="1">每一天</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="2">每隔
<el-input-number size="small" v-model="week.incrementIncrement" :min="1" :max="7"></el-input-number>
周执行
<el-select size="small" v-model="week.incrementStart">
<el-option v-for="(val,i) in 7" :key="i" :label="weeks[val-1]" :value="val"></el-option>
</el-select>
开始
</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="3">每隔
<el-input-number size="small" v-model="day.incrementIncrement" :min="1" :max="31"></el-input-number>
天执行
<el-input-number size="small" v-model="day.incrementStart" :min="1" :max="31"></el-input-number>
天开始
</el-radio>
</el-row>
<el-row>
<el-radio class="long" v-model="day.cronEvery" label="4">具体星期几(可多选)
<el-select size="small" multiple v-model="week.specificSpecific">
<el-option v-for="(val,i) in 7"
:key="i"
:label="weeks[val-1]"
:value="['SUN','MON','TUE','WED','THU','FRI','SAT'][val-1]"
></el-option>
</el-select>
</el-radio>
</el-row>
<el-row>
<el-radio class="long" v-model="day.cronEvery" label="5">具体天数(可多选)
<el-select size="small" multiple v-model="day.specificSpecific">
<el-option v-for="(val,i) in 31" :key="i" :value="val">{{val}}</el-option>
</el-select>
</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="6">在这个月的最后一天</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="7">在这个月的最后一个工作日</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="8">在这个月的最后一个
<el-select size="small" v-model="day.cronLastSpecificDomDay">
<el-option v-for="(val,i) in 7" :key="i" :label="weeks[val-1]" :value="val"></el-option>
</el-select>
</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="9">
<el-input-number size="small" v-model="day.cronDaysBeforeEomMinus" :min="1" :max="31"></el-input-number>
在本月底前
</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="10">最近的工作日(周一至周五) 至本月
<el-input-number size="small" v-model="day.cronDaysNearestWeekday" :min="1" :max="31"></el-input-number>
</el-radio>
</el-row>
<el-row>
<el-radio v-model="day.cronEvery" label="11">在这个月的第
<el-input-number size="small" v-model="week.cronNthDayNth" :min="1" :max="5"></el-input-number>
<el-select size="small" v-model="week.cronNthDayDay">
<el-option v-for="(val,i) in 7" :key="i" :label="weeks[val-1]" :value="val"></el-option>
</el-select>
</el-radio>
</el-row>
</div>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><i class="el-icon-date"></i> </span>
<div class="tabBody">
<el-row>
<el-radio v-model="month.cronEvery" label="1">每个月</el-radio>
</el-row>
<el-row>
<el-radio v-model="month.cronEvery" label="2">每隔
<el-input-number size="small" v-model="month.incrementIncrement" :min="0" :max="12"></el-input-number>
月执行
<el-input-number size="small" v-model="month.incrementStart" :min="0" :max="12"></el-input-number>
月开始
</el-radio>
</el-row>
<el-row>
<el-radio class="long" v-model="month.cronEvery" label="3">具体月数(可多选)
<el-select size="small" multiple v-model="month.specificSpecific">
<el-option v-for="(val,i) in 12" :key="i" :label="val" :value="val"></el-option>
</el-select>
</el-radio>
</el-row>
<el-row>
<el-radio v-model="month.cronEvery" label="4">
<el-input-number size="small" v-model="month.rangeStart" :min="1" :max="12"></el-input-number>
<el-input-number size="small" v-model="month.rangeEnd" :min="1" :max="12"></el-input-number>
</el-radio>
</el-row>
</div>
</el-tab-pane>
</el-tabs>
<div class="bottom">
<span class="value">{{cron}}</span>
<el-button type="primary" @click="change">保存</el-button>
<el-button type="primary" @click="close">取消</el-button>
</div>
</div>
</section>
</template>
<script>
export default {
name: "AiCron",
model: {
prop: 'value',
event: "change"
},
props: {
value: String
},
data() {
return {
weeks: ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"],
second: {
cronEvery: '',
incrementStart: '3',
incrementIncrement: '5',
rangeStart: '',
rangeEnd: '',
specificSpecific: [],
},
minute: {
cronEvery: '',
incrementStart: '3',
incrementIncrement: '5',
rangeStart: '',
rangeEnd: '',
specificSpecific: [],
},
hour: {
cronEvery: '',
incrementStart: '3',
incrementIncrement: '5',
rangeStart: '',
rangeEnd: '',
specificSpecific: [],
},
day: {
cronEvery: '',
incrementStart: '1',
incrementIncrement: '1',
rangeStart: '',
rangeEnd: '',
specificSpecific: [],
cronLastSpecificDomDay: 1,
cronDaysBeforeEomMinus: '',
cronDaysNearestWeekday: '',
},
week: {
cronEvery: '',
incrementStart: '1',
incrementIncrement: '1',
specificSpecific: [],
cronNthDayDay: 1,
cronNthDayNth: '1',
},
month: {
cronEvery: '',
incrementStart: '3',
incrementIncrement: '5',
rangeStart: '',
rangeEnd: '',
specificSpecific: [],
},
output: {
second: '',
minute: '',
hour: '',
day: '',
month: '',
Week: '',
},
visible: false,
cronArr:['*','*','*','*','*','?']
}
},
watch: {
cron(val) {
this.value = val
}
},
computed: {
secondsText() {
let seconds = this.cronArr[0];
let cronEvery = this.second.cronEvery;
switch (cronEvery.toString()) {
case '1':
seconds = '*';
break;
case '2':
seconds = this.second.incrementStart + '/' + this.second.incrementIncrement;
break;
case '3':
this.second.specificSpecific.map(val => {
seconds += val + ','
});
seconds = seconds.slice(0, -1);
break;
case '4':
seconds = this.second.rangeStart + '-' + this.second.rangeEnd;
break;
}
return seconds;
},
minutesText() {
let minutes = this.cronArr[2];;
let cronEvery = this.minute.cronEvery;
switch (cronEvery.toString()) {
case '1':
minutes = '*';
break;
case '2':
minutes = this.minute.incrementStart + '/' + this.minute.incrementIncrement;
break;
case '3':
this.minute.specificSpecific.map(val => {
minutes += val + ','
});
minutes = minutes.slice(0, -1);
break;
case '4':
minutes = this.minute.rangeStart + '-' + this.minute.rangeEnd;
break;
}
return minutes;
},
hoursText() {
let hours = this.cronArr[2];;
let cronEvery = this.hour.cronEvery;
switch (cronEvery.toString()) {
case '1':
hours = '*';
break;
case '2':
hours = this.hour.incrementStart + '/' + this.hour.incrementIncrement;
break;
case '3':
this.hour.specificSpecific.map(val => {
hours += val + ','
});
hours = hours.slice(0, -1);
break;
case '4':
hours = this.hour.rangeStart + '-' + this.hour.rangeEnd;
break;
}
return hours;
},
daysText() {
let days = this.cronArr[3];;
let cronEvery = this.day.cronEvery;
switch (cronEvery.toString()) {
case '1':
break;
case '2':
case '4':
case '11':
days = '?';
break;
case '3':
days = this.day.incrementStart + '/' + this.day.incrementIncrement;
break;
case '5':
this.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.day.cronLastSpecificDomDay + 'L';
break;
case '9':
days = 'L-' + this.day.cronDaysBeforeEomMinus;
break;
case '10':
days = this.day.cronDaysNearestWeekday + "W";
break
}
return days;
},
weeksText() {
let weeks = this.cronArr[5];;
let cronEvery = this.day.cronEvery;
switch (cronEvery.toString()) {
case '1':
case '3':
case '5':
weeks = '?';
break;
case '2':
weeks = this.week.incrementStart + '/' + this.week.incrementIncrement;
break;
case '4':
this.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.week.cronNthDayDay + "#" + this.week.cronNthDayNth;
break;
}
return weeks;
},
monthsText() {
let months = this.cronArr[4];
let cronEvery = this.month.cronEvery;
switch (cronEvery.toString()) {
case '1':
months = '*';
break;
case '2':
months = this.month.incrementStart + '/' + this.month.incrementIncrement;
break;
case '3':
this.month.specificSpecific.map(val => {
months += val + ','
});
months = months.slice(0, -1);
break;
case '4':
months = this.month.rangeStart + '-' + this.month.rangeEnd;
break;
}
return months;
},
cron() {
return `${this.secondsText || '*'} ${this.minutesText || '*'} ${this.hoursText || '*'} ${this.daysText || '*'} ${this.monthsText || '*'} ${this.weeksText || '?'} `
},
},
methods: {
getValue() {
return this.cron;
},
change() {
this.$emit('change', this.cron);
this.close();
},
close() {
this.$emit('close')
},
},
mounted() {
if(this.value) this.cronArr = this.value.trim().split(" ")
}
}
</script>
<style lang="scss" scoped>
.AiCron {
#changeContab {
.language {
position: absolute;
right: 25px;
z-index: 1;
}
.el-tabs {
box-shadow: none;
}
.tabBody {
.el-row {
margin: 10px 0;
.long {
.el-select {
width: 350px;
}
}
.el-input-number {
width: 110px;
}
}
}
.bottom {
width: 100%;
text-align: center;
margin-top: 5px;
position: relative;
.value {
font-size: 18px;
vertical-align: middle;
margin-right: 10px;
}
}
}
}
</style>