Skip to content

FormDialog 弹窗表单

基于 MForm + ElDialog 封装,支持新增/编辑/查看三种模式,自动处理详情获取和数据提交。

基础用法

vue
<template>
  <div>
    <div style="margin-bottom: 20px">
      {{ formDialog }}
    </div>
    <el-button type="primary" @click="show(0)">新增</el-button>
    <el-button type="primary" @click="show(1)">编辑</el-button>
    <el-button type="primary" @click="show(1, true)">查看</el-button>
    <MFormDialog
      v-model="formDialog.visible"
      v-bind="formDialog"
      :fields="fields"
      :http-add="demoUserAdd"
      :http-edit="demoUserEdit"
      :http-get="demoUserDetails"
      @reload="reload"
    >
    </MFormDialog>

    <MMarkdownView :value="readme"></MMarkdownView>
  </div>
</template>

<script setup lang="ts">
import { reactive } from 'vue'
import { fields } from './config'
import { demoUserAdd, demoUserEdit, demoUserDetails } from '@/api/examples/user'
import readme from '@/components/formDialog/README.md?raw'

const formDialog = reactive({
  visible: false,
  disabled: false,
  id: 0,
  value: {
    name: 'default'
  }
})

const show = (id: number, disabled = false) => {
  formDialog.id = id
  formDialog.disabled = disabled
  formDialog.visible = true
}

const reload = () => {
  console.log('reload')
}
</script>

<style lang="scss" scoped></style>

API

FormDialog 属性

属性名说明类型默认值
fields表单字段配置(同 Form fieldsFormField[]
modelValuev-model 弹窗显示隐藏booleanfalse
id0 为新增,其他为编辑number0
value表单初始值object{}
disabled禁用表单,隐藏默认按钮booleanfalse
disabledTitledisabled 为 true 时弹窗标题string'查看'
addTitle新增时弹窗标题string'新增'
editTitle编辑时弹窗标题string'编辑'
httpGet获取详情接口(id) => Promise<{data}>
httpAdd新增接口(data) => Promise
httpEdit编辑接口(id, data) => Promise
handlerhttpEdit 执行前处理数据(data) => data
getHandlerhttpGet 执行后处理返回值(data) => data

$attrs

FormDialog 的 $attrs 会透传给 ElDialog 组件,支持所有 ElDialog 属性。

FormDialog 事件

事件名说明类型
reloadhttpAdd/httpEdit 执行成功后() => void

基于 MIT 许可发布