Skip to content

流程设计 PRD

文档信息

项目内容
产品名称PMForge - 流程设计
文档版本v2.0
创建日期2026-09-19
最后更新2026-09-24
文档状态评审中
优先级P0

一、功能概述

1.1 功能定位

流程设计模块是 PMForge 工作流系统的"流程工厂"——企业里所有审批流程都从这里诞生。如果把工作流比作一条公路网,那流程设计就是规划并建造这些公路的地方。

本模块提供两种互补的设计工具:

  • BPMN 设计器:面向专业人员的"标准工具箱",支持 BPMN 2.0 国际标准,适合构建包含并行网关、会签、子流程等复杂逻辑的企业级流程
  • 仿钉钉设计器:面向业务人员的"积木拼装台",通过拖拽节点、配置条件即可搭建审批流程,10 分钟内完成一个基础审批流

两种设计器产出的流程最终都会被 Flowable 引擎执行,用户无需关心底层技术差异。

1.2 目标用户

用户类型使用场景核心诉求
流程管理员日常设计和维护公司审批流程设计工具好用、流程发布快、版本可控
业务管理员偶尔需要配置简单的部门审批流程不需要技术背景也能搭建流程
系统管理员导入外部标准流程文件、管理全局流程资产兼容行业标准、流程资产可迁移
普通用户(发起端)在前台选择流程并填写表单发起申请找到流程快、表单好填、提交顺畅

1.3 业务价值

  • 降低流程配置门槛:仿钉钉设计器让非技术人员也能独立完成 80% 的审批流程配置,减少对开发团队的依赖
  • 标准化流程资产:基于 BPMN 2.0 国际标准,流程定义可在不同系统间迁移,避免厂商锁定
  • 版本安全可控:已发布版本不可篡改,修改自动生成新版本,出问题可一键回滚到历史版本
  • 动态表单减少开发:拖拽式表单设计器覆盖常见业务字段类型,新增审批表单无需写代码
  • 双设计器互补:简单流程用仿钉钉快速搭建,复杂流程用 BPMN 精细设计,各取所需

1.4 功能范围

功能分类功能项说明
BPMN 设计器流程图绘制拖拽节点、连线、配置属性
BPMN 设计器导入/导出支持标准 BPMN XML 文件导入导出
BPMN 设计器流程校验发布前自动检查流程完整性
仿钉钉设计器可视化设计拖拽节点搭建审批链路
仿钉钉设计器审批人配置6 种审批人类型 + 3 种审批方式
仿钉钉设计器条件分支基于表单字段/发起人属性走不同路径
流程模型管理模型 CRUD创建、编辑、复制、删除流程模型
流程模型管理版本管理发布、版本对比、版本回滚
流程模型管理分类管理树形分类组织流程模型
表单管理表单设计器拖拽组件构建动态表单
表单管理节点字段权限按流程节点配置字段的可见/可编辑/隐藏
流程发起(用户端)分类浏览按分类查找可发起的流程
流程发起(用户端)表单填写填写动态表单并提交申请
流程发起(用户端)流程预览提交前预览审批走向和审批人

二、用户场景

2.1 用户角色

角色描述核心诉求
流程设计员负责设计和维护流程的管理员设计工具高效、校验及时、发布顺畅
业务管理员偶尔配置简单审批流程的部门管理者零代码搭建、所见即所得
普通用户在前台发起流程申请的员工快速找到流程、表单好填、提交有反馈

2.2 使用场景

场景1:HR 用仿钉钉设计器创建请假流程

  • 用户:HR 部门流程管理员小王
  • 场景:公司上线新系统,小王需要把现有的请假审批搬到线上 → 进入「流程设计 > 流程模型」→ 点击「创建模型」→ 填写名称"请假申请流程"、选择分类"人事管理"→ 选择「仿钉钉设计器」→ 界面默认显示"发起人"节点 → 点击"+"添加"审批人"节点,设置为"直属领导",审批方式选"或签" → 添加"条件分支",条件设为"请假天数 > 3 天" → 在条件分支下添加"部门经理审批"节点 → 添加"抄送人"节点,设置为"HR 部门" → 绑定已创建好的请假表单 → 点击「发布」→ 流程立即生效,员工可在前台发起请假申请
  • 期望:10 分钟内完成流程搭建并发布,不需要写任何代码

场景2:IT 人员导入外部 BPMN 标准流程

  • 用户:IT 运维人员小李
  • 场景:咨询公司交付了一套标准 BPMN 2.0 采购流程文件 → 小李进入「流程模型」→ 创建模型选择「BPMN 设计器」→ 点击工具栏「导入」按钮 → 选择本地 .bpmn 文件 → 系统自动解析并在画布渲染流程图 → 检查各节点配置 → 点击「流程校验」→ 系统提示"校验通过" → 保存并发布
  • 期望:标准文件导入后无需大量修改即可使用

场景3:流程管理员设计复杂采购审批流程

  • 用户:流程管理员小张
  • 场景:采购部需要一个含并行会签和条件分支的复杂流程 → 小张选择「BPMN 设计器」→ 绘制流程图:开始事件 → 部门初审 → 并行网关(分两支)→ 分支1:财务经理审批 → 分支2:会计审核 → 两支汇聚 → 排他网关(金额判断)→ 金额 > 10 万走总经理审批 → 金额 ≤ 10 万直接结束 → 配置财务会签节点为"并行多实例,所有实例完成" → 绑定采购申请表单,配置各节点字段权限 → 保存并校验通过 → 发布
  • 期望:BPMN 设计器支持完整的建模能力,复杂流程一次配置成功

