История изменений
Изменив текст слайдов, фигуры или порядок слайдов, откройте историю, чтобы просмотреть предыдущие версии, сравнить изменения и при наличии прав восстановить версию. История читает версии, сохранённые на сервере. Отмена и повтор действуют в текущем сеансе редактирования и не требуют сервиса истории.
Подготовка сервисов совместного редактирования и истории
Выполните интеграцию совместного редактирования и настройку лицензии. Убедитесь, что два сеанса могут редактировать один документ Slides и что изменения сохраняются после перезагрузки.
Следуйте разделу Расширения совместного редактирования Office и примеру истории, чтобы подключить хранение истории и права доступа. Базовое совместное редактирование не включает историю автоматически. Сервер также должен поддерживать список версий, их содержимое и восстановление.
Добавление плагинов истории
Добавьте следующую настройку к существующей конфигурации продукта, лицензии и совместного редактирования. Если пресет или другая конфигурация уже регистрирует эти плагины, измените её, а не регистрируйте плагины повторно.
pnpm add @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/slides-history @univerjs-pro/slides-history-uinpm install @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/slides-history @univerjs-pro/slides-history-uiyarn add @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/slides-history @univerjs-pro/slides-history-uibun add @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/slides-history @univerjs-pro/slides-history-uiimport { UniverEditHistoryPlugin } from '@univerjs-pro/edit-history'import EditHistoryLocale from '@univerjs-pro/edit-history-ui/locale/en-US'import { UniverSlidesHistoryPlugin } from '@univerjs-pro/slides-history'import { UniverSlidesHistoryUIPlugin } from '@univerjs-pro/slides-history-ui'import HistoryLocale from '@univerjs-pro/slides-history-ui/locale/en-US'import { LocaleType, mergeLocales } from '@univerjs/core'import '@univerjs-pro/edit-history-ui/lib/index.css'const historyServerUrl = '/api/history'univerAPI.loadLocales(LocaleType.EN_US, mergeLocales(EditHistoryLocale, HistoryLocale))univer.registerPlugin(UniverEditHistoryPlugin, { historyServerUrl })univer.registerPlugin(UniverSlidesHistoryPlugin)univer.registerPlugin(UniverSlidesHistoryUIPlugin, { univerContainerId: 'app', historyServerUrl,})Замените /api/history адресом API истории вашего приложения и убедитесь, что API соответствует запросам клиента. Оба значения historyServerUrl должны совпадать. В univerContainerId укажите DOM ID контейнера редактора и загрузите языковой пакет, соответствующий языку редактора.
Просмотрщик истории создаёт отдельный редактор только для чтения. Для собственного контента используйте viewerPlugins, чтобы добавить плагины, которые ещё не входят в просмотрщик. Не регистрируйте встроенные плагины просмотрщика повторно.
Просмотр и восстановление версий
Откройте историю из меню редактора и выберите версию, чтобы просмотреть её содержимое и изменения. Восстановление изменяет текущий общий документ. Эта операция должна быть доступна только пользователям с правом восстановления, и сервер обязан проверять это право.
Для проверки интеграции измените текст слайдов, фигуры или порядок слайдов, дождитесь подтверждения совместного редактирования и проверьте список версий и их содержимое. Повторно откройте приложение и перезапустите сервис, чтобы проверить сохранность данных. Восстановите предыдущую версию и убедитесь, что другой сеанс браузера получил восстановленное состояние.
Если список пуст, проверьте, записывалась ли история документа, затем проверьте ID документа и URL сервиса. Если просмотр работает, а восстановление нет, проверьте право восстановления и соединение совместного редактирования. Чтение истории тоже требует авторизации: старые версии могут содержать данные, которые позднее были удалены.
Сравнение снимков
Для экрана проверки или передачи изменений в AI Agent используйте compareUnitData() либо один раз подготовьте результат через prepareUnitComparison(). Зарегистрируйте History-плагин продукта и импортируйте точку входа Facade. Передайте два полных снимка одного документа как beforeSnapshot и afterSnapshot. Сравнение только читает данные: сервис истории не нужен, восстановление и слияние не выполняются.
import { UnitComparisonDetailLevel, UnitComparisonFidelity } from '@univerjs-pro/edit-history'import { UniverInstanceType } from '@univerjs/core'import '@univerjs-pro/edit-history/facade'const comparison = univerAPI.prepareUnitComparison({ comparisonId: 'review-1', unitId: beforeSnapshot.id, type: UniverInstanceType.UNIVER_SLIDE, fidelity: UnitComparisonFidelity.SNAPSHOT, leftData: beforeSnapshot, rightData: afterSnapshot,})const overview = comparison.query({ detail: UnitComparisonDetailLevel.SUMMARY })const scope = overview.scopes[0]const page = comparison.query({ scope, offset: 0, limit: 100 })console.log(page.items, page.page.hasMore, page.diagnostics)Получите доступные представления из scopes и передайте область в query(), чтобы отфильтровать результат без повторного вычисления. По умолчанию возвращается 100 элементов, максимум — 1 000 на страницу. Используйте page.hasMore и offset для следующих страниц. summary описывает всё сравнение независимо от фильтра. Проверяйте diagnostics.readiness и diagnostics.codes, прежде чем считать результат полным. Для Node.js или CLI без редактора см. API сравнения без интерфейса.
Насколько полезно это руководство?