XDialogForm 对话框表单
示例用法
基础用法
<template>
<div>
<ElButton @click="visible1 = true">Open dialog1 </ElButton>
<ElButton @click="visible2 = true">Open dialog2 </ElButton>
<XDialogForm
v-model="visible1"
primary
title="弹窗表单"
size="default"
:form-props="{ labelWidth: '100px' }"
:model="model"
:rules="rules"
@submit="onSubmit"
:submit-method="submitMethod">
<XField label="标题" name="title"></XField>
<XField label="我的内容" name="content" editor="select"></XField>
</XDialogForm>
<XDialogForm
v-model="visible2"
title="弹窗表单 size: large"
size="large"
:form-props="{ labelWidth: '120px' }"
:model="model"
:rules="rules"
@submit="onSubmit"
:submit-method="submitMethod">
<XField label="标题" name="title"></XField>
<XField
label="我的内容"
name="content"
editor="select"
:options="options"></XField>
</XDialogForm>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ElButton } from 'element-plus';
import { XDialogForm, XField } from '@vtj/ui';
const visible1 = ref(false);
const visible2 = ref(false);
const rules = {
title: [{ required: true, message: '我是必填项' }]
};
const model = {
title: 'abc',
content: '111'
};
const options: any = ref([
{ label: '选项一', value: 1 },
{ label: '选项二', value: 2, disabled: true },
{ label: '选项三', value: 3 },
{ label: '选项四', value: 4 }
]);
const onSubmit = (m: any) => {
console.log('submit', m);
};
const submitMethod = async (m: any) => {
console.log('submitMethod', m);
return true;
};
</script>
<style scoped></style>插槽用法
<template>
<div>
<ElButton @click="visible1 = true">extra-handle 插槽 </ElButton>
<ElButton @click="visible2 = true">footer 插槽 </ElButton>
<XDialogForm
v-model="visible1"
title="弹窗表单"
size="default"
:form-props="{ labelWidth: '100px' }"
:model="model"
:rules="rules"
@close="onClose"
@submit="onSubmit"
:submit-method="submitMethod">
<XField label="标题" name="title"></XField>
<XField
label="我的内容"
name="content"
editor="select"
:options="options"></XField>
<template #extra>
<ElButton type="success">插槽-- extra</ElButton>
</template>
<template #handle>
<ElButton type="success">插槽--handle</ElButton>
</template>
</XDialogForm>
<XDialogForm
v-model="visible2"
title="弹窗表单"
size="default"
:form-props="{ labelWidth: '100px' }"
:model="model"
:rules="rules"
@close="onClose"
@submit="onSubmit"
:submit-method="submitMethod">
<h1>footer 插槽只能单独使用</h1>
<template #extra>
<ElButton type="success">插槽-- extra</ElButton>
</template>
<template #handle>
<ElButton type="success">插槽--handle</ElButton>
</template>
<template #footer>
<ElButton type="success">插槽--footer</ElButton>
</template>
</XDialogForm>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ElButton } from 'element-plus';
import { XDialogForm, XField } from '@vtj/ui';
const visible1 = ref(false);
const visible2 = ref(false);
const rules = {
title: [{ required: true, message: '我是必填项' }]
};
const model = {
title: 'abc',
content: '111'
};
const options: any = ref([
{ label: '选项一', value: 1 },
{ label: '选项二', value: 2, disabled: true },
{ label: '选项三', value: 3 },
{ label: '选项四', value: 4 }
]);
const onClose = () => {
console.log('close');
};
const onSubmit = (m: any) => {
console.log('submit', m);
};
const submitMethod = async (m: any) => {
console.log('submitMethod', m);
return true;
};
</script>
<style scoped></style>API
属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| modelValue | 控制对话框显示状态 | boolean | false |
| size | 对话框尺寸(small, default, large) | string | default |
| primary | 是否使用主色调标题背景 | boolean | false |
| formProps | 传递给内部表单组件的属性 | object | - |
| submit | 确认按钮配置 | boolean| string | 确认 |
| cancel | 取消按钮配置 | boolean| string | 取消 |
| model | 表单数据模型 | object | {} |
| rules | 表单验证规则 | object | {} |
| submitMethod | 表单提交处理方法(返回true关闭对话框) | function | - |
事件
| 事件名称 | 说明 | 参数 |
|---|---|---|
| submit | 确认按钮点击事件 | - |
| close | 取消按钮点击事件 | - |
插槽
| 插槽名 | 说明 | 类型 |
|---|---|---|
| extra | 额外内容区域 | - |
| handle | 底部按钮区域 | - |
| footer | 整个底部区域 | - |
暴露API
| 名称 | 说明 | 类型 |
|---|---|---|
| $vtjEl | 组件父元素实例引用 | - |
| formRef | 内部表单组件实例引用 | - |
| dialogRef | 对话框组件实例引用 | - |