Skip to content

ProModalForm

动态生成简单模态框表单及详情弹窗

  • 几行配置即可生成弹窗表单
  • 自动管理表单数据
  • 支持表单联动
  • 自动管理表单loading状态
  • 模式:查看/编辑
  • 关闭时自动清空弹窗内容

使用方法

基础用法
显示代码

表单state

默认情况下,ProModalForm为非受控模式,formData由内部自行管理,提交表单时通过ok事件的回调函数获取formData。

但对于某些需要获取实时formData的特殊情况,如特殊联动等,可如下2种方式获取表单实时的formData

1、通过ref获取实时formData。受控与非受控模式(即不传入form-data,ProModalForm自行维护表单,通过defaultValue等设置默认值)均可使用。

vue
<script lang="ts" setup>
const modalFormRef = ref(null)

// 表单数据:modalFormRef.value.formData
</script>

<template>
  <ProModalForm
    ref="modalFormRef"
    v-model="showModal"
    ...
  />
</template>

2、受控模式。 使用v-model:form-data定义并绑定表单数据,直接使用formData即可。

vue
<script lang="ts" setup>
const formData = reactive({
  name: '',
  age: '',
  address: '',
})
</script>

<template>
  <ProModalForm
    v-model="showModal"
    v-model:form-data="formData"
    ...
  />
</template>

组件属性

Props

属性名类型默认值是否必填描述
titlestring模态框的标题
refRef可通过ref获取弹窗的表单
widthnumber520宽度
defaultValueany表单默认值,变化时会更新表单数据,但表单数据变化不会影响原始传入值
v-model:formDataRecord<string, any>表单数据,如果需要使用表单数据,可以绑定formData,使用该值时defaultValue无效
viewModebooleanfalse是否为只读模式
idKeystring"id"提交更新或者创建服务时,作为主键的字段名
fieldsField[]表单字段列表。见ProFormFields
columnnumber1每行展示的列数
propPrefix(stringnumber)[][]
formItemPropsRecord<string, any>{}表单元素选项

Events

事件名回调参数描述
update:visible(visbile: Boolean) => void控制模态框是否显示的事件
ok(formValues: Record<string, any>) => void点击模态框确认按钮后触发的事件
formChange(formValues: Record<string, any>) => void表单state变动时触发

联动

参见 ProFormFields

Slot

ProModalForm组件提供了几个默认插槽<slot />,用于显示在模态框内容区域中。

下面是示例代码:

html
<template>
  <ProModalForm v-model="showModal" :fields="fields" v-model:formData="data">
    <template #header>
      <!-- 这里用在表单内容顶部 -->
    </template>

    <template #extra>
      <!-- 这里用在表单内容底部 -->
    </template>

    <template #default="{ data, onChange, formRef }">
      <!-- 如果不使用内置的ProFormFields或者希望使用多个,可以在这里自定义,data为表单数据,数据变更后需手工触发onChange -->
        <ProFormFields
          :model-value="data"
          :column="props.column || 2"
          :view-mode="props.viewMode"
          :fields="props.fields"
          :form-item-props="props.formItemProps"
          @update:model-value="onChange"
        />
    </template>
  </ProModalForm>
</template>