这段代码实现了一个基于 Element Plus 的通用表单弹窗组件,主要用于创建和编辑应用授权信息。下面是对代码的详细分析:
1. 组件结构
模板部分 (<template>
)
- 使用了
el-dialog
作为弹窗容器,支持居中显示和追加到 body - 内部包含一个可滚动的表单区域 (
el-scrollbar
) - 表单使用
el-form
实现,支持动态生成表单项 - 表单项通过
v-for
循环formItems
数组动态生成 - 支持多种表单控件类型:input、select、radio、switch、checkbox、input-number、tree-select、date-picker、text 等
- 底部有确定和取消按钮
脚本部分 (<script setup>
)
- 使用 Vue 3 的
<script setup>
语法 - 定义了组件 props 和 emits
- 实现了表单数据管理、验证、提交等功能
- 支持异步获取选项数据、表单项监听、计算属性等高级功能
2. 主要功能
动态表单生成
-
通过
modalConfig.formItems
配置动态生成表单 -
每个表单项可以配置:
- 类型 (
type
) - 标签 (
label
) - 属性 (
attrs
) - 验证规则 (
rules
) - 选项 (
options
或异步获取方法fetchOptions
) - 事件处理 (
events
) - 监听器 (
watch
,watchEffect
,computed
)
- 类型 (
数据管理
-
formData
存储表单数据 -
formRules
存储验证规则 -
提供方法操作表单数据:
getFormData()
- 获取表单数据setFormData()
- 设置表单数据setFormItemData()
- 设置单个表单项数据
弹窗控制
setModalVisible()
- 显示弹窗并可设置初始数据handleClose()
- 隐藏弹窗handleCloseModal()
- 关闭弹窗时重置表单
表单提交
- 使用
useThrottleFn
对提交方法进行节流 - 提交前执行验证
- 支持
beforeSubmit
钩子处理数据格式 - 提交成功后显示消息并触发事件
3. 具体实现分析
优点
- 高度可配置 :通过
modalConfig
可以灵活配置表单的各种属性 - 动态性强:支持动态表单项、异步选项加载、各种表单控件
- 功能完善:包含表单验证、数据格式化、节流提交、弹窗控制等
- 代码复用:通用组件可以在多个地方复用
4. 具体配置分析 (modalConfig
)
配置了一个用于应用授权管理的表单,包含以下字段:
-
应用选择 (
appId
)- 类型:select
- 异步获取应用列表
- 编辑模式下禁用
-
经营单位选择 (
ouId
)- 类型:select
- 异步获取经营单位列表
- 编辑模式下禁用
-
API调用次数限制 (
apiLimits
)- 类型:input-number
- 最小值 0
-
授权日期范围 (
authDateFrom
,authDateTo
)- 类型:date-picker
- 提交前会格式化日期
5. 改进建议
- 移除多余的
<template>
嵌套 - 增加更详细的错误处理和用户反馈
- 考虑将
prepareFuncs
的逻辑优化,避免潜在的内存泄漏 - 增加表单控件的默认值处理
- 考虑添加表单加载状态指示
6. 使用示例
markdown
javascript
// 父组件中使用
import modalConfig from './modalConfig';
const modalRef = ref();
// 显示弹窗
function showModal() {
modalRef.value.setModalVisible();
}
// 处理提交
function handleSubmit() {
// 刷新列表等操作
}
</script>
<template>
<UniversalModal ref="modalRef" :modal-config="modalConfig" @submit-click="handleSubmit" />
</template>
这个组件设计得非常灵活,可以适应多种表单场景,特别是需要动态生成表单或有多样表单控件的情况。通过合理的配置,可以快速实现各种表单功能而无需重复编写模板代码。
-
js(https://code.juejin.cn/pen/7532770366641405961)