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控制头部和尾部的尺寸stringdefault
primary弹窗主题颜色booleanfalse
formProps-object-
submit确认按钮boolean| string确认
cancel取消按钮boolean| string取消
model表单模型object{}
rules表单校验规则object{}
submitMethod表单提交处理方法, return true 关闭弹窗function-

事件

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

插槽

插槽名说明类型
extra--
handle底部按钮区域-
footer--

暴露

名称说明类型
$vtjEl组件父元素的ref
formRef组件内部form表单的ref
dialogRef弹窗表单组件的ref

Released under the MIT License.