147 lines
8.4 KiB
HTML
147 lines
8.4 KiB
HTML
<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" 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>
|