Browse Source
* feat: captcha example * fix: fix lint errors * chore: event handling and methods * chore: add accessibility features ARIA labels and roles * refactor: refactor code structure and improve captcha demo page * feat: add captcha internationalization * chore: 适配时间戳国际化展示 * fix: 1. 添加点击位置边界校验,防止点击外部导致x,y误差。2. 演示页面宽度过长添加滚动条。3. 添加hooks * feat: sync test * feat: 添加合并表单功能 * fix: 修复上一步不展示问题 --------- Co-authored-by: vince <vince292007@gmail.com>pull/4511/head
committed by
GitHub
6 changed files with 170 additions and 2 deletions
@ -0,0 +1,116 @@ |
|||||
|
<script lang="ts" setup> |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
import { Page } from '@vben/common-ui'; |
||||
|
|
||||
|
import { Button, Card, message, Step, Steps, Switch } from 'ant-design-vue'; |
||||
|
|
||||
|
import { useVbenForm } from '#/adapter'; |
||||
|
|
||||
|
const currentTab = ref(0); |
||||
|
function onFirstSubmit(values: Record<string, any>) { |
||||
|
message.success({ |
||||
|
content: `form1 values: ${JSON.stringify(values)}`, |
||||
|
}); |
||||
|
currentTab.value = 1; |
||||
|
} |
||||
|
function onSecondReset() { |
||||
|
currentTab.value = 0; |
||||
|
} |
||||
|
function onSecondSubmit(values: Record<string, any>) { |
||||
|
message.success({ |
||||
|
content: `form2 values: ${JSON.stringify(values)}`, |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
const [FirstForm, firstFormApi] = useVbenForm({ |
||||
|
commonConfig: { |
||||
|
componentProps: { |
||||
|
class: 'w-full', |
||||
|
}, |
||||
|
}, |
||||
|
handleSubmit: onFirstSubmit, |
||||
|
layout: 'horizontal', |
||||
|
resetButtonOptions: { |
||||
|
show: false, |
||||
|
}, |
||||
|
schema: [ |
||||
|
{ |
||||
|
component: 'Input', |
||||
|
componentProps: { |
||||
|
placeholder: '请输入', |
||||
|
}, |
||||
|
fieldName: 'formFirst', |
||||
|
label: '表单1字段', |
||||
|
rules: 'required', |
||||
|
}, |
||||
|
], |
||||
|
submitButtonOptions: { |
||||
|
text: '下一步', |
||||
|
}, |
||||
|
wrapperClass: 'grid-cols-1 md:grid-cols-1 lg:grid-cols-1', |
||||
|
}); |
||||
|
const [SecondForm, secondFormApi] = useVbenForm({ |
||||
|
commonConfig: { |
||||
|
componentProps: { |
||||
|
class: 'w-full', |
||||
|
}, |
||||
|
}, |
||||
|
handleReset: onSecondReset, |
||||
|
handleSubmit: onSecondSubmit, |
||||
|
layout: 'horizontal', |
||||
|
resetButtonOptions: { |
||||
|
text: '上一步', |
||||
|
}, |
||||
|
schema: [ |
||||
|
{ |
||||
|
component: 'Input', |
||||
|
componentProps: { |
||||
|
placeholder: '请输入', |
||||
|
}, |
||||
|
fieldName: 'formSecond', |
||||
|
label: '表单2字段', |
||||
|
rules: 'required', |
||||
|
}, |
||||
|
], |
||||
|
wrapperClass: 'grid-cols-1 md:grid-cols-1 lg:grid-cols-1', |
||||
|
}); |
||||
|
const needMerge = ref(true); |
||||
|
async function handleMergeSubmit() { |
||||
|
const values = await firstFormApi |
||||
|
.merge(secondFormApi) |
||||
|
.submitAllForm(needMerge.value); |
||||
|
message.success({ |
||||
|
content: `merged form values: ${JSON.stringify(values)}`, |
||||
|
}); |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<Page |
||||
|
description="表单组件合并示例:在某些场景下,例如分步表单,需要合并多个表单并统一提交。默认情况下,使用 Object.assign 规则合并表单。如果需要特殊处理数据,可以传入 false。" |
||||
|
title="表单组件" |
||||
|
> |
||||
|
<Card title="基础示例"> |
||||
|
<template #extra> |
||||
|
<Switch |
||||
|
v-model:checked="needMerge" |
||||
|
checked-children="开启字段合并" |
||||
|
class="mr-4" |
||||
|
un-checked-children="关闭字段合并" |
||||
|
/> |
||||
|
<Button type="primary" @click="handleMergeSubmit">合并提交</Button> |
||||
|
</template> |
||||
|
<div class="mx-auto max-w-lg"> |
||||
|
<Steps :current="currentTab" class="steps"> |
||||
|
<Step title="表单1" /> |
||||
|
<Step title="表单2" /> |
||||
|
</Steps> |
||||
|
<div class="p-20"> |
||||
|
<FirstForm v-show="currentTab === 0" /> |
||||
|
<SecondForm v-show="currentTab === 1" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</Card> |
||||
|
</Page> |
||||
|
</template> |
||||
Loading…
Reference in new issue