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

Канбан — Администрирование

Что настраивается

Админ-контур канбана состоит из трех блоков:

  1. включение канбана как представления категории;
  2. настройка карточки и поведения доски через шаблон задач;
  3. ~~настройка пользовательского канбана через публикации~~ (устарело, не поддерживается).

1. Типовой канбан категории

Канбан категории доступен по URL:

  • ~/spa/tasks/subcat/{subcatId}/kanban
  • legacy-формат: ~/spa/kanban/subcat/{subcatId}

Что контролируется настройками категории:

  • доступность представления "Канбан";
  • маршрут и статусы, из которых строятся колонки;
  • права на принудительную смену статуса;
  • параметры, доступные для фильтрации/группировки.

2. Шаблон карточки канбана

Шаблон настраивается через "Шаблоны задач" (динамический шаблон, контекст kanban).

Ключевые параметры:

  • templateClass: "kanban" -- тип шаблона;
  • showHeaderColors -- включение/выключение цветных заголовков статусов;
  • leftBorder -- цветовая левая обводка карточки;
  • groupings -- список доступных группировок и признак default-группировки;
  • aggregations -- агрегаты по числовым/денежным ДП (sum/avg/max/min).

В карточке настраиваются блоки:

  • header и footer -- предопределенные блоки;
  • body -- динамический вывод ДП и системных полей.

Каждый элемент блока описывается JSON:

{ "type": "mainParam"|"extparam", "dataKey": "..."|123, "alias": "...", "viewMode": "...", "settings": {} }
  • typemainParam (системный параметр) или extparam (ДП);
  • dataKey — для mainParam ключ системного поля; для extparam — ID ДП;
  • alias — роль элемента в блоке (см. таблицы ниже).

Alias для header:

Alias Описание Ключевые settings
title Заголовок — текст задачи (dataKey: "taskText")
headerCounter Индикатор с количеством задач color, emphasis
subtitle Подзаголовок, вторая строка
mainTag Главный тег color
tags Теги задачи (из viewTags)
headerDate Срок задачи
cover Обложка карточки showEmptyCover, ratioWH
cardIdentifier Номер задачи (dataKey: "taskId") prefix

Alias для footer:

