Appearance
表单管理
**本文档引用的文件** - [FormInfoDTO.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/entity/dto/FormInfoDTO.java) - [QryFormInfoResp.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/entity/outer/QryFormInfoResp.java) - [FormController.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/controller/FormController.java) - [McsFormService.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/McsFormService.java) - [FlowFormService.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/FlowFormService.java) - [FlowFormServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/impl/FlowFormServiceImpl.java) - [baseForm.vue](file://app/devicemate-app/components/dd-form/baseForm.vue) - [u-form.vue](file://app/devicemate-app/uview-ui/components/u-form/u-form.vue) - [apply.vue(维修)](file://app/devicemate-app/modules/repair/apply.vue) - [apply.vue(保养)](file://app/devicemate-app/modules/maintain/apply.vue) - [assign.vue(指派)](file://app/devicemate-app/modules/common/assign.vue)目录
简介
本技术文档围绕“表单管理”主题,系统梳理后端工作流表单的数据模型与接口能力,以及前端表单组件与业务页面的协作机制。重点覆盖以下方面:
- 工作流表单的设计与查询接口:FormInfoDTO、QryFormInfoResp 的职责与使用场景
- 表单与业务数据的关联:字段映射、数据绑定、表单验证
- 表单管理 API 的完整规范:查询表单信息、获取表单数据、提交表单
- 不同类型表单的应用场景:设备维护表单、维修申请表单、审批/指派表单
- 最佳实践:表单设计原则、数据验证策略、用户体验优化
项目结构
本项目采用前后端分离架构,表单管理涉及后端工作流模块与前端应用模块:
- 后端(工作流服务):提供表单信息查询接口,封装 Flowable 表单属性,输出 DTO/响应对象
- 前端(应用):提供通用表单组件 baseForm.vue,结合 u-form 组件完成字段渲染、校验与提交;业务页面(维修、保养、指派等)基于该组件实现具体表单
图表来源
- FormController.java:32-37
- McsFormService.java:14-31
- FlowFormService.java:10-17
- FlowFormServiceImpl.java:28-37
- FormInfoDTO.java:14-25
- QryFormInfoResp.java:13-24
- baseForm.vue:43-87
- u-form.vue:21-128
章节来源
核心组件
- 数据模型
- FormInfoDTO:后端工作流返回的表单信息载体,包含表单 key 与读写权限标识
- QryFormInfoResp:对外查询响应对象,用于 API 返回给前端
- 接口层
- FormController:提供 GET /form/getFormInfo,按流程实例与任务 ID 查询表单信息
- 服务层
- McsFormService:抽象表单信息服务,提供按实例/任务查询表单信息与表单信息映射
- FlowFormService:对接 Flowable 引擎,获取任务表单属性
- FlowFormServiceImpl:实现 FlowFormService,封装异常处理与错误码
- 前端组件
- baseForm.vue:通用表单渲染与交互组件,支持输入、选择、日期时间、上传、审核等
- u-form.vue:表单容器,提供校验、重置、错误提示等能力
章节来源
- FormInfoDTO.java:14-25
- QryFormInfoResp.java:13-24
- FormController.java:32-37
- McsFormService.java:14-31
- FlowFormService.java:10-17
- FlowFormServiceImpl.java:28-37
- baseForm.vue:43-87
- u-form.vue:21-128
架构总览
后端通过工作流引擎获取任务表单属性,转换为统一的 DTO/响应对象,前端以 baseForm.vue 为核心渲染表单,业务页面通过 HTTP 请求与后端交互。
图表来源
- FormController.java:32-37
- McsFormService.java:14-31
- FlowFormService.java:10-17
- FlowFormServiceImpl.java:28-37
- baseForm.vue:43-87
详细组件分析
数据模型与实体类
- FormInfoDTO
- 字段:formKey(表单键)、isRead(是否可读)、isWrite(是否可写)
- 用途:承载工作流引擎返回的表单元信息,供前端判断渲染与交互行为
- QryFormInfoResp
- 字段:formKey、isRead、isWrite
- 用途:作为 API 查询响应对象,统一对外输出
图表来源
章节来源
表单查询接口
- 接口定义
- 方法:GET
- 路径:/form/getFormInfo
- 参数:processInstanceId(流程实例 ID)、taskId(任务 ID)
- 返回:ResultData<List<QryFormInfoResp>>
- 控制器职责
- FormController 调用 McsFormService 获取表单信息,并通过工具类复制为响应对象列表
- 服务链路
- McsFormService -> FlowFormService -> FlowFormServiceImpl -> Flowable 引擎
- FlowFormServiceImpl 在获取任务表单属性失败时抛出带错误码的服务异常
图表来源
- FormController.java:32-37
- McsFormService.java:14-31
- FlowFormService.java:10-17
- FlowFormServiceImpl.java:28-37
章节来源
前端表单组件与渲染
- baseForm.vue
- 功能:渲染表单项(输入、选择、日期、时间、上传)、处理用户交互、生成提交数据、控制按钮可用性
- 关键点:
- 通过 u-form 绑定 model,逐项渲染并支持必填校验
- 支持下拉选择、日历、时间选择、文件上传、审核弹窗等
- 上传文件前缀与鉴权头由组件内部拼装
- 通过 emit 事件向上抛出提交数据与状态变化
- u-form.vue
- 功能:表单容器,提供校验、重置、错误提示等能力
- 关键点:validate 方法遍历子项执行校验,支持 toast 提示
图表来源
章节来源
业务场景与表单应用
设备维护表单(保养)
- 页面路径:modules/maintain/apply.vue
- 场景要点:
- 加载保养标准明细,按物料类型(耗材/工具)映射到表单数据
- 用户填写使用数量、产线、仓库等字段,提交至保养工单接口
- 输入校验:数量不能为空、不能小于 1、不能为小数
- 数据绑定与提交:
- 将页面数据映射为后端期望的参数结构,POST 提交
图表来源
章节来源
维修申请表单
- 页面路径:modules/repair/apply.vue
- 场景要点:
- 根据设备编号加载主设备详情,映射备件/易耗品清单
- 用户填写使用数量、仓库等字段,提交至维修工单接口
- 输入校验:数量不能为空、不能小于 1、不能为小数
- 数据绑定与提交:
- 将页面数据映射为后端期望的参数结构,POST 提交
图表来源
章节来源
审批/指派表单
- 组件:baseForm.vue
- 场景要点:
- 支持审核弹窗,选择“通过/不通过”,并可填写意见
- 上传附件与图片,支持下载查看
- 通过 emit 事件向上抛出审核参数,由父级处理后续流程
- 交互逻辑:
- 审核按钮触发弹窗,确认后 emit 审核类型与意见
图表来源
章节来源
指派任务
- 页面路径:modules/common/assign.vue
- 场景要点:
- 展示部门用户列表,支持搜索
- 选择执行人后,调用指派接口更新任务执行人
- 数据绑定与提交:
- 将选中用户的 userNo/name 作为参数提交
图表来源
章节来源
依赖关系分析
- 后端依赖链
- FormController 依赖 McsFormService
- McsFormService 依赖 FlowFormService
- FlowFormService 由 FlowFormServiceImpl 实现,调用 Flowable 引擎
- 前端依赖链
- 业务页面依赖 baseForm.vue
- baseForm.vue 依赖 u-form.vue 与各类 UI 组件(u-upload、u-calendar、u-picker 等)
图表来源
- FormController.java:29-30
- McsFormService.java:22-30
- FlowFormService.java:10-17
- FlowFormServiceImpl.java:25-26
- apply.vue(维修):115-133
- apply.vue(保养):119-138
- assign.vue(指派):48-62
- baseForm.vue:43-87
- u-form.vue:21-128
章节来源
- FormController.java:29-30
- McsFormService.java:22-30
- FlowFormServiceImpl.java:25-26
- apply.vue(维修):115-133
- apply.vue(保养):119-138
- assign.vue(指派):48-62
- baseForm.vue:43-87
- u-form.vue:21-128
性能考虑
- 表单渲染
- 大量表单项时建议按需渲染与懒加载,避免一次性渲染过多节点
- 文件上传
- 上传并发控制与进度反馈,避免阻塞 UI;上传未完成时禁用提交按钮
- 校验策略
- 前端即时校验与防抖,后端必做二次校验,减少无效请求
- 接口调用
- 合理缓存查询结果(如字典、枚举),减少重复请求
故障排查指南
- 表单查询失败
- 现象:调用 /form/getFormInfo 抛出异常或返回空
- 排查:确认 taskId 是否存在、流程实例是否正确、Flowable 引擎连接状态
- 参考:FlowFormServiceImpl 中对不存在任务的异常处理
- 表单提交失败
- 现象:提交后无响应或报错
- 排查:检查 baseForm.vue 的上传计数与必填项校验、业务接口参数映射
- 审核弹窗无响应
- 现象:点击审核按钮无弹窗或无法提交
- 排查:确认 emit('approval') 事件是否被父组件接收,弹窗状态是否正确
章节来源
结论
本表单管理体系以工作流引擎为核心,通过统一的 DTO/响应对象与前端通用组件实现跨业务场景的一致体验。后端提供稳定的表单查询接口,前端以 baseForm.vue 为基础,结合业务页面完成复杂表单的渲染与提交。建议在实际落地中遵循本文最佳实践,持续优化用户体验与系统稳定性。
附录
- API 规范摘要
- GET /form/getFormInfo
- 参数:processInstanceId(流程实例 ID)、taskId(任务 ID)
- 返回:ResultData<List<QryFormInfoResp>>
- GET /form/getFormInfo
- 业务接口参考
- POST /dm-device/maintenanceWorkOrders/applyFor(保养申请)
- POST /dm-device/repairWorkOrders/applyFor(维修申请)
- POST /...(指派接口,携带 excutorNo/excutorName)
章节来源