- Создан модуль calendarEventDragDrop.js с классами DragDropState и CalendarUtils - Реализовано перетаскивание событий между календарями через модальное окно - Добавлена кнопка 'Переместить все' для массового перемещения - Модальное окно отображает источник и цель перемещения - Поддержка legacy-календарей (company/department/personal) - Добавлены стили для подсветки drop-target (папки и календари) - Backend: исправлена обработка null значений в serializer - Backend: добавлен endpoint list_raw для получения немодерируемых событий - Использованы стандартные Bootstrap стили для модалов - Исправлено всплытие событий dragover/drop (stopPropagation) - Эмодзи иконки для типов календарей (����) - Toast уведомления об успехе/ошибках перемещения
60 lines
2.3 KiB
HTML
60 lines
2.3 KiB
HTML
{# Десктопная версия календаря - правая колонка #}
|
||
<div class="rightbar d-none d-lg-block">
|
||
<div class="card rightbar-card" data-dept-id="{{ dept_ids|default:'' }}">
|
||
<div class="card-header">
|
||
<button
|
||
class="btn btn-sm btn-outline-primary w-100"
|
||
type="button"
|
||
data-bs-toggle="collapse"
|
||
data-bs-target="#calendarListCollapse"
|
||
aria-expanded="false"
|
||
aria-controls="calendarListCollapse"
|
||
title="Список календарей"
|
||
>
|
||
<i class="bi bi-list-check"></i>
|
||
<span class="ms-1">Календари</span>
|
||
</button>
|
||
</div>
|
||
|
||
{# Список календарей (сворачиваемый) - унифицированный список legacy + новые #}
|
||
<div class="collapse" id="calendarListCollapse">
|
||
<div class="card-body border-bottom py-2">
|
||
<div class="d-flex align-items-center justify-content-between mb-2">
|
||
<small class="text-muted">
|
||
<i class="bi bi-info-circle me-1"></i>
|
||
Выберите календари для отображения
|
||
</small>
|
||
<button
|
||
class="btn btn-sm btn-outline-success"
|
||
type="button"
|
||
data-action="create-calendar"
|
||
title="Создать календарь"
|
||
>
|
||
<i class="bi bi-calendar-plus"></i>
|
||
<span class="ms-1">Создать</span>
|
||
</button>
|
||
</div>
|
||
<div id="calendarListContainer" class="calendar-list-container" style="max-height: 250px; overflow-y: auto;">
|
||
|
||
{# Здесь будет JS-генерируемый список календарей (legacy + новые) #}
|
||
<div class="text-center py-3">
|
||
<div class="spinner-border spinner-border-sm text-primary" role="status">
|
||
<span class="visually-hidden">Загрузка...</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card-body">
|
||
<div id="calendarRight" class="calendar-wrap"></div>
|
||
|
||
<div class="week-strip-header">
|
||
<span><i class="bi-calendar-week me-1"></i> На этой неделе</span>
|
||
<span id="weekRange" class="text-muted"></span>
|
||
</div>
|
||
<div id="weekList" class="week-vertical" aria-live="polite"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|