开发文档Umo Editor Next业务块

业务块(biz-block)

业务块用于把文档中的一段块级内容提升为一个可识别、可同步、可回填的业务单元。它既保留原有富文本编辑能力,又能与外部业务系统建立关联,适合审批、任务、风控、条款管理、知识沉淀等企业级场景。

与普通段落相比,业务块更像一个“文档中的业务容器”:

  • 内部可以继续承载任意富文本内容;
  • 顶部可展示业务标识、名称、状态;
  • 支持刷新业务信息、打开业务详情、删除、回退为普通节点;
  • 支持在 bind / update / blur / save 等时机把节点内容同步给外部系统。

效果截图

Umo Editor 业务块

使用场景

业务块适合承担“正文编辑 + 业务流转”之间的桥梁角色。

  • 审批流转单元:把文档中的某一段审批说明、审批意见、条款结论转换成业务块,关联审批单、流程实例或外部任务。
  • 风控与问题项管理:把风险描述、问题现象、整改建议单独提取成业务块,便于同步到风控系统、工单系统或整改台账。
  • 合同条款与制度条款管理:把关键条款从正文中提升为业务块,后续可关联条款库、法审记录、条款状态或版本信息。
  • 任务与待办收敛:将会议纪要、方案文档中的行动项转成业务块,外部系统可据此生成任务、负责人、截止时间与状态。
  • 知识条目沉淀:把正文中的定义、规范、结论、最佳实践单独收敛为业务块,沉淀到知识库或规则库。
  • 结构化采集与归档:在保持正文编辑体验的同时,把关键段落按业务块同步到档案系统、台账系统、主数据系统。
  • AI 处理单元:把某个业务块交给外部服务做提取、归类、校验、生成摘要,再将结果回写到节点属性。

与其他功能协同使用

模板管理(template)

  • 在模板中预置“业务块区块”,由业务人员填写后同步到业务系统:模板管理

内容锁定(locked)

  • 可锁定模板骨架,仅开放业务块区域给填写人,避免误改结构:内容锁定

文档表单(form)

  • 表单负责结构化字段,业务块负责承载长文本业务单元,两者可组合用于复杂审批单、报告、制度流转:文档表单

修订 / 评论 / 协作

交互规则

  • 无选区时:插入一个空的 biz-block
  • 有选区时:把当前选区提升为 biz-block
  • 按完整块转换:如果只选中了段落的一部分文本,不会截断,而是按整个块级节点转换
  • 顶部信息栏:左侧显示 # bizId name,如果传入 status 则继续显示状态;右侧提供刷新、回退、删除入口
  • 聚焦高亮:节点获得焦点时会显示外层高亮边框
ℹ️

业务块的内部 id 会自动按 BIZ-001BIZ-002 递增生成;顶部展示的 bizId 则来自外部业务系统,可为空并在后续回填。

配置项示例

const defaultOptions = {
  bizBlock: {
    enabled: true,
    types: [
      { label: "审批项", value: "approval" },
      { label: "风险项", value: "risk" },
      { label: "任务项", value: "task" },
    ],
    triggers: ["bind", "update", "blur", "save"],
  },
 
  async onGetBizInfo(attrs) {
    return {
      bizId: "AP-20260816-001",
      status: {
        value: "running",
        label: "处理中",
        color: "#0052d9",
      },
      meta: {
        owner: "财务共享中心",
      },
    };
  },
 
  async onGetBizBlock(block) {
    console.log("sync biz block", block);
  },
 
  async onOpenBizBlock(block) {
    console.log("open biz block", block);
  },
 
  async onDeleteBizBlock(block) {
    console.log("delete biz block", block);
  },
};

配置项说明

bizBlock.enabled

说明:是否启用业务块能力。关闭后不注册该扩展,也不会显示相关入口。

类型Boolean

默认值false

bizBlock.types

说明:业务块类型列表,用于插入或转换时供用户选择。

类型Array

默认值[]

示例

[
  { label: "审批项", value: "approval" },
  { label: "风险项", value: "risk" },
];

types 为空时:

  • 不显示类型下拉框
  • 新建节点的 type 固定为 'default'

bizBlock.triggers

说明:控制何时把业务块中的富文本内容同步给外部系统。

类型Array

默认值[]

可选值

  • bind:创建或转换为 biz-block 后立即同步一次
  • update:业务块内部内容更新后同步(带防抖)
  • blur:编辑器失焦时同步
  • save:保存文档前同步

回调说明

onGetBizInfo

说明:获取或刷新业务块的业务信息。点击节点头部“刷新”按钮时会调用;节点创建完成后如果已有 bizId,也会自动调用一次,以获取最新的状态等业务信息。

