Перейти к содержанию

Пространства: бизнес-логика

Обзор

spaces -- подсистема статей и баз знаний (wiki) в SPA. Пространство -- это категория специального типа (IsWikiSubcat = 1), внутри которой пользователи читают и редактируют статьи. Статья -- задача с контентом в формате EditorJS.

Модель данных (маппинг на сущности системы)

Бизнес-сущность Сущность в системе Ключевой признак
Пространство Subcategory IsWikiSubcat = 1
Статья Task в этой подкатегории Наличие ExtParam (Content)
Контент статьи ExtParamValues JSON в формате EditorJS
Иерархия (родитель) ExtParamValues TaskID родительской статьи
Обложка ExtParamValues Файл
Превью обложки ExtParamValues Файл
Доп. информация ExtParamValues Текст без форматирования
Спецраздел ExtParamValues "Архив" / "Корзина" / "Вне меню"

Основные сущности

Пространство

Контейнер для статей, отображаемый в отдельном блоке меню сервисов. Технически -- подкатегория с флагом IsWikiSubcat.

Все пространства объединены под корневой категорией RootCatId = 3021 ("Пространства").

Статья пространства

Контентная запись в пространстве. Каждая статья -- задача со следующими системными полями:

Поле Тип Описание
Содержимое страницы TextArea (EditorJS) Основной контент
Дополнительная информация TextareaWOFormat Доп. текст
Обложка File Файл обложки
Превью обложки File Миниатюра
Родительский элемент NumericValue TaskID родителя
Спецраздел Select Архив / Корзина / Вне меню

Иерархия статей

Статьи образуют дерево через ДП "Родительский элемент":

Пространство (SubcatID, IsWikiSubcat=1)
  └── Корневая статья (Parent = null, обычная статья)
        ├── Дочерняя статья (Parent = TaskID корневой)
        │     └── Глубже вложенная
        └── Дочерняя статья 2

Спецразделы

Статьи могут быть помечены спецразделом: - Архив -- не отображается в основном дереве, но доступна по прямой ссылке - Корзина -- "удалённые" статьи (мягкое удаление) - Вне меню -- доступна по ссылке, не в навигации

Ключевые правила

  1. Доступность блока "Пространства" на фронте зависит от настройки рабочего места группы (SpacesVisible).
  2. Глобально пространства включаются/отключаются через SpaceSettings.IsActive.
  3. Доступ к отдельным пространствам определяется правами на подкатегории.
  4. Контент хранится в формате EditorJS (блоки: paragraph, header, code, list, table, image).
  5. При открытии статьи фиксируется аудит-лог (SpaceService).
  6. При сохранении статьи фиксируется аудит-лог редактирования.
  7. Из других подсистем возможны переходы в пространства: из соцсети, из избранного, из оргструктуры, через портальные элементы.

Пользовательские сценарии

  1. Открыть список пространств из меню сервисов.
  2. Перейти в конкретное пространство, увидеть дерево статей.
  3. Открыть статью (в полном или коротком режиме).
  4. Редактировать статью (EditorJS-редактор).
  5. Создать новую статью в пространстве.
  6. Перейти по ссылке на статью из избранного/портала/соцсети.
  7. Посмотреть историю просмотренных/отредактированных статей.

Интерфейс пространств

Переход к пространствам — из меню сервисов в панели навигации. В разделе показываются только категории, настроенные как пространства (видимость зависит от прав пользователя).

Экран пространства состоит из двух областей:

  • Слева — дерево разделов и статей. Уровень вложенности не ограничен, одна статья не может находиться сразу в нескольких разделах. При открытии статьи дерево подсвечивает её положение.
  • Справа — рабочая область с вкладками:
Вкладка Что отображается
Избранные Статьи, добавленные в избранное (в порядке добавления)
Автор Статьи, где пользователь — автор (заказчик); сортировка по дате последнего изменения
Ответственный Статьи, где пользователь отмечен как «Ответственный» в поле «Контакты»
Подписка Статьи, где пользователь добавлен в контакты (подписчик)

Внутри раздела статьи отсортированы по дате создания. По умолчанию статьи пространства не попадают в блок избранного «Мои задачи».

Поиск и номер статьи

Кнопка лупы в правом верхнем углу раскрывает поисковую строку. Поиск идёт по содержанию доступных пользователю статей без учёта вкладок. Поиск по названиям пространств выполняется через главный поиск.

