234 lines
11 KiB
HTML
234 lines
11 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>
|
||
</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>
|
||
</main>
|
||
|
||
<script src="/theme-toggle.js"></script>
|
||
<script src="admin.js"></script>
|
||
</body>
|
||
|
||
</html> |