开发文档Umo Editor Next多人协作编辑

多人协作编辑

多人协作编辑功能允许多个用户同时编辑同一个文档,并且文档内容是实时传输到服务器端的,可以在服务器端直接入库,无需再由客户端发起保存请求。

多人协作编辑需要服务器端软件Umo Editor Server的支持,当然您也可以自定义服务商。

效果截图

Umo Editor 多人协作编辑

演示视频

特点及优势

  • 支持私有化部署,您可以私有化部署或者自定义服务商,实现数据的安全性和可控性;
  • 支持实时离线和在线协作,当用户离线后再次连接时,仍然可以同步文档更改的内容;
  • 通过 WebSocket 与服务器进行实时通信,实现文档内容的实时同步;
  • 可通过 Webhook 与其他应用进行通信,实现文档内容及评论等信息的同步;
  • 支持文档评论协作,用户可以对文档进行评论,评论内容也会实时同步到服务器端;
  • Umo Editor Server 可支持 100000+ 用户同时在线编辑,实现高效的多人协作,支持集群部署。

使用场景

  • 会议纪要多人共编:主持人定框架,参会人补充要点
  • 需求/PRD 评审共编:一边讨论一边落笔,减少多版本来回拷贝
  • 合同/制度协作撰写:多角色并行修改,集中在一个版本里收敛
  • 论文/报告合写:章节分工编辑,统一格式与目录结构
  • 运营/市场文案协作:多人同时优化语句与排版,快速发布
  • 售前方案联合编写:销售、产品、交付共同补齐内容与附件
  • 教学/培训材料共建:讲师与助教协同完善案例与练习题
  • 跨地区项目周报:异地成员实时补齐进度与风险
  • 客服/知识库维护:多人同步更新 FAQ,减少内容冲突
  • 制度宣贯资料维护:持续迭代同一份文档并保留协作痕迹

与其他功能协同使用

文档批注/评论(comments)

  • 协作负责“共同编辑”,评论负责“讨论与结论沉淀”:文档批注/评论
  • 结合 @ 提醒,把需要确认的问题定点抛给负责人

文档修订(revision)

  • 协作中开启修订,便于审阅“是谁改了什么”,再集中接受/拒绝定稿:文档修订
  • 审阅阶段按修订人过滤,分角色逐步收敛

文档历史版本(versions)

  • 用版本保存里程碑,用协作承接过程编辑:文档历史版本
  • 阶段验收/发布前创建版本,便于回溯与对比

文档表单(form)

  • 多人可共同设计表单模板,或在预填基础上协作补录业务字段:文档表单
  • 对于审批单、登记表、病历等文档化录入场景,协作与表单能力可以组合使用

AI(ai)

  • 协作写作时,用 AI 做段落润色/重写/扩写,把结果写回正文:AI 功能
  • 结合评论,把 AI 建议作为讨论依据,最后由协作者落地修改

默认配置

const defaultOptions = {
  // 多人协作编辑相关配置
  document: {
    id: '', // 多人协作场景下,文档 ID 是必填的,用于唯一标识一个文档
  },
  collaboration: {
    enabled: false,
    showLoading: true,
    provider: {},
  },
  onCollaborationEvent(name, payload, context) {
    console.log('onCollaborationEvent', { name, payload, context })
  },
}

不支持的配置

当开启了在线协作功能时,不支持以下配置:

const defaultOptions = {
  document: {
    content: '',
    autoSave: {
      // ...
    },
  },
  onSave() {
    // ...
  },
}

因为在多人协作的场景中,文档内容是实时传输到服务器端的,可以在服务器端直接入库,无需再由客户端发起保存请求。

配置说明

collaboration

多人协作编辑的相关配置,其实现思路和原理可以参考:https://tiptap.dev/docs/hocuspocus

  • collaboration.enabled

说明:是否启用在线协作。

类型:Boolean

  • collaboration.provider

说明:在线协作服务商配置。Umo Editor Next 默认提供了基于 Express 一个 Nodejs 的服务器端(见:Umo Editor Server),包含了 Hocuspocus Server,该选项支持 Hocuspocus Server 的所有配置。

类型:Object

配置:同 Hocuspocus Server 的配置,见 https://tiptap.dev/docs/hocuspocus/provider/configuration

  • collaboration.showLoading

说明:是否开启协作首屏 loading。开启后,编辑区在文档内容尚不可用时会显示 loading 遮罩;当远端首屏同步完成,或开启 collaboration.provider.enableIndexedDB 后本地缓存已恢复时,loading 会自动消失。 v13.0.2 新增

类型:Boolean

默认值true

  • collaboration.provider.enableIndexedDB

说明:是否开启协同离线存储。开启后,已缓存过的文档在下次进入时可优先从本地恢复;若本地缓存已恢复,即使远端服务暂时未连接,编辑区也不会继续被首屏 loading 遮罩。v13.0.0 新增

类型:Boolean

默认值false

onCollaborationEvent

说明:统一监听协作 provider 事件。该回调会在内部协同状态更新后触发,适合用来接入业务日志、连接状态提示、自定义埋点或异常告警。 v13.0.2 新增

类型:Function

参数

  • name:String,事件名称;
  • payload:Any,事件原始参数;
  • context:Object,当前协作上下文,包含 providereditorcollaboration

示例

const options = {
  collaboration: {
    enabled: true,
    provider: {
      parameters: {
        documentId: '1',
      },
    },
  },
  onCollaborationEvent(name, payload, context) {
    console.log('onCollaborationEvent', {
      name,
      payload,
      provider: context.provider,
      loading: context.collaboration?.loading,
      synced: context.collaboration?.synced,
    })
  },
}

支持的事件名称

  • open:当 WebSocket 连接被创建时触发。
  • connect:当 provider 成功连接到服务端时触发。
  • authenticated:当客户端鉴权成功时触发。
  • authenticationFailed:当客户端鉴权失败时触发。
  • status:当连接状态发生变化时触发。
  • message:当收到服务端消息时触发。
  • outgoingMessage:当消息即将发送到服务端时触发。
  • synced:当 Y.js 文档首次完成同步时触发。
  • close:当 WebSocket 连接关闭时触发。
  • disconnect:当 provider 断开连接时触发。
  • destroy:当 provider 即将被销毁时触发。
  • awarenessUpdate:当 awareness 信息更新时触发。
  • awarenessChange:当 awareness 状态发生变化时触发。
  • stateless:当收到无状态消息时触发。

方法列表

方法的使用示例请参考:方法列表

getCollaboration

说明:获取在线协作相关信息。

参数:无

返回值Objectundefined,Object 包含以下信息:

  • connect:Boolean,是否与服务商连接成功;
  • users:Array,当前文档协作用户列表;
  • loading:Boolean,是否仍处于协作首屏同步阶段;当 collaboration.showLoading !== false 且值为 true 时,编辑区会显示 loading,并将编辑器临时切换为只读,避免误操作; v13.0.2 新增
  • synced:Boolean,协作数据是否已完成首屏同步; v13.0.2 新增
  • localReady:Boolean,本地 IndexedDB 缓存是否已恢复;当开启 collaboration.provider.enableIndexedDB 且值为 true 时,表示本地缓存已可用。 v13.0.2 新增
  • connectionFailed:Boolean,协作首屏阶段是否出现连接失败;当值为 true 且本地缓存尚未恢复时,编辑区会显示“未连接到服务器”提示。 v13.0.2 新增
  • provider:Object,服务商信息,获得服务商信息后,可以通过监听相关事件,来实现更多个性化需求,参考:https://tiptap.dev/docs/hocuspocus/provider/events#option-2-binding