В шапке открытой статьи рядом с хлебными крошками отображается её номер (формат #1777172). При наведении появляется иконка копирования: номер копируется с символом #, но в главном поиске находится и без него.

Для возврата к списку всех пространств используется кнопка «Все пространства» в верхней части экрана.

Создание статьи

Кнопка "Добавить" доступна пользователю только при наличии права на создание статей в текущем пространстве. Если в пространстве уже есть статьи, новая страница создаётся как подстраница через действие в дереве при наведении на пространство.

Форма создания статьи использует ту же модель, что и задача:

Поле страницы Бизнес-смысл
Название страницы Заголовок статьи в дереве и на странице
Автор По умолчанию пользователь, создавший статью; может быть изменён
Контакты Пользователи, отвечающие за статью
Содержание EditorJS-контент статьи

Обложка статьи загружается отдельным файлом в формате JPG или PNG и отображается в шапке статьи. Удаление обложки выполняется в режиме редактирования через контекстное меню по обложке.

Содержание статьи

Контент статьи собирается из блоков EditorJS. Пользователь может добавлять:

Блок Правило поведения
Параграф Основной текст; выбран по умолчанию, можно сразу вводить текст
Заголовок Поддерживает 6 уровней, где 1 -- самый крупный
Таблица Поддерживает добавление и удаление строк/колонок, ширину 100%, large, XL, опциональный заголовок
Разделитель Использует символы ***
Список По умолчанию маркированный; может переключаться в нумерованный
Изображение Поддерживает подпись, рамку, растяжение и фон
Вложения Файлы из текста статьи также отображаются в файловом блоке статьи
Чеклист Список пунктов с отметками
Цитата Основной текст цитаты и отдельное поле автора
Код Блок для программного кода
Виджет Встраивает настроенный портальный блок с размером auto, sm, md или lg

Форматирование доступно для текста внутри большинства блоков: ссылка, жирный, курсив, зачёркивание, подчёркивание, код, цвет текста и фон. Для ссылки поддерживаются горячие клавиши cmd + K / Ctrl + K, для жирного -- cmd + B / Ctrl + B, для курсива -- cmd + I / Ctrl + I.

⚠️ На одном фрагменте текста применяется либо цвет текста, либо цвет фона. При установке одного оформления ранее заданное альтернативное оформление снимается.

Ссылки на видеоконференции и видео автоматически преобразуются в интерактивный блок предпросмотра или встроенный видеоблок.

Редактирование и аудит изменений

Кнопка "Редактировать" доступна только пользователю с правом "Администратор задач" в текущем пространстве. В режиме редактирования можно менять содержание, автора, контакты, обложку, полезные ссылки и раздел статьи.

После сохранения в статье отображается время последнего изменения. При наведении на это время показывается пользователь, который последним редактировал статью.

⚠️ Для отображения автора последнего изменения у параметра категории "Пространство - Содержимое страницы" должна быть включена настройка сохранения истории изменений ДП. Административные настройки пространств описаны в admin.md.

Навигация, полезные ссылки и избранное

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

Полезные ссылки используются для второстепенных ссылок, связанных с контекстом статьи: страницы портала, задачи, внешние URL. Важные ссылки рекомендуется размещать в основном содержании статьи, а не только в блоке полезных ссылок.

Статью можно добавить в избранное с выбором цвета и одной или нескольких папок избранного. После добавления статья отображается во вкладке "Избранное" внутри пространства и в общем блоке избранного бокового меню. Настройка видимости блоков рабочего места относится к разделу пользователи и группы.

Действия со статьёй

Стандартные действия доступны в меню "Больше действий". Набор действий зависит от прав пользователя:

Действие Правило
Копировать номер статьи Копирует идентификатор статьи в буфер обмена
Поделиться Открывает окно с ссылкой на статью
Связана Позволяет связать статью с задачей
Переместить Перемещает статью в текущем пространстве или в другое доступное пространство
Дублировать Создаёт копию текущей страницы со всем содержимым
Архивировать Перемещает страницу в спецраздел "Архив"
Удалить Перемещает страницу в спецраздел "Корзина"

⚠️ Действия "Переместить", "Дублировать", "Архивировать" и "Удалить" доступны только пользователю с правом "Администратор задач" в текущем пространстве.

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

Архив и корзина являются мягкими спецразделами. Чтобы окончательно убрать статью из корзины, её открывают как задачу из дерева категорий и завершают; возврат задачи в активный статус снова делает статью доступной из корзины.

Служебные разделы и дополнительные действия

Служебные разделы "Вне меню", "Архив" и "Корзина" видны в списке пространств администраторам и пользователям с правом создавать задачи в категории. В режиме редактирования пользователь может изменить раздел статьи, включая служебные разделы.

Для отдельных пространств администратор может настроить дополнительные действия над статьёй. Они отображаются ниже стандартных действий, отделяются горизонтальной чертой и могут быть сгруппированы в пункт "Другие действия".

Файлы в статье

В статью можно вставлять изображения, документы, архивы, видео и аудио. По клику файл открывается в режиме просмотра с информацией и скачиванием; архивы и файлы с неизвестным расширением скачиваются сразу.

Если в файловом блоке нет файлов, блок не отображается при просмотре статьи. В режиме редактирования блок "Файлы" становится видимым, чтобы пользователь мог добавить вложение.

Перекрестные зависимости

Домен Зависимость
categories тип категории "Пространство" (IsWikiSubcat), права, системные ДП
ext-params 6 системных ExtParams, хранение контента, EditorJS
files вложения, изображения и файловый блок внутри статьи
social-network создание статей из формы публикации (ArticlesSubcatId)
portal переходы и отображение контента через блоки
users-and-groups видимость блока пространств, права групп
tasks статья = задача, Tasks API для получения контента