create: admin.html, admin.js, help.html, index.html, info.html, info.js, login.html, main.js, style.css, auth.js, package.json, server.js, sqllite.js

This commit is contained in:
Калугин Олег Александрович
2026-04-12 19:05:12 +00:00
committed by GitVerse
parent 458b1fa927
commit 3fbf7311d8
13 changed files with 2018 additions and 0 deletions

111
public/help.html Normal file
View File

@@ -0,0 +1,111 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Справка по системе</title>
<link rel="stylesheet" href="style.css">
<style>
.help-container {
max-width: 1000px;
margin: 2rem auto;
padding: 0 1rem;
}
.card {
background: white;
border-radius: 1rem;
padding: 1.5rem;
margin-bottom: 1.5rem;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}
.card h2 {
margin-top: 0;
color: #1e3a8a;
}
.card a {
color: #1e3a8a;
text-decoration: none;
font-weight: bold;
}
.card a:hover {
text-decoration: underline;
}
.badge {
display: inline-block;
background: #e2e8f0;
padding: 0.2rem 0.6rem;
border-radius: 1rem;
font-size: 0.8rem;
margin-left: 0.5rem;
}
.note {
background: #fef9c3;
padding: 1rem;
border-radius: 0.8rem;
margin-top: 1rem;
}
footer {
text-align: center;
margin-top: 2rem;
color: #64748b;
}
</style>
</head>
<body>
<header>
<h1>Справка по системе</h1>
<div id="userInfo"></div>
<button id="logoutBtn" style="display:none;">Выйти</button>
</header>
<main class="help-container">
<div class="card">
<h2>📅 Запись на открытые уроки <span class="badge">доступ всем</span></h2>
<p><strong>Ссылка:</strong> <a href="/" target="_blank">/</a> (главная страница)</p>
<p>Родители могут просматривать доступные уроки, фильтровать их по классу, учителю или теме, и записываться, указав свои ФИО и телефон. После записи количество свободных мест уменьшается.</p>
<p>Уроки, на которых нет свободных мест, не отображаются.</p>
</div>
<div class="card">
<h2>🔐 Панель администратора <span class="badge">только admin</span></h2>
<p><strong>Ссылка:</strong> <a href="/admin" target="_blank">/admin</a></p>
<p>Доступна после авторизации с правами администратора (локальный пользователь или группа из <code>Администраторов</code>).</p>
<ul>
<li> Добавление, редактирование и удаление уроков.</li>
<li>📋 Просмотр записей родителей на каждый урок.</li>
<li>🔍 Фильтрация уроков по классу, учителю, теме, параллели.</li>
<li>📂 Импорт уроков из JSON (структура: массив записей с полями "Класс (параллель)", "Класс (буква)", "Предмет", "Фамилия Учителя", "Имя Учителя", "Отчество Учителя", "Тема Урока").</li>
</ul>
</div>
<div class="card">
<h2>📊 Список записавшихся родителей <span class="badge">admin + Администрация</span></h2>
<p><strong>Ссылка:</strong> <a href="/info" target="_blank">/info</a></p>
<p>Доступен администраторам и пользователям, входящим в группы, указанные в переменной окружения <code>Администрация</code>.</p>
<ul>
<li>📋 Таблица со всеми записями родителей (ФИО, телефон, класс, предмет, учитель, тема, дата/время урока, дата регистрации).</li>
<li>🔎 Фильтрация по ФИО родителя, классу, предмету, учителю.</li>
<li>📎 Выгрузка отфильтрованных данных в CSV (совместим с Excel).</li>
</ul>
</div>
<footer>
Система записи на открытые уроки. При возникновении вопросов обращайтесь к Калугину О.А..
</footer>
</main>
<script>
// Проверяем, авторизован ли пользователь, чтобы показать кнопку выхода
fetch('/api/me').then(res => res.json()).then(data => {
if (data.authenticated) {
const userInfo = document.getElementById('userInfo');
const logoutBtn = document.getElementById('logoutBtn');
userInfo.innerHTML = `👋 ${data.user.full_name} (${data.user.role})`;
logoutBtn.style.display = 'inline-block';
logoutBtn.onclick = async () => {
await fetch('/api/logout', { method: 'POST' });
window.location.href = '/';
};
}
});
</script>
</body>
</html>