场景4:普通员工发起报销流程

  • 用户:普通员工小陈
  • 场景:小陈出差回来需要报销 → 登录前台进入「我的流程 > 发起流程」→ 左侧看到流程分类列表 → 点击"财务管理" → 右侧显示"差旅报销"流程 → 点击「发起申请」→ 系统渲染报销表单 → 填写出差地点、时间、交通费、住宿费 → 上传发票照片 → 系统自动计算报销总额 → 点击「提交」→ 弹出流程预览:"直属领导审批 → 财务审核 → 出纳付款" → 确认提交 → 流程进入审批,小陈可在"我发起的"中查看进度
  • 期望:表单清晰好填,提交前能预览审批路径,提交后能跟踪进度

场景5:流程管理员升级流程版本

  • 用户:流程管理员小王
  • 场景:请假流程已发布运行,现在需要新增一个"HR 备案"节点 → 小王在模型列表找到"请假申请流程" → 点击「编辑」进入设计器 → 在末尾添加"抄送人"节点设为"HR 部门" → 点击「发布」→ 系统自动生成版本 2 → 正在进行中的流程仍按版本 1 走完 → 新发起的流程走版本 2 → 小王在「版本历史」中可查看版本 1 和版本 2 的差异对比
  • 期望:升级不影响进行中的流程,新旧版本并行运行

场景6:表单管理员创建动态表单

  • 用户:表单管理员小刘
  • 场景:新入职的小刘需要为"物品领用申请"创建表单 → 进入「表单管理」→ 点击「创建表单」→ 进入表单设计器 → 从左侧组件库拖拽"单选框"(物品类别)、"数字输入框"(数量)、"多行输入框"(用途说明)、"文件上传"(附件)→ 配置每个字段的必填规则和校验规则 → 点击「预览」查看效果 → 保存 → 在流程模型中绑定该表单 → 配置各审批节点的字段权限(发起人可编辑全部,审批人只读数量,行政可编辑发放数量)
  • 期望:拖拽式操作,5 分钟完成表单创建

场景7:流程校验发现设计错误

  • 用户:流程管理员小张
  • 场景:小张设计完一个流程后点击「校验」→ 系统提示 3 个错误:①"用户任务'财务审核'未配置审批人" ②"条件分支缺少条件表达式" ③"存在死循环路径:节点 A → 节点 B → 节点 A" → 小张点击第一个错误项,画布自动定位到"财务审核"节点 → 配置审批人 → 逐个修复所有错误 → 再次校验通过 → 发布
  • 期望:校验结果清晰,点击错误可直接定位到问题节点

2.3 用户故事

编号用户故事验收标准优先级
US-01作为流程管理员,我希望通过仿钉钉设计器快速搭建审批流程① 支持拖拽添加审批人/抄送人/条件分支节点 ② 6 种审批人类型可选 ③ 从创建到发布 ≤ 10 分钟P0
US-02作为流程管理员,我希望通过 BPMN 设计器设计复杂流程① 支持用户任务/网关/子流程等全部 BPMN 节点 ② 支持导入导出标准 XML ③ 属性面板可配置会签/条件表达式P0
US-03作为流程管理员,我希望流程发布前自动校验完整性① 校验开始/结束事件是否完整 ② 校验审批人是否配置 ③ 校验条件分支是否有死循环 ④ 错误可点击定位P0
US-04作为流程管理员,我希望管理流程版本并安全回滚① 每次发布版本号自动递增 ② 已发布版本不可修改 ③ 支持版本对比 ④ 回滚生成新版本P1
US-05作为表单管理员,我希望拖拽创建动态表单① 支持 15+ 种组件 ② 拖拽排序 ③ 配置校验规则 ④ 预览效果P0
US-06作为普通用户,我希望在前台快速找到流程并提交申请① 按分类浏览 ② 关键字搜索 ③ 表单渲染 ≤ 0.5 秒 ④ 提交前预览审批路径P0
US-07作为流程管理员,我希望按节点配置表单字段权限① 每个节点独立配置 ② 支持可见/可编辑/隐藏/必填 ③ 隐藏字段数据保留但不展示P1

三、功能需求

3.1 BPMN 设计器

3.1.1 功能描述

基于 bpmn-js 库实现的专业 BPMN 2.0 标准流程设计器。左侧为节点工具栏,中间为无限画布,右侧为属性面板。支持完整的流程建模能力,包括节点创建、连线配置、属性设置、流程导入导出和校验。适合需要并行网关、多实例会签、子流程等高级特性的复杂流程设计。

3.1.2 操作流程

创建新流程:

1. 进入流程模型列表页,点击「创建模型」
2. 填写模型基本信息(名称、标识、分类、描述)
3. 选择设计器类型为「BPMN 设计器」
4. 系统打开 BPMN 设计器界面
5. 从左侧工具栏拖拽节点到中间画布区域:
   a. 开始事件(流程起点,有且仅有一个)
   b. 用户任务(审批节点,需配置审批人和任务名称)
   c. 排他网关(条件分支,走且只走一条路径)
   d. 并行网关(并行分支,所有分支同时执行)
   e. 结束事件(流程终点,至少一个)
6. 通过节点连接点创建顺序流连线
7. 点击节点,在右侧属性面板配置详细信息
8. 点击「保存」保存流程设计
9. 点击「发布」发布流程

导入已有流程:

1. 在设计器工具栏点击「导入」按钮
2. 选择本地 BPMN XML 文件(.bpmn 或 .xml 格式)
3. 系统解析文件并在画布渲染流程图
4. 检查并调整节点配置
5. 保存并发布

流程校验:

