2026 合同管理系统推荐:SpringBoot3+Vue3架构,支持在线编辑,根据模版生成合同正文
🌐 文档地址:https://ruoyioffice.com
📦 源码1·GitHub:https://github.com/yuqing2026/ruoyi-office
📦 源码2·GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office
📦 源码3·Gitee:https://gitee.com/yqzy1688/ruoyi-office
💬 微信:17156169080(备注「RuoYi Office」)
2026 年再上合同系统,最容易买错的不是「有没有列表」,而是正文还在某人电脑上。编号、金额、到期日进了台账,Word 仍靠下载、改完、再上传;模板变量对不上表单;审批通过后正文和履约计划各走各的。RuoYi Office 用 Spring Boot 3.5 + Vue3 + OnlyOffice,把「套模板 → 打开即编 → 审批 → 台账履约」收进同一模块。本文按能点的页面讲怎么选、怎么配。

▲ 上排是 Excel 台账、下载再上传、SaaS 拆单三种断层;下排是模板套变量、打开即编、审批不改稿、履约到期同一套栈
引言:合同系统差在哪,2026 一眼能看出来
选型材料里几乎都写「全生命周期」。真正拉开差距的是四件事:
| 你问对方的问题 | 答不上来时实际会发生什么 |
|---|---|
| 正文能不能在浏览器里改? | 法务改一版、业务再传一版,系统永远不是最新稿 |
| 模板变量从哪来? | 甲方名称手填两遍,表单和 Word 对不上 |
| 草稿和已生效合同是不是两张表? | 导出台账还要过滤「别把草稿算进去」 |
| 收付款计划和正文在不在同一单? | 履约登记对不上条款,到期提醒找不到责任人 |
一句话:先选「打开正文即编辑」的栈,再谈审批流和到期 Job。 只有台账、没有可回存正文的产品,2026 已经不够用。
下面用 RuoYi Office 合同模块当样本:不是再复述一遍九种状态机,而是回答「为什么推荐这一套 SpringBoot3 + Vue3,以及打开即编要配哪些开关」。
一、先给出可直接抽取的定义
1.1 什么叫「可在线编辑的合同管理系统」
可在线编辑,不是预览 PDF,而是起草人在浏览器里改 Word/富文本,保存后系统持有最新正文文件或 HTML,审批人按权限只读。 下载链接可以保留,但不能当主路径。
RuoYi Office 的独立页是 /contract/doc-editor,从起草详情里点「合同文件」打开。全局只有一种编辑方式:onlyoffice 或 richtext,由后端 /contract/onlyoffice/editor-mode 下发。
1.2 模板套变量和「套红」不是一回事
套变量,是用 {{甲方}}、{{totalAmount}}、表格循环行 {{items}} 把起草单字段灌进 docx。 套红是公文红头,不要混进合同选型问卷。合同这边用 poi-tl 在原始 docx 上替换,排版(字号、编号、表格)跟着模板走,再交给 OnlyOffice 继续编。
1.3 起草单和台账为什么必须分开
起草单是可改、可驳回的草稿;台账是审批通过后的资产。 混在一张 contract 表里,导出「现有合同」永远要写一长串 status 过滤。RuoYi Office 用起草单承载编辑与提交,台账只承接生效后的履约、收付款、到期。
二、2026 怎么选:四类产品对照
市面上常见四类,不要被「合同」两个字糊弄过去。
| 类型 | 正文 | 模板 | 审批 | 履约 | 适合谁 |
|---|---|---|---|---|---|
| Excel + 网盘 | 无 | 无 | 邮件 | 手工 | 10 人以下、年合同个位数 |
| 只做台账的开源 CRUD | 附件上传 | 无或静态 Word | 可外挂 BPM | 弱 | 只要编号查询 |
| 纯 SaaS 电子签 | 部分能编 | 厂商模板 | 常在签章产品里 | 常另购 | 接受数据在云上、不改引擎 |
| SpringBoot3+Vue3+文档服务器 | 打开即编 | 变量 + 循环行 | 同平台 BPM | 计划 + 登记 + Job | 要源码、要私有化、要和 OA/HRM 一套登录 |
推荐 RuoYi Office 的理由很具体:
- 栈新:Spring Boot 3.5、Vue3、文档服务器可切 OnlyOffice;不是 2018 年的 iframe 套 Word 插件。
- 正文在系统里:生成 docx 后点文件名即可编,回存换新 URL,避免缓存读旧稿。
- 和审批同登录:合同发起审批走自定义表单路径
/contract/contract-info-detail,不必把 Word 再导进另一套 OA。 - 履约不另买模块:收付款计划、履约登记、到期提醒在同一合同域。
不推荐它当「纯电子签 SaaS」替代品:如果你只需要第三方签章、不需要私有化源码,买签章云服务更省。本文推荐的是可二开的合同管理,签章可以后接,正文和台账必须先在自己库里。
三、打开即编:全局一种 editorMode
3.1 为什么不能前端自己选编辑器
简单确认函用富文本就够;正式销售合同要 Word 级排版。如果每个页面自己判断,会出现「模板用 OnlyOffice、起草用富文本、台账又变成附件」三套体验。RuoYi Office 规定:整个系统统一一种方式,启动后读一次、缓存,模板和正文共用。
后端接口:
@GetMapping("/editor-mode")
public CommonResult<String> getEditorMode() {
return success(onlyOfficeService.getEditorMode());
}
public String getEditorMode() {
String configured = StrUtil.trimToNull(properties.getEditorMode());
if (configured != null) {
return "richtext".equalsIgnoreCase(configured)
? "richtext" : "onlyoffice";
}
// 未配时:启用且有文档服务器地址 → onlyoffice,否则富文本
return isEnabled() ? "onlyoffice" : "richtext";
}
显式配置优先;没配就看文档服务器是否启用。前端失败时降级富文本,避免起草页卡死。
3.2 前端只读一次
const editorMode = ref<ContractEditorMode>('richtext');
let loaded = false;
async function ensureLoaded(): Promise<ContractEditorMode> {
if (loaded) {
kickOffWarm();
return editorMode.value;
}
editorMode.value =
(await getContractEditorMode()) === 'onlyoffice'
? 'onlyoffice'
: 'richtext';
loaded = true;
kickOffWarm();
return editorMode.value;
}
OnlyOffice 模式下会空闲预热文档服务器的 api.js,减少第一次打开正文的白屏。同地址只加载一次脚本,避免重复注入冲突。
3.3 独立编辑页怎么开
起草详情里「合同文件」不是下载按钮,而是打开独立页。可编辑时先落草稿拿到 id,再带 bizType、id、editable、版本参数 v。版本跟着文件 URL 变,避免浏览器复用同名弹窗时一直显示旧稿。
真机起草详情里能看到相对方、金额、正文来源和文件链接:

