Совместное редактирование

Сведения о плагинах

Несколько пользователей могут редактировать одну доску и видеть изменения друг друга. Выполните интеграцию совместного редактирования, подключив серверную часть, аутентификацию, права доступа и хранилище, затем настройте лицензию.

Настройка и загрузка документа

Добавьте настройки клиента Collaboration в существующий редактор Boards по инструкции Быстрый старт совместного редактирования. Пример использует Sheets; ваш сервер должен создать и сохранить документ Boards, а затем вернуть его ID браузеру.

Задайте текущего пользователя до загрузки документа. См. раздел Интеграция совместного редактирования.

TypeScript
import '@univerjs-pro/boards/facade'import { UserManagerService } from '@univerjs/core'import '@univerjs-pro/collaboration-client/facade'univer.__getInjector().get(UserManagerService).setCurrentUser({ userID, name, avatar })const document = await univerAPI.getCollaboration().loadBoardAsync('your-document-id')if (!document) throw new Error('Document could not be loaded')

При повторном открытии или публикации ссылки на документ используйте тот же ID. Не заменяйте загрузку серверного документа созданием пустого локального документа.

Используйте состояние, повторные отправки и восстановление конфликтов для индикации сохранения и защиты неподтверждённых изменений перед перезагрузкой.

Удаление встроенной загрузки совместных документов по URL

Обратите внимание

Начиная с версии 1.2.0, Univer больше не содержит встроенной логики загрузки совместных документов по URL. Параметры unit и type больше не считываются автоматически для загрузки совместного документа.

Если ваше приложение зависит от этого поведения, его можно восстановить с помощью собственного плагина.

Подключение собственного плагина

Скопируйте четыре файла ниже в проект, сохранив следующую структуру каталогов:

text
custom-url-load/├── plugin.ts├── controllers/│   └── data-loader.controller.ts└── services/    ├── url.service.ts    └── web-url.service.ts

После инициализации редактора и плагинов совместной работы задайте текущего пользователя, а затем зарегистрируйте CustomUrlLoadPlugin.

TypeScript
import { UserManagerService } from '@univerjs/core'import { CustomUrlLoadPlugin } from './custom-url-load/plugin'univer.__getInjector().get(UserManagerService).setCurrentUser({ userID, name, avatar })univer.registerPlugin(CustomUrlLoadPlugin)

После регистрации плагин сам загружает документ, поэтому вызывать loadBoardAsync() для того же документа не требуется. Если приложение уже загружает документы через Facade, можно сохранить подход из предыдущего раздела и обрабатывать URL в соответствии с требованиями приложения.

Полный код плагина

TypeScript
import { UniverCollaborationClientPlugin } from '@univerjs-pro/collaboration-client'import { DependentOn, Inject, Injector, Plugin } from '@univerjs/core'import { CollaborationDataLoaderController } from './controllers/data-loader.controller'import { IURLService } from './services/url.service'import { WebURLService } from './services/web-url.service'@DependentOn(UniverCollaborationClientPlugin)export class CustomUrlLoadPlugin extends Plugin {  static override pluginName = 'CUSTOM_URL_LOAD_PLUGIN'  constructor(    _config: undefined,    @Inject(Injector) protected override readonly _injector: Injector  ) {    super()  }  override onStarting(): void {    this._injector.add([IURLService, { useClass: WebURLService }])    this._injector.add([CollaborationDataLoaderController])    this.disposeWithMe(this._injector.get(IURLService))    this.disposeWithMe(this._injector.get(CollaborationDataLoaderController))  }}

Проверка синхронизации и прав доступа

Откройте один ID в двух независимых сеансах браузера. Измените текст или переместите элемент в одном сеансе и проверьте второй. Убедитесь, что содержимое сохраняется после перезагрузки страницы, повторного подключения и перезапуска сервиса. С помощью учётных записей читателя и пользователя без доступа проверьте, что сервер отклоняет запрещённые операции чтения и записи.

История изменений и импорт и экспорт требуют отдельной настройки: совместное редактирование не включает их автоматически.

Насколько полезно это руководство?

© 2026 DreamNum Co., Ltd.