类型Async Function

参数:当前节点 attrs

{
  id,
  name,
  type,
  bizId,
  status,
  meta,
}

返回值:可回写到节点属性的对象,常见字段包括:

  • bizId
  • status
  • meta

其中 status 为可选字段;如果未传入,则节点头部不显示状态。

其中 status 为对象:

{
  value: 'running',
  label: '处理中',
  color: '#0052d9',
}

onGetBizBlock

说明:在指定触发时机把业务块中的富文本内容同步给外部系统。适合做归档、保存、结构化抽取、流程同步等。

类型Async Function

参数

{
  id,
  trigger,
  attrs,
  content: { html, json, text },
}

其中:

  • triggerbind | update | blur | save | manual
  • attrs:当前节点属性
  • content:当前业务块中的富文本内容

onOpenBizBlock

说明:点击节点头部的 # bizId 时触发。适合由业务侧打开详情页、弹出业务卡片、拉起侧边栏等。

类型Async Function

参数:与 onGetBizBlock 保持一致,只是 trigger 固定为 open

onDeleteBizBlock

说明:当用户删除 biz-block 或将其回退为普通节点时触发,用于通知业务侧执行清理、解绑、日志记录等动作。

类型Async Function

参数:与 onGetBizBlock 保持一致。

trigger

  • delete:用户直接删除节点
  • rollback:用户回退为普通节点

方法列表

方法的调用方式请参考:方法列表

setBizBlock

说明:插入或转换业务块。有选区时执行转换,无选区时执行插入。

参数attrs(可选)

  • id
  • name
  • type
  • bizId
  • status
  • meta

返回值Promise<Boolean>

getBizBlock

说明:获取指定业务块节点信息与内容载荷。

参数

  • id:业务块内部节点 ID

返回值

{
  id,
  pos,
  attrs,
  node,
  content: { html, json, text },
}

getBizBlocks

说明:获取当前文档中的全部业务块节点。

参数:无

返回值Array

updateBizBlock

说明:更新指定业务块。业务侧对已有节点的属性回写、正文反向同步、手动触发一次内容同步,都统一走这个方法。

参数

{
  id,
  attrs,
  content,
  sync,
  trigger,
  silent,
}

其中:

  • id:业务块内部节点 ID
  • attrs:可选,待回写属性,适合更新 bizId / status / meta
  • content:可选,待回写内容,支持:
    • getBizBlock 返回的 content: { html, json, text }
    • 直接传 html 字符串
    • 直接传 json 内容
  • sync:可选,是否在本地更新后立即触发一次 onGetBizBlock,默认 false
  • trigger:可选,传给 onGetBizBlock 的触发来源,默认 manual
  • silent:可选,手动同步失败时是否静默处理,默认 true

content 同时包含 json / html / text 时,优先使用 json

返回值Promise<Boolean>

refreshBizBlock

说明:主动刷新指定业务块的业务信息,内部会调用 onGetBizInfo

参数

  • id:业务块内部节点 ID

返回值Promise<Boolean>

openBizBlock

说明:主动触发业务块打开动作,内部会调用 onOpenBizBlock

参数

  • id:业务块内部节点 ID

返回值Promise<Boolean>

deleteBizBlock

说明:删除指定业务块节点,并触发 onDeleteBizBlock

参数

  • id:业务块内部节点 ID

返回值Boolean

rollbackBizBlock

说明:将业务块回退为普通节点,保留内部正文内容,并触发 onDeleteBizBlock

参数

  • id:业务块内部节点 ID

返回值Boolean

接入建议

如果你准备在企业系统里落地 biz-block,建议按下面的职责边界来接:

  1. 编辑器负责:

    • 负责节点插入、转换、展示、编辑和同步触发
    • 负责把业务块内容组织成统一 payload
  2. 业务系统负责:

    • 负责生成或回填 bizId
    • 负责维护状态流转、权限、跳转地址、业务详情
    • 负责在 onGetBizInfo / onGetBizBlock / onOpenBizBlock / onDeleteBizBlock 中完成业务动作
  3. 推荐接入路径:

    • 先启用 bizBlock.enabled
    • 先只接 onGetBizInfoonOpenBizBlock
    • 业务稳定后再打开 bizBlock.triggers
    • 最后再把 onDeleteBizBlock 接入清理或归档流程
⚠️

如果你的业务系统以 bizId 作为唯一主键,请不要把节点内部 id 与外部 bizId 混用。推荐把内部 id 视为编辑器节点标识,把 bizId 视为业务主键。