FormLayout
Block-level layout controller for groups of fields. It lets you easily control the layout mode of every FormItem wrapped by FormLayout.
Tip
This component has been refactored, so please refer to the updated documentation. Features inherited from Ant Design but not implemented by Element Plus have been removed. This package is primarily a Formily wrapper for Element Plus, so it should not try to align its design language with Ant Design. However, the original Formily layout configuration style is still preserved.
- The
insetprop has been removed. - The
borderedprop has been removed. gridColumnGapandgridRowGaphave been removed and should now be handled by grid layout components.spaceGaphas been removed and should now be handled with theSpacecomponent.hideRequiredAsterisk,statusIcon, andrequireAsteriskPositionhave been added from Element Plus Form.
Note
Functionally, FormLayout now replaces the Element Plus Form component in many cases, so it includes a tag prop whose default value is form. According to HTML semantics, forms should be wrapped in a form element. If you only need layout behavior, override it explicitly.
Markup Schema Example
<script setup lang="ts">
import { createForm } from '@silver-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="Input"
x-decorator="FormItem"
:x-decorator-props="{
tooltip: '123',
}"
x-component="Input"
:required="true"
/>
<SchemaStringField
name="select"
title="Select"
x-decorator="FormItem"
x-component="Select"
:required="true"
/>
</SchemaVoidField>
</SchemaField>
</FormProvider>
</template>JSON Schema Example
<script setup lang="ts">
import { createForm } from '@silver-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': 'Input',
'required': true,
'x-decorator': 'FormItem',
'x-decorator-props': {
tooltip: '123',
labelWrap: true,
},
'x-component': 'Input',
},
select: {
'type': 'string',
'title': 'Select',
'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 Example
<script setup lang="ts">
import { createForm } from '@silver-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="Input"
:decorator="[
FormItem,
{
tooltip: '123',
},
]"
:component="[Input]"
:required="true"
/>
<Field
name="select"
title="Select"
:decorator="[FormItem]"
:component="[DatePicker]"
:required="true"
/>
</FormLayout>
</FormProvider>
</template>Template Grid Layout Example
<script setup lang="ts">
import { createForm } from '@silver-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="Input Input Input Input Input Input"
:decorator="[
FormItem,
{
tooltip: '123',
},
]"
:component="[Input]"
:required="true"
/>
<Field
name="select"
title="Select Select Select Select Select Select"
:decorator="[FormItem]"
:component="[Select]"
:required="true"
/>
</FormLayout>
</FormProvider>
</template>API
| Prop | Description | Type | Default |
|---|---|---|---|
tag | Container tag used to provide layout context | string | VueComponent | 'form' |
colon | Whether to show a colon | boolean | true |
labelAlign | Label content alignment | enum | - |
wrapperAlign | Input/content area alignment | enum | - |
labelWrap | Whether label text wraps | boolean | false |
labelWidth | Label width in px | number | - |
wrapperWidth | Content width in px | number | - |
labelCol | Label width in 24-column layout | number | array | - |
wrapperCol | Content width in 24-column layout | number | array | - |
fullness | Whether the content area fills available width | boolean | false |
size | Component size | enum | 'default' |
layout | Layout mode | enum | 'horizontal' |
feedbackLayout | Feedback layout | enum | - |
tooltipLayout | Tooltip layout | enum | 'icon' |
breakpoints | Container breakpoints | array | - |
shallow | Whether context is passed shallowly | boolean | true |
hideRequiredAsterisk | Hide required asterisk | boolean | - |
statusIcon | Show status icon | boolean | - |
requireAsteriskPosition | Position of the required asterisk | enum | - |