1. 完成流程设计后,点击「校验」按钮
2. 系统检查流程完整性:
   a. 是否有且仅有一个开始事件
   b. 是否有至少一个结束事件
   c. 所有节点是否都有连线连接(无孤立节点)
   d. 用户任务是否配置了审批人
   e. 条件分支是否配置了条件表达式
   f. 是否存在死循环路径
3. 校验通过:显示绿色"校验通过"提示
4. 校验失败:红色列出所有错误项,点击错误项画布自动定位到问题节点

3.1.3 界面线框图

BPMN流程设计器

3.1.4 业务规则

规则编号规则描述为什么这样设计
R-01支持的节点类型:事件类(开始/结束/中间事件)、任务类(用户任务/服务任务/脚本任务)、网关类(排他/并行/包含/事件网关)、子流程、泳道覆盖 BPMN 2.0 标准核心元素,满足企业级复杂流程建模需求
R-02用户任务必须配置任务名称和审批人设置没有审批人的任务节点无法执行,发布前校验会拦截
R-03排他网关的每个出口分支必须配置条件表达式排他网关需要根据条件选择路径,无条件会导致流程无法流转
R-04流程标识(Key)全局唯一,格式:小写字母开头,只含字母/数字/下划线,3~50 字符标识是流程在系统中的"身份证号",唯一性保证数据不冲突
R-05流程标识创建后不可修改已发布的流程实例通过标识关联定义,修改标识会导致关联断裂
R-06多实例任务需配置完成条件:所有实例完成 / 任意实例完成 / 达到指定数量会签场景下需要明确"几个人通过才算通过"的规则
R-07单个流程最大节点数 ≤ 100 个超过 100 节点的流程维护成本极高,建议拆分为子流程

3.1.5 接口列表

接口名称请求方式接口路径说明
保存 BPMN 流程设计POST/admin-api/bpmn/designer/save保存流程设计 XML
获取流程设计数据GET/admin-api/bpmn/designer/获取 BPMN XML 和模型信息
导入 BPMN 文件POST/admin-api/bpmn/designer/import上传并解析 BPMN XML 文件
导出 BPMN 文件GET/admin-api/bpmn/designer/{modelId}/export下载 BPMN XML 文件
流程校验POST/admin-api/bpmn/designer/{modelId}/validate校验流程完整性,返回错误列表
获取节点属性GET/admin-api/bpmn/designer/{modelId}/node/获取单个节点的配置属性
保存节点属性PUT/admin-api/bpmn/designer/{modelId}/node/保存单个节点的配置属性

3.2 仿钉钉设计器

3.2.1 功能描述

提供类似钉钉/飞书的可视化拖拽式流程设计器。界面从上到下纵向排列节点,每个节点之间通过"+"按钮添加新节点。节点类型精简为 4 种:发起人、审批人、抄送人、条件分支。通过"选择 > 配置"两步操作即可完成流程搭建,让没有技术背景的业务管理员也能独立配置审批流程。

3.2.2 操作流程

创建审批流程:

1. 在流程模型列表点击「创建模型」,选择「仿钉钉设计器」
2. 系统打开可视化设计界面,默认显示"发起人"节点
3. 点击「发起人」节点,配置发起人范围(指定部门/角色/全员)
4. 点击节点下方的「+」按钮,弹出节点选择菜单
5. 选择「审批人」节点,配置审批人类型和审批方式
6. 继续添加后续节点,构建完整流程链路
7. 点击「添加条件分支」创建条件分支(自动生成两个并列分支)
8. 为每个条件分支配置触发条件和分支内的审批节点
9. 配置完成后点击「预览」查看流程图
10. 点击「发布」按钮发布流程

配置审批人:

1. 点击「审批人」节点,右侧弹出配置面板
2. 选择审批人类型(6 种):
   a. 指定人员:直接选择具体人员(最多 20 人)
   b. 指定角色:选择角色,该角色的所有成员审批
   c. 部门负责人:自动获取发起人的部门负责人
   d. 多级部门负责人:逐级审批到第 N 级部门负责人(1~10 级)
   e. 表单字段:从表单中的"人员选择"字段读取审批人
   f. 发起人自选:发起流程时由发起人手动选择审批人
3. 选择审批方式(3 种):
   a. 或签:任意一人审批即可通过
   b. 会签:所有人都审批通过才通过
   c. 依次审批:按顺序逐一审批
4. 配置审批人为空时的处理方式:
   a. 自动转交管理员
   b. 自动通过
   c. 自动拒绝

配置条件分支:

1. 点击「添加条件分支」按钮
2. 系统自动创建两个条件分支(默认分支 + 条件分支)
3. 点击条件分支,配置触发条件:
   a. 选择条件类型:表单字段 / 发起人属性(部门、职级等)
   b. 配置条件表达式:字段 操作符 值(如"请假天数 > 3")
   c. 支持多条件组合(且/或)
4. 为每个条件分支添加后续审批节点
5. 必须有一个默认分支(不满足任何条件时走此分支)
6. 条件优先级从上到下,先匹配的先执行

3.2.3 界面线框图

钉钉式可视化设计器

3.2.4 业务规则

规则编号规则描述为什么这样设计
R-01发起人节点有且仅有一个,必须作为流程起点流程必须有明确的发起入口
R-02条件分支最多支持 10 个并列条件过多条件分支会导致维护困难,建议拆分流程
R-03条件分支必须有一个默认分支(兜底)防止所有条件都不满足时流程"无路可走"
R-04指定人员最多可选择 20 人超过 20 人的审批场景应使用角色或部门方式
R-05多级部门负责人支持 1~10 级覆盖绝大多数企业的组织架构层级
R-06表单字段类型的审批人要求表单中有"人员选择"组件审批人来源必须可解析到具体用户
R-07审批人为空时的处理方式必须在设计时配置运行时审批人为空是常见异常,需提前定义兜底策略
R-08超时审批支持多级处理(如 24 小时提醒 → 48 小时自动转交)分级处理比单一动作更灵活,给审批人缓冲时间
R-09条件可基于表单字段值或发起人属性(部门、职级等)覆盖"金额大小走不同审批"和"不同部门走不同领导"两大常见场景

