# FormGrid
FormGrid 组件
# Markup Schema 案例
<template>
<FormProvider :form="form">
<SchemaField>
<SchemaVoidField
x-component="FormGrid"
:x-component-props="{
maxColumns: 3,
minColumns: 2,
}"
>
<SchemaStringField
name="aaa"
title="aaa"
x-decorator="FormItem"
:x-decorator-props="{ gridSpan: 2 }"
x-component="Input"
/>
<SchemaStringField
name="bbb"
title="bbb"
x-decorator="FormItem"
x-component="Input"
/>
<SchemaStringField
name="ccc"
title="ccc"
x-decorator="FormItem"
x-component="Input"
/>
<SchemaStringField
name="ddd"
title="ddd"
x-decorator="FormItem"
x-component="Input"
/>
<SchemaStringField
name="eee"
title="eee"
x-decorator="FormItem"
x-component="Input"
/>
<SchemaStringField
name="fff"
title="fff"
x-decorator="FormItem"
x-component="Input"
/>
<SchemaStringField
name="ggg"
title="ggg"
x-decorator="FormItem"
x-component="Input"
/>
</SchemaVoidField>
</SchemaField>
<Submit @submit="onSubmit">提交</Submit>
</FormProvider>
</template>
<script>
import { createForm } from '@formily/core'
import { createSchemaField, FormProvider } from '@formily/vue'
import { FormItem, Input, Submit, FormGrid } from '@formily/antdv'
const form = createForm()
const fields = createSchemaField({
components: {
FormItem,
Input,
FormGrid,
},
})
export default {
components: { FormProvider, ...fields, Submit },
data() {
return {
form,
}
},
methods: {
onSubmit(value) {
console.log(value)
},
},
}
</script>
# JSON Schema 案例
<template>
<FormProvider :form="form">
<SchemaField :schema="schema" />
<Submit @submit="onSubmit">提交</Submit>
</FormProvider>
</template>
<script>
import { createForm } from '@formily/core'
import { createSchemaField, FormProvider } from '@formily/vue'
import { FormItem, Input, Submit, FormGrid } from '@formily/antdv'
const schema = {
type: 'object',
properties: {
grid: {
type: 'void',
'x-component': 'FormGrid',
'x-component-props': {
minColumns: [4, 6, 10],
},
properties: {
aaa: {
type: 'string',
title: 'AAA',
'x-decorator': 'FormItem',
'x-component': 'Input',
},
bbb: {
type: 'string',
title: 'BBB',
'x-decorator': 'FormItem',
'x-component': 'Input',
},
ccc: {
type: 'string',
title: 'CCC',
'x-decorator': 'FormItem',
'x-component': 'Input',
},
ddd: {
type: 'string',
title: 'DDD',
'x-decorator': 'FormItem',
'x-component': 'Input',
},
eee: {
type: 'string',
title: 'EEE',
'x-decorator': 'FormItem',
'x-component': 'Input',
},
fff: {
type: 'string',
title: 'FFF',
'x-decorator': 'FormItem',
'x-component': 'Input',
},
ggg: {
type: 'string',
title: 'GGG',
'x-decorator': 'FormItem',
'x-component': 'Input',
},
},
},
},
}
const form = createForm()
const { SchemaField } = createSchemaField({
components: {
FormItem,
Input,
FormGrid,
},
})
export default {
components: { FormProvider, SchemaField, Submit },
data() {
return {
form,
schema,
}
},
methods: {
onSubmit(value) {
console.log(value)
},
},
}
</script>
l
# 原生案例
<template>
<div>
<p>maxColumns 3 + minColumns 2</p>
<FormGrid :maxColumns="3" :minColumns="2" :columnGap="4">
<FormGridColumn :gridSpan="4">
<Cell>1</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>2</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>3</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>4</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>5</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>6</Cell>
</FormGridColumn>
</FormGrid>
<p>maxColumns 3</p>
<FormGrid :maxColumns="3" :columnGap="4">
<FormGridColumn :gridSpan="2">
<Cell>1</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>2</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>3</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>4</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>5</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>6</Cell>
</FormGridColumn>
</FormGrid>
<p>minColumns 2</p>
<FormGrid :minColumns="2" :columnGap="4">
<FormGridColumn :gridSpan="2">
<Cell>1</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>2</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>3</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>4</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>5</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>6</Cell>
</FormGridColumn>
</FormGrid>
<p>Null</p>
<FormGrid :columnGap="4">
<FormGridColumn :gridSpan="2">
<Cell>1</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>2</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>3</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>4</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>5</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>6</Cell>
</FormGridColumn>
</FormGrid>
<p>minWidth 150 +maxColumns 3</p>
<FormGrid :minWidth="150" :maxColumns="3" :columnGap="4">
<FormGridColumn :gridSpan="2">
<Cell>1</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>2</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>3</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>4</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>5</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>6</Cell>
</FormGridColumn>
</FormGrid>
<p>maxWidth 120+minColumns 2</p>
<FormGrid :maxWidth="120" :minColumns="2" :columnGap="4">
<FormGridColumn :gridSpan="2">
<Cell>1</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>2</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>3</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>4</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>5</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>6</Cell>
</FormGridColumn>
</FormGrid>
<p>maxWidth 120 + gridSpan -1</p>
<FormGrid :maxWidth="120" :columnGap="4">
<FormGridColumn :gridSpan="2">
<Cell>1</Cell>
</FormGridColumn>
<FormGridColumn>
<Cell>2</Cell>
</FormGridColumn>
<FormGridColumn :gridSpan="-1">
<Cell>3</Cell>
</FormGridColumn>
</FormGrid>
</div>
</template>
<script>
import { FormGrid } from '@formily/antdv'
const Cell = {
functional: true,
render(h, context) {
return h(
'div',
{
style: {
backgroundColor: '#AAA',
color: '#FFF',
height: '30px',
display: 'flex',
alignItems: 'center',
padding: '0 10px',
},
},
context.children
)
},
}
export default {
components: { FormGrid, FormGridColumn: FormGrid.GridColumn, Cell },
}
</script>
# API
# FormGrid
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
minWidth | number / number[] | 元素最小宽度 | 100 |
maxWidth | number / number[] | 元素最大宽度 | - |
minColumns | number / number[] | 最小列数 | 0 |
maxColumns | number / number[] | 最大列数 | - |
breakpoints | number[] | 容器尺寸断点 | [720,1280,1920] |
columnGap | number | 列间距 | 8 |
rowGap | number | 行间距 | 4 |
colWrap | boolean | 自动换行 | true |
注意:
- minWidth 生效优先级高于 minColumn
- maxWidth 优先级高于 maxColumn
- minWidth/maxWidth/minColumns/maxColumns 的数组格式代表与断点数组映射
# FormGrid.GridColumn
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
gridSpan | number | 元素所跨列数,如果为-1,那么会自动反向跨列填补单元格 | 1 |
# FormGrid.useGridSpan
# 描述
根据容器宽度计算出正确的 span,防止元素溢出
# 签名
interface uesGridSpan {
(gridSpan: number): number
}
← FormDrawer FormItem →