Skip to content

表单组件

**本文引用的文件** - [baseForm.vue](file://app/devicemate-app/components/dd-form/baseForm.vue) - [dynamic-form.vue](file://dm/lemes-web/src/components/std/form/dynamic-form.vue) - [le-form.vue](file://dm/lemes-web/src/components/std/form/le-form.vue) - [le-select.vue](file://dm/lemes-web/src/components/std/form/le-select.vue) - [le-upload.vue](file://dm/lemes-web/src/components/std/form/le-upload.vue) - [index.vue](file://dm/lemes-web/src/components/Tinymce/index.vue) - [form.js](file://dm/lemes-web/src/directive/form.js) - [validate.js](file://dm/lemes-web/src/utils/validate.js) - [le-form-example.vue](file://dm/lemes-web/src/views/example/form/le-form-example.vue)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 DeviceMate 项目,系统化梳理表单组件体系,覆盖动态表单、标准表单与富文本编辑器三类能力。重点包括:

  • 动态表单:基于配置驱动的表单项渲染与联动校验
  • 标准表单:统一的字段布局、校验规则合并与事件绑定
  • 富文本编辑器:基于 TinyMCE 的可视化编辑与内容管理
  • 表单验证机制、数据绑定与事件处理
  • 组件可复用性设计、属性配置与插槽使用
  • 与 Element UI 的集成方式、样式定制与主题适配
  • 使用示例、最佳实践与常见问题解决方案
  • 性能优化、用户体验提升与可访问性设计建议

项目结构

DeviceMate 的表单相关代码主要分布在两套前端工程中:

  • 小程序端(devicemate-app):包含基础表单组件 baseForm.vue,用于移动端场景的表单渲染与上传等
  • Web 管理端(lemes-web):包含标准表单 le-form.vue、动态表单 dynamic-form.vue、通用选择器 le-select.vue、上传组件 le-upload.vue,以及富文本编辑器 Tinymce/index.vue

图表来源

章节来源

核心组件

  • 基础表单(小程序端):支持输入框、下拉选择、日期/时间选择、图片/文件上传、审核弹窗与按钮区,具备禁用态控制与必填校验联动
  • 标准表单(Web 端):按字段配置渲染,支持多种内置组件与插槽扩展;动态加载远程枚举并合并校验规则
  • 动态表单(Web 端):根据 formItemList 渲染表单项,支持远程枚举加载与输入联动
  • 通用选择器:支持字符串形式的多选绑定
  • 通用上传:封装 Element Upload,支持图片/文件、自动上传与手动上传两种模式
  • 富文本编辑器:TinyMCE 集成,支持工具栏、菜单栏、全屏切换与内容变更事件

章节来源

架构总览

整体架构围绕“配置驱动 + 组件组合”的思路展开:

  • 配置层:通过 props 传递表单模型、字段清单、校验规则、远程动作等
  • 渲染层:根据字段类型与组件映射,渲染对应控件
  • 数据层:双向绑定 innerValue,监听变更并向上派发 input 事件
  • 校验层:合并全局规则与字段级规则,支持远程校验
  • 交互层:上传、选择、日期时间、富文本等增强交互

图表来源

详细组件分析

基础表单(小程序端)

  • 功能要点
    • 输入框、下拉选择、日期/时间选择、图片/文件上传、审核弹窗与底部按钮区
    • 必填联动禁用:当存在未完成上传或字段为空时,提交按钮禁用
    • 审核流程:弹窗选择“通过/不通过”,支持填写意见
    • 只读态:根据类型切换显示模式(只读文本或上传预览)
  • 关键流程
    • 字段渲染:根据 item.type 判断渲染类型
    • 选择器:支持本地列表、字典码远程加载、或自定义函数
    • 上传:自动上传到指定地址,维护 fileList 并回显图片/文件
    • 提交:汇总 model 与 fileList,向上派发 submit 事件

图表来源

章节来源

标准表单(Web 端)

  • 功能要点
    • 字段级组件映射:Input、Select、TimePicker、DatePicker、DateTimePicker、File
    • 插槽扩展:支持具名插槽 slot,灵活替换复杂控件
    • 远程枚举:按 action 加载 Select 下拉数据,支持多选、创建、默认值
    • 校验合并:将全局 rules 与字段 rules 合并,支持远程校验器
    • 日期兼容:对异常日期字符串进行容错处理与格式化
  • 关键流程
    • 初始化:监听 items,异步加载 action 对应的枚举数据
    • 渲染:根据字段配置与 actionConfig 合并后的 item 渲染
    • 校验:validateAction 远程校验,支持 blur/change 触发
    • 数据流:innerValue 双向绑定,向外派发 input 事件

图表来源

章节来源

动态表单(Web 端)

  • 功能要点
    • 通过 formItemList 驱动渲染,支持输入框与选择器
    • 远程枚举:按 type 异步加载 Select 数据
    • 输入联动:watch innerValue,支持条件校验与防抖
  • 关键流程
    • 初始化:监听 formItemList,按需加载枚举
    • 数据绑定:value -> innerValue,innerValue -> input
    • 校验:validateValue 条件校验,避免无效写入

图表来源

章节来源

通用选择器(Web 端)

  • 功能要点
    • 支持字符串形式的多选绑定,通过 multipleStringSplit 控制分隔符
    • 内部维护 selectedValues,对外派发 input 事件
  • 关键流程
    • value 变更:解析为数组或直接赋值
    • selectedValues 变更:按分隔符拼接字符串或原样派发

图表来源

章节来源

通用上传(Web 端)

  • 功能要点
    • 支持图片/文件上传,自动上传与手动上传两种模式
    • 限制数量、文件类型与大小,错误提示与成功回调
    • 预览、删除、下载等交互
  • 关键流程
    • 初始化:根据 value 解析 fileList
    • 上传:before-upload 校验,on-success 汇总文件
    • 数据流:files -> input,支持字符串逗号连接

图表来源

章节来源

富文本编辑器(Web 端)

  • 功能要点
    • 基于 TinyMCE,支持工具栏、菜单栏、全屏切换
    • 内容变更监听,向上派发 input 事件
    • CDN 动态加载,支持国际化语言
  • 关键流程
    • 初始化:动态加载 TinyMCE 资源
    • 编辑:NodeChange/Change/KeyUp/SetContent 事件触发 input
    • 生命周期:mounted/activated/deactivated/destroyed 管理实例

图表来源

章节来源

依赖关系分析

  • 组件耦合
    • 标准表单依赖通用选择器与上传组件,形成“表单 + 专业控件”的组合
    • 动态表单依赖远程枚举接口,强调“配置即数据”
    • 基础表单与 Element UI 无直接耦合,采用小程序 UI 组件
  • 外部依赖
    • TinyMCE CDN 资源与本地静态资源路径
    • Element Upload/Select/DatePicker 等第三方组件
  • 指令与工具
    • 自定义指令:禁用多选标签的取消按钮
    • 校验工具:常用正则与空值判断

图表来源

章节来源

性能考量

  • 渲染优化
    • 标准表单在加载远程枚举时使用 Promise.all 并延迟渲染,减少白屏与重复请求
    • 动态表单仅在需要时加载枚举,避免不必要的网络开销
  • 事件节流/防抖
    • 基础表单对输入事件使用防抖,降低频繁校验与状态更新
  • 上传优化
    • 上传计数与禁用联动,避免并发上传导致的数据不一致
    • 上传前本地校验文件类型与大小,减少无效请求
  • 资源加载
    • 富文本编辑器按需加载 TinyMCE 资源,避免首屏体积过大
  • DOM 生命周期
    • 富文本编辑器在 deactivated/destroyed 主动销毁实例,防止内存泄漏

章节来源

故障排查指南

章节来源

结论

DeviceMate 的表单体系以“配置驱动 + 组件组合”为核心,兼顾移动端与 Web 端的不同需求。通过标准表单与动态表单的协同,实现了高扩展与低耦合;配合通用选择器、上传组件与富文本编辑器,满足多样化的业务场景。建议在实际使用中:

  • 明确字段配置与远程枚举策略,减少不必要的网络请求
  • 合理使用校验规则与远程校验,保证数据质量
  • 注重上传与富文本的生命周期管理,避免资源泄漏
  • 通过插槽与指令扩展复杂交互,保持组件简洁可复用

附录

  • 使用示例
  • 最佳实践
    • 字段级规则优先,全局规则兜底
    • 多选字符串绑定时明确分隔符
    • 上传组件尽量使用自动上传,必要时开启手动上传
    • 富文本编辑器在路由切换时主动销毁实例
  • 可访问性建议
    • 为必填字段添加星号标识与 aria-required
    • 上传组件提供错误提示与键盘可操作性
    • 富文本编辑器提供替代文本与无障碍说明