3.2.5 仿钉钉设计器 JSON 结构

仿钉钉设计器的流程数据以 JSON 格式存储在 bpm_model.model_json 字段中,结构如下:

json
{
  "nodes": [
    {
      "id": "node_start",
      "type": "start",
      "name": "发起人",
      "config": {
        "range": "all"
      }
    },
    {
      "id": "node_approver_1",
      "type": "approver",
      "name": "直属领导审批",
      "config": {
        "approverType": "leader",
        "approvalMethod": "or",
        "timeout": 24,
        "timeoutAction": "remind",
        "emptyAction": "autoTransfer"
      }
    },
    {
      "id": "node_condition_1",
      "type": "condition",
      "name": "请假天数判断",
      "config": {
        "conditions": [
          {
            "id": "branch_1",
            "name": "超过3天",
            "expression": "leaveDays > 3",
            "isDefault": false,
            "nodes": [
              {
                "id": "node_approver_2",
                "type": "approver",
                "name": "部门经理审批",
                "config": {
                  "approverType": "multiLevelLeader",
                  "leaderLevel": 2,
                  "approvalMethod": "or"
                }
              }
            ]
          },
          {
            "id": "branch_default",
            "name": "3天以内",
            "expression": "",
            "isDefault": true,
            "nodes": []
          }
        ]
      }
    },
    {
      "id": "node_cc_1",
      "type": "cc",
      "name": "HR备案",
      "config": {
        "ccType": "role",
        "ccRoles": ["HR"]
      }
    },
    {
      "id": "node_end",
      "type": "end",
      "name": "结束"
    }
  ]
}

节点类型说明:

type 值节点名称config 核心字段
start发起人range: all / dept / role / user
approver审批人approverType, approvalMethod, timeout, timeoutAction, emptyAction
condition条件分支conditions 数组(含 expression, isDefault, nodes)
cc抄送人ccType, ccRoles / ccUsers / ccDepts
end结束无配置

审批人类型(approverType)对照:

类型补充字段
user指定人员ccUsers: [userId1, userId2]
role指定角色ccRoles: [roleKey1, roleKey2]
leader部门负责人leaderLevel: 1
multiLevelLeader多级部门负责人leaderLevel: 1~10
formField表单字段formFieldKey: "field_xxx"
initiatorSelect发起人自选发起时弹出人员选择框

审批方式(approvalMethod)对照:

方式说明
or或签任一人通过即可
and会签所有人通过才算通过
sequential依次审批按顺序逐一审批

3.2.6 接口列表

接口名称请求方式接口路径说明
保存仿钉钉流程设计POST/admin-api/bpm/visual-designer/save保存 JSON 格式流程设计
获取仿钉钉流程设计GET/admin-api/bpm/visual-designer/获取 JSON 设计数据
预览流程图POST/admin-api/bpm/visual-designer/{modelId}/preview生成流程图预览
校验流程设计POST/admin-api/bpm/visual-designer/{modelId}/validate校验完整性
获取可用审批人类型GET/admin-api/bpm/visual-designer/approver-types获取系统支持的审批人类型列表
转换设计器类型POST/admin-api/bpm/visual-designer/{modelId}/convert将仿钉钉 JSON 转换为 BPMN XML

3.3 流程模型管理

3.3.1 功能描述

提供流程模型的全生命周期管理,包括模型的创建、编辑、复制、删除、发布、版本管理、回滚等功能,同时支持流程分类管理,便于组织和检索流程模型。

流程模型是流程的"设计图纸",发布后变成"施工完成的公路"(流程定义),用户发起的每一次审批是公路上跑的"车"(流程实例)。

3.3.2 操作流程

模型列表管理:

1. 进入「流程设计 > 流程模型」页面
2. 系统展示所有流程模型列表,支持筛选:
   a. 按流程分类筛选(树形下拉)
   b. 按模型状态筛选(草稿/已发布/已废弃)
   c. 按模型名称关键字搜索
   d. 按创建时间范围筛选
3. 列表展示字段:模型名称、模型标识、分类、状态、版本、设计器类型、创建人、创建时间
4. 支持操作:编辑、复制、删除、发布、查看版本历史

创建流程模型:

1. 点击「创建模型」按钮
2. 填写基本信息:
   a. 模型名称(必填,2~50 字符)
   b. 模型标识(必填,全局唯一,创建后不可修改)
   c. 所属分类(必填,下拉选择)
   d. 流程描述(选填,最大 500 字符)
   e. 设计器类型(必填,BPMN 设计器 / 仿钉钉设计器)
3. 点击「确定」,系统创建模型并跳转到设计器页面

发布流程模型:

1. 在模型列表点击「发布」按钮
2. 系统自动校验流程完整性(同流程校验规则)
3. 校验通过:
   a. 首次发布:版本号设为 1
   b. 更新发布:版本号自动 +1
   c. 生成新的流程定义(ProcessDefinition)
   d. 更新模型状态为"已发布"
4. 校验失败:提示错误信息,需修正后再发布

版本管理:

1. 在模型列表点击「版本历史」
2. 展示该模型的所有版本列表:版本号、发布时间、发布人、备注
3. 标记当前使用版本
4. 支持版本对比:选择两个版本,查看流程设计差异
5. 支持版本回滚:选择历史版本回滚
   a. 回滚后生成新版本(版本号递增)
   b. 流程设计内容与回滚目标版本一致
   c. 正在进行中的实例不受影响

