驰骋BPM,ccflow,jflow审核组件设计与实现

驰骋审核组件:审批场景的原生解决方案

出品 :驰骋低代码 BPM / CCFlow

文档版本 :2026-06

依据代码Vue3/src/WF/Admin/AttrNode/NodeWorkCheck.tsCCFlow/Components/BP.WF/Template/NodeWorkCheck.csVue3/src/WF/WorkOpt/WorkCheck.vue

在线演示http://ccflow.org

代码下载http://ccflow.org


驰骋的主张与概念划分

本文所阐述的「审核组件」概念、属性划分与配置模型,出自驰骋低代码 BPM 团队的产品设计与工程实践,供参考学习,并非业界唯一标准。

名词说明:文中「审核组件」对应代码中的 FrmWorkCheck / NodeWorkCheck;「审批意见」与「审核意见」同义,均指处理人在节点上填写的处理结论与文字说明。


一、审核组件的作用

1.1 一句话定义

审核组件是驰骋 BPM 在流程节点上内置的「审批意见采集与追溯引擎」 ------业务人员打开待办、阅读表单后,在同一页面完成填写意见、选择立场、电子签批、上传附件、查看历史,并将结果写入流程轨迹,驱动后续节点流转。

1.2 它具体做什么

能力维度 作用说明
意见采集 为当前处理人提供意见输入区,支持默认意见、常用短语、结构化审批字段(FWCDefInfoFWCFields)。
立场表达 通过 FWCView 配置「同意 / 不同意 / 酌情处理」等选项,意见立场写入轨迹,可直接作为方向条件驱动分支。
历史追溯 按节点、按人员、按时间展示全部历史审核记录,支持表格、轨迹、时间轴三种版式(FWCShowModel)。
身份留痕 记录操作人、操作时间(TimeShowRoleIsChangeFWCTime),支持图片签名、写字板、电子签章等六种方式(SigantureEnabel)。
协作支撑 会签场景下控制意见可见性(FWCMsgShow)、排序规则(FWCOrderModel)、未审人员展示(FWCIsShowTruck)。
流程联动 意见与 Track 轨迹表一体存储,与发送、退回、移交、撤销等节点操作天然衔接;退回原因可按规则展示(FWCIsShowReturnMsg)。
附件随审 启用 FWCAth 后,审核期间可上传批复件、扫描件,自动挂载 ND{NodeID}_FrmWorkCheck 附件组件。
形态扩展 同一套机制复用于日志、周报、月报(FWCType),避免为「记录型」场景重复造轮子。

1.3 与表单的分工

驰骋明确区分两类数据:

复制代码
节点表单  →  回答「这份单据的业务内容是什么」(金额、事由、明细......)
审核组件  →  回答「谁、在何时、持何种立场、作了何种审批」(流程语义数据)

二者在待办页面同页嵌入、职责分离:表单只负责业务字段,审核组件只负责审批行为。这是驰骋「表单引擎 + 流程引擎」双轨架构在运行态的具体体现。


二、重要性与必要性

2.1 为什么重要:审批是国内 BPM 的主战场

国内 BPM 落地项目中,审批类流程占绝对多数------请假、报销、采购、合同、人事、项目......典型交互始终不变:

复制代码
打开待办 → 阅读业务表单 → 填写审批意见 → 发送或退回

没有审核组件,每个项目都要在表单里「手工拼装」意见区;有了审核组件,一个节点开关、一组配置属性 ,即可覆盖 80% 以上的审批 UI 与数据需求。对实施效率、交付一致性、后期运维而言,这是基础设施级能力,而非可有可无的锦上添花。

2.2 为什么必要:普通表单字段无法替代

若把审批意见当作普通文本框拖进表单,会系统性踩坑:

痛点 后果 审核组件的应对
意见与轨迹割裂 发送后意见散落业务表,无法统一审计 意见写入 Track,与流程生命周期绑定
历史意见难展示 每节点一个字段,流程一长表单爆炸 按轨迹聚合展示,支持时间轴
立场无法驱分支 需在表单字段上写复杂表达式 FWCView 原生支持方向条件
会签逻辑重复开发 盲审、排序、未审提示各写一套 FWCMsgShowFWCOrderModel 等配置即用
签名盖章各接各的 每个项目重复对接 CA/图片签名 SigantureEnabel 统一六种模式
移动端再写一遍 PC/移动双份维护 WorkCheck.vue / CCMobile 共用后端契约

必要性结论 :审批不是「多一个文本框」的问题,而是流程语义数据如何采集、存储、展示、驱动的问题。没有节点级审核组件,BPM 引擎在最关键的场景上就是残缺的。

