setup()

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)
    }
  },