流程分类管理:

1. 进入「流程设计 > 流程分类」页面
2. 展示分类树形结构
3. 支持操作:
   a. 新增分类:填写分类名称、排序号、父级分类
   b. 编辑分类:修改分类名称、排序号
   c. 删除分类:分类下无模型时才能删除
   d. 调整排序:拖拽调整分类顺序

3.3.3 界面线框图

流程模型列表

3.3.4 业务规则

规则编号规则描述为什么这样设计
R-01模型标识全局唯一,格式:小写字母开头,只含小写字母/数字/下划线,3~50 字符标识是流程在引擎中的唯一 ID,重复会导致引擎部署冲突
R-02草稿状态的模型不能在前台发起流程未完成设计的流程不应暴露给用户
R-03同一模型可有多个已发布版本,但只有一个"最新版本"用于新实例新旧版本并行运行,进行中的实例按原版本走完
R-04版本号自动递增(1, 2, 3...),历史版本不可修改保证版本链的完整性和可追溯性
R-05版本回滚实际是创建一个新版本,内容复制自目标历史版本不破坏版本递增序列,同时达到回滚效果
R-06已发布的模型不能直接删除,需先"废弃"防止误删正在使用的流程
R-07废弃后 7 天才能删除(冷却期)给误操作留出恢复窗口
R-08删除前校验:有运行中的流程实例则不允许删除进行中的流程需要关联的定义数据来继续流转
R-09复制模型时,新模型标识默认为"原标识_copy",名称为"原名称_副本"方便快速基于已有流程创建类似流程

3.3.5 模型状态流转

模型状态流转

3.3.6 接口列表

接口名称请求方式接口路径说明
分页查询模型列表GET/admin-api/bpm/model/page分页查询流程模型
获取模型详情GET/admin-api/bpm/model/获取模型详细信息
创建模型POST/admin-api/bpm/model/create创建新的流程模型
更新模型PUT/admin-api/bpm/model/update更新模型基本信息
复制模型POST/admin-api/bpm/model/{id}/copy复制流程模型
删除模型DELETE/admin-api/bpm/model/删除流程模型
发布模型POST/admin-api/bpm/model/{id}/deploy发布为流程定义
废弃模型POST/admin-api/bpm/model/{id}/deprecate废弃流程模型
获取版本历史GET/admin-api/bpm/model/{id}/versions获取版本列表
版本对比POST/admin-api/bpm/model/{id}/compare对比两个版本差异
版本回滚POST/admin-api/bpm/model/{id}/rollback/回滚到指定版本
分页查询分类GET/admin-api/bpm/category/page分页查询流程分类
获取分类树GET/admin-api/bpm/category/tree获取分类树形结构
创建分类POST/admin-api/bpm/category/create创建流程分类
更新分类PUT/admin-api/bpm/category/update更新流程分类
删除分类DELETE/admin-api/bpm/category/删除流程分类

3.4 表单管理

3.4.1 功能描述

提供动态表单设计器,通过拖拽方式快速构建流程表单。表单组件分为三类:

  • 基础组件(7 种):单行输入、多行输入、数字输入、单选框、多选框、下拉选择、级联选择
  • 高级组件(6 种):日期选择、日期范围、时间选择、人员选择、部门选择、文件上传/图片上传/富文本
  • 布局组件(4 种):分组、栅格布局(2/3/4 列)、分割线、说明文字

表单可与流程模型绑定,并为每个流程节点配置字段权限(可见/可编辑/隐藏/必填),实现"同一张表单,不同节点看到不同内容"。

3.4.2 操作流程

创建动态表单:

1. 进入「流程设计 > 表单管理」页面
2. 点击「创建表单」按钮
3. 填写表单基本信息:
   a. 表单名称(必填)
   b. 表单标识(必填,唯一标识)
   c. 表单描述(选填)
4. 进入表单设计器界面
5. 左侧显示组件库,中间为表单画布,右侧为属性面板
6. 从组件库拖拽组件到画布
7. 点击组件,在右侧属性面板配置:
   a. 字段标签(显示给用户的名称)
   b. 字段标识(程序使用的字段名)
   c. 是否必填 + 校验失败提示语
   d. 默认值
   e. 校验规则(最大值/最小值/正则等)
   f. 选项配置(选择器组件的选项来源:手动 / 数据字典)
8. 拖拽调整组件顺序
9. 点击「预览」查看表单效果
10. 点击「保存」保存表单

表单与流程绑定 + 节点字段权限:

1. 在流程模型编辑页面,选择绑定的表单
2. 进入「节点表单配置」页面
3. 表格形式展示:行=表单字段,列=流程节点
4. 每个交叉格可设置权限:
   a. 可见(该节点审批人能看到该字段)
   b. 可编辑(该节点审批人可以修改该字段)
   c. 隐藏(该节点审批人看不到该字段,但数据保留)
   d. 必填(该节点审批人必须填写该字段)
5. 发起人节点默认可编辑所有字段
6. 配置完成后保存

3.4.3 界面线框图

表单设计器:表单设计器

节点表单权限配置:节点表单权限配置

3.4.4 业务规则

