setup()

in dolphinscheduler-ui/src/components/crontab/modules/day.tsx [46:463]


  setup(props, ctx) {
    const { t } = useI18n()

    const weekOptions = week.map((v) => ({
      label: t(v.label),
      value: v.value
    }))

    const lastWeekOptions = lastWeeks.map((v) => ({
      label: t(v.label),
      value: v.value
    }))

    const radioRef = ref()
    const dayRef = ref()
    const weekRef = ref()
    const WkintervalWeekStartRef = ref(2)
    const WkintervalWeekPerformRef = ref(2)
    const intervalDayStartRef = ref(1)
    const intervalDayPerformRef = ref(1)
    const WkspecificDayRef = ref<Array<number>>([])
    const WkspecificWeekRef = ref<Array<string>>([])
    const monthLastDaysRef = ref('L')
    const monthLastWorkingDaysRef = ref('LW')
    const monthLastWeeksRef = ref('?')
    const monthTailBeforeRef = ref(1)
    const recentlyWorkingDaysMonthRef = ref(1)
    const WkmonthNumWeeksDayRef = ref(1)
    const WkmonthNumWeeksWeekRef = ref(1)

    /**
     * Parse parameter value
     */
    const analyticalValue = () => {
      const $dayVal = props.dayValue
      const $weekVal = props.weekValue
      const isWeek1 = $weekVal.indexOf('/') !== -1
      const isWeek2 = $weekVal.indexOf('#') !== -1

      // Initialization
      if ($dayVal === '*' && $weekVal === '?') {
        radioRef.value = 'everyDay'
        return
      }

      // week
      if (isWeek1 || isWeek2 || isWeek($weekVal)) {
        dayRef.value = '?'

        /**
         * Processing by sequence number (excluding days)
         * @param [
         * WkintervalWeek=>(/),
         * WkspecificWeek=>(TUE,WED),
         * WkmonthNumWeeks=>(#)
         * ]
         */
        const hanleWeekOne = () => {
          const a = isStr($weekVal, '/') as string[]
          WkintervalWeekStartRef.value = parseInt(a[0])
          WkintervalWeekPerformRef.value = parseInt(a[1])
          dayRef.value = '?'
          weekRef.value = `${WkintervalWeekPerformRef.value}/${WkintervalWeekStartRef.value}`
          radioRef.value = 'WkintervalWeek'
        }

        const hanleWeekTwo = () => {
          WkspecificWeekRef.value = $weekVal.split(',')
          radioRef.value = 'WkspecificWeek'
        }

        const hanleWeekThree = () => {
          const a = isStr($weekVal, '#') as string[]
          WkmonthNumWeeksDayRef.value = parseInt(a[0])
          WkmonthNumWeeksDayRef.value = parseInt(a[1])
          radioRef.value = 'WkmonthNumWeeks'
        }

        // Processing week
        if (isStr($weekVal, '/')) {
          hanleWeekOne()
        } else if (isStr($weekVal, '#')) {
          hanleWeekThree()
        } else if (isWeek($weekVal)) {
          hanleWeekTwo()
        }
      } else {
        weekRef.value = '?'

        /**
         * Processing by sequence number (excluding week)
         * @param [
         * everyDay=>(*),
         * intervalDay=>(1/1),
         * specificDay=>(1,2,5,3,4),
         * monthLastDays=>(L),
         * monthLastWorkingDays=>(LW),
         * monthLastWeeks=>(3L),
         * monthTailBefore=>(L-4),
         * recentlyWorkingDaysMonth=>(6W)
         * ]
         */
        const hanleDayOne = () => {
          radioRef.value = 'everyDay'
        }

        const hanleDayTwo = () => {
          const a = isStr($dayVal, '/') as string[]
          intervalDayStartRef.value = parseInt(a[0])
          intervalDayPerformRef.value = parseInt(a[1])
          radioRef.value = 'intervalDay'
        }

        const hanleDayThree = () => {
          WkspecificDayRef.value = $dayVal
            .split(',')
            .map((item) => parseInt(item))
          radioRef.value = 'specificDay'
        }

        const hanleDayFour = () => {
          radioRef.value = 'monthLastDays'
        }

        const hanleDayFive = () => {
          radioRef.value = 'monthLastWorkingDays'
        }

        const hanleDaySix = () => {
          monthLastWeeksRef.value = $dayVal
          radioRef.value = 'monthLastWeeks'
        }

        const hanleDaySeven = () => {
          const a = isStr($dayVal, '-') as string[]
          monthTailBeforeRef.value = parseInt(a[1])
          radioRef.value = 'monthTailBefore'
        }

        const hanleDayEight = () => {
          recentlyWorkingDaysMonthRef.value = parseInt(
            $dayVal.slice(0, $dayVal.length - 1)
          )
          radioRef.value = 'recentlyWorkingDaysMonth'
        }

        if ($dayVal === '*') {
          hanleDayOne()
        } else if (isStr($dayVal, '/')) {
          hanleDayTwo()
        } else if ($dayVal === 'L') {
          hanleDayFour()
        } else if ($dayVal === 'LW') {
          hanleDayFive()
        } else if ($dayVal.charAt($dayVal.length - 1) === 'L') {
          hanleDaySix()
        } else if (isStr($dayVal, '-')) {
          hanleDaySeven()
        } else if ($dayVal.charAt($dayVal.length - 1) === 'W') {
          hanleDayEight()
        } else {
          hanleDayThree()
        }
      }
    }

    // Every few weeks
    const onWkintervalWeekPerform = (value: number | null) => {
      WkintervalWeekPerformRef.value = value || 0
      if (radioRef.value === 'WkintervalWeek') {
        dayRef.value = '?'
        weekRef.value = `${WkintervalWeekStartRef.value}/${WkintervalWeekPerformRef.value}`
      }
    }

    // Every few weeks
    const onWkintervalWeekStart = (value: number | null) => {
      WkintervalWeekStartRef.value = value || 0
      if (radioRef.value === 'WkintervalWeek') {
        dayRef.value = '?'
        weekRef.value = `${WkintervalWeekStartRef.value}/${WkintervalWeekPerformRef.value}`
      }
    }

    // Interval start time(1)
    const onIntervalDayStart = (value: number | null) => {
      intervalDayStartRef.value = value || 0
      if (radioRef.value === 'intervalDay') {
        intervalDaySet()
      }
    }

    // Interval execution time(2)
    const onIntervalDayPerform = (value: number | null) => {
      intervalDayPerformRef.value = value || 0
      if (radioRef.value === 'intervalDay') {
        intervalDaySet()
      }
    }

    // Specific day of the week (multiple choice)
    const onWkspecificWeek = (arr: Array<string>) => {
      WkspecificWeekRef.value = arr
      if (radioRef.value === 'WkspecificWeek') {
        dayRef.value = '?'
        weekRef.value = arr.join(',')
      }
    }

    // Specific days (multiple choices)
    const onWkspecificDay = (arr: Array<number>) => {
      WkspecificDayRef.value = arr
      if (radioRef.value === 'specificDay') {
        weekRef.value = '?'
        dayRef.value = arr.join(',')
      }
    }

    const onMonthLastWeeks = (value: string | null) => {
      monthLastWeeksRef.value = value || '?'
      if (radioRef.value === 'monthLastWeeks') {
        weekRef.value = value
        dayRef.value = '?'
      }
    }

    // Specific days
    const onSpecificDays = (arr: Array<number>) => {
      WkspecificDayRef.value = arr
      if (radioRef.value === 'specificDay') {
        specificSet()
      }
    }

    // By the end of this month
    const onMonthTailBefore = (value: number | null) => {
      monthTailBeforeRef.value = value || 0
      if (radioRef.value === 'monthTailBefore') {
        dayRef.value = `L-${monthTailBeforeRef.value}`
      }
    }

    // Last working day
    const onRecentlyWorkingDaysMonth = (value: number | null) => {
      recentlyWorkingDaysMonthRef.value = value || 0
      if (radioRef.value === 'recentlyWorkingDaysMonth') {
        dayRef.value = `${recentlyWorkingDaysMonthRef.value}W`
      }
    }

    // On the day of this month
    const onWkmonthNumWeeksDay = (value: number | null) => {
      WkmonthNumWeeksDayRef.value = value || 0
      if (radioRef.value === 'WkmonthNumWeeks') {
        weekRef.value = `${WkmonthNumWeeksWeekRef.value}#${WkmonthNumWeeksDayRef.value}`
      }
    }

    // On the week of this month
    const onWkmonthNumWeeksWeek = (value: number | null) => {
      if (radioRef.value === 'WkmonthNumWeeks') {
        dayRef.value = '?'
        weekRef.value = `${value}#${WkmonthNumWeeksDayRef.value}`
      }
    }

    // Reset every day
    const everyDaySet = () => {
      dayRef.value = '*'
    }

    // Reset interval week starts from *
    const WkintervalWeekReset = () => {
      weekRef.value = `${WkintervalWeekStartRef.value}/${WkintervalWeekPerformRef.value}`
    }

    // Reset interval days
    const intervalDaySet = () => {
      dayRef.value = `${intervalDayStartRef.value}/${intervalDayPerformRef.value}`
    }

    // Specific week (multiple choices)
    const WkspecificWeekReset = () => {
      weekRef.value = WkspecificWeekRef.value.length
        ? WkspecificWeekRef.value.join(',')
        : '*'
    }

    // Reset specific days
    const specificSet = () => {
      if (WkspecificDayRef.value.length) {
        dayRef.value = WkspecificDayRef.value.join(',')
      } else {
        dayRef.value = '*'
      }
    }

    // On the last day of the month
    const monthLastDaysReset = () => {
      dayRef.value = monthLastDaysRef.value
    }

    // On the last working day of the month
    const monthLastWorkingDaysReset = () => {
      dayRef.value = monthLastWorkingDaysRef.value
    }

    // At the end of the month*
    const monthLastWeeksReset = () => {
      dayRef.value = monthLastWeeksRef.value
    }

    // By the end of this month
    const monthTailBeforeReset = () => {
      dayRef.value = `L-${monthTailBeforeRef.value}`
    }

    // Last working day (Monday to Friday) to this month
    const recentlyWorkingDaysMonthReset = () => {
      dayRef.value = `${recentlyWorkingDaysMonthRef.value}W`
    }

    // On the day of this month
    const WkmonthNumReset = () => {
      weekRef.value = `${WkmonthNumWeeksWeekRef.value}#${WkmonthNumWeeksDayRef.value}`
    }

    const updateRadioDay = (value: string) => {
      switch (value) {
        case 'everyDay':
          weekRef.value = '?'
          everyDaySet()
          break
        case 'WkintervalWeek':
          dayRef.value = '?'
          WkintervalWeekReset()
          break
        case 'intervalDay':
          weekRef.value = '?'
          intervalDaySet()
          break
        case 'WkspecificWeek':
          dayRef.value = '?'
          WkspecificWeekReset()
          break
        case 'specificDay':
          weekRef.value = '?'
          specificSet()
          break
        case 'monthLastDays':
          weekRef.value = '?'
          monthLastDaysReset()
          break
        case 'monthLastWorkingDays':
          weekRef.value = '?'
          monthLastWorkingDaysReset()
          break
        case 'monthLastWeeks':
          weekRef.value = '1L'
          monthLastWeeksReset()
          break
        case 'monthTailBefore':
          weekRef.value = '?'
          monthTailBeforeReset()
          break
        case 'recentlyWorkingDaysMonth':
          weekRef.value = '?'
          recentlyWorkingDaysMonthReset()
          break
        case 'WkmonthNumWeeks':
          dayRef.value = '?'
          WkmonthNumReset()
          break
      }
    }

    watch(
      () => dayRef.value,
      () => ctx.emit('update:dayValue', dayRef.value.toString())
    )

    watch(
      () => weekRef.value,
      () => ctx.emit('update:weekValue', weekRef.value.toString())
    )

    onMounted(() => analyticalValue())

    return {
      weekOptions,
      lastWeekOptions,
      radioRef,
      WkintervalWeekStartRef,
      WkintervalWeekPerformRef,
      intervalDayStartRef,
      intervalDayPerformRef,
      WkspecificWeekRef,
      WkspecificDayRef,
      monthLastWeeksRef,
      monthTailBeforeRef,
      recentlyWorkingDaysMonthRef,
      WkmonthNumWeeksDayRef,
      WkmonthNumWeeksWeekRef,
      updateRadioDay,
      onWkintervalWeekStart,
      onWkintervalWeekPerform,
      onIntervalDayStart,
      onIntervalDayPerform,
      onSpecificDays,
      onWkspecificWeek,
      onWkspecificDay,
      onMonthLastWeeks,
      onMonthTailBefore,
      onRecentlyWorkingDaysMonth,
      onWkmonthNumWeeksDay,
      onWkmonthNumWeeksWeek
    }
  },