Alias Описание Ключевые особенности
avatar Аватар карточки (из ДП-файла) dataKey = ID ДП с типом «Файл»
priority Приоритет valueMapper для кастомных подписей
users Пользователи (исполнители, ДП-выбор пользователей) viewMode: "table" обязателен
cardIdentifier Номер задачи settings.prefix добавляет префикс (напр. #)
totalSubtasks Общее количество подзадач Поддерживает extparam с типом «Число»
activeSubtasks Количество активных подзадач Аналогично totalSubtasks

totalSubtasks и activeSubtasks также поддерживают значения из ДП с типом «Число»: "type": "extparam", "dataKey": {ID ДП}, alias остаётся без изменений.

Параметры settings для элемента headerCounter:

Параметр Значения Описание
color primary accent info success warning fav danger error default blackWhite Цвет индикатора
emphasis accent container Акцент индикатора

Параметры settings для элемента cover:

Параметр Тип Описание
showEmptyCover bool Обязательный: true — показывать пустую обложку
ratioWH string Соотношение сторон: 16:9 или 1:1

Параметры settings для элемента priority (footer):

valueMapper позволяет задать кастомные подписи для уровней приоритета:

"settings": {
  "valueMapper": { "0": "low", "3": "high" }
}

2.2 Элементы блока body

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

Значения viewMode:

Значение Описание
normal Названия параметров строкой выше значений
compact Названия слева от значений (по умолчанию)
valueOnly Только значения, без названий
one Параметры не отображаются
table Табличный вид (для пользователей; в settings: showUserStatus: true для статуса «как в ленте»)
icon Иконка слева вместо названия (требует settings.icon)
iconSet Для Multilookup — иконки задач вместо текста; showColor: true окрашивает по цвету задачи
tags Lookup/Multilookup в виде тегов; showIcon и showColor управляют иконкой/цветом задачи

Параметры settings для элементов body:

Параметр Тип Описание
icon string Иконка при viewMode: icon (из /spa/content-icons)
truncate bool Обрезка текста троеточием (true — по умолчанию)
showUserStatus bool Статус пользователя при viewMode: table
showIcon bool Иконка задачи в тегах при viewMode: tags
showColor bool Цвет задачи в тегах при viewMode: tags; при использовании в leftBorder — автоматическое определение цвета

2.3 Секция settings шаблона

В settings внутри contexts[] задаются глобальные настройки карточки канбана:

  • leftBorder — левая обводка;
  • showHeaderColors — цветные заголовки статусов;
  • groupings — группировки;
  • aggregations — агрегаты по числовым/денежным ДП;
  • sortings — сортировка карточек внутри колонки.

showHeaderColors

По умолчанию true (цвета статусов из настроек маршрута). Завершающие статусы всегда зелёные, отклоняющие — красные; изменение цвета для них недоступно. false — все статусы серые.

leftBorder

Настраивается как элемент с source/mainParam. Два режима:

  1. Ручной — через dynamicSettings со значениями и цветами:

    "leftBorder": {
      "type": "mainParam", "dataKey": "priority", "alias": "leftBorder",
      "dynamicSettings": {
        "0": { "color": "var(--base-info)" },
        "3": { "color": "var(--base-danger)" }
      }
    }
    

  2. Автоматический — через "settings": { "showColor": true }:

  3. для dataKey: "priority" — все 5 уровней приоритета;
  4. для Lookup-полей — цвет значения (taskColor);
  5. dynamicSettings в этом режиме игнорируется.

Минимальная настройка:

"leftBorder": {
  "type": "mainParam", "dataKey": "priority",
  "alias": "leftBorder",
  "settings": { "showColor": true }
}

groupings

Список доступных группировок. Элемент с "settings": { "isDefault": true } — группировка по умолчанию при открытии канбана.

Если groupings не задан, в выпадающем списке по умолчанию доступны: Исполнители, Заказчик, Срок, Дата создания, Дата изменения.

Пример:

"groupings": [
  {
    "type": "mainParam", "dataKey": "performers",
    "name": "Исполнители",
    "settings": { "isDefault": true }
  }
]

aggregations

Сумма, среднее, максимум, минимум по числовым/денежным ДП. Параметры:

Параметр Описание
column ID ДП в формате ExtParam{ID}
name Отображаемое имя
operation sum avg max min
postfix Текст после значения
separator Разделитель между агрегациями

Пример:

"aggregations": [
  { "column": "ExtParam12872", "name": "Efforts(сумма)", "operation": "sum", "postfix": "сум", "separator": "/" },
  { "column": "ExtParam12872", "name": "Efforts(среднее)", "operation": "avg", "postfix": "ср" }
]

sortings (v2.259+)

Сортировка карточек внутри колонки. Задаётся на уровне конфигурации канбана, без пользовательского переключателя. Поддерживает множественные правила — второе правило применяется к карточкам, равным по первому, и т.д.

Параметры элемента сортировки:

Параметр Описание
type mainParam или extParam
dataKey Ключ системного поля или ID ДП
name Отображаемое имя
settings.direction asc (по возрастанию) или desc (по убыванию)
settings.isDefault Признак сортировки по умолчанию (может быть несколько — все применяются последовательно)

Ограничения:

  • сортировка действует внутри колонки, порядок колонок не меняется;
  • если сортировка не задана — используется порядок от источника данных;
  • при настроенной сортировке перетаскивание карточек внутри колонки отключено (карточка возвращается на исходную позицию);
  • параметр сортировки не должен передаваться в запрос получения данных, если настройка не выбрана.

Пример:

"sortings": [
  {
    "type": "mainParam", "dataKey": "order",
    "name": "Порядок", "settings": { "direction": "desc" }
  },
  {
    "type": "extParam", "dataKey": 76690,
    "name": "Фича", "settings": { "isDefault": true, "direction": "desc" }
  }
]

3. Канбан по Lookup-полю

Админ может переключить построение канбана с маршрута на конкретный Lookup-параметр.

Особенности:

  • порядок колонок задается настройкой Lookup "Колонка сортировки";
  • при переносе карточки меняется значение Lookup;
  • появляется колонка "Не заполнено" для пустых значений.

4. Пользовательский канбан на публикациях (устаревший способ)

⚠️ Устарело. Настройка через публикации больше не поддерживается. Кастомный канбан настраивается через шаблон задач (см. раздел 2).

Канбан вызывается по URL:

  • ~/spa/kanban/{publicationAlias}

Нужно настроить 3 публикации:

  1. публикация структуры (columns, rows, templates, ссылки на data/move);
  2. публикация данных;
  3. публикация перемещения карточки между колонками/строками.

Ключевые элементы структуры:

  • columns -- колонки с movableFrom/movableTo, template, showArrow;
  • rows -- строки доски, опционально с movableFrom/movableTo;
  • dataSet -- URL публикации данных;
  • moveWebRequest -- URL публикации перемещения.

Важно:

  • права на публикации должны быть настроены отдельно;
  • ограничение прав на move можно сделать через доступ к публикации перемещения.

Типовые мисконфигурации

  1. Канбан не отображается в категории:

  2. не включено представление "Канбан" в настройках категории;

  3. у пользователя нет прав на категорию.

  4. Колонки не соответствуют ожиданиям:

  5. основной маршрут не настроен или настроен не тот;

  6. выбран режим канбана по Lookup, а не по маршруту.

  7. Карточка выглядит "по-старому":

  8. шаблон задач не привязан в шаблонизации категории;

  9. контекст шаблона задан не как kanban.

  10. Drag-and-drop не работает:

  11. в пользовательском канбане не задан moveWebRequest;

  12. нет прав на публикацию перемещения;
  13. в типовом канбане переход запрещен маршрутом/правами.

Связанные контуры

Шаблон карточки галереи

Представление категории «Галерея» использует конструктор шаблона, аналогичный канбан-шаблону: те же блоки header/body/footer, элементы, viewMode, settings. Отличия:

  • context: "gallery" (вместо "kanban");
  • templateClass: "gallery";
  • уникальный параметр bootstrapSize (sm/md/lg), влияющий на минимальное количество элементов в строке и размер карточек (sm — до 6 элементов в ряду).

Канбан не является владельцем context: "gallery": переносить в этот файл таблицы параметров галереи не нужно, потому что они дублируют конструктор карточки и отличаются только контекстом и размером bootstrap-сетки.

Подробнее о представлениях списков задач — grids/admin.md; полный перенос галереи должен жить в домене grids/gallery, а в kanban остаётся только эта связь, чтобы не смешивать разные представления.

Мобильный дашборд (Dashboard-контейнер)

Функциональность мобильного дашборда (AllDashboards, Dashboard-контейнер с плитками/баннерами/стеками, Избранное в дашборде) не относится к домену kanban. Это сквозная функциональность мобильного клиента, администрируемая через контейнеры мобильного приложения.

→ Ожидает выделения в отдельный домен dashboards/admin.md. В kanban/admin.md оставлены только аннотации фактов (alldashboards.md, api_dashboard.md, fav_dashboard.md) для целостности картины.