规则编号规则描述为什么这样设计
R-01表单标识全局唯一,创建后不可修改表单标识用于数据存储和接口调用,修改会导致历史数据无法关联
R-02字段标识表单内唯一,格式同模型标识字段标识是表单数据的 Key,重复会导致数据覆盖
R-03不能使用系统保留字作为字段标识(如 id, createTime, tenantId 等)避免与系统字段冲突导致数据异常
R-04必填组件必须配置校验提示语用户需要明确知道"为什么提交失败"
R-05文件上传组件必须配置文件类型限制和大小限制防止上传恶意文件或超大文件占用存储
R-06单个表单最大字段数 ≤ 50 个超过 50 个字段的表单用户体验极差,建议拆分
R-07隐藏字段在表单中不显示,但数据保留某些信息只对特定节点可见,但完整数据需要保留用于审计
R-08选项来源支持手动配置和数据字典两种方式简单选项手动配置即可,通用选项(如省市区)使用数据字典统一管理

3.4.5 接口列表

接口名称请求方式接口路径说明
分页查询表单列表GET/admin-api/bpm/form/page分页查询动态表单
获取表单详情GET/admin-api/bpm/form/获取表单设计和基本信息
创建表单POST/admin-api/bpm/form/create创建新的动态表单
更新表单PUT/admin-api/bpm/form/update更新表单设计
复制表单POST/admin-api/bpm/form/{id}/copy复制动态表单
删除表单DELETE/admin-api/bpm/form/删除动态表单
预览表单POST/admin-api/bpm/form/{id}/preview预览表单效果
获取表单字段列表GET/admin-api/bpm/form/{id}/fields获取所有字段定义
保存节点表单权限POST/admin-api/bpm/model/{modelId}/node/{nodeId}/form-permission保存字段权限配置
获取节点表单权限GET/admin-api/bpm/model/{modelId}/node/{nodeId}/form-permission获取字段权限配置

3.5 流程发起(用户前台)

3.5.1 功能描述

用户前台提供流程发起入口,用户可以按分类浏览可发起的流程,选择具体流程后填写表单并提交。系统自动匹配审批人、生成流程实例并启动审批流转。提交前支持流程预览(查看审批路径和审批人),提交后自动跳转到"我发起的"列表跟踪进度。

3.5.2 操作流程

1. 登录用户前台,进入「我的流程 > 发起流程」
2. 页面左侧展示流程分类树,右侧展示分类下的流程列表
3. 点击分类,右侧显示该分类下所有已发布的流程
4. 支持关键字搜索流程名称
5. 找到目标流程,点击「发起申请」
6. 系统渲染流程表单(根据表单设计 JSON 动态生成)
7. 用户填写表单内容
8. 必填字段未填写时,提交时红色提示
9. 如流程配置了"发起人自选审批人",弹出人员选择框
10. 点击「提交」
11. 系统校验表单数据
12. 校验通过后弹出「流程预览」对话框:
    a. 显示审批路径:节点1(审批人) → 节点2(审批人) → ...
    b. 显示每个节点的审批人姓名
13. 确认无误后点击「确定提交」
14. 系统生成流程实例(编号格式:FLOW + 年月日 + 4 位序号)
15. 流程进入第一个审批节点,审批人收到待办通知
16. 提交成功,跳转到「我发起的」页面

3.5.3 界面线框图

发起流程页面

点击「发起申请」后进入表单页面:

表单填写与流程预览

3.5.4 业务规则

规则编号规则描述为什么这样设计
R-01只展示状态为"已发布"的流程草稿和已废弃的流程不应暴露给用户
R-02根据流程发起人配置过滤用户无权发起的流程某些流程仅限特定部门或角色发起
R-03禁用的流程分类不显示分类禁用意味着该分类下流程暂停使用
R-04提交时自动生成流程实例编号(格式:FLOW + 年月日 + 4 位序号)唯一编号便于追溯和沟通
R-05提交后流程状态为"进行中",不可修改表单数据审批中的表单数据需要保持一致性
R-06支持表单数据暂存为草稿复杂表单可能需要分多次填写
R-07审批人匹配优先级:发起人自选 > 流程变量指定 > 角色匹配 > 部门领导 > 岗位匹配越精确的指定方式优先级越高

3.5.5 接口列表

接口名称请求方式接口路径说明
获取流程分类树GET/app-api/bpm/flow/categories获取可发起的流程分类树
获取分类下流程列表GET/app-api/bpm/flow/list获取指定分类下的已发布流程
获取流程表单GET/app-api/bpm/flow/{modelId}/form获取表单设计和字段权限
提交流程POST/app-api/bpm/flow/start提交表单并创建流程实例
暂存流程草稿POST/app-api/bpm/flow/draft暂存表单数据
获取流程预览POST/app-api/bpm/flow/{modelId}/preview预览审批路径和审批人

四、非功能需求

4.1 性能需求

指标项指标要求说明
BPMN 设计器加载时间≤ 2 秒含 bpmn-js 库初始化和 XML 解析渲染
仿钉钉设计器加载时间≤ 1 秒JSON 解析和节点渲染
流程保存响应时间≤ 1 秒保存设计数据到数据库
流程发布响应时间≤ 3 秒含流程编译和 Flowable 引擎部署
表单渲染时间≤ 0.5 秒动态表单从 JSON 到可交互界面
流程校验响应时间≤ 2 秒含所有校验规则执行
并发设计支持≥ 20 人同时在线设计流程的管理员数量
流程节点数上限≤ 100 个单个流程的最大节点数
表单字段数上限≤ 50 个单个表单的最大字段数

4.2 安全需求

安全项安全要求实现方式
权限控制只有授权用户才能设计和发布流程RBAC 权限模型,15 个细粒度权限标识
版本保护已发布版本不可被篡改版本数据只读存储,修改生成新版本
操作审计记录所有设计和发布操作操作日志记录操作人、时间、操作类型、变更内容
表单数据保护表单数据按节点字段权限控制字段级权限校验,审批人只能看到授权字段
数据隔离不同租户的流程设计数据完全隔离多租户架构,SQL 层自动拼接 tenant_id 条件

