You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
5.6 KiB
214 lines
5.6 KiB
import React, { useState } from 'react';
|
|
import { Form, Button, DatePicker, Input, Modal, Radio, Select, Steps } from 'antd';
|
|
|
|
import { TableListItem } from '../data.d';
|
|
|
|
export interface FormValueType extends Partial<TableListItem> {
|
|
target?: string;
|
|
template?: string;
|
|
type?: string;
|
|
time?: string;
|
|
frequency?: string;
|
|
}
|
|
|
|
export interface UpdateFormProps {
|
|
onCancel: (flag?: boolean, formVals?: FormValueType) => void;
|
|
onSubmit: (values: FormValueType) => void;
|
|
updateModalVisible: boolean;
|
|
values: Partial<TableListItem>;
|
|
}
|
|
const FormItem = Form.Item;
|
|
const { Step } = Steps;
|
|
const { TextArea } = Input;
|
|
const { Option } = Select;
|
|
const RadioGroup = Radio.Group;
|
|
|
|
export interface UpdateFormState {
|
|
formVals: FormValueType;
|
|
currentStep: number;
|
|
}
|
|
|
|
const formLayout = {
|
|
labelCol: { span: 7 },
|
|
wrapperCol: { span: 13 },
|
|
};
|
|
|
|
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
|
|
const [formVals, setFormVals] = useState<FormValueType>({
|
|
name: props.values.name,
|
|
desc: props.values.desc,
|
|
key: props.values.key,
|
|
target: '0',
|
|
template: '0',
|
|
type: '1',
|
|
time: '',
|
|
frequency: 'month',
|
|
});
|
|
|
|
const [currentStep, setCurrentStep] = useState<number>(0);
|
|
|
|
const [form] = Form.useForm();
|
|
|
|
const {
|
|
onSubmit: handleUpdate,
|
|
onCancel: handleUpdateModalVisible,
|
|
updateModalVisible,
|
|
values,
|
|
} = props;
|
|
|
|
const forward = () => setCurrentStep(currentStep + 1);
|
|
|
|
const backward = () => setCurrentStep(currentStep - 1);
|
|
|
|
const handleNext = async () => {
|
|
const fieldsValue = await form.validateFields();
|
|
|
|
setFormVals({ ...formVals, ...fieldsValue });
|
|
|
|
if (currentStep < 2) {
|
|
forward();
|
|
} else {
|
|
handleUpdate({ ...formVals, ...fieldsValue });
|
|
}
|
|
};
|
|
|
|
const renderContent = () => {
|
|
if (currentStep === 1) {
|
|
return (
|
|
<>
|
|
<FormItem name="target" label="监控对象">
|
|
<Select style={{ width: '100%' }}>
|
|
<Option value="0">表一</Option>
|
|
<Option value="1">表二</Option>
|
|
</Select>
|
|
</FormItem>
|
|
<FormItem name="template" label="规则模板">
|
|
<Select style={{ width: '100%' }}>
|
|
<Option value="0">规则模板一</Option>
|
|
<Option value="1">规则模板二</Option>
|
|
</Select>
|
|
</FormItem>
|
|
<FormItem name="type" label="规则类型">
|
|
<RadioGroup>
|
|
<Radio value="0">强</Radio>
|
|
<Radio value="1">弱</Radio>
|
|
</RadioGroup>
|
|
</FormItem>
|
|
</>
|
|
);
|
|
}
|
|
if (currentStep === 2) {
|
|
return (
|
|
<>
|
|
<FormItem
|
|
name="time"
|
|
label="开始时间"
|
|
rules={[{ required: true, message: '请选择开始时间!' }]}
|
|
>
|
|
<DatePicker
|
|
style={{ width: '100%' }}
|
|
showTime
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
placeholder="选择开始时间"
|
|
/>
|
|
</FormItem>
|
|
<FormItem name="frequency" label="调度周期">
|
|
<Select style={{ width: '100%' }}>
|
|
<Option value="month">月</Option>
|
|
<Option value="week">周</Option>
|
|
</Select>
|
|
</FormItem>
|
|
</>
|
|
);
|
|
}
|
|
return (
|
|
<>
|
|
<FormItem
|
|
name="name"
|
|
label="规则名称"
|
|
rules={[{ required: true, message: '请输入规则名称!' }]}
|
|
>
|
|
<Input placeholder="请输入" />
|
|
</FormItem>
|
|
<FormItem
|
|
name="desc"
|
|
label="规则描述"
|
|
rules={[{ required: true, message: '请输入至少五个字符的规则描述!', min: 5 }]}
|
|
>
|
|
<TextArea rows={4} placeholder="请输入至少五个字符" />
|
|
</FormItem>
|
|
</>
|
|
);
|
|
};
|
|
|
|
const renderFooter = () => {
|
|
if (currentStep === 1) {
|
|
return (
|
|
<>
|
|
<Button style={{ float: 'left' }} onClick={backward}>
|
|
上一步
|
|
</Button>
|
|
<Button onClick={() => handleUpdateModalVisible(false, values)}>取消</Button>
|
|
<Button type="primary" onClick={() => handleNext()}>
|
|
下一步
|
|
</Button>
|
|
</>
|
|
);
|
|
}
|
|
if (currentStep === 2) {
|
|
return (
|
|
<>
|
|
<Button style={{ float: 'left' }} onClick={backward}>
|
|
上一步
|
|
</Button>
|
|
<Button onClick={() => handleUpdateModalVisible(false, values)}>取消</Button>
|
|
<Button type="primary" onClick={() => handleNext()}>
|
|
完成
|
|
</Button>
|
|
</>
|
|
);
|
|
}
|
|
return (
|
|
<>
|
|
<Button onClick={() => handleUpdateModalVisible(false, values)}>取消</Button>
|
|
<Button type="primary" onClick={() => handleNext()}>
|
|
下一步
|
|
</Button>
|
|
</>
|
|
);
|
|
};
|
|
|
|
return (
|
|
<Modal
|
|
width={640}
|
|
bodyStyle={{ padding: '32px 40px 48px' }}
|
|
destroyOnClose
|
|
title="规则配置"
|
|
visible={updateModalVisible}
|
|
footer={renderFooter()}
|
|
onCancel={() => handleUpdateModalVisible()}
|
|
>
|
|
<Steps style={{ marginBottom: 28 }} size="small" current={currentStep}>
|
|
<Step title="基本信息" />
|
|
<Step title="配置规则属性" />
|
|
<Step title="设定调度周期" />
|
|
</Steps>
|
|
<Form
|
|
{...formLayout}
|
|
form={form}
|
|
initialValues={{
|
|
target: formVals.target,
|
|
template: formVals.template,
|
|
type: formVals.type,
|
|
frequency: formVals.frequency,
|
|
name: formVals.name,
|
|
desc: formVals.desc,
|
|
}}
|
|
>
|
|
{renderContent()}
|
|
</Form>
|
|
</Modal>
|
|
);
|
|
};
|
|
|
|
export default UpdateForm;
|
|
|