|
@@ -1,4 +1,259 @@
|
|
|
-import React from 'react'
|
|
|
+import { Input, Radio, Select, Space } from 'antd'
|
|
|
+import React, {
|
|
|
+ useState,
|
|
|
+ useImperativeHandle,
|
|
|
+ forwardRef,
|
|
|
+ useEffect,
|
|
|
+} from 'react'
|
|
|
import styled from 'styled-components'
|
|
|
|
|
|
-export const CronSelect = () => {}
|
|
|
+const CronWrapper = styled.div`
|
|
|
+ .time_select {
|
|
|
+ width: 58px;
|
|
|
+ }
|
|
|
+`
|
|
|
+
|
|
|
+const RadioGroup = Radio.Group
|
|
|
+
|
|
|
+const Option = Select.Option
|
|
|
+
|
|
|
+const CronSelect = ({ cron_data }, ref) => {
|
|
|
+ const [cronType, setCronType] = useState('0')
|
|
|
+ const [hourType, setHourType] = useState('hour')
|
|
|
+ const [hourMax, setHourMax] = useState(24)
|
|
|
+ const [minVal, setMinVal] = useState('')
|
|
|
+ const [hourVal, setHourVal] = useState('')
|
|
|
+ const [dayVal, setDayVal] = useState('')
|
|
|
+ const [weekVal, setWeekVal] = useState('')
|
|
|
+ const [monthVal, setMonthVal] = useState('')
|
|
|
+ const [cronVal, setCronVal] = useState('')
|
|
|
+ useImperativeHandle(ref, () => {
|
|
|
+ return {
|
|
|
+ getCronData: formatCronData(),
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (cron_data?.cron_select_type === 0) {
|
|
|
+ setCronType(String(cron_data.cron_select_type))
|
|
|
+ const keys = Object.keys(cron_data)
|
|
|
+ if (keys.includes('hour')) {
|
|
|
+ setHourVal(cron_data['hour'])
|
|
|
+ onChangeHourType('hour')
|
|
|
+ } else {
|
|
|
+ setHourVal(cron_data['minute'])
|
|
|
+ onChangeHourType('min')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, [cron_data])
|
|
|
+
|
|
|
+ const formatCronData = () => {
|
|
|
+ let obj = {}
|
|
|
+ switch (cronType) {
|
|
|
+ case '0':
|
|
|
+ if (hourType === 'hour') {
|
|
|
+ obj = { cron_select_type: Number(cronType), hour: hourVal }
|
|
|
+ } else {
|
|
|
+ obj = { cron_select_type: Number(cronType), minute: hourVal }
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case '1':
|
|
|
+ obj = {
|
|
|
+ cron_select_type: Number(cronType),
|
|
|
+ hour: hourVal,
|
|
|
+ minute: minVal,
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case '2':
|
|
|
+ obj = {
|
|
|
+ cron_select_type: Number(cronType),
|
|
|
+ week: weekVal,
|
|
|
+ hour: hourVal,
|
|
|
+ minute: minVal,
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case '3':
|
|
|
+ obj = {
|
|
|
+ cron_select_type: Number(cronType),
|
|
|
+ month: monthVal,
|
|
|
+ week: weekVal,
|
|
|
+ hour: hourVal,
|
|
|
+ minute: minVal,
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case '4':
|
|
|
+ obj = { cron_select_type: Number(cronType), cron_expression: cronVal }
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ break
|
|
|
+ }
|
|
|
+ return obj
|
|
|
+ }
|
|
|
+
|
|
|
+ const onCronTypeChange = e => {
|
|
|
+ setCronType(e.target.value)
|
|
|
+ setMinVal('')
|
|
|
+ setHourVal('')
|
|
|
+ setDayVal('')
|
|
|
+ setWeekVal('')
|
|
|
+ setMonthVal('')
|
|
|
+ }
|
|
|
+ const onChangeHourType = val => {
|
|
|
+ setHourType(val)
|
|
|
+ setHourMax(val === 'hour' ? 24 : 60)
|
|
|
+ }
|
|
|
+
|
|
|
+ const onChangeHourVal = val => {
|
|
|
+ setHourVal(val)
|
|
|
+ }
|
|
|
+ const onChangeDayVal = val => {
|
|
|
+ setDayVal(val)
|
|
|
+ }
|
|
|
+ const onChangeWeekVal = val => {
|
|
|
+ setWeekVal(val)
|
|
|
+ }
|
|
|
+ const onChangeMonthVal = val => {
|
|
|
+ setMonthVal(val)
|
|
|
+ }
|
|
|
+ const onChangeMinVal = val => {
|
|
|
+ setMinVal(val)
|
|
|
+ }
|
|
|
+ const onChangeCronVal = e => {
|
|
|
+ setCronVal(e.target.value)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 各时间段选项
|
|
|
+ const timeOptions = val => {
|
|
|
+ const options = []
|
|
|
+ for (let i = 1; i < val; i++) {
|
|
|
+ options.push(
|
|
|
+ <Option value={i} key={i}>
|
|
|
+ {i}
|
|
|
+ </Option>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ return options
|
|
|
+ }
|
|
|
+
|
|
|
+ const hourSet = (
|
|
|
+ <Space>
|
|
|
+ <span>每</span>
|
|
|
+ <Select
|
|
|
+ onChange={onChangeHourVal}
|
|
|
+ value={hourVal}
|
|
|
+ className="time_select">
|
|
|
+ {timeOptions(hourMax)}
|
|
|
+ </Select>
|
|
|
+ <Select onChange={onChangeHourType} value={hourType}>
|
|
|
+ <Option value="min">分钟</Option>
|
|
|
+ <Option value="hour">小时</Option>
|
|
|
+ </Select>
|
|
|
+ <span>执行一次</span>
|
|
|
+ </Space>
|
|
|
+ )
|
|
|
+
|
|
|
+ const daySet = (
|
|
|
+ <Space>
|
|
|
+ <span>每天</span>
|
|
|
+ <Select
|
|
|
+ onChange={onChangeHourVal}
|
|
|
+ value={hourVal}
|
|
|
+ className="time_select">
|
|
|
+ {timeOptions(24)}
|
|
|
+ </Select>
|
|
|
+ <span>时</span>
|
|
|
+ <Select onChange={onChangeMinVal} value={minVal} className="time_select">
|
|
|
+ {timeOptions(60)}
|
|
|
+ </Select>
|
|
|
+ <span>分</span>
|
|
|
+ <span>执行一次</span>
|
|
|
+ </Space>
|
|
|
+ )
|
|
|
+
|
|
|
+ const weekSet = (
|
|
|
+ <Space>
|
|
|
+ <span>每周</span>
|
|
|
+ <Select
|
|
|
+ onChange={onChangeWeekVal}
|
|
|
+ value={weekVal}
|
|
|
+ className="time_select">
|
|
|
+ <Option value="1">一</Option>
|
|
|
+ <Option value="2">二</Option>
|
|
|
+ <Option value="3">三</Option>
|
|
|
+ <Option value="4">四</Option>
|
|
|
+ <Option value="5">五</Option>
|
|
|
+ <Option value="6">六</Option>
|
|
|
+ <Option value="7">七</Option>
|
|
|
+ </Select>
|
|
|
+ <span>,</span>
|
|
|
+ <Select
|
|
|
+ onChange={onChangeHourVal}
|
|
|
+ value={hourVal}
|
|
|
+ className="time_select">
|
|
|
+ {timeOptions(24)}
|
|
|
+ </Select>
|
|
|
+ <span>时</span>
|
|
|
+ <Select onChange={onChangeMinVal} value={minVal} className="time_select">
|
|
|
+ {timeOptions(60)}
|
|
|
+ </Select>
|
|
|
+ <span>分</span>
|
|
|
+ <span>执行一次</span>
|
|
|
+ </Space>
|
|
|
+ )
|
|
|
+
|
|
|
+ const monthSet = (
|
|
|
+ <Space>
|
|
|
+ <span>每</span>
|
|
|
+ <Select
|
|
|
+ onChange={onChangeMonthVal}
|
|
|
+ value={monthVal}
|
|
|
+ className="time_select">
|
|
|
+ {timeOptions(13)}
|
|
|
+ </Select>
|
|
|
+ <span>个月,</span>
|
|
|
+ <Select onChange={onChangeDayVal} value={dayVal} className="time_select">
|
|
|
+ {timeOptions(32)}
|
|
|
+ </Select>
|
|
|
+ <span>日,</span>
|
|
|
+ <Select
|
|
|
+ onChange={onChangeHourVal}
|
|
|
+ value={hourVal}
|
|
|
+ className="time_select">
|
|
|
+ {timeOptions(24)}
|
|
|
+ </Select>
|
|
|
+ <span>时</span>
|
|
|
+ <Select onChange={onChangeMinVal} value={minVal} className="time_select">
|
|
|
+ {timeOptions(60)}
|
|
|
+ </Select>
|
|
|
+ <span>分</span>
|
|
|
+ <span>执行一次</span>
|
|
|
+ </Space>
|
|
|
+ )
|
|
|
+
|
|
|
+ const cronSet = (
|
|
|
+ <Input
|
|
|
+ placeholder="cron表达式"
|
|
|
+ value={cronVal}
|
|
|
+ onChange={onChangeCronVal}
|
|
|
+ />
|
|
|
+ )
|
|
|
+
|
|
|
+ return (
|
|
|
+ <CronWrapper>
|
|
|
+ <RadioGroup onChange={onCronTypeChange} value={cronType}>
|
|
|
+ <Radio value="0">按小时</Radio>
|
|
|
+ <Radio value="1">按天</Radio>
|
|
|
+ <Radio value="2">按星期</Radio>
|
|
|
+ <Radio value="3">按月</Radio>
|
|
|
+ <Radio value="4">Cron表达式</Radio>
|
|
|
+ </RadioGroup>
|
|
|
+ {cronType === '0' && hourSet}
|
|
|
+ {cronType === '1' && daySet}
|
|
|
+ {cronType === '2' && weekSet}
|
|
|
+ {cronType === '3' && monthSet}
|
|
|
+ {cronType === '4' && cronSet}
|
|
|
+ </CronWrapper>
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+export default forwardRef(CronSelect)
|