4.3 兼容性需求

兼容项兼容要求说明
浏览器兼容Chrome 80+、Firefox 75+、Edge 80+支持主流现代浏览器
分辨率兼容1920×1080 及以上设计器界面适配高分辨率
BPMN 标准BPMN 2.0导入导出符合 BPMN 2.0 规范
Flowable 版本6.8.0基于 Flowable 6.8.0 引擎部署
移动端适配暂不支持设计器操作复杂,仅在 PC 端使用;用户端表单填写后续支持移动端

五、数据设计

5.1 核心数据表

本模块涉及 3 个核心数据表:

表名说明核心字段
bpm_model流程模型表存储模型基本信息、设计数据(BPMN XML 或仿钉钉 JSON)、版本状态
bpm_form动态表单表存储表单设计 JSON 配置
bpm_category流程分类表存储分类树形结构

5.2 表关系

流程设计ER关系图

  • bpm_category 自关联:parent_id 指向自身 id,支持多级分类
  • bpm_model 与 bpm_category:多对一,一个分类下可有多个模型
  • bpm_model 与 bpm_form:多对一,一个表单可被多个模型复用

5.3 bpm_model 表(流程模型表)

字段名类型长度必填默认值说明
idBIGINT20自增主键
model_keyVARCHAR100-流程标识(全局唯一)
model_nameVARCHAR100-流程名称
category_idBIGINT20-所属分类 ID
descriptionVARCHAR500NULL流程描述
form_idBIGINT20NULL绑定表单 ID
designer_typeTINYINT11设计器类型(1-BPMN / 2-仿钉钉)
bpmn_xmlLONGTEXT-NULLBPMN XML 内容(designer_type=1 时有值)
model_jsonLONGTEXT-NULL仿钉钉 JSON 内容(designer_type=2 时有值)
statusTINYINT10状态(0-草稿 / 1-已发布 / 2-已废弃)
current_versionINT111当前版本号
created_byBIGINT20-创建人 ID
created_timeDATETIME-CURRENT_TIMESTAMP创建时间
updated_byBIGINT20-更新人 ID
updated_timeDATETIME-CURRENT_TIMESTAMP更新时间
deletedTINYINT10删除标记
tenant_idBIGINT20-租户 ID

索引设计:

  • UNIQUE INDEX uk_model_key_tenant (model_key, tenant_id) — 租户内标识唯一
  • INDEX idx_category_id (category_id) — 按分类查询
  • INDEX idx_status (status) — 按状态筛选

5.4 bpm_form 表(动态表单表)

字段名类型长度必填默认值说明
idBIGINT20自增主键
form_keyVARCHAR100-表单标识(全局唯一)
form_nameVARCHAR100-表单名称
descriptionVARCHAR500NULL表单描述
form_configLONGTEXT--表单设计 JSON 配置
statusTINYINT11状态(0-禁用 / 1-启用)
created_byBIGINT20-创建人 ID
created_timeDATETIME-CURRENT_TIMESTAMP创建时间
updated_byBIGINT20-更新人 ID
updated_timeDATETIME-CURRENT_TIMESTAMP更新时间
deletedTINYINT10删除标记
tenant_idBIGINT20-租户 ID

索引设计:

  • UNIQUE INDEX uk_form_key_tenant (form_key, tenant_id) — 租户内标识唯一

5.5 bpm_category 表(流程分类表)

字段名类型长度必填默认值说明
idBIGINT20自增主键
category_nameVARCHAR50-分类名称
parent_idBIGINT200父级分类 ID(0 为顶级)
sort_orderINT110排序号
statusTINYINT11状态(0-禁用 / 1-启用)
created_byBIGINT20-创建人 ID
created_timeDATETIME-CURRENT_TIMESTAMP创建时间
updated_byBIGINT20-更新人 ID
updated_timeDATETIME-CURRENT_TIMESTAMP更新时间
deletedTINYINT10删除标记
tenant_idBIGINT20-租户 ID

索引设计:

  • INDEX idx_parent_id (parent_id) — 树形查询
  • INDEX idx_sort_order (sort_order) — 排序查询

5.6 数据字典

字段含义
designer_type1BPMN 设计器
designer_type2仿钉钉设计器
status(model)0草稿
status(model)1已发布
status(model)2已废弃
status(form/category)0禁用
status(form/category)1启用
approvalMethodor或签(任一人通过即可)
approvalMethodand会签(所有人通过才算通过)
approvalMethodsequential依次审批(按顺序逐一)
approverTypeuser指定人员
approverTyperole指定角色
approverTypeleader部门负责人
approverTypemultiLevelLeader多级部门负责人
approverTypeformField表单字段
approverTypeinitiatorSelect发起人自选

六、跨模块联动

6.1 联动关系总览

关联模块联动方式数据流向说明
用户管理(01-01)读取用户数据用户模块 → 流程设计审批人选择器、发起人范围配置依赖用户列表
部门管理(01-02)读取部门数据部门模块 → 流程设计"部门负责人"和"多级部门负责人"审批人类型依赖部门层级和负责人配置
角色管理(01-03)读取角色数据角色模块 → 流程设计"指定角色"审批人类型依赖角色列表和角色-用户关联
岗位管理(01-04)读取岗位数据岗位模块 → 流程设计岗位可作为审批人匹配条件
数据字典(01-06)读取字典数据字典模块 → 表单管理表单选择器组件的选项可来源于数据字典
租户管理(01-07)数据隔离租户模块 → 流程设计所有流程数据按 tenant_id 隔离
通知模块发送通知流程设计 → 通知模块流程发布/版本变更时通知相关管理员
日志审计(01-08)写入操作日志流程设计 → 日志模块记录所有设计、发布、版本操作
流程管理(03-02)发布流程定义流程设计 → 流程管理模型发布后生成流程定义,供流程管理模块使用
我的流程(03-03)提供流程入口流程设计 → 我的流程用户端按分类展示已发布流程供发起

