# FormStep
分步表单组件
注意:该组件只能用在 Schema 场景
# Markup Schema 案例
<template>
<FormProvider :form="form">
<SchemaField>
<SchemaVoidField x-component="FormStep" :x-component-props="{ formStep }">
<SchemaVoidField
x-component="FormStep.StepPane"
:x-component-props="{ title: '第一步' }"
>
<SchemaStringField
name="aaa"
x-decorator="FormItem"
required
x-component="Input"
/>
</SchemaVoidField>
<SchemaVoidField
x-component="FormStep.StepPane"
:x-component-props="{ title: '第二步' }"
>
<SchemaStringField
name="bbb"
x-decorator="FormItem"
required
x-component="Input"
/>
</SchemaVoidField>
<SchemaVoidField
type="void"
x-component="FormStep.StepPane"
:x-component-props="{ title: '第三步' }"
>
<SchemaStringField
name="ccc"
x-decorator="FormItem"
required
x-component="Input"
/>
</SchemaVoidField>
</SchemaVoidField>
</SchemaField>
<FormConsumer>
<template #default>
<FormButtonGroup>
<Button
:disabled="!formStep.allowBack"
@click="
() => {
formStep.back()
}
"
>
上一步
</Button>
<Button
:disabled="!formStep.allowNext"
@click="
() => {
formStep.next()
}
"
>
下一步
</Button>
<Submit :disabled="formStep.allowNext" @submit="log">提交</Submit>
</FormButtonGroup>
</template>
</FormConsumer>
</FormProvider>
</template>
<script>
import { createForm } from '@formily/core'
import { FormProvider, FormConsumer, createSchemaField } from '@formily/vue'
import {
FormItem,
FormStep,
FormButtonGroup,
Submit,
Input,
} from '@formily/antdv'
import { Button } from 'ant-design-vue'
import Template from '../editable/template.vue'
const SchemaField = createSchemaField({
components: {
FormItem,
FormStep,
Input,
},
})
const formStep = FormStep.createFormStep()
export default {
components: {
FormConsumer,
FormProvider,
FormButtonGroup,
Button,
Submit,
Template,
...SchemaField,
},
data() {
const form = createForm()
return {
form,
formStep,
}
},
methods: {
log() {
this.formStep.submit(console.log)
},
},
}
</script>
<style lang="scss" scoped></style>
# JSON Schema 案例
<template>
<FormProvider :form="form">
<SchemaField :schema="schema" :scope="{ formStep }" />
<FormConsumer>
<template #default>
<FormButtonGroup>
<Button
:disabled="!formStep.allowBack"
@click="
() => {
formStep.back()
}
"
>
上一步
</Button>
<Button
:disabled="!formStep.allowNext"
@click="
() => {
formStep.next()
}
"
>
下一步
</Button>
<Submit :disabled="formStep.allowNext" @submit="log">提交</Submit>
</FormButtonGroup>
</template>
</FormConsumer>
</FormProvider>
</template>
<script>
import { createForm } from '@formily/core'
import { FormProvider, createSchemaField, FormConsumer } from '@formily/vue'
import {
FormItem,
FormStep,
FormButtonGroup,
Submit,
Input,
} from '@formily/antdv'
import { Button } from 'ant-design-vue'
const { SchemaField } = createSchemaField({
components: {
FormItem,
FormStep,
Input,
},
})
const schema = {
type: 'object',
properties: {
collapse: {
type: 'void',
'x-component': 'FormStep',
'x-component-props': {
formStep: '{{formStep}}',
},
properties: {
step1: {
type: 'void',
'x-component': 'FormStep.StepPane',
'x-component-props': {
title: '第一步',
},
properties: {
aaa: {
type: 'string',
title: 'AAA',
required: true,
'x-decorator': 'FormItem',
'x-component': 'Input',
},
},
},
step2: {
type: 'void',
'x-component': 'FormStep.StepPane',
'x-component-props': {
title: '第二步',
},
properties: {
bbb: {
type: 'string',
title: 'AAA',
required: true,
'x-decorator': 'FormItem',
'x-component': 'Input',
},
},
},
step3: {
type: 'void',
'x-component': 'FormStep.StepPane',
'x-component-props': {
title: '第三步',
},
properties: {
ccc: {
type: 'string',
title: 'AAA',
required: true,
'x-decorator': 'FormItem',
'x-component': 'Input',
},
},
},
},
},
},
}
export default {
components: {
FormProvider,
FormConsumer,
FormButtonGroup,
Button,
Submit,
SchemaField,
},
data() {
const form = createForm()
const formStep = FormStep.createFormStep()
return {
schema,
form,
formStep,
}
},
methods: {
log() {
this.formStep.submit(console.log)
},
},
}
</script>
<style lang="scss" scoped></style>
# API
# FormStep
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
formStep | IFormStep | 传入通过 createFormStep 创建出来的模型 |
其余参考 https://antdv.com/components/steps-cn/ (opens new window)
# FormStep.StepPane
参考 https://antdv.com/components/steps-cn/ (opens new window)
# FormStep.createFormStep
interface createFormStep {
(current?: number): IFormStep
}
interface IFormStep {
//当前索引
current: number
//是否允许向后
allowNext: boolean
//是否允许向前
allowBack: boolean
//设置当前索引
setCurrent(key: number): void
//提交表单
submit: Formily.Core.Models.Form['submit']
//向后
next(): void
//向前
back(): void
}
← FormLayout FormTab →