表单组件
Properties:
Name | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
props |
Object | 组件属性,内容如下
Properties
|
Examples
组件引入
// 全局模块引入
import { Form } from '@ccreator/smart-ui';
// 最小化模块引入
import Form from '@ccreator/smart-ui/dist/Form';
表单示例(使用children输出内容)
<Form labelWidth={100} colon=":">
<h3>新增</h3>
<FormItem label="名称">
<div className="input-group">
<input
type="text"
className="input_text"
placeholder=""
value={form.name || ''}
onChange={(event) => {
setForm({ ...form, name: event.target.value });
}}
/>
</div>
</FormItem>
<FormItem label="状态">
<div className="select-group">
<select
className="select"
value={form.status || ''}
onChange={(event) => {
setForm({ ...form, status: event.target.value });
}}
>
<option value="1">启用</option>
<option value="0">禁用</option>
</select>
</div>
</FormItem>
<FormItem label="备注" colspan={2}>
<div className="textarea-group">
<textarea
className="textarea_text"
style={{ height: 80 }}
value={form.comment}
onChange={(event) => {
setForm({ ...form, comment: event.target.value });
}}
/>
</div>
</FormItem>
<FormItem colspan={2}>
<Button
className="btn-primary me-2"
label="保存"
onClick={async () => {
... ...
}}
/>
<Button
className="btn-default"
label="取消"
onClick={() => actions.app.routeReplace('/design')}
/>
</FormItem>
</Form>
表单和校验(使用fields属性配置输出内容,建议使用此模式)
// FormReport.jsx
import React from 'react';
import { Form, FormItem, Button, FormUtil } from '@ccreator/smart-ui';
import fields from './fields';
const FormReport = () => {
const [form, setForm] = React.useState(FormUtil.values(fields));
return (
<Form
labelWidth={120}
fields={fields}
data={form}
onChange={setForm}
>
<FormItem colspan={3}>
<Button type="submit" label="保存" />
</FormItem>
</Form>
);
};
export default FormReport;
动态修改表单的字段
// FormReport.jsx
import React from 'react';
import { Form, FormItem, Button, FormUtil } from '@ccreator/smart-ui';
import fields from './fields';
const FormReport = () => {
const [fieldList, setFieldList] = React.useState(fields);
const [form, setForm] = React.useState(FormUtil.values(fields));
return (
<Form
labelWidth={120}
fields={fieldList}
data={form}
onChange={(values, name, value) => {
if (name === 'status' && value === '0') {
fieldList.shift();
setFieldList(fieldList);
}
setForm(values);
}}
onSubmit={handleSubmit}
>
<FormItem colspan={3}>
<Button type="submit" label="保存" />
</FormItem>
</Form>
);
};
export default FormReport;
字段配置示例
// fields.js
import React from 'react';
import { Validate } from '@ccreator/smart-ui';
const fields = [
{
name: 'name',
label: '名称',
Component: React.lazy(() => import('@ccreator/smart-ui/dist/Input')),
placeholder: '请输入名称',
required: true,
},
{
name: 'options.layout',
label: '布局列',
Component: React.lazy(() => import('@ccreator/smart-ui/dist/Select')),
options: [
{ value: '1', text: '横向展示' },
{ value: '2', text: '纵向展示' },
],
value: '1',
},
{
name: 'status',
label: '状态',
Component: React.lazy(() => import('@ccreator/smart-ui/dist/Select')),
options: [
{ value: '1', text: '启用' },
{ value: '0', text: '禁用' },
],
value: '1',
},
{
name: 'sequence',
label: '显示顺序',
Component: React.lazy(() => import('@ccreator/smart-ui/dist/Input')),
value: '1',
// 数字类型的校验
required: true,
validate: Validate.number().min(10).max(100),
},
{
name: 'sql',
label: 'SQL语句',
// 使用自定义的组件
Component: React.lazy(() => import('./SQLEditor')),
required: true,
height: 180,
colspan: 12,
labelClassName: 'self-start text-right pt-2',
onExecuteSQL: () => {
actions.design.executeSQL();
},
},
];
export default fields;