1189 lines
36 KiB
Vue
1189 lines
36 KiB
Vue
<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>
|