in dolphinscheduler-ui/src/components/crontab/modules/time.tsx [69:244]
setup(props, ctx) {
const options = Array.from({ length: 60 }, (x, i) => ({
label: i.toString(),
value: i
}))
const timeRef = ref()
const radioRef = ref()
const intervalStartRef = ref(props.intervalStart)
const intervalPerformRef = ref(props.intervalPerform)
const specificTimesRef = ref<Array<number>>([])
const cycleStartRef = ref(props.cycleStart)
const cycleEndRef = ref(props.cycleEnd)
/**
* Parse parameter value
*/
const analyticalValue = () => {
const $timeVal = props.timeValue
// Interval time
const $interval = isStr($timeVal, '/')
// Specific time
const $specific = isStr($timeVal, ',')
// Cycle time
const $cycle = isStr($timeVal, '-')
// Every time
if ($timeVal === '*') {
radioRef.value = 'everyTime'
timeRef.value = '*'
return
}
// Positive integer (times)
if (
($timeVal.length === 1 ||
$timeVal.length === 2 ||
$timeVal.length === 4) &&
_.isInteger(parseInt($timeVal))
) {
radioRef.value = 'specificTime'
specificTimesRef.value = [parseInt($timeVal)]
return
}
// Interval times
if ($interval) {
radioRef.value = 'intervalTime'
intervalStartRef.value = parseInt($interval[0])
intervalPerformRef.value = parseInt($interval[1])
timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`
return
}
// Specific times
if ($specific) {
radioRef.value = 'specificTime'
specificTimesRef.value = $specific.map((item) => parseInt(item))
return
}
// Cycle time
if ($cycle) {
radioRef.value = 'cycleTime'
cycleStartRef.value = parseInt($cycle[0])
cycleEndRef.value = parseInt($cycle[1])
timeRef.value = `${cycleStartRef.value}-${cycleEndRef.value}`
return
}
}
// Interval start time(1)
const onIntervalStart = (value: number | null) => {
intervalStartRef.value = value || 0
if (radioRef.value === 'intervalTime') {
timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`
}
}
// Interval execution time(2)
const onIntervalPerform = (value: number | null) => {
intervalPerformRef.value = value || 0
if (radioRef.value === 'intervalTime') {
timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`
}
}
// Specific time
const onSpecificTimes = (arr: Array<number>) => {
specificTimesRef.value = arr
if (radioRef.value === 'specificTime') {
specificReset()
}
}
// Cycle start value
const onCycleStart = (value: number | null) => {
cycleStartRef.value = value || 0
if (radioRef.value === 'cycleTime') {
timeRef.value = `${cycleStartRef.value}-${cycleEndRef.value}`
}
}
// Cycle end value
const onCycleEnd = (value: number | null) => {
cycleEndRef.value = value || 0
if (radioRef.value === 'cycleTime') {
timeRef.value = `${cycleStartRef.value}-${cycleEndRef.value}`
}
}
// Reset every time
const everyReset = () => {
timeRef.value = '*'
}
// Reset interval time
const intervalReset = () => {
timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`
}
// Reset specific time
const specificReset = () => {
let timeValue = '*'
if (specificTimesRef.value.length) {
timeValue = specificTimesRef.value.join(',')
}
timeRef.value = timeValue
}
// Reset cycle time
const cycleReset = () => {
timeRef.value = `${cycleStartRef.value}-${cycleEndRef.value}`
}
const updateRadioTime = (value: string) => {
switch (value) {
case 'everyTime':
everyReset()
break
case 'intervalTime':
intervalReset()
break
case 'specificTime':
specificReset()
break
case 'cycleTime':
cycleReset()
break
}
}
watch(
() => timeRef.value,
() => ctx.emit('update:timeValue', timeRef.value.toString())
)
onMounted(() => analyticalValue())
return {
options,
radioRef,
intervalStartRef,
intervalPerformRef,
specificTimesRef,
cycleStartRef,
cycleEndRef,
updateRadioTime,
onIntervalStart,
onIntervalPerform,
onSpecificTimes,
onCycleStart,
onCycleEnd,
...toRefs(props)
}
},