Добрый вечер.
Подскажите, пжл, куда в Системе необходимо смотреть (где производить настройки/разработку), чтобы выполнить следующие требования в представлении "Календарь" раздела "Активности":
- закрепить шапку календаря (при наличии большого количества многодневных задач шапка после прокрутки скрывается, оставаясь "сверху")
- отсортировать записи не по полю "Начало", а по полю "Завершения"
![]()
Нравится
Попробовал уменьшить окно браузера.
Да, похоже шапка вместе с многодневными задачами закрепляется сверху над обычными задачами. А если они сами не влазят целиком, то вместе прокручиваются и шапка исчезает, остаётся только блок фильтров и всё, что выше его.
Это компонент ядра Terrasoft.controls.ScheduleEdit, он реализован в файле https://сайт/0/core/hash/Terrasoft/controls/schedule-edit/schedule-edit…
Там, если смотреть HTML-код страницы, есть три блока, сверху вниз: title-area, multi-day-item-area, scroll-area. Даже по названию видно, что прокручиваться предназначен третий, с обычными задачами.
То есть, это код ядра, не конфигурации.
Сортировка по началу, видимо, там же:
/**
* Returns the sorted list of calendar items.
* @private
* @param {Array} schedulerItemList List of calendar items.
* @return {Array} Sorted list of calendar items.
*/
sortScheduleItemList: function(schedulerItemList) {
const sortItemList = [];
Terrasoft.each(schedulerItemList, function(item) {
if (!item.isMultiDayItem()) {
sortItemList.push(item);
}
});
sortItemList.sort(this.sortScheduleItemListByStartDate);
return sortItemList;
},
/**
* Returns the result of comparing 2 calendar items by date.
* @private
* @param {Object} itemA Item #.
* @param {Object} itemB Item B.
* @return {Array} The result of comparing 2 calendar items by date.
*/
sortScheduleItemListByStartDate: function(itemA, itemB) {
let result = 0;
const itemAStartDate = itemA.startDate;
const itemADuration = itemA.dueDate - itemAStartDate;
const itemBStartDate = itemB.startDate;
const itemBDuration = itemB.dueDate - itemBStartDate;
if ((itemAStartDate === itemBStartDate) && (itemADuration === itemBDuration)) {
result = 0;
} else if (itemAStartDate > itemBStartDate) {
result = 1;
} else if (itemAStartDate < itemBStartDate) {
result = -1;
} else if (itemADuration > itemBDuration) {
result = -1;
} else if (itemADuration < itemBDuration) {
result = 1;
}
return result;
},
Уточните, где именно на скриншоте у Вас скрылась шапка? И блок фильтрации, и многодневные задачи там видны.
Возможно, если у Вас так много в расписании многодневных задач, есть смысл применить диаграмму Ганта? Есть пара дополнений с её реализацией.
Попробовал уменьшить окно браузера.
Да, похоже шапка вместе с многодневными задачами закрепляется сверху над обычными задачами. А если они сами не влазят целиком, то вместе прокручиваются и шапка исчезает, остаётся только блок фильтров и всё, что выше его.
Это компонент ядра Terrasoft.controls.ScheduleEdit, он реализован в файле https://сайт/0/core/hash/Terrasoft/controls/schedule-edit/schedule-edit…
Там, если смотреть HTML-код страницы, есть три блока, сверху вниз: title-area, multi-day-item-area, scroll-area. Даже по названию видно, что прокручиваться предназначен третий, с обычными задачами.
То есть, это код ядра, не конфигурации.
Сортировка по началу, видимо, там же:
/**
* Returns the sorted list of calendar items.
* @private
* @param {Array} schedulerItemList List of calendar items.
* @return {Array} Sorted list of calendar items.
*/
sortScheduleItemList: function(schedulerItemList) {
const sortItemList = [];
Terrasoft.each(schedulerItemList, function(item) {
if (!item.isMultiDayItem()) {
sortItemList.push(item);
}
});
sortItemList.sort(this.sortScheduleItemListByStartDate);
return sortItemList;
},
/**
* Returns the result of comparing 2 calendar items by date.
* @private
* @param {Object} itemA Item #.
* @param {Object} itemB Item B.
* @return {Array} The result of comparing 2 calendar items by date.
*/
sortScheduleItemListByStartDate: function(itemA, itemB) {
let result = 0;
const itemAStartDate = itemA.startDate;
const itemADuration = itemA.dueDate - itemAStartDate;
const itemBStartDate = itemB.startDate;
const itemBDuration = itemB.dueDate - itemBStartDate;
if ((itemAStartDate === itemBStartDate) && (itemADuration === itemBDuration)) {
result = 0;
} else if (itemAStartDate > itemBStartDate) {
result = 1;
} else if (itemAStartDate < itemBStartDate) {
result = -1;
} else if (itemADuration > itemBDuration) {
result = -1;
} else if (itemADuration < itemBDuration) {
result = 1;
}
return result;
},
Завёл идеи о шапке многодневных и способе сортировки.
