Pre Merge pull request !352 from muyi/master

This commit is contained in:
muyi 2021-11-24 00:39:46 +00:00 committed by Gitee
commit ec7376b6ee
10 changed files with 1246 additions and 1211 deletions

View File

@ -15,23 +15,28 @@
<el-form-item>
<el-radio v-model='radioValue' :label="3">
周期从
<el-input-number v-model='cycle01' :min="0" :max="31" /> -
<el-input-number v-model='cycle02' :min="0" :max="31" />
<el-input-number v-model='cycle01' :min="0" :max="31"/>
-
<el-input-number v-model='cycle02' :min="0" :max="31"/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
<el-input-number v-model='average01' :min="0" :max="31" /> 号开始
<el-input-number v-model='average02' :min="0" :max="31" /> 日执行一次
<el-input-number v-model='average01' :min="0" :max="31"/>
号开始
<el-input-number v-model='average02' :min="0" :max="31"/>
日执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="5">
每月
<el-input-number v-model='workday' :min="0" :max="31" /> 号最近的那个工作日
<el-input-number v-model='workday' :min="0" :max="31"/>
号最近的那个工作日
</el-radio>
</el-form-item>
@ -44,8 +49,9 @@
<el-form-item>
<el-radio v-model='radioValue' :label="7">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
<el-option v-for="item in 31" :key="item" :value="item">{{item}}</el-option>
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"
@change="selectChange">
<el-option v-for="item in 31" :key="item" :value="item">{{ item }}</el-option>
</el-select>
</el-radio>
</el-form-item>
@ -69,23 +75,22 @@ export default {
name: 'crontab-day',
props: ['check', 'cron'],
methods: {
selectChange() {
this.radioValue = 7
},
init() {
this.workday = 1
this.cycle01 = 1
this.cycle02 = 2
this.average01 = 1
this.average02 = 1
this.checkboxList = []
},
//
radioChange() {
('day rachange');
if (this.radioValue === 1) {
this.$emit('update', 'day', '*', 'day');
this.$emit('update', 'week', '?', 'day');
this.$emit('update', 'month', '*', 'day');
} else {
if (this.cron.hour === '*') {
this.$emit('update', 'hour', '0', 'day');
}
if (this.cron.min === '*') {
this.$emit('update', 'min', '0', 'day');
}
if (this.cron.second === '*') {
this.$emit('update', 'second', '0', 'day');
}
}
switch (this.radioValue) {

View File

@ -9,24 +9,29 @@
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="60" /> -
<el-input-number v-model='cycle02' :min="0" :max="60" /> 小时
<el-input-number v-model='cycle01' :min="0" :max="60"/>
-
<el-input-number v-model='cycle02' :min="0" :max="60"/>
小时
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="60" /> 小时开始
<el-input-number v-model='average02' :min="0" :max="60" /> 小时执行一次
<el-input-number v-model='average01' :min="0" :max="60"/>
小时开始
<el-input-number v-model='average02' :min="0" :max="60"/>
小时执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
<el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option>
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"
@change="selectChange">
<el-option v-for="item in 60" :key="item" :value="item-1">{{ item - 1 }}</el-option>
</el-select>
</el-radio>
</el-form-item>
@ -49,18 +54,20 @@ export default {
name: 'crontab-hour',
props: ['check', 'cron'],
methods: {
selectChange() {
this.radioValue = 4
},
init() {
this.cycle01 = 0
this.cycle02 = 1
this.average01 = 0
this.average02 = 1
this.checkboxList = []
},
//
radioChange() {
if (this.radioValue === 1) {
this.$emit('update', 'hour', '*', 'hour');
this.$emit('update', 'day', '*', 'hour');
} else {
if (this.cron.min === '*') {
this.$emit('update', 'min', '0', 'hour');
}
if (this.cron.second === '*') {
this.$emit('update', 'second', '0', 'hour');
}
}
switch (this.radioValue) {
case 2:

View File

@ -2,7 +2,7 @@
<div>
<el-tabs type="border-card">
<el-tab-pane label="秒" v-if="shouldHide('second')">
<CrontabSecond @update="updateCrontabValue" :check="checkNumber" ref="cronsecond" />
<CrontabSecond @update="updateCrontabValue" :check="checkNumber" ref="cronsecond"/>
</el-tab-pane>
<el-tab-pane label="分钟" v-if="shouldHide('min')">
@ -65,33 +65,33 @@
<p class="title">时间表达式</p>
<table>
<thead>
<th v-for="item of tabTitles" width="40" :key="item">{{item}}</th>
<th v-for="item of tabTitles" width="40" :key="item">{{ item }}</th>
<th>Cron 表达式</th>
</thead>
<tbody>
<td>
<span>{{crontabValueObj.second}}</span>
<span>{{ crontabValueObj.second }}</span>
</td>
<td>
<span>{{crontabValueObj.min}}</span>
<span>{{ crontabValueObj.min }}</span>
</td>
<td>
<span>{{crontabValueObj.hour}}</span>
<span>{{ crontabValueObj.hour }}</span>
</td>
<td>
<span>{{crontabValueObj.day}}</span>
<span>{{ crontabValueObj.day }}</span>
</td>
<td>
<span>{{crontabValueObj.month}}</span>
<span>{{ crontabValueObj.month }}</span>
</td>
<td>
<span>{{crontabValueObj.week}}</span>
<span>{{ crontabValueObj.week }}</span>
</td>
<td>
<span>{{crontabValueObj.year}}</span>
<span>{{ crontabValueObj.year }}</span>
</td>
<td>
<span>{{crontabValueString}}</span>
<span>{{ crontabValueString }}</span>
</td>
</tbody>
</table>
@ -188,7 +188,7 @@ export default {
insValue;
if (!this.$refs[refName]) return;
this.$refs[refName].init()
if (arr.includes(name)) {
if (value === "*") {
insValue = 1;
@ -324,7 +324,7 @@ export default {
},
},
computed: {
crontabValueString: function() {
crontabValueString: function () {
let obj = this.crontabValueObj;
let str =
obj.second +
@ -358,7 +358,7 @@ export default {
//
},
},
mounted: function() {
mounted: function () {
this.resolveExp();
},
};
@ -368,6 +368,7 @@ export default {
text-align: center;
margin-top: 20px;
}
.popup-main {
position: relative;
margin: 10px auto;
@ -376,12 +377,14 @@ export default {
font-size: 12px;
overflow: hidden;
}
.popup-title {
overflow: hidden;
line-height: 34px;
padding-top: 6px;
background: #f2f2f2;
}
.popup-result {
box-sizing: border-box;
line-height: 24px;
@ -390,6 +393,7 @@ export default {
border: 1px solid #ccc;
position: relative;
}
.popup-result .title {
position: absolute;
top: -28px;
@ -401,11 +405,13 @@ export default {
line-height: 30px;
background: #fff;
}
.popup-result table {
text-align: center;
width: 100%;
margin: 0 auto;
}
.popup-result table span {
display: block;
width: 100%;
@ -416,6 +422,7 @@ export default {
overflow: hidden;
border: 1px solid #e8e8e8;
}
.popup-result-scroll {
font-size: 12px;
line-height: 24px;

View File

@ -25,7 +25,7 @@
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%" @change="selectChange">
<el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option>
</el-select>
</el-radio>
@ -50,11 +50,18 @@ export default {
name: 'crontab-min',
props: ['check', 'cron'],
methods: {
selectChange() {
this.radioValue = 4
},
init() {
this.cycle01 = 1
this.cycle02 = 2
this.average01 = 0
this.average02 = 1
this.checkboxList = []
},
//
radioChange() {
if (this.radioValue !== 1 && this.cron.second === '*') {
this.$emit('update', 'second', '0', 'min');
}
switch (this.radioValue) {
case 1:
this.$emit('update', 'min', '*', 'min');

View File

@ -25,7 +25,7 @@
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%" @change="selectChange">
<el-option v-for="item in 12" :key="item" :value="item">{{item}}</el-option>
</el-select>
</el-radio>
@ -48,25 +48,20 @@ export default {
},
name: 'crontab-month',
props: ['check', 'cron'],
methods: {
methods: { selectChange() {
this.radioValue = 4
},
init() {
this.cycle01 = 1
this.cycle02 = 2
this.average01 = 1
this.average02 = 1
this.checkboxList = []
},
//
radioChange() {
if (this.radioValue === 1) {
this.$emit('update', 'month', '*');
this.$emit('update', 'year', '*');
} else {
if (this.cron.day === '*') {
this.$emit('update', 'day', '0', 'month');
}
if (this.cron.hour === '*') {
this.$emit('update', 'hour', '0', 'month');
}
if (this.cron.min === '*') {
this.$emit('update', 'min', '0', 'month');
}
if (this.cron.second === '*') {
this.$emit('update', 'second', '0', 'month');
}
}
switch (this.radioValue) {
case 2:

View File

@ -3,7 +3,7 @@
<p class="title">最近5次运行时间</p>
<ul class="popup-result-scroll">
<template v-if='isShow'>
<li v-for='item in resultList' :key="item">{{item}}</li>
<li v-for='item in resultList' :key="item">{{ item }}</li>
</template>
<li v-else>计算结果中...</li>
</ul>
@ -25,7 +25,6 @@ export default {
methods: {
//
expressionChange() {
// -
this.isShow = false;
// [0123456]
@ -151,7 +150,6 @@ export default {
}
continue;
}
//
if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true && this.dayRule !== 'workDay' && this.dayRule !== 'lastWeek' && this.dayRule !== 'lastDay') {
resetDay();
@ -160,7 +158,6 @@ export default {
//
if (this.dayRule == 'lastDay') {
//
if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
DD--;
@ -200,7 +197,7 @@ export default {
//
let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week');
// dayRuleSup
if (Array.indexOf(this.dayRuleSup, thisWeek) < 0) {
if (this.dayRuleSup.indexOf(thisWeek) < 0) {
//
if (Di == DDate.length - 1) {
resetDay();
@ -241,11 +238,9 @@ export default {
}
// 1005
DD = DD < 10 ? '0' + DD : DD;
//
goHour: for (let hi = hIdx; hi < hDate.length; hi++) {
let hh = hDate[hi] < 10 ? '0' + hDate[hi] : hDate[hi]
//
if (nMin > mDate[mDate.length - 1]) {
resetMin();
@ -266,7 +261,6 @@ export default {
// ""
goMin: for (let mi = mIdx; mi < mDate.length; mi++) {
let mm = mDate[mi] < 10 ? '0' + mDate[mi] : mDate[mi];
//
if (nSecond > sDate[sDate.length - 1]) {
resetSecond();

View File

@ -9,24 +9,29 @@
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="60" /> -
<el-input-number v-model='cycle02' :min="0" :max="60" />
<el-input-number v-model='cycle01' :min="0" :max="60"/>
-
<el-input-number v-model='cycle02' :min="0" :max="60"/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="60" /> 秒开始
<el-input-number v-model='average02' :min="0" :max="60" /> 秒执行一次
<el-input-number v-model='average01' :min="0" :max="60"/>
秒开始
<el-input-number v-model='average02' :min="0" :max="60"/>
秒执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
<el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option>
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"
@change="selectChange">
<el-option v-for="item in 60" :key="item" :value="item-1">{{ item - 1 }}</el-option>
</el-select>
</el-radio>
</el-form-item>
@ -49,12 +54,21 @@ export default {
name: 'crontab-second',
props: ['check', 'radioParent'],
methods: {
selectChange() {
this.radioValue = 4
},
init() {
this.cycle01 = 1
this.cycle02 = 2
this.average01 = 0
this.average02 = 1
this.checkboxList = []
},
//
radioChange() {
switch (this.radioValue) {
case 1:
this.$emit('update', 'second', '*', 'second');
this.$emit('update', 'min', '*', 'second');
break;
case 2:
this.$emit('update', 'second', this.cycle01 + '-' + this.cycle02);

View File

@ -15,31 +15,34 @@
<el-form-item>
<el-radio v-model='radioValue' :label="3">
周期从星期
<el-input-number v-model='cycle01' :min="1" :max="7" /> -
<el-input-number v-model='cycle02' :min="1" :max="7" />
<el-input-number v-model='cycle01' :min="1" :max="7"/>
-
<el-input-number v-model='cycle02' :min="1" :max="7"/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
<el-input-number v-model='average01' :min="1" :max="4" /> 周的星期
<el-input-number v-model='average02' :min="1" :max="7" />
<el-input-number v-model='average01' :min="1" :max="4"/>
周的星期
<el-input-number v-model='average02' :min="1" :max="7"/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="5">
本月最后一个星期
<el-input-number v-model='weekday' :min="1" :max="7" />
<el-input-number v-model='weekday' :min="1" :max="7"/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="6">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
<el-option v-for="(item,index) of weekList" :key="index" :value="index+1">{{item}}</el-option>
<el-select clearable v-model="checkboxDescribeList" placeholder="可多选" multiple style="width:100%"
@change="selectChange">
<el-option v-for="(item,index) of weekList" :key="index" :value="item">{{ item }}</el-option>
</el-select>
</el-radio>
</el-form-item>
@ -58,6 +61,7 @@ export default {
average01: 1,
average02: 1,
checkboxList: [],
checkboxDescribeList: [],
weekList: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
checkNum: this.$options.propsData.check
}
@ -65,31 +69,32 @@ export default {
name: 'crontab-week',
props: ['check', 'cron'],
methods: {
selectChange(data) {
this.radioValue = 6
this.checkboxList = []
data.forEach(value => {
this.weekList.forEach((item,index) => {
if (item === value) {
this.checkboxList.push(index + 1)
}
})
})
},
init() {
this.workday = 1
this.cycle01 = 1
this.cycle02 = 2
this.average01 = 1
this.average02 = 1
this.checkboxList = []
this.checkboxDescribeList = []
},
//
radioChange() {
if (this.radioValue === 1) {
this.$emit('update', 'week', '*');
this.$emit('update', 'year', '*');
} else {
if (this.cron.month === '*') {
this.$emit('update', 'month', '0', 'week');
}
if (this.cron.day === '*') {
this.$emit('update', 'day', '0', 'week');
}
if (this.cron.hour === '*') {
this.$emit('update', 'hour', '0', 'week');
}
if (this.cron.min === '*') {
this.$emit('update', 'min', '0', 'week');
}
if (this.cron.second === '*') {
this.$emit('update', 'second', '0', 'week');
}
}
switch (this.radioValue) {
case 2:
this.$emit('update', 'week', '?');
case 1:
this.$emit('update', 'week', '*');
break;
case 3:
this.$emit('update', 'week', this.cycle01 + '-' + this.cycle02);
@ -104,6 +109,13 @@ export default {
this.$emit('update', 'week', this.checkboxString);
break;
}
if (this.radioValue === 2) {
this.$emit('update', 'week', '?');
this.$emit('update', 'day', '*');
} else {
this.$emit('update', 'day', '?');
}
},
// radio

View File

@ -57,23 +57,16 @@ export default {
name: 'crontab-year',
props: ['check', 'month', 'cron'],
methods: {
init() {
this.fullYear = Number(new Date().getFullYear())
this.cycle01 = 0
this.cycle02 = 0
this.average01 = 0
this.average02 = 1
this.checkboxList = []
},
//
radioChange() {
if (this.cron.month === '*') {
this.$emit('update', 'month', '0', 'year');
}
if (this.cron.day === '*') {
this.$emit('update', 'day', '0', 'year');
}
if (this.cron.hour === '*') {
this.$emit('update', 'hour', '0', 'year');
}
if (this.cron.min === '*') {
this.$emit('update', 'min', '0', 'year');
}
if (this.cron.second === '*') {
this.$emit('update', 'second', '0', 'year');
}
switch (this.radioValue) {
case 1:
this.$emit('update', 'year', '');

View File

@ -95,6 +95,7 @@ export default {
z-index: 9;
width: calc(100% - #{$base-sidebar-width});
transition: width 0.28s;
padding-right: 0;
}
.hideSidebar .fixed-header {