企业合同模板管理设计:占位域定义、版本留痕与富文本/OnlyOffice 双编辑器
🌐 演示地址:http://ruoyioffice.com | 📦 源码1·GitHub:ruoyi-office | 📦 源码2·GitCode:ruoyi-office | 📦 源码3·Gitee:ruoyi-office | 💬 微信:17156169080(备注「RuoYi Office」)
合同模板是企业合同风控的第一道闸门:模板对了,一线业务照着填就八九不离十;模板乱了,风险条款、金额口径、违约责任全凭个人发挥。可现实里,模板往往躺在共享盘的某个文件夹里,“合同模板_最新”“合同模板_法务改”"合同模板_勿删"混作一团,谁也说不清哪份是现行有效版。合同模板管理的本质,是把散落的 Word 范本收进一个有分类、有占位域、有版本、能锁定的模板库,让"标准条款"真正标准起来。 本文以 RuoYi Office 的合同模板模块为样本,拆解一个能守住条款一致性的模板库该长什么样,面向法务、实施顾问与做合同系统选型的同学。
▲ 合同模板管理全景:① 建模板(分类/类型/编辑器)→ ② 定义占位域字段 → ③ 编辑模板正文(富文本 / OnlyOffice)→ ④ 每次保存留痕版本 → ⑤ 起草时被引用套用(记 usageCount)→ ⑥ contentEditable 决定成稿能否二次编辑
引言:合同模板,管的是"条款一致"
"存几份模板"听着简单,做成企业级能力要回答一连串问题:
难点一:现行版说不清。共享盘里一堆同名模板,法务改了没人同步,业务随手拿一份旧的就用,风险条款早已过时。
难点二:改哪填哪没标记。哪些地方是"每份合同都要改的"(甲乙方、金额、日期),哪些是"绝对不能动的"(违约责任、争议解决),模板里毫无标记,全靠人肉判断。
难点三:改错了退不回。法务这次改动出了纰漏,想退回上一版却找不到——Word 的版本管理约等于没有。
难点四:轻重场景一刀切。简单的服务确认函用富文本就够,复杂的带表格、页眉页脚、盖章位的正式合同必须高保真——模板得能适配不同复杂度。
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
RuoYi Office 的解法是把模板做成"分类模板库 + 占位域定义 + 双编辑器 + 版本留痕 + 可编辑锁定"的受控体系。下面拆开看。
一、功能拆解:合同模板模块的组成
一个能守住条款一致的模板库,由这几块构成:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
价值在于:把散落的 Word 范本,升级为分类清晰、字段受控、版本可溯、能锁定的企业模板资产。
二、数据模型:模板 + 版本双表
合同模板 contract_template 承载模板本体与治理属性:
public class ContractTemplateDO extends TenantBaseDO {private String name; // 模板名称private Long categoryId; // 合同分类private Integer contractType; // 合同类型(字典 contract_type)private Integer editorType; // 编辑器类型(1富文本HTML 2OnlyOffice)private Integer contentEditable; // 生成正文是否允许二次编辑(1可 0只读)private String contentHtml; // 富文本模板正文(含占位域标记)(typeHandler = JacksonTypeHandler.class)private List<Map<String, Object>> fieldsJson; // 占位域定义(数组)private String docFileUrl; // 原始 docx(OnlyOffice 用)private String contentPreview; // 首页文本预览(POI 抽取,卡片展示)private Integer version; // 当前版本号private Integer usageCount; // 被起草引用次数private Integer status; // 状态(0正常 1停用)}
模板版本 contract_template_version 每次保存留痕一版,便于追溯与回滚:
|
|
|
|
|---|---|---|
template_id
version
|
|
|
content_html |
|
|
fields_json |
|
|
remark |
|
|
status |
|
|
为什么 editorType 和 contentEditable 是两个独立开关? 因为它们管的是两件事:editorType 决定"用什么编辑器编模板"(轻量富文本 vs 高保真 OnlyOffice),contentEditable 决定"由这个模板生成的合同正文能不能被业务二次改"。前者是编辑体验的取舍,后者是风控红线的取舍——把标准条款模板设为不可编辑,业务就只能填占位域、动不了正文,条款一致性由此得到硬保障。
三、模板流转:从创建到被引用
一份模板的生命周期,是一条从建立到复用、持续留痕的流转线:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其中最值得说的是在线编辑保存即留痕:无论富文本还是 OnlyOffice,每次保存都写一条版本记录。以 OnlyOffice 模板为例,文档服务器回存时后端不仅更新模板文件地址,还顺带抽取首页文本做卡片预览:
// OnlyOffice 回存合同模板:更新文件地址 + 生成首页预览if (BIZ_TYPE_TEMPLATE.equals(bizType) && bizId != null) {templateService.updateTemplateDocFileUrl(bizId, newUrl);// best-effort:纯本地 POI 抽取首页文本,供模板卡片直观展示String preview = ContractDocxUtils.extractPreview(content, 400);if (StrUtil.isNotBlank(preview)) {templateService.updateTemplateContentPreview(bizId, preview);}}
版本留痕让模板"改错能退",使用统计(usageCount)让运营者看清"哪些模板真正被用、哪些形同虚设"——模板库因此从"存文件的文件夹"变成可运营的资产。
四、页面深拆:从起草引用到台账
合同起草列表:起草时从模板库选模板套用,模板的引用次数在此累积。

▲ 合同起草:起草合同时选用模板库中的标准范本,模板被引用即累加 usageCount
文件中心:模板原始文件与生成产物统一纳入文件基础设施管理。
▲ 文件中心:模板 docx、生成的正文文件统一由文件服务托管,预览下载一体
合同台账:由模板生成的正文随合同一并归档,模板的价值最终落在每一份成稿上。
▲ 合同台账:套用模板成稿的合同进入台账,条款标准统一,正文可溯源模板版本
五、选型视角:模板管理的价值在"标准 + 可溯"
模板工具很多,企业级模板管理的分水岭在于标准化与可追溯:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一句话:模板的价值不在"存了几份范本",而在"让现行版唯一、让可填字段受控、让每次改动可追溯、让标准条款动不了"。分类守住归置、占位域守住字段、版本守住回溯、锁定守住条款——这四点是共享盘永远做不到的。
六、方案亮点
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
七、常见问题 FAQ
Q1:占位域和普通文字有什么区别?
占位域是模板里预先标记的"每份合同都要填"的字段(如甲方名称、金额),有结构化定义(fieldsJson);起草时系统按定义收集值并回填正文,普通文字则是固定条款,不参与填充。
Q2:富文本模板和 OnlyOffice 模板怎么选?
简单函件、条款不含复杂排版的可用富文本(轻、免额外部署);带表格、页眉页脚、盖章位、需与 Word 完全一致的正式合同用 OnlyOffice 高保真。系统按模板 editorType 统一,选型细节见另一篇《在线文档编辑器选型》。
Q3:改了模板会影响已经签好的合同吗?
不会。合同正文引用的是起草时的模板版本号,模板升级只影响之后新起草的合同,历史合同正文保持稳定;同时版本表留痕,可对比与回滚。
Q4:怎么防止业务把标准条款改了?
把模板 contentEditable 设为只读(0),由该模板生成的合同正文在起草页仅可填占位域、不可修改正文,标准条款得到硬保障。
Q5:怎么知道哪些模板真正在用?
模板记录被起草引用的次数(usageCount),运营者可据此识别高频模板与"僵尸模板",及时下线过期范本、优化常用模板。
Q6:模板能按合同类型区分吗?
可以。模板带合同分类(categoryId)与合同类型(contractType,字典),可按销售/采购/服务/租赁等类型分别维护范本,起草时按类型筛选套用。
结语
合同风控的第一步,不是审得多严,而是"业务照着填的那份模板本身对不对"。RuoYi Office 把合同模板做成"分类模板库 + 占位域定义 + 双编辑器 + 版本留痕 + 可编辑锁定"的受控体系,用分类让现行版唯一、用占位域让字段受控、用版本让改动可溯、用锁定让标准条款动不了。对法务和实施顾问来说,模板管理的意义,不是"多存几份范本",而是让"标准条款"这四个字真正落地到每一份合同上。
🌐 演示地址:http://ruoyioffice.com | 📦 源码·Gitee:ruoyi-office | 💬 微信:17156169080(备注「RuoYi Office」)

