import React from 'react';
import {
Form,
Input,
InputNumber,
Checkbox,
Radio,
DatePicker,
TimePicker,
Select,
} from 'antd';
import ImageUploader from './ImageUpload';
const Item = Form.Item
const { Option } = Select;
const { MonthPicker, RangePicker } = DatePicker
const FieldTypes = {
Text: 'Text',
Password: 'Password',
Number: 'Number',
Switch: 'Switch',
TimePicker: 'TimePicker',
DatePicker: 'DatePicker',
RangePicker: 'RangePicker',
MonthPicker: 'MonthPicker',
Select: 'Select',
ImageUploader: 'ImageUploader',
}
const tailFormItemLayout = {
wrapperCol: {
xs: {
span: 24,
offset: 0,
},
sm: {
span: 16,
offset: 8,
},
},
};
const WrapperItem = (props) => {
const {
form,
label,
name,
type,
placeholder,
render,
rules,
value,
dict,
action,
props: fieldProps,
...restProps
} = props;
const { getFieldDecorator } = form || {};
let config = {
rules,
initialValue: value
}
if (type === FieldTypes.Switch) {
config = {
...config,
valuePropName: 'checked',
};
}
if (type === FieldTypes.ImageUploader) {
config = {
...config,
getValueFromEvent: x => x,
};
}
// 没有类型与组件, 生成隐藏字段
if (!type && !render) {
getFieldDecorator(name, config);
return <>>;
}
const SelectOpts = (dict || []).map((item, index) => ())
let Field = <>>;
if (render) {
Field = typeof render === 'function' ? render(props) : render
} else {
switch (type) {
case FieldTypes.Text:
Field = ;
break;
case FieldTypes.Password:
Field = ;
break;
case FieldTypes.Number:
Field = ;
break;
case FieldTypes.Switch:
Field = ;
break;
case FieldTypes.TimePicker:
Field = ;
break;
case FieldTypes.DatePicker:
Field = ;
break;
case FieldTypes.RangePicker:
Field = ;
break;
case FieldTypes.MonthPicker:
Field = ;
break;
case FieldTypes.Select:
Field =
break;
case FieldTypes.ImageUploader:
Field =
break;
default:
throw new Error(`暂时不支持的组件类型: ${type}`)
}
}
if (!label && !name && !action) return Field;
const itemProps = action ? { ...restProps, ...tailFormItemLayout } : restProps
return (
-
{action ? Field : getFieldDecorator(name, config)(Field)}
)
};
export default WrapperItem;
export { FieldTypes };