Виджет Kanban (Kanban Widget)

виджет старого Канборда, немного переработал, все опции из хардкода вынес в виджет-инстанс
Заставку выставляю в бекграунд пейжа,
Пейж и структуру генерирую скриптом


[ITG] - MVV - Kanban Widget + GenPage_2023-06-16 18_26_58.sop (11,1 КБ)

Подготовить структуру страницы

  1. Создать page
  2. Создать page_container (CSS Class Names = container)
  3. Создать page_row (CSS Class Names = row)
  4. Создать page_column (CSS Class Names = column
    или использовать скрипт:
    //=======================================
    const PAGE_TITLE = “CRM Content Board”; // Указали название Канборды
    const WIDGET_LIST_ID = “168173586621981967”; // Kanban Board Template
    var pagePathName = PAGE_TITLE.toLowerCase().replace(/\s/ig, ‘-’);
    ss.info(“pagePathName: /page/” + pagePathName);
    const config = {}; //options
    generateMain();

function generateMain(){
let page = new SimpleRecord(‘page’);
page.path_name = pagePathName;
page.title = PAGE_TITLE;
page.description = "For " + PAGE_TITLE;
const PAGE_ID = page.insert(); ss.info("PAGE_ID: " + PAGE_ID)

let pageСontainer = new SimpleRecord('page_container');
pageСontainer.name = "Container for " + PAGE_TITLE;
pageСontainer.page_id = PAGE_ID;
pageСontainer.css_class_names = "container";

// pageСontainer.background_color = “158961901412670041”; // whitesmoke
const PAGE_CONTAINER_ID = pageСontainer.insert();

let pageRow = new SimpleRecord('page_row');
pageRow.page_container_id = PAGE_CONTAINER_ID;
pageRow.css_class_names = "row";
const PAGE_ROW_ID = pageRow.insert();

let pageColumn = new SimpleRecord('page_column');
pageColumn.page_row_id = PAGE_ROW_ID;  
pageColumn.css_class_names = "column";
const PAGE_COLUMN_ID = pageColumn.insert();

let widgetInstance = new SimpleRecord('sys_widget_instance');
widgetInstance.page_column_id = PAGE_COLUMN_ID;
widgetInstance.widget_id =  WIDGET_LIST_ID;
widgetInstance.option_schema_values = JSON.stringify(config);
const WIDGET_INSTANCE_ID = widgetInstance.insert();

}
// Можно сразу добавлять ссылку в боковое меню (Родитель например My Work [159773223619096995]), иначе трудно пейж потом найти
//=======================================

Задать опции для sys_widget_instance

  1. Пример опций

WIP_limits (ключем задаешь велью опции поля, которое используется как столбец)
excluded_states (исключаешь опции поля, которое используется как столбец)
state_aggregation (дичь @интересная@, по факту указываешь опцию столбца, и значением массив опций столбца, с которыми хочешь "слить, !ВАЖНО (указывать только рядом стоящие)
background_image_url (картинка или гифка для бэкграунда)

{
“global”: {
“condition”:“(selling_direction=168026545724337034)”, //Фильтрация карточек для этого борда
“row_column_id”:“167335724326704524”,
“row_column_name”:“status”, // Название колонки из которой столбцы формируются
“essence_table_id”:“167335630627617349”,
“essence_table_name”:“crm_content”,
“background_image_url”:“” // Лучше задавать на уровне пейжа (иначе не перенести на другой инстанс)
},
“rows”: {
“included_state”: [],
“excluded_states”: [
“new”,
“analysis”,
“released”,
“cancelled”,
“tested”
],
“state_aggregation”: {
“review”: [
“review_done”
],
“acceptance”: [
“acceptance_done”
],
“in_progress”: [
“in_progress_done”
],
“testing_to_do”: [
“testing_done”
]
},
“WIP_limits”: {
“review”: 1,
“backlog”: 5,
“acceptance”: 1,
“in_progress”: 2,
“review_done”: 2,
“testing_done”: 2,
“queue_waiting”: 1,
“second_review”: 1,
“testing_to_do”: 1,
“acceptance_done”: 2,
“in_progress_done”: 2
}
},
“lines”: {
“main_name” : “Main backlog”, // Имя линии , по умолчанию “Main Backlog”
“expedite_name” : “Expedite”, // Имя линии , по умолчанию “Important”
},
“cards”:{
“body”:“name”,
“badge1”:“”,//Синий, Если пусто или “false” не отображает класс таблицы
“badge2”:“service_or_product”, //Желтый, Имя поля из которого брать бейж
“badge3”:“selling_direction”, //Розовый
“badge4”:“sme”, // Зеленый
“badge5”:“”, // Оранжевый, Для листовых полей
“responsible”:“author”,
“expedite_field”:“expedite”, // название поля, определяющее какие записи уйдут в экспедит линию
“expedite_value”:“true”, // при каком значении
“need_action_field”:“need_action”, // название поля, определяющее на ком висит замок
“need_action_value”:“true” // при каком значении
“time_in_current_state”:“sys_updated_at” // Поле которое указывает на последнее изменение колонки статусов, по умолчанию “sys_updated_at”
}
}

6 лайков