...

Кастомный график отсутствий в формате timeline

Тема в разделе "Компоненты и интерфейс", создана пользователем ksannikov, 13 апр 2026 в 16:02.

  1. ksannikov

    ksannikov Активный участник

    Всем привет! ‍

    Подготовил новое видео, где показываю пример реализации кастомного графика отсутствий в формате timeline.

    Что умеет виджет:
    — переключать период отображения
    — открывать карточку отсутствия по клику

    Для реализации использовал библиотеку vis-timeline.

    Файл модуля оставлю в комментариях к посту. Его можно импортировать на вашу площадку и сразу протестировать готовый виджет из видео.

    Ниже прикладываю пример скрипта подготовки данных для передачи в виджет:

    Код:
    
    /** Структура которую ожидает виджет для отображения графика */
    interface Absence {
        
    idstring,
        
    fiostring,
        
    titlestring,
        
    startstring,
        
    endstring,
        
    //принимает значения: vacation, sick, dayoff, business_trip
        
    absencesTypestring,
        
    urlstring
    }


    async function onInit(): Promise<void> {
        const [
    absencesusers] = await Promise.all([
            Namespace.
    app.absence.search().where(=> f.__deletedAt.eq(null)).size(10000).all(),
            
    System.users.search().where(=> f.__deletedAt.eq(null)).size(10000).all()
        ]);

        if (!
    absences.length) {
            return;
        }

        const 
    userNames = new Map(users.map(user => [user.iduser.data.__name]));

        const 
    dataAbsence[] = absences.map(item => ({
            
    iditem.id,
            
    fiouserNames.get(item.data.employee!.id) ?? '',
            
    titleitem.data.absence_type!.name,
            
    startitem.data.start_date!.format(),
            
    enditem.data.end_date!.format(),
            
    absencesTypeitem.data.absence_type!.code,
            
    url: `${System.company.url}/(p:item/${item.namespace}/${item.code}/${item.id})`
        }));

        
    Context.data.absence_data data;
    }
    Еще больше полезной информации в ТГ канале WhatDaELMA365

    Вложения: