156 lines
8.4 KiB
HTML
156 lines
8.4 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Журнал — Админ-панель</title>
|
||
<link rel="stylesheet" href="admin.css">
|
||
</head>
|
||
<body data-page="journal">
|
||
<div class="layout">
|
||
<div class="sidebar" id="sidebar"></div>
|
||
<div class="main">
|
||
<h2>Журнал</h2>
|
||
<div class="filters">
|
||
<div><label>Поиск</label><input type="text" id="searchInput" class="search-input" placeholder="Имя или описание"></div>
|
||
<div><label>Студент</label><input type="text" id="studentFilter" list="studentFilterList" placeholder="Все / введите имя..."><datalist id="studentFilterList"></datalist></div>
|
||
<div><label>Группа</label><select id="groupFilter"><option value="">Все группы</option></select></div>
|
||
<div><label>С</label><input type="date" id="dateFrom"></div>
|
||
<div><label>По</label><input type="date" id="dateTo"></div>
|
||
<div><label> </label><button type="button" id="exportCsvBtn" style="background:var(--card);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:8px 16px;font-size:.85rem;cursor:pointer;white-space:nowrap">Экспорт CSV</button></div>
|
||
<div><label> </label><button type="button" id="createLinkBtn" style="background:var(--card);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:8px 16px;font-size:.85rem;cursor:pointer;white-space:nowrap">Ссылка</button></div>
|
||
<div><label> </label>
|
||
<div class="view-toggle" id="viewToggle">
|
||
<button data-view="list" type="button">Список</button>
|
||
<button data-view="cards" type="button">Карточки</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="grid" id="grid"><div class="empty">Загрузка...</div></div>
|
||
<div class="pager" id="pager"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="modal-overlay" id="imgModal">
|
||
<img id="imgModalSrc">
|
||
</div>
|
||
|
||
<div class="modal-overlay" id="editModal">
|
||
<div class="edit-modal" style="max-width:480px">
|
||
<h3>Редактирование записи</h3>
|
||
<form id="editForm" class="settings-stack" style="gap:12px">
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Фамилия и имя <span style="color:#ef4444">*</span></label>
|
||
<input type="text" id="editName" class="settings-input" list="studentEditList" required autocomplete="off">
|
||
<datalist id="studentEditList"></datalist>
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Группа <span style="color:#ef4444">*</span></label>
|
||
<select id="editGroup" class="settings-input" required></select>
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Что делала(а) <span style="color:#ef4444">*</span>
|
||
<button type="button" id="aiCorrectBtn" class="ai-btn" title="Исправить ошибки ИИ">✨</button>
|
||
</label>
|
||
<textarea id="editDesc" class="settings-input" required></textarea>
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Прикрепить файлы</label>
|
||
<input type="file" id="editFiles" multiple accept=".pdf,.doc,.docx,.txt,.md,.html,.htm,.zip,.rar,.7z,.jpg,.jpeg,.png,.gif,.webp">
|
||
<div class="files-preview" id="editFilesPreview"></div>
|
||
</div>
|
||
</div>
|
||
<div class="card-foot" style="justify-content:flex-end;gap:8px">
|
||
<button type="button" class="btn-primary ghost" id="editCancelBtn">Отмена</button>
|
||
<button type="submit" class="btn-primary">Сохранить</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="modal-overlay" id="aiCorrectModal">
|
||
<div class="edit-modal" style="max-width:560px">
|
||
<h3>✨ Исправление текста</h3>
|
||
<div style="font-size:.85rem;color:var(--muted);margin-bottom:12px">ИИ предлагает вариант:</div>
|
||
<div id="aiSuggestion" style="background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px;min-height:80px;max-height:300px;overflow:auto;white-space:pre-wrap;font-family:inherit"></div>
|
||
<div class="card-foot" style="justify-content:flex-end;gap:8px;margin-top:12px">
|
||
<button type="button" class="btn-primary ghost" id="aiRejectBtn">Отклонить</button>
|
||
<button type="button" class="btn-primary" id="aiAcceptBtn">Применить</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="modal-overlay" id="linkModal">
|
||
<div class="edit-modal" style="max-width:480px">
|
||
<div id="linkCreateView">
|
||
<h3>Создать ссылку</h3>
|
||
<div style="font-size:.85rem;color:var(--muted);background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px 12px;line-height:1.5" id="linkPreview"></div>
|
||
<div class="settings-stack" style="gap:12px">
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Название ссылки <span style="color:#ef4444">*</span></label>
|
||
<input type="text" id="linkNameInput" class="settings-input" required placeholder="Например: Апрельский журнал">
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Группа (если выбрана)</label>
|
||
<input type="text" id="linkGroupPreview" class="settings-input" readonly style="background:var(--bg);color:var(--muted);cursor:not-allowed">
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Ученик (необязательно)</label>
|
||
<input type="text" id="linkStudent" class="settings-input" list="linkStudentList" placeholder="Все / введите имя..."><datalist id="linkStudentList"></datalist>
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Истекает через (дни)</label>
|
||
<input type="number" id="linkExpiresDays" class="settings-input" min="1" max="365" value="7" placeholder="7">
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label style="display:flex;align-items:center;gap:8px;cursor:pointer">
|
||
<input type="checkbox" id="linkAnonymizeNames">
|
||
Показывать только инициалы учеников (анонимизировать)
|
||
</label>
|
||
</div>
|
||
</div>
|
||
<div class="settings-row">
|
||
<div class="settings-field" style="flex:1">
|
||
<label>Пароль для доступа (необязательно)</label>
|
||
<input type="password" id="linkPassword" class="settings-input" placeholder="Оставьте пустым для открытого доступа">
|
||
</div>
|
||
</div>
|
||
<div class="card-foot" style="justify-content:flex-end;gap:8px">
|
||
<button type="button" class="btn-primary ghost" id="linkCreateCloseBtn">Отмена</button>
|
||
<button type="button" class="btn-primary" id="linkCreateSaveBtn">Создать</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="linkResultView" style="display:none">
|
||
<h3>Ссылка готова</h3>
|
||
<div style="font-size:.85rem;color:var(--muted);margin-bottom:8px">Открывается публичная страница с карточками — без входа и выбора параметров. Ссылку можно изменить или удалить в разделе «Ссылки».</div>
|
||
<input type="text" id="linkUrlResult" class="settings-input" readonly style="font-size:.8rem;color:var(--accent)">
|
||
<div class="card-foot" style="justify-content:flex-end;gap:8px">
|
||
<a class="btn-primary ghost" href="links.html" style="text-decoration:none">К списку ссылок</a>
|
||
<button class="btn-primary" type="button" id="linkCopyBtn">Копировать</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="toast" id="toast"></div>
|
||
<script src="admin.js"></script>
|
||
<script src="js/journal.js"></script>
|
||
</body>
|
||
</html> |