2.3 对三类角色的价值

角色 价值
业务人员 统一的审批体验:看表单、看历史、填意见、选立场、签名,一页完成。
实施顾问 流程设计器内「审核组件」独立入口(NodeExt.tsNodeWorkCheck),勾选配置即可,无需写代码。
二开工程师 Entity + EnMap 自描述实体,前后端契约统一;Toolkit 可裁剪集成,扩展而非重写。

三、驰骋的重要发明:解决了哪些问题

审核组件是驰骋在二十年 BPM 工程实践中,针对国内「看表单 + 写意见 」高频场景提出的原创性产品发明(非 BPMN 标准元素,而是驰骋对本土审批需求的引擎级抽象)。

3.1 发明前:行业普遍做法及其局限

在驰骋提出审核组件之前,国内外 BPM 产品常见做法包括:

  1. 表单字段法:在 Form 上增加「审批意见」文本框 → 简单场景可用,流程一长、多人会签、历史追溯即崩溃。
  2. Comment 通用评论:类似论坛评论 → 与流程节点、方向条件、轨迹审计弱关联。
  3. 完全自定义页面:每个流程单独开发审批区 → 交付慢、风格不一、难以升级维护。

这些做法的共同问题是:审批能力游离于流程内核之外,表单、轨迹、方向条件、签名、附件各成孤岛。

3.2 驰骋审核组件的核心发明点

#mermaid-svg-YTG4kohipi1xVwDb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YTG4kohipi1xVwDb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YTG4kohipi1xVwDb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YTG4kohipi1xVwDb .error-icon{fill:#552222;}#mermaid-svg-YTG4kohipi1xVwDb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YTG4kohipi1xVwDb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YTG4kohipi1xVwDb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YTG4kohipi1xVwDb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YTG4kohipi1xVwDb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YTG4kohipi1xVwDb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YTG4kohipi1xVwDb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YTG4kohipi1xVwDb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YTG4kohipi1xVwDb .marker.cross{stroke:#333333;}#mermaid-svg-YTG4kohipi1xVwDb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YTG4kohipi1xVwDb p{margin:0;}#mermaid-svg-YTG4kohipi1xVwDb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YTG4kohipi1xVwDb .cluster-label text{fill:#333;}#mermaid-svg-YTG4kohipi1xVwDb .cluster-label span{color:#333;}#mermaid-svg-YTG4kohipi1xVwDb .cluster-label span p{background-color:transparent;}#mermaid-svg-YTG4kohipi1xVwDb .label text,#mermaid-svg-YTG4kohipi1xVwDb span{fill:#333;color:#333;}#mermaid-svg-YTG4kohipi1xVwDb .node rect,#mermaid-svg-YTG4kohipi1xVwDb .node circle,#mermaid-svg-YTG4kohipi1xVwDb .node ellipse,#mermaid-svg-YTG4kohipi1xVwDb .node polygon,#mermaid-svg-YTG4kohipi1xVwDb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YTG4kohipi1xVwDb .rough-node .label text,#mermaid-svg-YTG4kohipi1xVwDb .node .label text,#mermaid-svg-YTG4kohipi1xVwDb .image-shape .label,#mermaid-svg-YTG4kohipi1xVwDb .icon-shape .label{text-anchor:middle;}#mermaid-svg-YTG4kohipi1xVwDb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YTG4kohipi1xVwDb .rough-node .label,#mermaid-svg-YTG4kohipi1xVwDb .node .label,#mermaid-svg-YTG4kohipi1xVwDb .image-shape .label,#mermaid-svg-YTG4kohipi1xVwDb .icon-shape .label{text-align:center;}#mermaid-svg-YTG4kohipi1xVwDb .node.clickable{cursor:pointer;}#mermaid-svg-YTG4kohipi1xVwDb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YTG4kohipi1xVwDb .arrowheadPath{fill:#333333;}#mermaid-svg-YTG4kohipi1xVwDb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YTG4kohipi1xVwDb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YTG4kohipi1xVwDb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YTG4kohipi1xVwDb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YTG4kohipi1xVwDb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YTG4kohipi1xVwDb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YTG4kohipi1xVwDb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YTG4kohipi1xVwDb .cluster text{fill:#333;}#mermaid-svg-YTG4kohipi1xVwDb .cluster span{color:#333;}#mermaid-svg-YTG4kohipi1xVwDb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YTG4kohipi1xVwDb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YTG4kohipi1xVwDb rect.text{fill:none;stroke-width:0;}#mermaid-svg-YTG4kohipi1xVwDb .icon-shape,#mermaid-svg-YTG4kohipi1xVwDb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YTG4kohipi1xVwDb .icon-shape p,#mermaid-svg-YTG4kohipi1xVwDb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YTG4kohipi1xVwDb .icon-shape .label rect,#mermaid-svg-YTG4kohipi1xVwDb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YTG4kohipi1xVwDb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YTG4kohipi1xVwDb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YTG4kohipi1xVwDb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 国内审批场景

