驰骋审核组件:审批场景的原生解决方案
出品:驰骋低代码 BPM / CCFlow
文档版本:2026-06
依据代码:Vue3/src/WF/Admin/AttrNode/NodeWorkCheck.ts、CCFlow/Components/BP.WF/Template/NodeWorkCheck.cs、Vue3/src/WF/WorkOpt/WorkCheck.vue
在线演示:http://ccflow.org
代码下载:http://ccflow.org
驰骋的主张与概念划分
本文所阐述的「审核组件」概念、属性划分与配置模型,出自驰骋低代码 BPM 团队的产品设计与工程实践,供参考学习,并非业界唯一标准。
名词说明:文中「审核组件」对应代码中的 FrmWorkCheck / NodeWorkCheck;「审批意见」与「审核意见」同义,均指处理人在节点上填写的处理结论与文字说明。
一、审核组件的作用
1.1 一句话定义
审核组件是驰骋 BPM 在流程节点上内置的「审批意见采集与追溯引擎」——业务人员打开待办、阅读表单后,在同一页面完成填写意见、选择立场、电子签批、上传附件、查看历史,并将结果写入流程轨迹,驱动后续节点流转。
1.2 它具体做什么
| 能力维度 | 作用说明 |
|---|---|
| 意见采集 | 为当前处理人提供意见输入区,支持默认意见、常用短语、结构化审批字段(FWCDefInfo、FWCFields)。 |
| 立场表达 | 通过 FWCView 配置「同意 / 不同意 / 酌情处理」等选项,意见立场写入轨迹,可直接作为方向条件驱动分支。 |
| 历史追溯 | 按节点、按人员、按时间展示全部历史审核记录,支持表格、轨迹、时间轴三种版式(FWCShowModel)。 |
| 身份留痕 | 记录操作人、操作时间(TimeShowRole、IsChangeFWCTime),支持图片签名、写字板、电子签章等六种方式(SigantureEnabel)。 |
| 协作支撑 | 会签场景下控制意见可见性(FWCMsgShow)、排序规则(FWCOrderModel)、未审人员展示(FWCIsShowTruck)。 |
| 流程联动 | 意见与 Track 轨迹表一体存储,与发送、退回、移交、撤销等节点操作天然衔接;退回原因可按规则展示(FWCIsShowReturnMsg)。 |
| 附件随审 | 启用 FWCAth 后,审核期间可上传批复件、扫描件,自动挂载 ND{NodeID}_FrmWorkCheck 附件组件。 |
| 形态扩展 | 同一套机制复用于日志、周报、月报(FWCType),避免为「记录型」场景重复造轮子。 |
1.3 与表单的分工
驰骋明确区分两类数据:
节点表单 → 回答「这份单据的业务内容是什么」(金额、事由、明细……)
审核组件 → 回答「谁、在何时、持何种立场、作了何种审批」(流程语义数据)
二者在待办页面同页嵌入、职责分离:表单只负责业务字段,审核组件只负责审批行为。这是驰骋「表单引擎 + 流程引擎」双轨架构在运行态的具体体现。
二、重要性与必要性
2.1 为什么重要:审批是国内 BPM 的主战场
国内 BPM 落地项目中,审批类流程占绝对多数——请假、报销、采购、合同、人事、项目……典型交互始终不变:
打开待办 → 阅读业务表单 → 填写审批意见 → 发送或退回
没有审核组件,每个项目都要在表单里「手工拼装」意见区;有了审核组件,一个节点开关、一组配置属性,即可覆盖 80% 以上的审批 UI 与数据需求。对实施效率、交付一致性、后期运维而言,这是基础设施级能力,而非可有可无的锦上添花。
2.2 为什么必要:普通表单字段无法替代
若把审批意见当作普通文本框拖进表单,会系统性踩坑:
| 痛点 | 后果 | 审核组件的应对 |
|---|---|---|
| 意见与轨迹割裂 | 发送后意见散落业务表,无法统一审计 | 意见写入 Track,与流程生命周期绑定 |
| 历史意见难展示 | 每节点一个字段,流程一长表单爆炸 | 按轨迹聚合展示,支持时间轴 |
| 立场无法驱分支 | 需在表单字段上写复杂表达式 | FWCView 原生支持方向条件 |
| 会签逻辑重复开发 | 盲审、排序、未审提示各写一套 | FWCMsgShow、FWCOrderModel 等配置即用 |
| 签名盖章各接各的 | 每个项目重复对接 CA/图片签名 | SigantureEnabel 统一六种模式 |
| 移动端再写一遍 | PC/移动双份维护 | WorkCheck.vue / CCMobile 共用后端契约 |
必要性结论:审批不是「多一个文本框」的问题,而是流程语义数据如何采集、存储、展示、驱动的问题。没有节点级审核组件,BPM 引擎在最关键的场景上就是残缺的。
2.3 对三类角色的价值
| 角色 | 价值 |
|---|---|
| 业务人员 | 统一的审批体验:看表单、看历史、填意见、选立场、签名,一页完成。 |
| 实施顾问 | 流程设计器内「审核组件」独立入口(NodeExt.ts → NodeWorkCheck),勾选配置即可,无需写代码。 |
| 二开工程师 | Entity + EnMap 自描述实体,前后端契约统一;Toolkit 可裁剪集成,扩展而非重写。 |
三、驰骋的重要发明:解决了哪些问题
审核组件是驰骋在二十年 BPM 工程实践中,针对国内「看表单 + 写意见」高频场景提出的原创性产品发明(非 BPMN 标准元素,而是驰骋对本土审批需求的引擎级抽象)。
3.1 发明前:行业普遍做法及其局限
在驰骋提出审核组件之前,国内外 BPM 产品常见做法包括:
- 表单字段法:在 Form 上增加「审批意见」文本框 → 简单场景可用,流程一长、多人会签、历史追溯即崩溃。
- Comment 通用评论:类似论坛评论 → 与流程节点、方向条件、轨迹审计弱关联。
- 完全自定义页面:每个流程单独开发审批区 → 交付慢、风格不一、难以升级维护。
这些做法的共同问题是:审批能力游离于流程内核之外,表单、轨迹、方向条件、签名、附件各成孤岛。
3.2 驰骋审核组件的核心发明点
问题一:审批 UI 每项目重复开发
解决:将审核区抽象为与节点绑定的标准组件,运行态统一由 WorkCheck.vue 渲染;设计态通过 NodeWorkCheck.EnMap 配置,一次开发、千个流程复用。
问题二:审批数据与流程轨迹脱节
解决:意见、立场、签批图写入 Track 轨迹表(Msg、FWCView、WriteDB),与发送/退回/撤销同一数据模型。流程图、审批历史、审计报表均可从轨迹统一取数,业务表不再承载流程语义。
问题三:「同意走 A、不同意走 B」难以配置
解决:FWCView 预置立场选项,写入轨迹后直接作为方向条件(如 @FWCView=同意)。业务人员择立场即驱动分支,无需在表单里隐藏字段或写脚本。
问题四:会签、盲审、职级排序需求碎片化
解决:「协作模式」属性组——FWCMsgShow(仅看自己的意见)、FWCOrderModel(按时间或职级排序)、FWCIsShowTruck(展示未审人员)——将多人审批规则产品化、配置化,来自烟台、天业等真实项目的提炼。
问题五:签名、附件、默认意见等横切需求散落
解决:SigantureEnabel 六种签名、FWCAth 审核附件、FWCDefInfo + FWCIsFullInfo 默认意见、CheckField 签批字段回写——全部纳入 NodeWorkCheck 统一配置,后端 beforeUpdateInsertAction 自动创建附件组件,开箱即用。
问题六:审批与日志/周报场景重复建设
解决:FWCType 枚举扩展为审核、日志、周报、月报四种类型,同一套 UI 与存储机制服务多种「按节点记录」场景,降低重复开发。
3.3 发明价值量化(工程视角)
| 指标 | 无审核组件 | 有审核组件 |
|---|---|---|
| 单流程审批区开发 | 0.5~3 人天 | 0(配置) |
| 历史意见展示 | 需单独查询开发 | 内置三种版式 |
| 立场驱分支 | 需表单字段 + 表达式 | FWCView 配置 |
| 会签盲审 | 需定制逻辑 | 属性开关 |
| 轨迹审计一致性 | 业务表 + 轨迹双轨 | 轨迹单一数据源 |
| 移动端适配 | 另起页面 | 共用 NodeWorkCheck 契约 |
四、审核组件在架构中的位置
- 配置实体:
NodeWorkCheck(TS:TS.WF.Template.NodeWorkCheck,C#:BP.WF.Template.NodeWorkCheck),主键NodeID,映射WF_Node上 FWC 系列字段。 - 运行描述:
FrmWorkCheck读取节点配置,供前端渲染。 - 设计器入口:
NodeExt.ts中AddRM_EnOnly('审核组件', 'TS.WF.Template.NodeWorkCheck', …),与节点基本属性解耦。
五、实体设计:NodeWorkCheck
驰骋采用 Entity + EnMap 高代码元数据模式,将审核组件的全部能力声明为可配置属性:
export class NodeWorkCheck extends EntityNodeID {
constructor(pkval?: number) {
super('TS.WF.Template.NodeWorkCheck', 'BP.WF.Template.NodeWorkCheck');
if (!!pkval) {
this.NodeID = pkval;
}
}
属性常量类 NodeWorkCheckAttr 集中定义字段键名,便于前后端与业务代码引用:
export class NodeWorkCheckAttr extends EntityNoNameAttr {
public static readonly FWCLab = 'FWCLab'; // 显示标签
public static readonly FWCSta = 'FWCSta'; // 审核组件状态
public static readonly FWCType = 'FWCType'; // 应用类型
public static readonly FWCAth = 'FWCAth'; // 附件
public static readonly FWCShowModel = 'FWCShowModel'; // 显示方式
public static readonly FWCView = 'FWCView'; // 审核意见立场
public static readonly CheckField = 'CheckField'; // 签批字段
// …… 共 20+ 属性常量
}
EnMap 将配置分为三组:基本设置、外观设置、协作模式。以下对每个属性逐一说明。
六、属性详解
6.1 基本设置
| 属性名 | 字段键 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
| 节点 ID | NodeID | 整型 PK | — | 审核组件与 WF_Node 一对一绑定的主键;每个流程节点的审核行为独立配置、互不影响。 |
| 节点名称 | Name | 字符串 | — | 设计器只读展示,标识当前配置所属节点,便于实施人员识别。 |
| 审核组件状态 | FWCSta | 枚举 | 禁用 | 禁用:节点不出现审核区;启用:当前处理人可填写意见;只读:仅展示历史意见。枚举 FrmWorkCheckSta。这是审核组件的总开关。 |
| 显示标签 | FWCLab | 字符串 | 审核信息 | 经典表单模式下审核区域的分组标题。可按企业公文习惯改为「审批意见」「领导批示」「审阅意见」等。 |
| 审核组件类型 | FWCType | 枚举 | 审核组件 | 审核组件:标准审批;日志组件:日报;周报组件;月报组件。后三者复用同一套轨迹存储与 UI 框架,面向周期性汇报场景。枚举 FWCType。 |
| 工作模式 | FWCShowModel(基本组) | 枚举 | 轨迹时间轴 | 运行时整体交互形态:审核组件(表格逐条展示)、轨迹模式、轨迹时间轴模式。WorkCheck.vue 据此切换 normalMode / trackMode / trackTimeMode。 |
| 时序模式 | FWCTimeModel | 枚举 | 倒序 | 历史意见排列:倒序(最新在上,符合阅读习惯);正序(按发生时间先后)。 |
| 节点意见名称 | FWCNodeName | 字符串 | 空 | 轨迹/时间轴上该节点意见块的显示名称。为空时回退节点名。用于区分「部门意见」「分管领导意见」「总经理批示」等语义。 |
| 附件上传 | FWCAth | 枚举 | 不启用 | 审核期间是否允许上传附件:不启用、多附件、单附件(暂不支持)、图片附件(暂不支持)。启用多附件时,保存配置会自动创建 ND{NodeID}_FrmWorkCheck 隐藏附件区。枚举 FWCAth。 |
| 操作名词 | FWCOpLabel | 字符串 | 审核 | 界面按钮与提示中的动词,可改为「审阅」「审定」「批示」,贴合机关公文用语。 |
| 默认审核信息 | FWCDefInfo | 字符串 | 空 | 预填意见模板,如「同意」「已阅,请按此办理」。与 FWCIsFullInfo 联动。 |
| 签名方式 | SigantureEnabel | 枚举 | 不签名 | 不签名、图片签名、写字板、电子签名(第三方)、电子盖章(第三方)、电子签名+盖章。详见 Wiki。 |
| 是否可编辑审核时间 | IsChangeFWCTime | 布尔 | true | 允许处理人修改意见落款时间;适用于秘书代录、补录历史审批等场景。 |
| 未审核时填充默认意见 | FWCIsFullInfo | 布尔 | false | 发送时意见为空,是否自动写入 FWCDefInfo;可实现「一键同意」或防止空意见提交。 |
| 审批格式字段 | FWCFields | 字符串 | 空 | 结构化审批格式定义,扩展意见维度(如同时记录「风险等级」「建议金额」),保存时与轨迹 Tag 联动。 |
| 审核意见保存规则 | FWCVer | 枚举 | 保留历史 | 1 节点 1 人 1 意见:同人再次处理覆盖;保留节点历史意见:每次追加,便于审计。 |
| 审批时间显示规则 | TimeShowRole | 枚举 | 日期时间 | 界面展示 仅日期 或 日期+时间。 |
| 签批字段 | CheckField | 下拉 SQL | 空 | 关联表单中 UIContralType=14(签批控件)的字段,将手写签批图片回写到指定业务字段;适配极简模式、关联表单。选项来自 GloWF.SQLOfNodeWorkCheckField()。 |
| 审核意见立场 | FWCView | 字符串 | 空 | 预置立场,逗号分隔,如 同意,不同意,酌情处理。写入轨迹 FWCView,可直接作流程方向条件。详见 Wiki。 |
隐藏/辅助字段(visible=false,服务查询与关联):
| 属性名 | 字段键 | 描述 |
|---|---|---|
| 流程编号 | FK_Flow | 所属流程号,支持按流程批量查询、维护审核配置。 |
| 步骤 | Step | 节点在流程中的步骤序号,用于轨迹排序与展示。 |
| 节点表单 ID | NodeFrmID | 节点绑定表单标识,供签批字段 SQL 在多种表单模式下正确列出可选字段。 |
Attr 类中声明、EnMap 暂未启用的扩展属性(代码预留,供二次开发或历史兼容):
| 属性名 | 字段键 | 描述 |
|---|---|---|
| 自定义常用短语 | FWCNewDuanYu | 常用审批语,原设计以 @ 分隔;当前 EnMap 注释,可由前端短语组件替代。 |
| 编号对应字段 | BillNoField | 与单据编号字段映射,用于特定报表或关联查询场景。 |
6.2 外观设置
| 属性名 | 字段键 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
| 显示方式 | FWCShowModel(外观组) | 枚举 | 轨迹时间轴 | 历史意见版式:表格方式(行列清晰、适合打印)、自由模式(灵活排版)、轨迹时间轴模式(时间线视觉、适合长流程)。决定 WorkCheckParse / WorkCheckParseTrack / WorkCheckParseTrackTime 子组件选用。 |
| 高度 | FWC_H | 浮点 | 300 | 审核区域高度(px);0 = 100% 撑满容器。 |
| 轨迹图是否显示 | FWCTrackEnable | 布尔 | true | 是否在审核区展示流程轨迹图(节点走向示意),帮助处理人快速理解单据流转上下文。 |
| 历史审核信息是否显示 | FWCListEnable | 布尔 | true | 是:历史意见 + 当前意见框;否:仅当前可编辑框,界面更简洁,适合节点多、意见长的场景。 |
| 是否显示未审核轨迹 | FWCIsShowTruck | 布尔 | false | 会签场景是否在列表中展示「尚未处理」的占位项,便于看到还有谁未审。 |
| 退回信息 | FWCIsShowReturnMsg | 枚举 | 不显示 | 不显示、显示给退回人、显示所有人。控制退回原因可见范围,帮助处理人理解单据为何被退回。 |
6.3 协作模式
多人处理(会签、协作)是审批的高频子场景,驰骋将规则独立成组:
| 属性名 | 字段键 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
| 操作员显示顺序 | FWCOrderModel | 枚举 | 按审批时间 | 按审批时间先后(RDT);按接受人员列表顺序(职级/官职,SqlAccepter)。枚举 FWCOrderModel。 |
| 轨迹表显示所有步骤 | FWCIsShowAllStep | 布尔 | false | 轨迹汇总表是否列出流程全部步骤(含未到达节点),还是仅已发生步骤。 |
| 审核意见显示方式 | FWCMsgShow | 枚举 | 都显示 | 都显示:透明协作;仅显示自己的意见:盲审/串审前隐藏他人意见,避免相互影响(天业项目需求沉淀)。 |
分合流场景补充枚举 SFShowCtrl(代码中定义,子线程可见性控制):
| 枚举值 | 含义 |
|---|---|
All | 所有子线程均可看到审核信息 |
MySelf | 仅查看自己的审核信息 |
七、核心枚举类型
export enum FWCAth {
None, MinAth, SingerAth, ImgAth, // 附件:无 / 多 / 单 / 图片
}
export enum FWCType {
Check, DailyLog, WeekLog, MonthLog, // 审核 / 日志 / 周报 / 月报
}
export enum FrmWorkCheckSta {
Disable, Enable, Readonly, // 禁用 / 启用 / 只读
}
export enum FWCOrderModel {
RDT = 0, SqlAccepter = 1, // 按时间 / 按职级顺序
}
export enum FrmWorkShowModel {
Table, Free, // 表格 / 自由(外观组扩展含时间轴)
}
八、运行态:从配置到界面
8.1 配置加载
待办打开时,后端 WF_WorkOpt 将配置序列化为 WF_FrmWorkCheck,前端 WorkCheck.vue 初始化:
FWCShowModel→displayMode(三种渲染模式)FWCSta→ 是否可编辑FWCListEnable、FWCTrackEnable等 → 子区域显隐
Toolkit 精简版(Vue3/src/Toolkit/WorkCheck/NodeWorkCheck.ts)仅拉取 FWCShowModel 与 FWCView,展示最小集成路径。
8.2 意见保存
发送时:意见 → Track.Msg;立场 → Track.FWCView;签批 → WriteDB 或 CheckField 字段。FWCVer 控制覆盖或追加。
8.3 典型配置速查
| 场景 | 关键配置 |
|---|---|
| 标准串行审批 | FWCSta=启用,FWCShowModel=轨迹时间轴,FWCView=同意,不同意,SigantureEnabel=图片签名 |
| 会签盲审 | FWCMsgShow=仅显示自己的意见,FWCOrderModel=按接受人员列表顺序,FWCIsShowTruck=true |
| 秘书代录 | FWCDefInfo=同意,FWCIsFullInfo=true,IsChangeFWCTime=true |
| 审核附件 | FWCAth=多附件 |
九、相关代码索引
| 模块 | 路径 | 职责 |
|---|---|---|
| 配置实体(前端) | Vue3/src/WF/Admin/AttrNode/NodeWorkCheck.ts | EnMap 元数据、枚举、属性常量 |
| 设计器入口 | Vue3/src/WF/Admin/AttrNode/NodeExt.ts | 节点属性页「审核组件」 |
| 运行描述 | CCFlow/Components/BP.WF/Template/FrmWorkCheck.cs | 运行时读取 FWC 配置 |
| 后端配置实体 | CCFlow/Components/BP.WF/Template/NodeWorkCheck.cs | C# EnMap、附件自动创建 |
| 运行态 UI(PC) | Vue3/src/WF/WorkOpt/WorkCheck.vue | 审核组件主界面 |
| 运行态 UI(移动) | Vue3/src/CCMobile/WorkOpt/WorkCheck.vue | 移动端适配 |
| 数据接口 | CCFlow/Components/BP.WF/HttpHandler/WF_WorkOpt.cs | 轨迹加载、意见保存 |
| 轻量集成 | Vue3/src/Toolkit/WorkCheck/ | 嵌入式审核条 |
结语
审核组件是驰骋 BPM 最贴近国内用户日常、使用频率最高、工程价值最大的内置发明之一。它把「看表单 + 写意见 + 留痕迹 + 驱分支 + 会签协作」从项目级重复劳动提升为节点级配置能力。
NodeWorkCheck.ts 中的每一个属性,都是真实审批项目在交付过程中沉淀下来的需求开关——理解这些属性,即理解驰骋如何把二十年审批实践压缩进一张节点配置表,这也是驰骋低代码 BPM 「配置即能力」 主张在审批领域的集中体现。
本文档基于 CCFlow 开源代码整理,概念划分仅代表驰骋团队归纳,供参考学习。欢迎访问 ccflow.org 在线体验与下载源码。
3288



被折叠的 条评论
为什么被折叠?



