import EditableTagGroup from '@/components/tag'; import config from '@/utils/config'; import { request } from '@/utils/http'; import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons'; import { Button, Form, Input, Modal, Select, Space, message } from 'antd'; import cronParse from 'cron-parser'; import { useEffect, useState } from 'react'; import intl from 'react-intl-universal'; import { getScheduleType, scheduleTypeMap } from './const'; import { ScheduleType } from './type'; const CronModal = ({ cron, handleCancel, }: { cron?: any; handleCancel: (needUpdate?: boolean) => void; }) => { const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const [scheduleType, setScheduleType] = useState( cron ? getScheduleType(cron.schedule) : ScheduleType.Normal, ); const handleOk = async (values: any) => { setLoading(true); try { const method = cron?.id ? 'put' : 'post'; const payload = { ...values, schedule: scheduleType !== ScheduleType.Normal ? scheduleTypeMap[scheduleType] : values.schedule, }; if (cron?.id) { payload.id = cron.id; } const { code, data } = await request[method]( `${config.apiPrefix}crons`, payload, ); if (code === 200) { message.success( cron?.id ? intl.get('更新任务成功') : intl.get('创建任务成功'), ); handleCancel(data); } } catch (error: any) { console.error(error); } finally { setLoading(false); } }; const handleScheduleTypeChange = (type: ScheduleType) => { setScheduleType(type); form.setFieldValue('schedule', ''); }; const renderScheduleOptions = () => ( ); const renderScheduleFields = () => { if (scheduleType !== ScheduleType.Normal) return null; return ( <> { if (!value || cronParse.parseExpression(value).hasNext()) { return Promise.resolve(); } return Promise.reject(intl.get('Cron表达式格式有误')); }, }, ]} > {(fields, { add, remove }, { errors }) => ( <> {fields.map(({ key, name, ...restField }) => ( remove(name)} /> ))} add({ schedule: '' })}> {intl.get('新增定时规则')} )} ); }; return ( form.validateFields().then(handleOk)} onCancel={() => handleCancel()} confirmLoading={loading} >
{renderScheduleOptions()} {renderScheduleFields()}
); }; const CronLabelModal = ({ ids, handleCancel, }: { ids: Array; handleCancel: (needUpdate?: boolean) => void; }) => { const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const update = async (action: 'delete' | 'post') => { form .validateFields() .then(async (values) => { setLoading(true); const payload = { ids, labels: values.labels }; try { const { code, data } = await request[action]( `${config.apiPrefix}crons/labels`, payload, ); if (code === 200) { message.success( action === 'post' ? intl.get('添加Labels成功') : intl.get('删除Labels成功'), ); handleCancel(true); } setLoading(false); } catch (error) { setLoading(false); } }) .catch((info) => { console.log('Validate Failed:', info); }); }; const buttons = [ , , , ]; return ( handleCancel(false)} confirmLoading={loading} >
); }; export { CronLabelModal, CronModal as default };