▲ 起草单上填的是结构化数据;正文通过「合同文件」进入在线编辑,而不是先另存到桌面
独立编辑页标题会标明当前是「高保真在线编辑」还是「富文本编辑」:

▲ /contract/doc-editor:OnlyOffice 模式走文档服务器;富文本模式走编辑器保存接口
OnlyOffice 保存走文档服务器回调,前端不一定有「保存」按钮;富文本模式才在页头提供保存,写回 contentHtml。
四、模板套变量:占位符必须落在对的位置
模板库是卡片墙,不是另一张 Excel。选模板后可以「使用该模版起草」,起草单带上 templateId。

▲ 模板是可复用的正文资产;卡片上能进设计、能直接起草,不要做成只有管理员看得见的隐藏菜单
生成高保真 Word 时,后端用 poi-tl 灌数据。这里有三条必须写进实施清单的约定:
| 约定 | 正确做法 | 写错时的现象 |
|---|---|---|
| 文档级字段 | {{合同名称}} / {{totalAmount}} | 占位符原样留在 Word 里 |
| 金额大写 | {{amount2CN(totalAmount)}} 需公式语法 | 普通 {{ }} 识别不了函数 |
| 明细 / 收付款循环 | 标记必须在表格单元格内,同行字段用 [itemName] | 段落里写 {{items}} 会 templateRow 为空,整份生成失败 |
核心生成逻辑(节选):
public String generateDocx(ContractInfoDO info, String docTemplateUrl) {
byte[] bytes = sanitizeLoopRowVMerge(downloadBytes(docTemplateUrl));
FormulaModel values = new FormulaModel();
values.putAll(resolveFieldValues(info));
boolean itemsLoop = isTagInsideTable(bytes, "items");
boolean plansLoop = isTagInsideTable(bytes, "paymentPlans");
values.put("items", itemsLoop ? buildItemRows(info.getId()) : "");
values.put("paymentPlans", plansLoop ? buildPaymentRows(info.getId()) : "");
ConfigureBuilder builder = Configure.builder()
.buildGrammerRegex(FORMULA_AWARE_GRAMMER_REGEX);
if (itemsLoop) {
builder.bind("items", new LoopRowTableRenderPolicy(true));
}
if (plansLoop) {
builder.bind("paymentPlans", new LoopRowTableRenderPolicy(true));
}
// 文件名带时间戳,避免同名覆盖导致编辑器不刷新
String fileName = info.getContractName() + "_" + System.currentTimeMillis() + ".docx";
return stripQuery(fileApi.createFile(out.toByteArray(), fileName, "contract", DOCX_MIME));
}
模板里如果把明细行设了纵向合并(vMerge),poi-tl 复制行时会把副本当成续行,结果「明细只剩第一行」。生成前会剥掉循环行的 vMerge。这是实施时最容易被当成「代码没灌数据」的坑。
模板还可以规定「生成后是否允许二次编辑」。contentEditable = false 时,OnlyOffice 和富文本都只读,适合「标准文本不准改、只改填空」的法务模板。
五、台账与履约:正文编完之后系统还要干什么
打开即编解决的是稿在不在系统里。合同能不能交货、能不能收款,靠台账。
台账列表是查询面,不是编辑面:

▲ 台账列表给法务/财务查已成立合同;草稿不应出现在这里
进台账详情切「收付款计划」,能看到待收付 / 已收付 / 已逾期。履约登记会回写计划并汇总已履约金额。到期前 N 天由定时任务扫,而不是靠谁记得续签。

▲ 计划和正文同一合同域;不要把回款另做一张跟合同编号对不上的 Excel
和「只有在线编辑、没有台账」的文档产品对比:那类产品适合协作写稿,不适合当合同系统。2026 选型要把「编」和「履约」写进同一张验收表。
起草态与资产态对照:
| 维度 | 起草单 | 台账 |
|---|---|---|
| 谁在改 | 起草人、被驳回后的修改 | 原则上不改正文,改走变更流程 |
| 正文 | 可生成、可在线编、可上传 | 已生效文本,审批中只读 |
| 查询 | 我的草稿 / 审批中 | 公司现有合同资产 |
| 下游 | 提交 BPM | 收付款、履约登记、到期提醒 |
三条流程(发起审批、变更、签署)是否插入签署环节,由配置 signEnabled 决定:有的公司审批通过即生效,有的必须回传扫描件。同一套代码兼容两种模式,不要为「要不要盖章」再买一套系统。
六、文档 key 与回存:打开能编,还要改完能看见
OnlyOffice 文档服务器按 document.key 缓存。key 不变就会读旧文件。RuoYi Office 的 key 种子是 bizType + bizId + fileUrl,再拼一次打开用的短 id。这样:
- 保存后换新 URL → 新 key,能看到新稿;
- 两个模板碰巧同一存储路径 → 仍因 bizId 不同而分开;
- 某次下载失败被服务器缓存成「假文档」→ 下次打开换 openId,不永久黑屏。
下载和回调都带短时令牌,文档服务器拉文件、回写文件时校验,不把原始存储地址裸暴露到公网。回调识别 bizType:模板回写模板文件,合同回写 contractDocUrl。
实施时文档服务器必须能访问到后端的 download / callback 地址(callbackBaseUrl)。只把前端 5800 配进文档服务器是不够的——编辑器在浏览器里,拉文件的是文档服务器进程。
七、和「下载再上传」对比:同一条操作链
把一次改条款走两遍:
| 步骤 | 下载再上传 | 打开即编 |
|---|---|---|
| 找到合同 | 台账里搜编号,再去网盘找 Word | 起草单/台账点文件名 |
| 修改 | 本地 Word,文件名 最终版-2-法务改.docx | 浏览器里改,autosave |
| 回系统 | 有人上传、有人忘了 | 回调写新 URL |
| 审批人看到的 | 不一定是最新附件 | 只读打开同一份 |
| 履约对条款 | 再打开网盘 | 台账详情同一单 |
这就是推荐「2026 最新可在线编辑」时,真正要买的能力。UI 漂不漂亮是加分项;回存和权限从后端下发才是及格线。
权限不要前端自己写死:同一份文档,起草人 edit=true,审批预览 editable=0。模板禁止二次编辑时,即便登录人是起草人,也只能看。
八、页面地图:验收时按这条点
| 菜单 / 路由 | 验收看什么 |
|---|---|
合同模板 /contract/template | 卡片能设计、能「使用该模版起草」 |
合同起草 /contract/contract-draft-list | 草稿列表;点详情进起草单 |
起草详情 /contract/contract-info-detail | 相对方、金额、模板/上传、合同文件链接 |
正文编辑 /contract/doc-editor | 能改、能回存;只读时没有可写工具栏 |
合同台账 /contract/contract-info-list | 只有生效后资产 |
| 台账详情 收付款计划 | 计划行与逾期状态 |
自定义流程表单的创建路径也指向起草详情,这样「待办里点办理」看到的是同一张单,而不是通用表单设计器里再画一遍合同字段。
台账详情还有「合同文件」页签,和起草单上的文件链接是同一份资产:生效后从这里打开只读预览,履约登记、发起变更、归档、终止仍在页头。
正文来源只有两条,实施时不要再发明第三条:
| 来源 | 用户动作 | 系统写出的字段 |
|---|---|---|
| 套用模板 | 选模板 → 填可填项 → 生成 | templateId + contractDocUrl 或 contentHtml |
| 上传现成文件 | 上传 doc/docx/pdf | contractDocUrl(contentEditable 恒为可编) |
上传组件在 maxNumber=1 时 v-model 是字符串不是数组。如果按数组取 [0],会把 URL 的第一个字符写进库,预览必挂。这是前端最容易用「看起来上传成功了」掩盖的 bug。
相对方不要每张合同手打一遍公司名。起草单应弹出相对方选择(名称、信用代码、地址),套变量时 {{甲方}} 才能稳定。启用 CRM 时可以从客户带入;未启用就用合同域自己的相对方表。选型问卷里要问清「相对方是否已有主数据」,避免上线后再对账对出两套名称。
九、配置清单:上线前对这 8 项
| 项 | 建议 | 配错的现象 |
|---|---|---|
| 全局 editorMode | 正式合同用 onlyoffice | 有的页富文本、有的页 Word,用户不会用 |
| 文档服务器地址 | 独立进程,HTTPS 与后端互信 | 编辑器转圈、download 401 |
| callbackBaseUrl | 文档服务器能访问的后端根 | 能打开不能保存 |
| JWT 密钥 | 下载令牌与回调令牌同一套 | 回调 401,正文不回存 |
| 模板循环行 | 标记在表格单元格,同行 [字段] | 明细空或生成失败 |
| 文件名唯一 | 生成带时间戳,存库去 query | 改了还是旧稿 |
| 模板二次编辑 | 法务锁定用 contentEditable=false | 标准文本被业务改花 |
| 签署开关 | 按公司是否必须回传扫描件 | 审批通过却不能进台账,或反过来跳过签署 |
本地开发可以先富文本把起草、审批、台账跑通,再切 OnlyOffice。不要反过来:文档服务器没就绪时硬切 onlyoffice,起草人会卡在「暂无可在线编辑的正文文件」。独立编辑页在没有 contractDocUrl 时会明确提示:请先在起草单生成或上传合同正文。这是预期空态,不是 404。
数据对象可以记三张表的分工,避免实施时再加一张「合同附件汇总」Excel:
| 表 | 存什么 | 不存什么 |
|---|---|---|
| 起草单 | 草稿字段、模板、正文 URL/HTML、流程状态 | 不要当现有合同资产导出 |
| 台账 | 生效后的编号、金额、状态、履约进度 | 不要在这里直接改条款 |
| 收付款计划 | 计划金额、日期、已收付、逾期 | 不要和财务总账科目混一张表 |
Spring Boot 3.5 这一档,定时扫描到期与逾期是相邻能力:到期前 N 天发站内信,逾期改计划状态。本文不展开 Job 参数,验收时只要能在台账详情看到计划行和状态标签即可。
十、配的时候容易踩的坑
坑 1:循环行写在段落里。 {{items}} 必须在表格单元格。生成日志里会警告「未放在表格单元格内,已跳过明细循环」。看起来合同生成成功了,明细却是空的。
坑 2:循环行开了纵向合并。 只显示第一条明细。生成前会 sanitize vMerge;自己用 Word 调模板时不要把数据行合并。
坑 3:回存文件名不变。 同名覆盖后 URL 不变,编辑器不重挂载。文件名必须带时间戳,存库时去掉预签名 query,避免二次签名 404。
坑 4:文档服务器访问不到 download。 浏览器能打开合同页,编辑器花屏或报下载失败。检查 callbackBaseUrl 是否是文档服务器能打到的后端地址。
坑 5:把云盘当合同。 企业云盘解决的是文件协作;合同还要相对方、审批、履约计划。不要用「能在线编 Word」替代合同模块。
坑 6:草稿进台账导出。 双表分离就是为了避免这事。实施时不要图省事把两张表并回去。
坑 7:编辑页当普通菜单打开。 /contract/doc-editor 是无侧栏的纯净页,应从起草单文件链接弹出。把它挂进菜单,用户会迷路,也容易丢掉 bizType/id/v 参数。
坑 8:把 OnlyOffice 和云盘编辑器配成两套 key 规则。 合同正文的 document.key 必须含业务主键。云盘文件协作可以按文件版本号;两套混用会出现「该文件版本已经改变了」。合同模块不要复用云盘的 key 生成函数,除非种子字段对齐。
选型谈判时可以要对方现场打开一份正式合同,改一个条款,刷新页面仍在。做不到这一步,再多「全生命周期」文案也不要签。RuoYi Office 用独立编辑页 + 回存换 URL 把这一步做成默认路径;富文本模式则靠页头保存写回 HTML。两种模式都算打开即编,差别只在排版保真度。
模板卡片上的「引用次数」能看出哪份标准文本真在用。引用为 0 的模板可以先冻结,避免法务维护一套没人套的 Word。起草从卡片「起草」进入时会带 templateId,比在起草单里再找一次模板更不容易选错版本。
十一、和周边模块怎么划界
| 能力 | 放哪 | 不要放哪 |
|---|---|---|
| 相对方主数据 | 合同相对方 / CRM 客户(按你们是否启用 CRM) | 不要每个合同手打一遍却不落主数据 |
| 打开即编 | 合同 doc-editor | 不要只在云盘里编再手工贴 URL |
| 审批 | BPM + 合同自定义表单 | 不要邮件传 Word |
| 履约金额 | 合同履约登记 | 不要财务另做一套对不上编号的表 |
| 到期提醒 | 合同配置 + 通知模板 | 不要只靠日历备忘 |
启用 CRM 时,商机转合同可以带相对方;没启用 CRM 时,合同模块自己维护相对方即可。选型时把「是否必须先上 CRM」问清楚,避免被捆绑销售。
私有化还要问三句和 SaaS 无关的:文档服务器能否部署在内网;回调是否必须走公网;正文文件是否进对象存储还是本地盘。RuoYi Office 正文走文件服务,预签名下载给文档服务器拉文件,不把存储密钥下发到浏览器。这和「把 Word 插件装在每个员工电脑」完全不是一个运维模型。
2026 年常见的错误采购是:买了电子签账号,再买一个网盘,再用 Excel 做台账。三份订阅加起来比一套可二开合同模块更贵,还对不上编号。打开即编不是为了炫技,是为了让法务改条款的那 15 分钟发生在系统里。
演示环境里模板卡片能直接「起草」,起草单能提交审批,台账能看收付款——这三条点得通,才叫合同系统,而不是「带附件的 CRUD」。
采购或立项时可以把验收写成签字项,避免上线后才发现「其实还是下载 Word」:
| 序号 | 验收动作 | 通过标准 |
|---|---|---|
| 1 | 用模板起草一份销售合同 | 相对方、金额进入表单,正文由模板生成 |
| 2 | 点合同文件进入编辑 | 浏览器内可改,不是只触发本地下载 |
| 3 | 保存后关闭再打开 | 看到刚改的字,而不是旧稿 |
| 4 | 提交审批,审批人打开 | 正文只读,结构化字段按节点权限 |
| 5 | 生效后进台账看收付款 | 计划行金额与合同总额对得上 |
| 6 | 到期前看提醒 | 能找到责任人,而不是只有日期字段 |
六条里第 2、3 条专门卡「可在线编辑」。过不了就不要在合同里写 OnlyOffice/在线编辑作为已交付能力。RuoYi Office 把第 2 条做成 /contract/doc-editor,把第 3 条做成文件名时间戳 + document.key 含 URL。你可以按同一张表验收其它厂商。
十二、快速体验
在线演示:https://ruoyioffice.com/web/(账号 admin / admin123)
推荐路径:
- 打开「合同模板」,确认卡片能点「使用该模版起草」;
- 进入起草详情,看相对方、金额、正文来源(模板 / 上传);
- 生成或确认已有「合同文件」后点击文件名,看是否进入在线编辑而不是直接本地下载;
- 改几个字保存(OnlyOffice 靠自动保存/强制保存),关掉再打开,确认是新稿;
- 提交审批后用审批人打开,确认正文只读;
- 到「合同台账」找生效合同,打开「收付款计划」,对照金额是否与起草单一致。
本地启动:后端单体默认 48080,前端 pnpm dev:antd 默认 5800。文档服务器要单独部署,并保证能回调到后端 /admin-api/contract/onlyoffice/callback。
源码仓库:GitHub:https://github.com/yuqing2026/ruoyi-office | GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office | Gitee:https://gitee.com/yqzy1688/ruoyi-office
版本锚点:本文描述的是 Spring Boot 3.5 + Vue3 合同模块「全局 editorMode + poi-tl 套变量 + 起草单/台账分离」这一档。到期逾期扫描、云盘在线编辑是相邻能力,不要把三篇文章的菜单配成同一个入口。
和已有合同长文怎么分工:讲九种状态、三条 BPM、双表分离的看全生命周期那篇;讲富文本与文档服务器脚本加载、回存命名的看在线编辑双模式那篇;本文只回答「2026 怎么选一套可打开即编的 SpringBoot3 + Vue3 合同管理,以及验收时点哪几个菜单」。不要三篇复制同一段 poi-tl 循环行说明当续集。
结语
2026 推荐一套 SpringBoot3 + Vue3 合同管理,核心不是再列功能清单,而是把正文从桌面搬进浏览器,并且和模板、审批、履约共用登录与数据。Excel 适合启动期;纯台账 CRUD 适合只查编号;SaaS 电子签适合只做签署。要源码、要私有化、要打开即编,就按「模板变量 → 独立编辑页 → 双表分离 → 收付款计划」这条链验收。
相关阅读建议:合同全生命周期状态机看起草到归档怎么推;在线编辑双模式回存看富文本与文档服务器怎么切换。本文只解决「2026 怎么选、打开即编怎么配」。
欢迎在评论区说说你们现在是下载再上传,还是已经在浏览器里改 Word。若模板循环行只出第一行,也可以对照本文的表格单元格和 vMerge 两条先查。
附录:打开即编相关接口(便于对照 Network)
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /contract/onlyoffice/editor-mode | 全局 onlyoffice / richtext |
| GET | /contract/onlyoffice/document-server-url | 前端预热 api.js |
| GET | /contract/onlyoffice/config | 下发 document.key、权限、callback |
| GET | /contract/onlyoffice/download | 文档服务器拉原文(令牌) |
| POST | /contract/onlyoffice/callback | 保存后回写模板或合同正文 |
| POST | 合同生成正文接口 | poi-tl 套变量产出新 docx URL |
前端独立页 /contract/doc-editor 只消费 config 与两种编辑器组件,不自己发明第三套保存协议。联调时按上表从上往下看 401/404,比先怀疑 Vue 组件更快。
常见问题(FAQ)
2026 选合同系统,最小及格线是什么?
三件事同时成立:正文能在浏览器编辑并回存;草稿和已生效资产能分开查询;收付款/履约和合同编号在同一模块。缺任何一项,后期都会用 Excel 补洞。
OnlyOffice 和富文本怎么选?
正式合同、要保留 Word 排版、要循环明细表 → OnlyOffice。内部确认函、条款很少 → 富文本。RuoYi Office 是全局一种模式,不要每个合同类型再分叉一套编辑器接口。
必须上电子签才能叫合同系统吗?
不是。电子签解决的是「怎么变成有法律效力的签署件」。合同系统先解决稿在哪、谁批过、款收到哪一步。可以后接签章,不要颠倒顺序。
模板里的 {{items}} 生成后为什么是空的?
先看标记是否在表格单元格内;再看循环行有没有纵向合并;循环行内字段要用 [itemName] 而不是再套一层 {{ }}。生成成功但明细空,多半是降级成了空字符串而不是抛错。
打开编辑器一直转圈或提示文件版本已改变,是哪里错了?
常见是文档 key 没随文件 URL 变,或文档服务器缓存了失败响应。key 应包含业务主键和文件地址,每次打开再加短 id。同时确认 download 接口返回的是文件流而不是登录页 HTML。
为什么审批通过后不能在台账里直接改金额?
生效合同是资产。改金额、改相对方应走变更流程,避免台账和已签署文本分叉。起草单才是可反复改的地方。
只有 Vue3 后台、没有文档服务器,还能叫在线编辑吗?
能,但是富文本模式:条款进 HTML,打印排版弱于 Word。2026 若合同要给对方律师改稿,仍建议上文档服务器。RuoYi Office 允许先富文本跑通审批和台账,再把 editorMode 切到 onlyoffice,业务表不用推倒重来。
合同模块和 OA 用印、公文是什么关系?
用印管的是章;公文管的是红头文件流转。合同管的是相对方、金额、正文、履约。三者会在「用印申请关联合同编号」处交叉,但不要买一套 OA 就以为合同正文也能在线编。验收时分别点用印申请和合同文件链接。
💡 想要体验 RuoYi Office 的强大功能?
🌐 在线演示:https://ruoyioffice.com/web/(账号 admin / admin123)
📦 源码仓库:GitHub:https://github.com/yuqing2026/ruoyi-office | GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office | Gitee:https://gitee.com/yqzy1688/ruoyi-office
💬 技术咨询:添加微信 17156169080,备注「RuoYi Office」
⭐ 如果觉得不错,请给个 Star 支持一下!
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/zhouzhongyan/article/details/164230444




