2024-09-19 21:56:49 +08:00
|
|
|
|
<script lang="ts" setup>
|
|
|
|
|
import { Page } from '@vben/common-ui';
|
|
|
|
|
|
|
|
|
|
import { Button, Card, message, Space } from 'ant-design-vue';
|
|
|
|
|
|
|
|
|
|
import { useVbenForm } from '#/adapter';
|
|
|
|
|
|
|
|
|
|
const [BaseForm, formApi] = useVbenForm({
|
|
|
|
|
// 所有表单项共用,可单独在表单内覆盖
|
|
|
|
|
commonConfig: {
|
|
|
|
|
// 所有表单项
|
|
|
|
|
componentProps: {
|
|
|
|
|
class: 'w-full',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
// 使用 tailwindcss grid布局
|
|
|
|
|
// 提交函数
|
|
|
|
|
handleSubmit: onSubmit,
|
|
|
|
|
// 垂直布局,label和input在不同行,值为vertical
|
|
|
|
|
layout: 'horizontal',
|
|
|
|
|
// 水平布局,label和input在同一行
|
|
|
|
|
schema: [
|
|
|
|
|
{
|
|
|
|
|
// 组件需要在 #/adapter.ts内注册,并加上类型
|
|
|
|
|
component: 'Input',
|
|
|
|
|
// 对应组件的参数
|
|
|
|
|
componentProps: {
|
|
|
|
|
placeholder: '请输入用户名',
|
|
|
|
|
},
|
|
|
|
|
// 字段名
|
|
|
|
|
fieldName: 'field1',
|
|
|
|
|
// 界面显示的label
|
|
|
|
|
label: 'field1',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
component: 'Input',
|
|
|
|
|
componentProps: {
|
|
|
|
|
placeholder: '请输入',
|
|
|
|
|
},
|
|
|
|
|
fieldName: 'field2',
|
|
|
|
|
label: 'field2',
|
|
|
|
|
},
|
|
|
|
|
{
|
2024-09-21 11:26:14 +08:00
|
|
|
|
component: 'Select',
|
2024-09-19 21:56:49 +08:00
|
|
|
|
componentProps: {
|
2024-09-21 11:26:14 +08:00
|
|
|
|
allowClear: true,
|
|
|
|
|
filterOption: true,
|
|
|
|
|
options: [
|
|
|
|
|
{
|
|
|
|
|
label: '选项1',
|
|
|
|
|
value: '1',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: '选项2',
|
|
|
|
|
value: '2',
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
placeholder: '请选择',
|
|
|
|
|
showSearch: true,
|
2024-09-19 21:56:49 +08:00
|
|
|
|
},
|
2024-09-21 11:26:14 +08:00
|
|
|
|
fieldName: 'fieldOptions',
|
|
|
|
|
label: '下拉选',
|
2024-09-19 21:56:49 +08:00
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
// 大屏一行显示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)}`,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function handleClick(
|
|
|
|
|
action:
|
|
|
|
|
| 'batchAddSchema'
|
|
|
|
|
| 'batchDeleteSchema'
|
|
|
|
|
| 'disabled'
|
|
|
|
|
| 'hiddenAction'
|
|
|
|
|
| 'hiddenResetButton'
|
|
|
|
|
| 'hiddenSubmitButton'
|
|
|
|
|
| 'labelWidth'
|
|
|
|
|
| 'resetDisabled'
|
|
|
|
|
| 'resetLabelWidth'
|
|
|
|
|
| 'showAction'
|
|
|
|
|
| 'showResetButton'
|
|
|
|
|
| 'showSubmitButton'
|
|
|
|
|
| 'updateActionAlign'
|
|
|
|
|
| 'updateResetButton'
|
2024-09-21 11:26:14 +08:00
|
|
|
|
| 'updateSchema'
|
2024-09-19 21:56:49 +08:00
|
|
|
|
| 'updateSubmitButton',
|
|
|
|
|
) {
|
|
|
|
|
switch (action) {
|
2024-09-21 11:26:14 +08:00
|
|
|
|
case 'updateSchema': {
|
|
|
|
|
formApi.updateSchema([
|
|
|
|
|
{
|
|
|
|
|
componentProps: {
|
|
|
|
|
options: [
|
|
|
|
|
{
|
|
|
|
|
label: '选项1',
|
|
|
|
|
value: '1',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: '选项2',
|
|
|
|
|
value: '2',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: '选项3',
|
|
|
|
|
value: '3',
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
fieldName: 'fieldOptions',
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-19 21:56:49 +08:00
|
|
|
|
case 'labelWidth': {
|
|
|
|
|
formApi.setState({
|
|
|
|
|
commonConfig: {
|
|
|
|
|
labelWidth: 150,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'resetLabelWidth': {
|
|
|
|
|
formApi.setState({
|
|
|
|
|
commonConfig: {
|
|
|
|
|
labelWidth: 100,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'disabled': {
|
|
|
|
|
formApi.setState({ commonConfig: { disabled: true } });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'resetDisabled': {
|
|
|
|
|
formApi.setState({ commonConfig: { disabled: false } });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'hiddenAction': {
|
|
|
|
|
formApi.setState({ showDefaultActions: false });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'showAction': {
|
|
|
|
|
formApi.setState({ showDefaultActions: true });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'hiddenResetButton': {
|
|
|
|
|
formApi.setState({ resetButtonOptions: { show: false } });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'showResetButton': {
|
|
|
|
|
formApi.setState({ resetButtonOptions: { show: true } });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'hiddenSubmitButton': {
|
|
|
|
|
formApi.setState({ submitButtonOptions: { show: false } });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'showSubmitButton': {
|
|
|
|
|
formApi.setState({ submitButtonOptions: { show: true } });
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'updateResetButton': {
|
|
|
|
|
formApi.setState({
|
|
|
|
|
resetButtonOptions: { disabled: true },
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'updateSubmitButton': {
|
|
|
|
|
formApi.setState({
|
|
|
|
|
submitButtonOptions: { loading: true },
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'updateActionAlign': {
|
|
|
|
|
formApi.setState({
|
|
|
|
|
// 可以自行调整class
|
|
|
|
|
actionWrapperClass: 'text-center',
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'batchAddSchema': {
|
|
|
|
|
formApi.setState((prev) => {
|
|
|
|
|
const currentSchema = prev?.schema ?? [];
|
|
|
|
|
const newSchema = [];
|
|
|
|
|
for (let i = 0; i < 3; i++) {
|
|
|
|
|
newSchema.push({
|
|
|
|
|
component: 'Input',
|
|
|
|
|
componentProps: {
|
|
|
|
|
placeholder: '请输入',
|
|
|
|
|
},
|
|
|
|
|
fieldName: `field${i}${Date.now()}`,
|
|
|
|
|
label: `field+`,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return {
|
|
|
|
|
schema: [...currentSchema, ...newSchema],
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'batchDeleteSchema': {
|
|
|
|
|
formApi.setState((prev) => {
|
|
|
|
|
const currentSchema = prev?.schema ?? [];
|
|
|
|
|
return {
|
|
|
|
|
schema: currentSchema.slice(0, -3),
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<Page description="表单组件api操作示例。" title="表单组件">
|
|
|
|
|
<Space class="mb-5 flex-wrap">
|
2024-09-21 11:26:14 +08:00
|
|
|
|
<Button @click="handleClick('updateSchema')">updateSchema</Button>
|
2024-09-19 21:56:49 +08:00
|
|
|
|
<Button @click="handleClick('labelWidth')">更改labelWidth</Button>
|
|
|
|
|
<Button @click="handleClick('resetLabelWidth')">还原labelWidth</Button>
|
|
|
|
|
<Button @click="handleClick('disabled')">禁用表单</Button>
|
|
|
|
|
<Button @click="handleClick('resetDisabled')">解除禁用</Button>
|
|
|
|
|
<Button @click="handleClick('hiddenAction')">隐藏操作按钮</Button>
|
|
|
|
|
<Button @click="handleClick('showAction')">显示操作按钮</Button>
|
|
|
|
|
<Button @click="handleClick('hiddenResetButton')">隐藏重置按钮</Button>
|
|
|
|
|
<Button @click="handleClick('showResetButton')">显示重置按钮</Button>
|
|
|
|
|
<Button @click="handleClick('hiddenSubmitButton')">隐藏提交按钮</Button>
|
|
|
|
|
<Button @click="handleClick('showSubmitButton')">显示提交按钮</Button>
|
|
|
|
|
<Button @click="handleClick('updateResetButton')">修改重置按钮</Button>
|
|
|
|
|
<Button @click="handleClick('updateSubmitButton')">修改提交按钮</Button>
|
|
|
|
|
<Button @click="handleClick('updateActionAlign')">
|
|
|
|
|
调整操作按钮位置
|
|
|
|
|
</Button>
|
|
|
|
|
<Button @click="handleClick('batchAddSchema')"> 批量添加表单项 </Button>
|
|
|
|
|
<Button @click="handleClick('batchDeleteSchema')">
|
|
|
|
|
批量删除表单项
|
|
|
|
|
</Button>
|
|
|
|
|
</Space>
|
|
|
|
|
<Card title="操作示例">
|
|
|
|
|
<BaseForm />
|
|
|
|
|
</Card>
|
|
|
|
|
</Page>
|
|
|
|
|
</template>
|