From 6eb76c9f952c2279d745df30e1c8091735a04687 Mon Sep 17 00:00:00 2001 From: ZLY Date: Tue, 2 Sep 2025 11:57:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(CronPicker):=20=E5=A2=9E=E5=8A=A0=E5=91=A8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E9=80=89=E6=8B=A9=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在日期类型中添加"周"选项,支持指定星期的定时任务 - 调整表单项的布局,移除标签宽度设置,增加右边距 - 优化周类型选择时的星期选择界面 --- src/components/CronPicker/index.module.less | 1 - src/components/CronPicker/index.tsx | 59 +++++++++++++-------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/src/components/CronPicker/index.module.less b/src/components/CronPicker/index.module.less index 3cb3111..d62184e 100644 --- a/src/components/CronPicker/index.module.less +++ b/src/components/CronPicker/index.module.less @@ -15,7 +15,6 @@ } .formItem label { - width: 70px; // 增加标签宽度 margin-right: 16px; // 增加右边距 font-size: 14px; color: #333; diff --git a/src/components/CronPicker/index.tsx b/src/components/CronPicker/index.tsx index 2614a0f..27d6718 100644 --- a/src/components/CronPicker/index.tsx +++ b/src/components/CronPicker/index.tsx @@ -52,7 +52,7 @@ const CronPicker: React.FC = ({ value, onChange, style, classNa const [minutesInterval, setMinutesInterval] = useState(5); const [hourType, setHourType] = useState<'every' | 'at'>('at'); const [hourlyAt, setHourlyAt] = useState(12); - const [dailyType, setDailyType] = useState<'every' | 'weekday' | 'specific'>('every'); + const [dailyType, setDailyType] = useState<'every' | 'weekday' | 'specific' | 'week'>('every'); const [specificDay, setSpecificDay] = useState(1); const [selectedWeekdays, setSelectedWeekdays] = useState(['MON']); const [selectedMonths, setSelectedMonths] = useState(['1']); @@ -103,6 +103,10 @@ const CronPicker: React.FC = ({ value, onChange, style, classNa dom = specificDay.toString(); dow = '?'; } + else if (dailyType === 'week') { + dom = '?'; + dow = selectedWeekdays.length > 0 ? selectedWeekdays.join(',') : '*'; + } const mon = selectedMonths.length < 12 ? selectedMonths.join(',') : '*'; const newCron = `${sec} ${min} ${hour} ${dom} ${mon} ${dow}`; @@ -162,6 +166,16 @@ const CronPicker: React.FC = ({ value, onChange, style, classNa setSpecificDay(dayNum); } } + else if (dayOfMonth === '?' && dayOfWeek !== '?' && dayOfWeek !== 'MON-FRI') { + setDailyType('week'); + if (dayOfWeek.includes(',') || dayOfWeek.includes('-')) { + // 简化处理,实际可以更精确解析 + setSelectedWeekdays(dayOfWeek.split(/[-,]/)); + } + else if (dayOfWeek !== '*') { + setSelectedWeekdays([dayOfWeek]); + } + } // 解析星期部分 if (dayOfWeek !== '?' && dayOfWeek !== '*') { @@ -272,7 +286,7 @@ const CronPicker: React.FC = ({ value, onChange, style, classNa }; const handleDailyTypeChange = (value: string) => { - setDailyType(value as 'every' | 'weekday' | 'specific'); + setDailyType(value as 'every' | 'weekday' | 'specific' | 'week'); }; return ( @@ -341,29 +355,32 @@ const CronPicker: React.FC = ({ value, onChange, style, classNa /> + 指定星期 - -
- {['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'].map(day => ( - - ))} -
-
+ {dailyType === 'week' && ( + +
+ {['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'].map(day => ( + + ))} +
+
+ )} {PRESETS.map(p => (