forked from yangzongzhuan/RuoYi-Vue3
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
fba2763
commit ba5b8c7
Showing
10 changed files
with
1,900 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
<template> | ||
<el-form size="small"> | ||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="1"> | ||
日,允许的通配符[, - * ? / L W] | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="2"> | ||
不指定 | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="3"> | ||
周期从 | ||
<el-input-number v-model='cycle01' :min="1" :max="30" /> - | ||
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="31" /> 日 | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="4"> | ||
从 | ||
<el-input-number v-model='average01' :min="1" :max="30" /> 号开始,每 | ||
<el-input-number v-model='average02' :min="1" :max="31 - average01" /> 日执行一次 | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="5"> | ||
每月 | ||
<el-input-number v-model='workday' :min="1" :max="31" /> 号最近的那个工作日 | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="6"> | ||
本月最后一天 | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="7"> | ||
指定 | ||
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10"> | ||
<el-option v-for="item in 31" :key="item" :label="item" :value="item" /> | ||
</el-select> | ||
</el-radio> | ||
</el-form-item> | ||
</el-form> | ||
</template> | ||
<script setup> | ||
const emit = defineEmits(['update']) | ||
const props = defineProps({ | ||
cron: { | ||
type: Object, | ||
default: { | ||
second: "*", | ||
min: "*", | ||
hour: "*", | ||
day: "*", | ||
month: "*", | ||
week: "?", | ||
year: "", | ||
} | ||
}, | ||
check: { | ||
type: Function, | ||
default: () => { | ||
} | ||
} | ||
}) | ||
const radioValue = ref(1) | ||
const cycle01 = ref(1) | ||
const cycle02 = ref(2) | ||
const average01 = ref(1) | ||
const average02 = ref(1) | ||
const workday = ref(1) | ||
const checkboxList = ref([]) | ||
const checkCopy = ref([1]) | ||
const cycleTotal = computed(() => { | ||
cycle01.value = props.check(cycle01.value, 1, 30) | ||
cycle02.value = props.check(cycle02.value, cycle01.value + 1, 31) | ||
return cycle01.value + '-' + cycle02.value | ||
}) | ||
const averageTotal = computed(() => { | ||
average01.value = props.check(average01.value, 1, 30) | ||
average02.value = props.check(average02.value, 1, 31 - average01.value) | ||
return average01.value + '/' + average02.value | ||
}) | ||
const workdayTotal = computed(() => { | ||
workday.value = props.check(workday.value, 1, 31) | ||
return workday.value + 'W' | ||
}) | ||
const checkboxString = computed(() => { | ||
return checkboxList.value.join(',') | ||
}) | ||
watch(() => props.cron.day, value => changeRadioValue(value)) | ||
watch([radioValue, cycleTotal, averageTotal, workdayTotal, checkboxString], () => onRadioChange()) | ||
function changeRadioValue(value) { | ||
if (value === "*") { | ||
radioValue.value = 1 | ||
} else if (value === "?") { | ||
radioValue.value = 2 | ||
} else if (value.indexOf("-") > -1) { | ||
const indexArr = value.split('-') | ||
cycle01.value = Number(indexArr[0]) | ||
cycle02.value = Number(indexArr[1]) | ||
radioValue.value = 3 | ||
} else if (value.indexOf("/") > -1) { | ||
const indexArr = value.split('/') | ||
average01.value = Number(indexArr[0]) | ||
average02.value = Number(indexArr[1]) | ||
radioValue.value = 4 | ||
} else if (value.indexOf("W") > -1) { | ||
const indexArr = value.split("W") | ||
workday.value = Number(indexArr[0]) | ||
radioValue.value = 5 | ||
} else if (value === "L") { | ||
radioValue.value = 6 | ||
} else { | ||
checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))] | ||
radioValue.value = 7 | ||
} | ||
} | ||
// 单选按钮值变化时 | ||
function onRadioChange() { | ||
if (radioValue.value === 2 && props.cron.week === '?') { | ||
emit('update', 'week', '*', 'day') | ||
} | ||
if (radioValue.value !== 2 && props.cron.week !== '?') { | ||
emit('update', 'week', '?', 'day') | ||
} | ||
switch (radioValue.value) { | ||
case 1: | ||
emit('update', 'day', '*', 'day') | ||
break | ||
case 2: | ||
emit('update', 'day', '?', 'day') | ||
break | ||
case 3: | ||
emit('update', 'day', cycleTotal.value, 'day') | ||
break | ||
case 4: | ||
emit('update', 'day', averageTotal.value, 'day') | ||
break | ||
case 5: | ||
emit('update', 'day', workdayTotal.value, 'day') | ||
break | ||
case 6: | ||
emit('update', 'day', 'L', 'day') | ||
break | ||
case 7: | ||
if (checkboxList.value.length === 0) { | ||
checkboxList.value.push(checkCopy.value[0]) | ||
} else { | ||
checkCopy.value = checkboxList.value | ||
} | ||
emit('update', 'day', checkboxString.value, 'day') | ||
break | ||
} | ||
} | ||
</script> | ||
|
||
<style lang="scss" scoped> | ||
.el-input-number--small, .el-input-number--small, .el-select, .el-select--small { | ||
margin: 0 0.2rem; | ||
} | ||
.el-select, .el-select--small { | ||
width: 18.8rem; | ||
} | ||
</style> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
<template> | ||
<el-form size="small"> | ||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="1"> | ||
小时,允许的通配符[, - * /] | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="2"> | ||
周期从 | ||
<el-input-number v-model='cycle01' :min="0" :max="22" /> - | ||
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="23" /> 时 | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="3"> | ||
从 | ||
<el-input-number v-model='average01' :min="0" :max="22" /> 时开始,每 | ||
<el-input-number v-model='average02' :min="1" :max="23 - average01" /> 小时执行一次 | ||
</el-radio> | ||
</el-form-item> | ||
|
||
<el-form-item> | ||
<el-radio v-model='radioValue' :label="4"> | ||
指定 | ||
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10"> | ||
<el-option v-for="item in 24" :key="item" :label="item - 1" :value="item - 1" /> | ||
</el-select> | ||
</el-radio> | ||
</el-form-item> | ||
</el-form> | ||
</template> | ||
|
||
<script setup> | ||
const emit = defineEmits(['update']) | ||
const props = defineProps({ | ||
cron: { | ||
type: Object, | ||
default: { | ||
second: "*", | ||
min: "*", | ||
hour: "*", | ||
day: "*", | ||
month: "*", | ||
week: "?", | ||
year: "", | ||
} | ||
}, | ||
check: { | ||
type: Function, | ||
default: () => { | ||
} | ||
} | ||
}) | ||
const radioValue = ref(1) | ||
const cycle01 = ref(0) | ||
const cycle02 = ref(1) | ||
const average01 = ref(0) | ||
const average02 = ref(1) | ||
const checkboxList = ref([]) | ||
const checkCopy = ref([0]) | ||
const cycleTotal = computed(() => { | ||
cycle01.value = props.check(cycle01.value, 0, 22) | ||
cycle02.value = props.check(cycle02.value, cycle01.value + 1, 23) | ||
return cycle01.value + '-' + cycle02.value | ||
}) | ||
const averageTotal = computed(() => { | ||
average01.value = props.check(average01.value, 0, 22) | ||
average02.value = props.check(average02.value, 1, 23 - average01.value) | ||
return average01.value + '/' + average02.value | ||
}) | ||
const checkboxString = computed(() => { | ||
return checkboxList.value.join(',') | ||
}) | ||
watch(() => props.cron.hour, value => changeRadioValue(value)) | ||
watch([radioValue, cycleTotal, averageTotal, checkboxString], () => onRadioChange()) | ||
function changeRadioValue(value) { | ||
if (value === '*') { | ||
radioValue.value = 1 | ||
} else if (value.indexOf('-') > -1) { | ||
const indexArr = value.split('-') | ||
cycle01.value = Number(indexArr[0]) | ||
cycle02.value = Number(indexArr[1]) | ||
radioValue.value = 2 | ||
} else if (value.indexOf('/') > -1) { | ||
const indexArr = value.split('/') | ||
average01.value = Number(indexArr[0]) | ||
average02.value = Number(indexArr[1]) | ||
radioValue.value = 3 | ||
} else { | ||
checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))] | ||
radioValue.value = 4 | ||
} | ||
} | ||
function onRadioChange() { | ||
switch (radioValue.value) { | ||
case 1: | ||
emit('update', 'hour', '*', 'hour') | ||
break | ||
case 2: | ||
emit('update', 'hour', cycleTotal.value, 'hour') | ||
break | ||
case 3: | ||
emit('update', 'hour', averageTotal.value, 'hour') | ||
break | ||
case 4: | ||
if (checkboxList.value.length === 0) { | ||
checkboxList.value.push(checkCopy.value[0]) | ||
} else { | ||
checkCopy.value = checkboxList.value | ||
} | ||
emit('update', 'hour', checkboxString.value, 'hour') | ||
break | ||
} | ||
} | ||
</script> | ||
|
||
<style lang="scss" scoped> | ||
.el-input-number--small, .el-input-number--small, .el-select, .el-select--small { | ||
margin: 0 0.2rem; | ||
} | ||
.el-select, .el-select--small { | ||
width: 18.8rem; | ||
} | ||
</style> |
Oops, something went wrong.