Files
sionrui/yudao-ui-admin-vue3/src/components/Crontab/min.vue
2022-07-18 19:06:37 +08:00

122 lines
2.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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="58" /> -
<el-input-number v-model="cycle02" :min="cycle01 ? cycle01 + 1 : 1" :max="59" /> 分钟
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model="radioValue" :label="3">
<el-input-number v-model="average01" :min="0" :max="58" /> 分钟开始
<el-input-number v-model="average02" :min="1" :max="59 - average01 || 0" /> 分钟执行一次
</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>
</el-radio>
</el-form-item>
</el-form>
</template>
<script lang="ts" setup>
import { computed, ref, watch } from 'vue'
const props = defineProps({
check: {
type: Function,
required: true
},
cron: {
type: Object
}
})
const emits = defineEmits(['update'])
const radioValue = ref(1)
const cycle01 = ref(0)
const cycle02 = ref(1)
const average01 = ref(0)
const average02 = ref(1)
const checkboxList = ref([])
defineExpose({
radioValue,
cycle01,
cycle02,
average01,
average02,
checkboxList
})
const cycleTotal = computed(() => {
const cycle1 = props.check(cycle01.value, 0, 58)
const cycle2 = props.check(cycle02.value, cycle1 ? cycle1 + 1 : 1, 59)
return cycle1 + '-' + cycle2
})
watch(cycleTotal, () => {
if (parseInt(radioValue.value.toString()) === 2) {
emits('update', 'min', cycleTotal, 'min')
}
})
const averageTotal = computed(() => {
const average1 = props.check(average01.value, 0, 58)
const average2 = props.check(average02.value, 1, 59 - average1 || 0)
return average1 + '/' + average2
})
watch(averageTotal, () => {
if (parseInt(radioValue.value.toString()) === 3) {
emits('update', 'min', averageTotal, 'min')
}
})
const checkboxString = computed(() => {
let str = checkboxList.value.join()
return str.length === 0 ? '*' : str
})
watch(checkboxString, () => {
if (parseInt(radioValue.value.toString()) === 4) {
emits('update', 'min', checkboxString, 'min')
}
})
watch(radioValue, () => {
switch (parseInt(radioValue.value.toString())) {
case 1:
emits('update', 'min', '*', 'min')
break
case 2:
emits('update', 'min', cycleTotal, 'min')
break
case 3:
emits('update', 'min', averageTotal, 'min')
break
case 4:
emits('update', 'min', checkboxString, 'min')
break
}
})
</script>