123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- 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) => (<Option value={item.value}>{item.name}</Option>))
-
- let Field = <></>;
- if (render) {
- Field = typeof render === 'function' ? render(props) : render
- } else {
- switch (type) {
- case FieldTypes.Text:
- Field = <Input placeholder={placeholder} style={{ width: '100%' }} {...fieldProps}/>;
- break;
- case FieldTypes.Password:
- Field = <Input.Password placeholder={placeholder} style={{ width: '100%' }} {...fieldProps}/>;
- break;
- case FieldTypes.Number:
- Field = <InputNumber placeholder={placeholder} style={{ width: '100%' }} {...fieldProps}/>;
- break;
- case FieldTypes.Switch:
- Field = <Switch {...fieldProps} />;
- break;
- case FieldTypes.TimePicker:
- Field = <TimePicker {...fieldProps} style={{ width: '100%' }}/>;
- break;
- case FieldTypes.DatePicker:
- Field = <DatePicker {...fieldProps} style={{ width: '100%' }}/>;
- break;
- case FieldTypes.RangePicker:
- Field = <RangePicker {...fieldProps} style={{ width: '100%' }}/>;
- break;
- case FieldTypes.MonthPicker:
- Field = <MonthPicker {...fieldProps} style={{ width: '100%' }}/>;
- break;
- case FieldTypes.Select:
- Field = <Select placeholder={placeholder} style={{ width: '100%' }} {...fieldProps}>{SelectOpts}</Select>
- break;
- case FieldTypes.ImageUploader:
- Field = <ImageUploader {...fieldProps}/>
- break;
- default:
- throw new Error(`暂时不支持的组件类型: ${type}`)
- }
- }
-
- if (!label && !name && !action) return Field;
-
- const itemProps = action ? { ...restProps, ...tailFormItemLayout } : restProps
-
- return (
- <Item label={label} {...itemProps}>
- {action ? Field : getFieldDecorator(name, config)(Field)}
- </Item>
- )
- };
-
- export default WrapperItem;
- export { FieldTypes };
|