import { Button } from 'antd';
import React, { useRef } from 'react';
import { XForm } from '../packages/react/src/index';
import { ISchema } from '../packages/types/src/index';
const schema: ISchema = [
{
key: 'input',
type: 'Input',
value: '12124',
ui: {
label: 'Input'
}
},
{
key: 'textArea',
type: 'TextArea',
value: '12124',
ui: {
label: 'TextArea'
}
},
{
key: 'inputNumber',
type: 'InputNumber',
value: 123,
ui: {
label: 'InputNumber',
tooltip:
'值为数字类型的组件 rules 中 type 要为 number,否则会报错:xxx is not a string'
},
rules: [
{
required: true,
type: 'number',
trigger: 'change'
}
]
},
{
key: 'autoComplete',
type: 'AutoComplete',
value: '123',
ui: { label: 'AutoComplete' },
options: ['gmail.com', '163.com', 'qq.com']
.map((domain) => `123@${domain}`)
.map((email) => ({ name: email, value: email }))
},
{
key: 'inputPreview',
type: 'Input',
status: 'preview',
value: '123',
ui: { label: 'Input preview' }
},
{
key: 'disabled',
type: 'Input',
status: 'disabled',
value: '123',
ui: { label: 'disabled 状态' }
},
{
key: 'switch',
type: 'Switch',
value: true,
ui: { label: 'Switch' }
},
{
key: 'radio',
type: 'Radio',
ui: { label: 'Radio' },
props: {
value: 'data1'
},
options: [
{ name: '数据1', value: 'data1' },
{ name: '数据2', value: 'data2' },
{ name: '数据3', value: 'data3', disabled: true }
]
},
{
key: 'radioPreview',
type: 'Radio',
status: 'preview',
ui: { label: 'Radio preview' },
props: {
value: 'data1'
},
options: [
{ name: '数据1', value: 'data1' },
{ name: '数据2', value: 'data2' },
{ name: '数据3', value: 'data3', disabled: true }
]
},
{
key: 'radioButton',
type: 'RadioButton',
value: 'data1',
ui: { label: 'RadioButton' },
props: {
buttonStyle: 'solid'
},
options: [
{ name: '数据1', value: 'data1' },
{ name: '数据2', value: 'data2' },
{ name: '数据3', value: 'data3', disabled: true }
]
},
{
key: 'checkbox',
type: 'Checkbox',
value: ['data1', 'data2'],
ui: {
label: 'Checkbox'
},
options: [
{ name: '数据1', value: 'data1' },
{ name: '数据2', value: 'data2' },
{ name: '数据3', value: 'data3', disabled: true }
]
},
{
key: 'checkboxPreview',
type: 'Checkbox',
status: 'preview',
ui: {
label: 'Checkbox preview'
},
props: {
value: ['data1', 'data2']
},
options: [
{ name: '数据1', value: 'data1' },
{ name: '数据2', value: 'data2' },
{ name: '数据3', value: 'data3', disabled: true }
]
},
{
key: 'checkboxAll',
type: 'CheckboxAll',
ui: {
label: 'CheckboxAll'
},
props: {
value: ['data1', 'data2']
},
options: [
{ name: '数据1', value: 'data1' },
{ name: '数据2', value: 'data2' },
{ name: '数据3', value: 'data3' }
]
},
// Select 1.基本使用 ✅
{
key: 'select1',
type: 'Select',
value: 1,
ui: { label: '普通Select' },
options: [
{ name: '显示', value: 1 },
{ name: '隐藏', value: 2 }
]
},
{
key: 'select1Preview',
type: 'Select',
status: 'preview',
value: 1,
ui: { label: '普通Select的preview' },
options: [
{ name: '显示', value: 1 },
{ name: '隐藏', value: 2 }
]
},
// 2.带搜索框 ✅
{
key: 'select2',
type: 'Select',
value: 1,
ui: {
label: '搜索框Select'
},
props: {
placeholder: '请选择',
showSearch: true,
optionFilterProp: 'test'
},
options: [
{ name: '数据1', value: 1, disabled: true, test: 'a' },
{ name: '数据2', value: 2, test: 'b' }
]
},
// 3.多选框 ✅
{
key: 'select3',
type: 'Select',
value: [1, 2],
ui: {
label: '多选Select'
},
options: [
{ name: '数据1', value: 1 },
{ name: '数据2', value: 2 },
{ name: '数据3', value: 3 }
],
props: {
placeholder: '请选择',
mode: 'multiple'
}
},
{
key: 'select3Preview',
type: 'Select',
status: 'preview',
value: [1, 2],
ui: {
label: '多选Select的preview'
},
options: [
{ name: '数据1', value: 1 },
{ name: '数据2', value: 2 },
{ name: '数据3', value: 3 }
],
props: {
placeholder: '请选择',
mode: 'multiple'
}
},
// 4.三种大小 ✅
{
key: 'select4',
type: 'Select',
value: [1, 2],
ui: {
label: '三种大小Select'
},
props: {
placeholder: '请选择',
mode: 'multiple',
size: 'large' // large, small, default
},
options: [
{ name: '数据1', value: 1 },
{ name: '数据2', value: 2 },
{ name: '数据3', value: 3 }
]
},
// 5.定制回填内容 ✅
{
key: 'select5',
type: 'Select',
value: [1, 2],
ui: {
label: '定制回填内容Select'
},
props: {
placeholder: '请选择',
mode: 'multiple',
optionLabelProp: 'test'
},
options: [
{ name: '数据1', value: 1, test: 'a' },
{ name: '数据2', value: 2, test: 'b' },
{ name: '数据3', value: 3, test: 'c' }
]
},
// 6.标签 ✅(当mode为tags时option的value不能为string外任意类型)
{
key: 'select6',
type: 'Select',
ui: {
label: '标签Select'
},
props: {
placeholder: '请选择',
mode: 'tags'
},
options: [
{ name: '数据1', value: '1' },
{ name: '数据2', value: '2' }
]
},
// 7.分组 用OptGroup 进行选项分组 ✅
{
key: 'select7',
type: 'Select',
value: 1,
ui: {
label: '分组Select'
},
options: [
{ name: '数据1', value: 1, group: 1 },
{ name: '数据2', value: 2, group: 1 },
{ name: '数据3', value: 3, group: 1 },
{ name: '数据4', value: 4 },
{ name: '数据5', value: 5 }
]
},
// Cascader 基本使用
{
key: 'cascader1',
type: 'Cascader',
value: ['zhejiang', 'hangzhou', 'xihu'],
ui: {
label: 'Cascader'
},
options: [
{
value: 'zhejiang',
label: 'Zhejiang',
children: [
{
value: 'hangzhou',
label: 'Hangzhou',
children: [
{
value: 'xihu',
label: 'West Lake'
}
]
}
]
},
{
value: 'jiangsu',
label: 'Jiangsu',
children: [
{
value: 'nanjing',
label: 'Nanjing',
children: [
{
value: 'zhonghuamen',
label: 'Zhong Hua Men'
}
]
}
]
}
]
},
{
key: 'cascader1Preview',
type: 'Cascader',
status: 'preview',
value: ['zhejiang', 'hangzhou', 'xihu'],
ui: {
label: 'Cascader preview'
},
options: [
{
value: 'zhejiang',
label: 'Zhejiang',
children: [
{
value: 'hangzhou',
label: 'Hangzhou',
children: [
{
value: 'xihu',
label: 'West Lake'
}
]
}
]
},
{
value: 'jiangsu',
label: 'Jiangsu',
children: [
{
value: 'nanjing',
label: 'Nanjing',
children: [
{
value: 'zhonghuamen',
label: 'Zhong Hua Men'
}
]
}
]
}
]
},
{
key: 'TreeSelect',
type: 'TreeSelect',
value: 'leaf1',
ui: { label: 'TreeSelect' },
options: [
{
name: 'parent1',
value: 'parent1',
children: [
{
name: '1',
value: 'parent1-1',
children: [
{
name: 'leaf1',
value: '1-leaf1'
},
{
name: 'leaf2',
value: '1-leaf2'
}
]
},
{
name: '2',
value: 'parent1-2',
children: [
{
name: 'leaf3',
value: '2-leaf3'
},
{
name: 'leaf4',
value: '2-leaf4'
}
]
}
]
}
]
},
{
key: 'treeSelectPreview',
type: 'TreeSelect',
status: 'preview',
value: 'leaf1',
ui: { label: 'TreeSelect preview' },
options: [
{
name: 'parent1',
value: 'parent1',
children: [
{
name: '1',
value: 'parent1-1',
children: [
{
name: 'leaf1',
value: '1-leaf1'
},
{
name: 'leaf2',
value: '1-leaf2'
}
]
},
{
name: '2',
value: 'parent1-2',
children: [
{
name: 'leaf3',
value: '2-leaf3'
},
{
name: 'leaf4',
value: '2-leaf4'
}
]
}
]
}
]
},
{
key: 'transfer',
type: 'Transfer',
value: [3, 4],
options: [
{
name: 'content1',
value: 1
},
{
name: 'content2',
value: 2,
disabled: false
},
{
name: 'content3',
value: 3
},
{
name: 'content4',
value: 4
},
{
name: 'content5',
value: 5
}
],
ui: { label: 'Transfer' }
},
{
key: 'datePicker',
type: 'DatePicker',
value: '2020-10-08T08:44:26.484Z',
ui: { label: 'DatePicker' },
props: {
valueType: 'timestamp'
}
},
{
key: 'dateTimePicker',
type: 'DateTimePicker',
value: '2020-10-08T08:44:26.484Z',
ui: { label: 'DateTimePicker' }
},
{
key: 'monthPicker',
type: 'MonthPicker',
value: '2020-10-08T08:44:26.484Z',
ui: { label: 'MonthPicker' },
props: {
valueType: 'timestamp'
}
},
{
key: 'rangePicker',
type: 'RangePicker',
value: ['2020-10-08T08:44:26.484Z', '2020-10-31T08:44:26.484Z'],
ui: { label: 'RangePicker' },
props: {
valueType: 'timestamp'
}
},
{
key: 'weekPicker',
type: 'WeekPicker',
value: '2020-10-08T08:44:26.484Z',
ui: { label: 'WeekPicker' },
props: {
valueType: 'timestamp'
}
},
{
key: 'timePicker',
type: 'TimePicker',
value: '2020-10-08T08:44:26.484Z',
ui: { label: 'TimePicker' }
},
{
key: 'rate',
type: 'Rate',
value: 3,
ui: { label: 'Rate' }
},
{
key: 'slider',
type: 'Slider',
value: 50,
ui: { label: 'Slider' }
}
];
export default function () {
const formRef = useRef(null);
const onSubmit = () => {
formRef.current.submit().then((data: any) => {
console.log(data);
});
};
const onReset = () => {
formRef.current.reset();
};
const onEmpty = () => {
formRef.current.empty();
};
return (
<>