Files
av_Site_repetitor/templates/admin.html
T
2026-08-02 22:54:13 +04:00

115 lines
9.5 KiB
HTML
Raw 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.
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Административная панель заявок Анастасии Панкратенковой.">
<title>Заявки — Анастасия Панкратенкова</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
</head>
<body class="admin-page admin-dashboard-page">
<div class="admin-shell">
<header class="admin-header">
<a class="brand" href="{{ url_for('index') }}">
<span class="brand-mark">АП</span>
<span class="brand-name">Анастасия<br>Панкратенкова</span>
</a>
<div class="admin-header-actions">
<span class="admin-status"><i></i> Вы вошли как администратор</span>
<a class="admin-logout" href="{{ url_for('admin_logout') }}">Выйти <span></span></a>
</div>
</header>
<main class="admin-main">
<div class="admin-title-row">
<div>
<p class="eyebrow"><span class="eyebrow-dot"></span> Панель преподавателя</p>
<h1>Ваши <em>заявки.</em></h1>
</div>
<div class="requests-count"><strong>{{ stats["total"] }}</strong><span>обращений<br>всего</span></div>
</div>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<div class="admin-flashes">
{% for category, message in messages %}
<div class="flash-message {{ category }}">{{ message }}</div>
{% endfor %}
</div>
{% endif %}
{% endwith %}
<section class="admin-stats" aria-label="Статистика заявок">
<div class="stat-card stat-card-total"><span>Всего</span><strong>{{ stats["total"] }}</strong><small>за всё время</small></div>
<div class="stat-card"><span>Новые</span><strong>{{ stats["new"] }}</strong><small>ждут ответа</small></div>
<div class="stat-card"><span>В работе</span><strong>{{ stats["contacted"] }}</strong><small>связались</small></div>
<div class="stat-card"><span>Запланированы</span><strong>{{ stats["scheduled"] }}</strong><small>занятия</small></div>
<div class="stat-card"><span>Завершены</span><strong>{{ stats["closed"] }}</strong><small>архив</small></div>
</section>
<section class="admin-toolbar" aria-label="Фильтры заявок">
<form class="admin-filters" action="{{ url_for('admin_dashboard') }}" method="get">
<label class="filter-search"><span>Поиск</span><input type="search" name="q" value="{{ filters["q"] }}" placeholder="Имя, контакт или комментарий"></label>
<label><span>Статус</span><select name="status"><option value="">Все статусы</option>{% for status_key, status_label in statuses.items() %}<option value="{{ status_key }}" {% if filters["status"] == status_key %}selected{% endif %}>{{ status_label }}</option>{% endfor %}</select></label>
<label><span>Предмет</span><select name="subject"><option value="">Все предметы</option>{% for subject in subjects %}<option value="{{ subject }}" {% if filters["subject"] == subject %}selected{% endif %}>{{ subject }}</option>{% endfor %}</select></label>
<button class="button button-primary filter-button" type="submit">Применить <span></span></button>
</form>
<div class="toolbar-links">
{% if filters["q"] or filters["status"] or filters["subject"] %}<a class="reset-filters" href="{{ url_for('admin_dashboard') }}">Сбросить фильтры</a>{% endif %}
<a class="export-link" href="{{ url_for('admin_export', q=filters["q"], status=filters["status"], subject=filters["subject"]) }}">Скачать CSV <span></span></a>
</div>
</section>
{% if consultation_requests %}
<div class="results-heading"><span>Показано заявок: <strong>{{ consultation_requests|length }}</strong></span><span>Новые сверху</span></div>
<section class="requests-list" aria-label="Список заявок">
{% for consultation in consultation_requests %}
<article class="request-card status-border-{{ consultation["status"] }}">
<div class="request-card-head">
<div class="request-card-head-left"><span class="status-badge status-{{ consultation["status"] }}">{{ statuses.get(consultation["status"], consultation["status"]) }}</span><span class="request-id">Заявка №{{ consultation["id"] }}</span></div>
<time datetime="{{ consultation["created_at"] }}">{{ consultation["created_at"].replace("T", " · ") }}</time>
</div>
<div class="request-card-main">
<div class="request-person"><h2>{{ consultation["name"] }}</h2><span>{{ consultation["contact"] }}</span></div>
<dl class="request-meta">
<div><dt>Предмет</dt><dd>{{ consultation["subject"] }}</dd></div>
<div><dt>Экзамен</dt><dd>{{ consultation["exam"] }}</dd></div>
<div><dt>Формат</dt><dd>{{ consultation["format"] }}</dd></div>
<div><dt>Время</dt><dd>{{ consultation["preferred_time"] }}</dd></div>
</dl>
</div>
{% if consultation["message"] %}<p class="request-message"><span>Комментарий</span>{{ consultation["message"] }}</p>{% endif %}
<div class="request-actions">
<form class="request-status-form" action="{{ url_for('admin_update_status', request_id=consultation["id"]) }}" method="post">
<label for="status-{{ consultation["id"] }}">Статус</label>
<select id="status-{{ consultation["id"] }}" name="status">{% for status_key, status_label in statuses.items() %}<option value="{{ status_key }}" {% if consultation["status"] == status_key %}selected{% endif %}>{{ status_label }}</option>{% endfor %}</select>
<button class="mini-button" type="submit">Сохранить</button>
</form>
<details class="request-note" {% if consultation["admin_note"] %}open{% endif %}>
<summary>{% if consultation["admin_note"] %}Изменить заметку{% else %}Добавить заметку{% endif %} <span></span></summary>
<form action="{{ url_for('admin_update_note', request_id=consultation["id"]) }}" method="post">
<textarea name="admin_note" rows="2" maxlength="2000" placeholder="Например: перезвонить вечером...">{{ consultation["admin_note"] }}</textarea>
<button class="mini-button" type="submit">Сохранить заметку</button>
</form>
</details>
<form class="request-delete-form" action="{{ url_for('admin_delete_request', request_id=consultation["id"]) }}" method="post" data-confirm="Удалить эту заявку? Восстановить её будет нельзя.">
<button class="delete-button" type="submit">Удалить</button>
</form>
</div>
</article>
{% endfor %}
</section>
{% else %}
<section class="empty-requests">
<span></span>
<h2>{% if filters["q"] or filters["status"] or filters["subject"] %}Ничего не найдено.{% else %}Пока заявок нет.{% endif %}</h2>
<p>{% if filters["q"] or filters["status"] or filters["subject"] %}Попробуйте изменить условия поиска или сбросить фильтры.{% else %}Новые обращения появятся здесь после заполнения формы на сайте.{% endif %}</p>
{% if filters["q"] or filters["status"] or filters["subject"] %}<a class="button button-primary" href="{{ url_for('admin_dashboard') }}">Сбросить фильтры <span></span></a>{% else %}<a class="button button-primary" href="{{ url_for('index') }}#contact">Посмотреть форму <span></span></a>{% endif %}
</section>
{% endif %}
</main>
</div>
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
</body>
</html>