驰骋审核组件:审批场景的原生解决方案
出品 :驰骋低代码 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 驰骋审核组件的核心发明点
#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 轨迹表 (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 契约 |
四、审核组件在架构中的位置
#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.ts中AddRM_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 初始化:
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 在线体验与下载源码。