Skip to content

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控制对话框显示状态booleanfalse
size对话框尺寸(small, default, large)stringdefault
primary是否使用主色调标题背景booleanfalse
formProps传递给内部表单组件的属性object-
submit确认按钮配置boolean| string确认
cancel取消按钮配置boolean| string取消
model表单数据模型object{}
rules表单验证规则object{}
submitMethod表单提交处理方法(返回true关闭对话框)function-

事件

事件名称说明参数
submit确认按钮点击事件-
close取消按钮点击事件-

插槽

插槽名说明类型
extra额外内容区域-
handle底部按钮区域-
footer整个底部区域-

暴露API

名称说明类型
$vtjEl组件父元素实例引用-
formRef内部表单组件实例引用-
dialogRef对话框组件实例引用-

Released under the MIT License.