看表单 + 写意见 + 留痕迹
发明① 节点级一等组件

NodeWorkCheck 绑定 WF_Node
发明② 流程轨迹一体存储

意见 → Track.Msg / FWCView
发明③ 立场驱动分支

FWCView → 方向条件
发明④ 协作审批配置化

盲审 / 排序 / 未审展示
发明⑤ Entity+EnMap 自描述

30+ 属性分组可配置
配置即能力

实施零代码 / 少代码交付

问题一:审批 UI 每项目重复开发

解决 :将审核区抽象为与节点绑定的标准组件,运行态统一由 WorkCheck.vue 渲染;设计态通过 NodeWorkCheck.EnMap 配置,一次开发、千个流程复用

问题二:审批数据与流程轨迹脱节

解决 :意见、立场、签批图写入 Track 轨迹表MsgFWCViewWriteDB),与发送/退回/撤销同一数据模型。流程图、审批历史、审计报表均可从轨迹统一取数,业务表不再承载流程语义

问题三:「同意走 A、不同意走 B」难以配置

解决FWCView 预置立场选项,写入轨迹后直接作为方向条件 (如 @FWCView=同意)。业务人员择立场即驱动分支,无需在表单里隐藏字段或写脚本。

问题四:会签、盲审、职级排序需求碎片化

解决 :「协作模式」属性组------FWCMsgShow(仅看自己的意见)、FWCOrderModel(按时间或职级排序)、FWCIsShowTruck(展示未审人员)------将多人审批规则产品化、配置化,来自烟台、天业等真实项目的提炼。

问题五:签名、附件、默认意见等横切需求散落

解决SigantureEnabel 六种签名、FWCAth 审核附件、FWCDefInfo + FWCIsFullInfo 默认意见、CheckField 签批字段回写------全部纳入 NodeWorkCheck 统一配置,后端 beforeUpdateInsertAction 自动创建附件组件,开箱即用。

问题六:审批与日志/周报场景重复建设

解决FWCType 枚举扩展为审核、日志、周报、月报四种类型,同一套 UI 与存储机制服务多种「按节点记录」场景,降低重复开发。

3.3 发明价值量化(工程视角)

指标 无审核组件 有审核组件
单流程审批区开发 0.5~3 人天 0(配置)
历史意见展示 需单独查询开发 内置三种版式
立场驱分支 需表单字段 + 表达式 FWCView 配置
会签盲审 需定制逻辑 属性开关
轨迹审计一致性 业务表 + 轨迹双轨 轨迹单一数据源
移动端适配 另起页面 共用 NodeWorkCheck 契约

四、审核组件在架构中的位置