6.2 关键联动流程

审批人解析流程:审批人解析流程

表单数据字典联动:表单数据字典联动

6.3 数据一致性要求

场景一致性要求处理方式
用户被禁用/删除该用户作为审批人配置的节点需标记异常流程管理模块在解析审批人时检测并触发告警
部门被删除"部门负责人"类型的审批人无法解析运行时走"审批人为空"的兜底策略
角色被删除"指定角色"类型的审批人无法解析同上
表单被流程引用后删除流程实例的表单数据无法渲染限制删除:被流程引用的表单不允许删除,只能禁用
分类被删除分类下的流程失去归属限制删除:分类下有模型时不允许删除

七、附录

7.1 名词解释

名词英文通俗解释
BPMNBusiness Process Model and Notation业务流程建模与标注——一种国际通用的"流程画图标准",就像地图有统一的图例符号一样,BPMN 规定了流程图中每种图形代表什么含义
流程模型Process Model流程的"设计图纸"——管理员在系统中画的流程图,还没正式启用
流程定义Process Definition流程的"正式版本"——模型发布后变成的东西,相当于图纸审批通过后可以施工了
流程实例Process Instance一次具体的流程执行——用户提交一次请假申请,就产生了一个流程实例。就像"公路"是定义,每辆跑的"车"是实例
节点Node / Element流程图中的"站点"——审批人、条件判断、抄送等都是节点
网关Gateway流程图中的"岔路口"——控制流程走哪条路径。排他网关=只走一条路,并行网关=同时走多条路
会签Counter Sign"所有人签字才算通过"——比如 3 个评委都要同意,类似答辩全票通过
或签Or Sign"任一人签字就算通过"——比如 3 个评委任一同意即可,类似抢答
依次审批Sequential Approval"排队签字"——A 签完 B 签,B 签完 C 签,有先后顺序
条件分支Conditional Branch"根据条件走不同路径"——请假超过 3 天走部门经理审批,3 天以内直接通过
并行分支Parallel Branch"同时分头执行"——财务审核和会计审核同时进行,都完成后再继续
流程标识Process Key流程的"身份证号"——全局唯一的英文标识,创建后不能改
动态表单Dynamic Form管理员自己拖拽创建的表单——不需要程序员写代码,像搭积木一样拼装表单字段
节点表单权限Node Form Permission同一张表单在不同审批节点展示不同内容——发起人能编辑,审批人只能看,某些字段对特定节点隐藏
仿钉钉设计器Visual Designer模仿钉钉审批的可视化流程设计工具——从上往下排列节点,拖拽即可搭建,适合非技术人员
FlowableFlowable Engine开源的工作流引擎——负责"跑"流程的底层软件,PMForge 基于 Flowable 6.8.0 构建

7.2 权限标识

权限标识权限名称说明
bpm:model:create创建流程模型创建新的流程模型
bpm:model:update编辑流程模型编辑模型信息和流程设计
bpm:model:delete删除流程模型删除流程模型
bpm:model:deploy发布流程模型发布为流程定义
bpm:model:query查询流程模型查看模型列表和详情
bpm:model:copy复制流程模型复制流程模型
bpm:form:create创建动态表单创建新的动态表单
bpm:form:update编辑动态表单编辑表单设计
bpm:form:delete删除动态表单删除动态表单
bpm:form:query查询动态表单查看表单列表和详情
bpm:category:create创建流程分类创建新的流程分类
bpm:category:update编辑流程分类编辑分类信息
bpm:category:delete删除流程分类删除流程分类
bpm:category:query查询流程分类查看分类列表
bpm:flow:start发起流程用户前台发起流程

7.3 错误码

错误码说明处理建议
BPM_MODEL_KEY_EXISTS流程标识已存在更换一个唯一的流程标识
BPM_MODEL_NOT_FOUND流程模型不存在检查模型 ID 是否正确
BPM_MODEL_HAS_RUNNING_INSTANCES流程模型有运行中的实例,无法删除先终止或等待所有运行中实例完成
BPM_MODEL_NOT_DEPLOYABLE流程校验不通过,无法发布根据校验错误列表逐一修复
BPM_FORM_KEY_EXISTS表单标识已存在更换一个唯一的表单标识
BPM_FORM_IN_USE表单被流程引用,无法删除先解除流程与表单的绑定关系
BPM_CATEGORY_HAS_MODELS分类下有流程模型,无法删除先移除或迁移分类下的所有模型
BPM_DESIGNER_VALIDATE_FAIL流程设计校验失败检查错误列表:开始/结束事件、审批人配置、条件表达式等

7.4 接口汇总

模块接口数量路径前缀
BPMN 设计器7/admin-api/bpmn/designer/
仿钉钉设计器6/admin-api/bpm/visual-designer/
流程模型管理11/admin-api/bpm/model/
流程分类管理5/admin-api/bpm/category/
表单管理10/admin-api/bpm/form/
流程发起(用户端)6/app-api/bpm/flow/
合计45-

7.5 修订记录

版本日期修订人修订内容
v1.02026-09-24PMForge 产品团队初稿创建
v2.02026-09-19PMForge 产品团队增强用户场景(命名角色+详细步骤)、新增验收标准、新增界面线框图、新增跨模块联动章节、新增名词解释(含通俗类比)、新增错误码定义、补充索引设计和数据字典

文档结束