| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <script lang="ts" setup>
- import { Page } from '@vben/common-ui';
- import { Card, message } from 'ant-design-vue';
- import { useVbenForm } from '#/adapter';
- const [QueryForm] = useVbenForm({
- // 默认展开
- collapsed: false,
- // 所有表单项共用,可单独在表单内覆盖
- commonConfig: {
- // 所有表单项
- componentProps: {
- class: 'w-full',
- },
- },
- // 提交函数
- handleSubmit: onSubmit,
- // 垂直布局,label和input在不同行,值为vertical
- // 水平布局,label和input在同一行
- layout: 'horizontal',
- schema: [
- {
- // 组件需要在 #/adapter.ts内注册,并加上类型
- component: 'Input',
- // 对应组件的参数
- componentProps: {
- placeholder: '请输入用户名',
- },
- // 字段名
- fieldName: 'username',
- // 界面显示的label
- label: '字符串',
- },
- {
- component: 'InputPassword',
- componentProps: {
- placeholder: '请输入密码',
- },
- fieldName: 'password',
- label: '密码',
- },
- {
- component: 'InputNumber',
- componentProps: {
- placeholder: '请输入',
- },
- fieldName: 'number',
- label: '数字(带后缀)',
- suffix: () => '¥',
- },
- {
- component: 'Select',
- componentProps: {
- allowClear: true,
- filterOption: true,
- options: [
- {
- label: '选项1',
- value: '1',
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- placeholder: '请选择',
- showSearch: true,
- },
- fieldName: 'options',
- label: '下拉选',
- },
- {
- component: 'DatePicker',
- fieldName: 'datePicker',
- label: '日期选择框',
- },
- ],
- // 是否可展开
- showCollapseButton: true,
- submitButtonOptions: {
- text: '查询',
- },
- // 大屏一行显示3个,中屏一行显示2个,小屏一行显示1个
- wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
- });
- const [QueryForm1] = useVbenForm({
- // 默认展开
- collapsed: true,
- collapsedRows: 2,
- // 所有表单项共用,可单独在表单内覆盖
- commonConfig: {
- // 所有表单项
- componentProps: {
- class: 'w-full',
- },
- },
- // 提交函数
- handleSubmit: onSubmit,
- // 垂直布局,label和input在不同行,值为vertical
- // 水平布局,label和input在同一行
- layout: 'horizontal',
- schema: (() => {
- const schema = [];
- for (let index = 0; index < 14; index++) {
- schema.push({
- // 组件需要在 #/adapter.ts内注册,并加上类型
- component: 'Input',
- // 字段名
- fieldName: `field${index}`,
- // 界面显示的label
- label: `字段${index}`,
- });
- }
- return schema;
- })(),
- // 是否可展开
- showCollapseButton: true,
- submitButtonOptions: {
- text: '查询',
- },
- // 大屏一行显示3个,中屏一行显示2个,小屏一行显示1个
- wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
- });
- function onSubmit(values: Record<string, any>) {
- message.success({
- content: `form values: ${JSON.stringify(values)}`,
- });
- }
- </script>
- <template>
- <Page
- description="查询表单,常用语和表格组合使用,可进行收缩展开。"
- title="表单组件"
- >
- <Card class="mb-5" title="查询表单,默认展开">
- <QueryForm />
- </Card>
- <Card title="查询表单,默认折叠,折叠时保留2行">
- <QueryForm1 />
- </Card>
- </Page>
- </template>
|