#mermaid-svg-sxmI7416H7zYfBhH{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sxmI7416H7zYfBhH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sxmI7416H7zYfBhH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sxmI7416H7zYfBhH .error-icon{fill:#552222;}#mermaid-svg-sxmI7416H7zYfBhH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sxmI7416H7zYfBhH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sxmI7416H7zYfBhH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sxmI7416H7zYfBhH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sxmI7416H7zYfBhH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sxmI7416H7zYfBhH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sxmI7416H7zYfBhH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sxmI7416H7zYfBhH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sxmI7416H7zYfBhH .marker.cross{stroke:#333333;}#mermaid-svg-sxmI7416H7zYfBhH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sxmI7416H7zYfBhH p{margin:0;}#mermaid-svg-sxmI7416H7zYfBhH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sxmI7416H7zYfBhH .cluster-label text{fill:#333;}#mermaid-svg-sxmI7416H7zYfBhH .cluster-label span{color:#333;}#mermaid-svg-sxmI7416H7zYfBhH .cluster-label span p{background-color:transparent;}#mermaid-svg-sxmI7416H7zYfBhH .label text,#mermaid-svg-sxmI7416H7zYfBhH span{fill:#333;color:#333;}#mermaid-svg-sxmI7416H7zYfBhH .node rect,#mermaid-svg-sxmI7416H7zYfBhH .node circle,#mermaid-svg-sxmI7416H7zYfBhH .node ellipse,#mermaid-svg-sxmI7416H7zYfBhH .node polygon,#mermaid-svg-sxmI7416H7zYfBhH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sxmI7416H7zYfBhH .rough-node .label text,#mermaid-svg-sxmI7416H7zYfBhH .node .label text,#mermaid-svg-sxmI7416H7zYfBhH .image-shape .label,#mermaid-svg-sxmI7416H7zYfBhH .icon-shape .label{text-anchor:middle;}#mermaid-svg-sxmI7416H7zYfBhH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sxmI7416H7zYfBhH .rough-node .label,#mermaid-svg-sxmI7416H7zYfBhH .node .label,#mermaid-svg-sxmI7416H7zYfBhH .image-shape .label,#mermaid-svg-sxmI7416H7zYfBhH .icon-shape .label{text-align:center;}#mermaid-svg-sxmI7416H7zYfBhH .node.clickable{cursor:pointer;}#mermaid-svg-sxmI7416H7zYfBhH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sxmI7416H7zYfBhH .arrowheadPath{fill:#333333;}#mermaid-svg-sxmI7416H7zYfBhH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sxmI7416H7zYfBhH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sxmI7416H7zYfBhH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sxmI7416H7zYfBhH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sxmI7416H7zYfBhH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sxmI7416H7zYfBhH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sxmI7416H7zYfBhH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sxmI7416H7zYfBhH .cluster text{fill:#333;}#mermaid-svg-sxmI7416H7zYfBhH .cluster span{color:#333;}#mermaid-svg-sxmI7416H7zYfBhH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sxmI7416H7zYfBhH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sxmI7416H7zYfBhH rect.text{fill:none;stroke-width:0;}#mermaid-svg-sxmI7416H7zYfBhH .icon-shape,#mermaid-svg-sxmI7416H7zYfBhH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sxmI7416H7zYfBhH .icon-shape p,#mermaid-svg-sxmI7416H7zYfBhH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sxmI7416H7zYfBhH .icon-shape .label rect,#mermaid-svg-sxmI7416H7zYfBhH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sxmI7416H7zYfBhH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sxmI7416H7zYfBhH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sxmI7416H7zYfBhH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 回表单层
运行态
设计态
同页嵌入
WF_Node 节点
NodeWorkCheck 实体

EnMap 元数据配置
WorkCheck.vue 审核组件 UI
Track 流程轨迹表

Msg / FWCView / WriteDB
FrmWorkCheck 运行时描述
节点表单 NDxxx

业务字段

  • 配置实体NodeWorkCheck(TS:TS.WF.Template.NodeWorkCheck,C#:BP.WF.Template.NodeWorkCheck),主键 NodeID,映射 WF_Node 上 FWC 系列字段。
  • 运行描述FrmWorkCheck 读取节点配置,供前端渲染。
  • 设计器入口NodeExt.tsAddRM_EnOnly('审核组件', 'TS.WF.Template.NodeWorkCheck', ...),与节点基本属性解耦。

五、实体设计:NodeWorkCheck

驰骋采用 Entity + EnMap 高代码元数据模式,将审核组件的全部能力声明为可配置属性:

216:222:Vue3/src/WF/Admin/AttrNode/NodeWorkCheck.ts 复制代码
export class NodeWorkCheck extends EntityNodeID {
  constructor(pkval?: number) {
    super('TS.WF.Template.NodeWorkCheck', 'BP.WF.Template.NodeWorkCheck');
    if (!!pkval) {
      this.NodeID = pkval;
    }
  }

属性常量类 NodeWorkCheckAttr 集中定义字段键名,便于前后端与业务代码引用:

108:211:Vue3/src/WF/Admin/AttrNode/NodeWorkCheck.ts 复制代码
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 仅查看自己的审核信息

七、核心枚举类型

11:106:Vue3/src/WF/Admin/AttrNode/NodeWorkCheck.ts 复制代码
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 初始化:

  • FWCShowModeldisplayMode(三种渲染模式)
  • FWCSta → 是否可编辑
  • FWCListEnableFWCTrackEnable 等 → 子区域显隐

Toolkit 精简版(Vue3/src/Toolkit/WorkCheck/NodeWorkCheck.ts)仅拉取 FWCShowModelFWCView,展示最小集成路径。

8.2 意见保存

发送时:意见 → Track.Msg;立场 → Track.FWCView;签批 → WriteDBCheckField 字段。FWCVer 控制覆盖或追加。

8.3 典型配置速查

场景 关键配置
标准串行审批 FWCSta=启用FWCShowModel=轨迹时间轴FWCView=同意,不同意SigantureEnabel=图片签名
会签盲审 FWCMsgShow=仅显示自己的意见FWCOrderModel=按接受人员列表顺序FWCIsShowTruck=true
秘书代录 FWCDefInfo=同意FWCIsFullInfo=trueIsChangeFWCTime=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 在线体验与下载源码。