Files
magistr/frontend/admin/views/teacher-absences.html
2026-08-20 00:55:27 +03:00

147 lines
8.4 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<section class="absence-command-card">
<div class="absence-command-copy">
<span class="absence-kicker">Оперативный контур расписания</span>
<h2>От регистрации инцидента до готовой замены</h2>
<p>Зафиксируйте период отсутствия, проверьте затронутые пары и примените только выбранные решения.</p>
</div>
<div class="absence-command-stats" aria-label="Сводка отсутствий">
<article><strong id="absence-stat-active">0</strong><span>требуют внимания</span></article>
<article><strong id="absence-stat-pending">0</strong><span>ждут подтверждения</span></article>
<article><strong id="absence-stat-resolved">0</strong><span>разрешены</span></article>
</div>
</section>
<section class="card absence-create-card">
<div class="card-header-row">
<div>
<span class="absence-section-number">01</span>
<h2>Зарегистрировать отсутствие</h2>
</div>
<span class="muted">Ответственный сотрудник создаёт согласованную запись сразу</span>
</div>
<form id="teacher-absence-form" novalidate>
<div class="absence-form-grid">
<div class="form-group absence-teacher-field">
<label for="teacher-absence-teacher">Преподаватель</label>
<select id="teacher-absence-teacher" data-native-select="true" required>
<option value="">Загрузка...</option>
</select>
</div>
<div class="form-group">
<label for="teacher-absence-start">Начало</label>
<input type="date" id="teacher-absence-start" required>
</div>
<div class="form-group">
<label for="teacher-absence-end">Окончание</label>
<input type="date" id="teacher-absence-end" required>
</div>
<div class="form-group absence-reason-field">
<label for="teacher-absence-reason">Причина</label>
<input type="text" id="teacher-absence-reason" maxlength="2000"
placeholder="Болезнь, командировка или другая причина" required>
</div>
<button type="submit" class="btn btn-md btn-primary absence-create-submit">Зарегистрировать</button>
</div>
<div class="form-alert" id="teacher-absence-form-alert" role="alert"></div>
</form>
</section>
<section class="card absence-registry-card">
<div class="card-header-row absence-registry-head">
<div>
<span class="absence-section-number">02</span>
<h2>Реестр инцидентов</h2>
</div>
<div class="absence-registry-actions">
<select id="teacher-absence-status-filter" aria-label="Фильтр по статусу">
<option value="">Все статусы</option>
<option value="PENDING">На подтверждении</option>
<option value="APPROVED">Согласованы</option>
<option value="RESOLVED">Разрешены</option>
<option value="REJECTED">Отклонены</option>
<option value="CANCELLED">Отменены</option>
</select>
<button type="button" class="btn btn-md btn-secondary" id="teacher-absence-refresh">Обновить</button>
</div>
</div>
<div class="absence-registry" id="teacher-absence-registry" aria-live="polite">
<div class="loading-row">Загрузка...</div>
</div>
</section>
<section class="teacher-dialogue-grid">
<article class="card teacher-dialogue-card">
<header class="teacher-dialogue-head">
<div>
<span class="absence-section-number">03</span>
<h2>Пожелания на семестр</h2>
<p>Строгие ограничения после согласования участвуют в проверке правил. Мягкие отметки остаются видимой подсказкой.</p>
</div>
<div class="teacher-dialogue-counter"><strong id="teacher-preference-pending-count">0</strong><span>ожидают</span></div>
</header>
<div class="teacher-dialogue-toolbar">
<select id="teacher-preference-semester-filter" aria-label="Семестр пожеланий"></select>
<select id="teacher-preference-status-filter" aria-label="Статус пожеланий">
<option value="PENDING">На рассмотрении</option>
<option value="APPROVED">Согласованные</option>
<option value="">Все статусы</option>
</select>
<button class="btn btn-md btn-secondary" id="teacher-preference-refresh" type="button">Обновить</button>
</div>
<div class="teacher-dialogue-list" id="teacher-preference-review-list" aria-live="polite"></div>
</article>
<article class="card teacher-dialogue-card change-review-card">
<header class="teacher-dialogue-head">
<div>
<span class="absence-section-number">04</span>
<h2>Заявки на изменение</h2>
<p>Каждое одобрение проходит повторную проверку конфликтов и применяется через точечное изменение расписания.</p>
</div>
<div class="teacher-dialogue-counter"><strong id="teacher-change-pending-count">0</strong><span>в очереди</span></div>
</header>
<div class="teacher-dialogue-toolbar">
<select id="teacher-change-status-filter" aria-label="Статус заявок">
<option value="PENDING">Ожидают решения</option>
<option value="APPROVED">Одобренные</option>
<option value="REJECTED">Отклонённые</option>
<option value="">Все статусы</option>
</select>
<button class="btn btn-md btn-secondary" id="teacher-change-refresh" type="button">Обновить</button>
</div>
<div class="teacher-dialogue-list" id="teacher-change-review-list" aria-live="polite"></div>
</article>
</section>
<div class="absence-wizard-overlay" id="absence-wizard-overlay" hidden>
<section class="absence-wizard" role="dialog" aria-modal="true" aria-labelledby="absence-wizard-title">
<header class="absence-wizard-header">
<div>
<span class="absence-kicker">Мастер замены</span>
<h2 id="absence-wizard-title">Затронутые занятия</h2>
<p id="absence-wizard-summary">Загрузка...</p>
</div>
<button type="button" class="btn btn-icon-md btn-ghost" id="absence-wizard-close" aria-label="Закрыть">×</button>
</header>
<div class="absence-wizard-progress" aria-hidden="true">
<span class="done">Инцидент</span><i></i><span class="done">Занятия</span><i></i><span>Решения</span>
</div>
<div class="form-alert" id="absence-wizard-alert" role="alert"></div>
<div class="absence-wizard-lessons" id="absence-wizard-lessons"></div>
<section class="absence-journal">
<div class="card-header-row">
<h3>Журнал решений</h3>
<span class="muted" id="absence-journal-count">0 записей</span>
</div>
<div id="absence-journal-list" class="absence-journal-list"></div>
</section>
<footer class="absence-wizard-footer">
<span class="muted">Пустые строки останутся без изменений</span>
<div>
<button type="button" class="btn btn-md btn-ghost" id="absence-wizard-cancel">Закрыть</button>
<button type="button" class="btn btn-md btn-primary" id="absence-wizard-apply">Применить выбранные</button>
</div>
</footer>
</section>
</div>