372 lines
18 KiB
HTML
372 lines
18 KiB
HTML
<!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="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||
<link rel="stylesheet" href="admin.css">
|
||
</head>
|
||
|
||
<body>
|
||
<!-- Sidebar -->
|
||
<aside class="sidebar">
|
||
<div class="sidebar-header">
|
||
<div class="logo">
|
||
<svg width="32" height="32" viewBox="0 0 40 40" fill="none">
|
||
<rect width="40" height="40" rx="12" fill="url(#lg)" />
|
||
<path d="M12 20L18 26L28 14" stroke="#fff" stroke-width="3" stroke-linecap="round"
|
||
stroke-linejoin="round" />
|
||
<defs>
|
||
<linearGradient id="lg" x1="0" y1="0" x2="40" y2="40">
|
||
<stop stop-color="#6366f1" />
|
||
<stop offset="1" stop-color="#8b5cf6" />
|
||
</linearGradient>
|
||
</defs>
|
||
</svg>
|
||
<span>Magistr</span>
|
||
</div>
|
||
</div>
|
||
<nav class="sidebar-nav">
|
||
<a href="#" class="nav-item active" data-tab="users">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" />
|
||
<circle cx="9" cy="7" r="4" />
|
||
<path d="M23 21v-2a4 4 0 0 0-3-3.87" />
|
||
<path d="M16 3.13a4 4 0 0 1 0 7.75" />
|
||
</svg>
|
||
Пользователи
|
||
</a>
|
||
<a href="#" class="nav-item" data-tab="groups">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" />
|
||
<path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
|
||
</svg>
|
||
Группы
|
||
</a>
|
||
<a href="#" class="nav-item" data-tab="edu-forms">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20" />
|
||
<path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z" />
|
||
<line x1="9" y1="7" x2="17" y2="7" />
|
||
<line x1="9" y1="11" x2="15" y2="11" />
|
||
</svg>
|
||
Формы обучения
|
||
</a>
|
||
<a href="#" class="nav-item" data-tab="equipments">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<rect x="2" y="7" width="20" height="14" rx="2" ry="2"></rect>
|
||
<path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path>
|
||
</svg>
|
||
Оборудование
|
||
</a>
|
||
<a href="#" class="nav-item" data-tab="classrooms">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<path d="M3 3h18v18H3zM9 3v18M15 3v18M3 9h18M3 15h18" />
|
||
</svg>
|
||
Аудитории
|
||
</a>
|
||
</nav>
|
||
<div class="sidebar-footer">
|
||
<button class="btn-logout" id="btn-logout">
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" />
|
||
<polyline points="16 17 21 12 16 7" />
|
||
<line x1="21" y1="12" x2="9" y2="12" />
|
||
</svg>
|
||
Выйти
|
||
</button>
|
||
</div>
|
||
</aside>
|
||
|
||
<!-- Sidebar overlay (mobile) -->
|
||
<div class="sidebar-overlay" id="sidebar-overlay"></div>
|
||
|
||
<!-- Main -->
|
||
<main class="main">
|
||
<header class="topbar">
|
||
<button class="menu-toggle" id="menu-toggle" aria-label="Меню">
|
||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||
stroke-linecap="round" stroke-linejoin="round">
|
||
<line x1="3" y1="6" x2="21" y2="6" />
|
||
<line x1="3" y1="12" x2="21" y2="12" />
|
||
<line x1="3" y1="18" x2="21" y2="18" />
|
||
</svg>
|
||
</button>
|
||
<h1 id="page-title">Управление пользователями</h1>
|
||
</header>
|
||
|
||
<!-- ===== Users Tab ===== -->
|
||
<section class="content tab-content" id="tab-users">
|
||
<div class="card create-card">
|
||
<h2>Новый пользователь</h2>
|
||
<form id="create-form">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="new-username">Имя пользователя</label>
|
||
<input type="text" id="new-username" placeholder="username" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="new-password">Пароль</label>
|
||
<input type="text" id="new-password" placeholder="password" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="new-role">Роль</label>
|
||
<select id="new-role">
|
||
<option value="STUDENT">Студент</option>
|
||
<option value="TEACHER">Преподаватель</option>
|
||
<option value="ADMIN">Администратор</option>
|
||
</select>
|
||
</div>
|
||
<button type="submit" class="btn-create">Создать</button>
|
||
</div>
|
||
<div class="form-alert" id="create-alert" role="alert"></div>
|
||
</form>
|
||
</div>
|
||
<div class="card">
|
||
<h2>Все пользователи</h2>
|
||
<div class="table-wrap">
|
||
<table id="users-table">
|
||
<thead>
|
||
<tr>
|
||
<th>ID</th>
|
||
<th>Имя пользователя</th>
|
||
<th>Роль</th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="users-tbody">
|
||
<tr>
|
||
<td colspan="4" class="loading-row">Загрузка...</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Groups Tab ===== -->
|
||
<section class="content tab-content" id="tab-groups" style="display:none;">
|
||
<div class="card create-card">
|
||
<h2>Новая группа</h2>
|
||
<form id="create-group-form">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="new-group-name">Название группы</label>
|
||
<input type="text" id="new-group-name" placeholder="ИВТ-21-1" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="new-group-ef">Форма обучения</label>
|
||
<select id="new-group-ef">
|
||
<option value="">Загрузка...</option>
|
||
</select>
|
||
</div>
|
||
<button type="submit" class="btn-create">Создать</button>
|
||
</div>
|
||
<div class="form-alert" id="create-group-alert" role="alert"></div>
|
||
</form>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header-row">
|
||
<h2>Все группы</h2>
|
||
<div class="filter-row">
|
||
<label for="filter-ef">Фильтр:</label>
|
||
<select id="filter-ef">
|
||
<option value="">Все формы</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="table-wrap">
|
||
<table id="groups-table">
|
||
<thead>
|
||
<tr>
|
||
<th>ID</th>
|
||
<th>Название</th>
|
||
<th>Форма обучения</th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="groups-tbody">
|
||
<tr>
|
||
<td colspan="4" class="loading-row">Загрузка...</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Education Forms Tab ===== -->
|
||
<section class="content tab-content" id="tab-edu-forms" style="display:none;">
|
||
<div class="card create-card">
|
||
<h2>Новая форма обучения</h2>
|
||
<form id="create-ef-form">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="new-ef-name">Название</label>
|
||
<input type="text" id="new-ef-name" placeholder="Бакалавриат" required>
|
||
</div>
|
||
<button type="submit" class="btn-create">Создать</button>
|
||
</div>
|
||
<div class="form-alert" id="create-ef-alert" role="alert"></div>
|
||
</form>
|
||
</div>
|
||
<div class="card">
|
||
<h2>Все формы обучения</h2>
|
||
<div class="table-wrap">
|
||
<table id="ef-table">
|
||
<thead>
|
||
<tr>
|
||
<th>ID</th>
|
||
<th>Название</th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="ef-tbody">
|
||
<tr>
|
||
<td colspan="3" class="loading-row">Загрузка...</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Equipments Tab ===== -->
|
||
<section class="content tab-content" id="tab-equipments" style="display:none;">
|
||
<div class="card create-card">
|
||
<h2>Новое оборудование</h2>
|
||
<form id="create-equipment-form">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="new-equipment-name">Название оборудования</label>
|
||
<input type="text" id="new-equipment-name" placeholder="Проектор" required>
|
||
</div>
|
||
<button type="submit" class="btn-create">Добавить</button>
|
||
</div>
|
||
<div class="form-alert" id="create-equipment-alert" role="alert"></div>
|
||
</form>
|
||
</div>
|
||
<div class="card">
|
||
<h2>Справочник оборудования</h2>
|
||
<div class="table-wrap">
|
||
<table id="equipments-table">
|
||
<thead>
|
||
<tr>
|
||
<th>ID</th>
|
||
<th>Название</th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="equipments-tbody">
|
||
<tr>
|
||
<td colspan="3" class="loading-row">Загрузка...</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Classrooms Tab ===== -->
|
||
<section class="content tab-content" id="tab-classrooms" style="display:none;">
|
||
<div class="card create-card">
|
||
<h2>Новая аудитория</h2>
|
||
<form id="create-classroom-form">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="new-classroom-name">Номер / Название</label>
|
||
<input type="text" id="new-classroom-name" placeholder="101 Ленинская" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="new-classroom-capacity">Вместимость (чел.)</label>
|
||
<input type="number" id="new-classroom-capacity" placeholder="30" min="1" required>
|
||
</div>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group" style="flex: 2;">
|
||
<label>Оборудование</label>
|
||
<div id="equipment-checkboxes" class="checkbox-group">
|
||
<!-- Подгружается через JS -->
|
||
<p class="text-muted"><small>Загрузка...</small></p>
|
||
</div>
|
||
</div>
|
||
<div class="form-group" style="display: flex; align-items: flex-end;">
|
||
<button type="submit" class="btn-create">Добавить</button>
|
||
</div>
|
||
</div>
|
||
<div class="form-alert" id="create-classroom-alert" role="alert"></div>
|
||
</form>
|
||
</div>
|
||
<div class="card">
|
||
<h2>Список аудиторий</h2>
|
||
<div class="table-wrap">
|
||
<table id="classrooms-table">
|
||
<thead>
|
||
<tr>
|
||
<th>ID</th>
|
||
<th>Название</th>
|
||
<th>Вместимость</th>
|
||
<th>Оборудование</th>
|
||
<th>Статус</th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="classrooms-tbody">
|
||
<tr>
|
||
<td colspan="6" class="loading-row">Загрузка...</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Edit Classroom Modal ===== -->
|
||
<div class="modal-overlay" id="modal-edit-classroom">
|
||
<div class="modal-content">
|
||
<h2>Редактировать аудиторию</h2>
|
||
<button class="modal-close" id="modal-edit-classroom-close">×</button>
|
||
<form id="edit-classroom-form">
|
||
<input type="hidden" id="edit-classroom-id">
|
||
<div class="form-row" style="margin-top: 1rem;">
|
||
<div class="form-group">
|
||
<label for="edit-classroom-name">Номер / Название</label>
|
||
<input type="text" id="edit-classroom-name" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="edit-classroom-capacity">Вместимость (чел.)</label>
|
||
<input type="number" id="edit-classroom-capacity" min="1" required>
|
||
</div>
|
||
</div>
|
||
<div class="form-row" style="margin-top: 1rem;">
|
||
<div class="form-group" style="flex: 2;">
|
||
<label>Оборудование</label>
|
||
<div id="edit-equipment-checkboxes" class="checkbox-group">
|
||
<!-- Подгружается через JS -->
|
||
</div>
|
||
</div>
|
||
<div class="form-group" style="display: flex; align-items: flex-end;">
|
||
<button type="submit" class="btn-create" style="width: 100%;">Сохранить</button>
|
||
</div>
|
||
</div>
|
||
<div class="form-alert" id="edit-classroom-alert" role="alert"></div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<script src="/theme-toggle.js"></script>
|
||
<script src="admin.js"></script>
|
||
</body>
|
||
|
||
</html> |