FormLayout
区块级布局批量控制组件,借助该组件,我们可以轻松的控制被 FormLayout 圈住的所有 FormItem 组件的布局模式
提示
该组件经过重构,请注意更新后的文档。移除了全部 Antd 内置的而 Element-Plus 没有开发的功能。本组件库主要是 Element-Plus 的 Formily 封装, 不应考虑将设计风格与 Antd 对齐。但是在布局配置项上保留了原本Formily的配置方式。
- 移除了
inset配置项 - 移除了
bordered配置项 - 移除了
gridColumnGapgridRowGap配置项,应该通过网格布局组件完成。 - 移除了
spaceGap配置项,现在应该通过Space组件完成配置。 - 添加了
hideRequiredAsteriskstatusIconrequireAsteriskPosition这三个 Element-Plus 组件提供的配置项
注意
由于功能上 FormLayout 组件实际替代了Element-Plus的Form组件,所以现在添加了tag属性且默认值是form,按照HTML规范所有表单都应该被包裹在form标签内。 如果仅提供布局请自行修改。
Markup Schema 案例
<script setup lang="ts">
import { createForm } from '@formily/core'
import { FormItem, FormLayout, Input, Select } from '@silver-formily/element-plus'
import { createSchemaField, FormProvider } from '@silver-formily/vue'
const { SchemaField, SchemaVoidField, SchemaStringField } = createSchemaField({
components: { FormLayout, FormItem, Input, Select },
})
const form = createForm()
</script>
<template>
<FormProvider :form="form">
<SchemaField>
<SchemaVoidField
x-component="FormLayout"
:x-component-props="{
labelCol: 6,
wrapperCol: 10,
}"
>
<SchemaStringField
name="input"
title="输入框"
x-decorator="FormItem"
:x-decorator-props="{
tooltip: '123',
}"
x-component="Input"
:required="true"
/>
<SchemaStringField
name="select"
title="选择框"
x-decorator="FormItem"
x-component="Select"
:required="true"
/>
</SchemaVoidField>
</SchemaField>
</FormProvider>
</template>查看源码
JSON Schema 案例
<script setup lang="ts">
import { createForm } from '@formily/core'
import {
FormItem,
FormLayout,
Input,
Select,
} from '@silver-formily/element-plus'
import { createSchemaField, FormProvider } from '@silver-formily/vue'
const schema = {
type: 'object',
properties: {
layout: {
'type': 'void',
'x-component': 'FormLayout',
'x-component-props': {
labelCol: 6,
wrapperCol: 10,
layout: 'vertical',
},
'properties': {
input: {
'type': 'string',
'title': '输入框',
'required': true,
'x-decorator': 'FormItem',
'x-decorator-props': {
tooltip: '123',
labelWrap: true,
},
'x-component': 'Input',
},
select: {
'type': 'string',
'title': '选择框',
'required': true,
'x-decorator': 'FormItem',
'x-component': 'Select',
},
},
},
},
}
const form = createForm()
const { SchemaField } = createSchemaField({
components: {
FormLayout,
FormItem,
Input,
Select,
},
})
</script>
<template>
<FormProvider :form="form">
<SchemaField :schema="schema" />
</FormProvider>
</template>查看源码
Template 案例
<script setup lang="ts">
import { createForm } from '@formily/core'
import { DatePicker, FormItem, FormLayout, Input } from '@silver-formily/element-plus'
import { Field, FormProvider } from '@silver-formily/vue'
const form = createForm()
</script>
<template>
<FormProvider :form="form">
<FormLayout
:breakpoints="[680]"
layout="horizontal"
label-align="left"
:label-col="6"
:wrapper-col="10"
fullness
>
<Field
name="input"
title="输入框"
:decorator="[
FormItem,
{
tooltip: '123',
},
]"
:component="[Input]"
:required="true"
/>
<Field
name="select"
title="选择框"
:decorator="[FormItem]"
:component="[DatePicker]"
:required="true"
/>
</FormLayout>
</FormProvider>
</template>查看源码
Template 栅格布局案例
<script setup lang="ts">
import { createForm } from '@formily/core'
import { FormItem, FormLayout, Input, Select } from '@silver-formily/element-plus'
import { Field, FormProvider } from '@silver-formily/vue'
const form = createForm()
</script>
<template>
<FormProvider :form="form">
<FormLayout
:breakpoints="[600, 700, 780]"
layout="horizontal"
label-align="left"
:label-col="[4, 6, 8]"
:wrapper-col="10"
>
<Field
name="input"
title="输入框输入框输入框输入框输入框输入框"
:decorator="[
FormItem,
{
tooltip: '123',
},
]"
:component="[Input]"
:required="true"
/>
<Field
name="select"
title="选择框选择框选择框选择框选择框选择框"
:decorator="[FormItem]"
:component="[Select]"
:required="true"
/>
</FormLayout>
</FormProvider>
</template>查看源码
API
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| tag | 提供layout的容器标签 | string | VueComponent | 'form' |
| colon | 是否有冒号 | boolean | true |
| labelAlign | 标签内容对齐 | enum | - |
| wrapperAlign | 组件容器内容对齐 | enum | - |
| labelWrap | 标签内容换行 | boolean | false |
| labelWidth | 标签宽度(px) | number | - |
| wrapperWidth | 组件容器宽度(px) | number | - |
| labelCol | 标签宽度(24 column) | number | array | - |
| wrapperCol | 组件容器宽度(24 column) | number | array | - |
| fullness | 组件容器宽度 100% | boolean | false |
| size | 组件尺寸 | enum | 'default' |
| layout | 布局模式 | enum | 'horizontal' |
| feedbackLayout | 反馈布局 | enum | - |
| tooltipLayout | 提示布局 | enum | 'icon' |
| breakpoints | 容器尺寸断点 | array | - |
| shallow | 上下文浅层传递 | boolean | true |
| hideRequiredAsterisk | 隐藏必填星号 | boolean | - |
| statusIcon | 显示状态图标 | boolean | - |
| requireAsteriskPosition | 必填星号位置 | enum | - |