130 lines
4.4 KiB
HTML
130 lines
4.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Nextcloud — управление пользователями</title>
|
|
<link rel="stylesheet" href="/styles.css" />
|
|
</head>
|
|
<body>
|
|
<div id="app">
|
|
<!-- Экран входа -->
|
|
<section id="login-screen" class="card login-card">
|
|
<h1>Nextcloud Admin</h1>
|
|
<p class="muted">Войдите учётной записью администратора</p>
|
|
<form id="login-form">
|
|
<label>Логин<input type="text" id="login-user" autocomplete="username" required /></label>
|
|
<label>Пароль<input type="password" id="login-pass" autocomplete="current-password" required /></label>
|
|
<button type="submit">Войти</button>
|
|
<p id="login-error" class="error hidden"></p>
|
|
</form>
|
|
</section>
|
|
|
|
<!-- Основной экран -->
|
|
<section id="main-screen" class="hidden">
|
|
<header class="topbar">
|
|
<div>
|
|
<h1>Пользователи</h1>
|
|
<p class="muted" id="server-info"></p>
|
|
</div>
|
|
<div class="topbar-actions">
|
|
<button id="btn-refresh" class="secondary">Обновить</button>
|
|
<button id="btn-create">+ Пользователь</button>
|
|
<button id="btn-logout" class="secondary">Выход</button>
|
|
</div>
|
|
</header>
|
|
|
|
<div id="global-error" class="banner error hidden"></div>
|
|
<div id="global-ok" class="banner ok hidden"></div>
|
|
|
|
<div class="card table-wrap">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Логин</th>
|
|
<th>Имя</th>
|
|
<th>Email</th>
|
|
<th>Квота</th>
|
|
<th>Использовано</th>
|
|
<th>Группы</th>
|
|
<th>Статус</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="users-body">
|
|
<tr><td colspan="8" class="muted center">Загрузка…</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
|
|
<!-- Модал: создать / редактировать -->
|
|
<dialog id="user-dialog">
|
|
<form id="user-form" method="dialog">
|
|
<h2 id="dialog-title">Новый пользователь</h2>
|
|
<input type="hidden" id="edit-userid" />
|
|
|
|
<label id="field-userid-wrap">
|
|
Логин
|
|
<input type="text" id="field-userid" pattern="[a-zA-Z0-9._@-]+" required />
|
|
</label>
|
|
|
|
<label>
|
|
Пароль
|
|
<input type="password" id="field-password" />
|
|
<span class="hint" id="password-hint">Обязателен для нового пользователя</span>
|
|
</label>
|
|
|
|
<label>
|
|
Отображаемое имя
|
|
<input type="text" id="field-displayname" />
|
|
</label>
|
|
|
|
<label>
|
|
Email
|
|
<input type="email" id="field-email" />
|
|
</label>
|
|
|
|
<label>
|
|
Квота (место)
|
|
<select id="field-quota">
|
|
<option value="default">По умолчанию</option>
|
|
<option value="none">Без лимита</option>
|
|
<option value="1GB">1 GB</option>
|
|
<option value="2GB">2 GB</option>
|
|
<option value="5GB">5 GB</option>
|
|
<option value="10GB">10 GB</option>
|
|
<option value="50GB">50 GB</option>
|
|
<option value="100GB">100 GB</option>
|
|
<option value="custom">Своё значение…</option>
|
|
</select>
|
|
</label>
|
|
|
|
<label id="custom-quota-wrap" class="hidden">
|
|
Своя квота (например 25GB)
|
|
<input type="text" id="field-quota-custom" placeholder="25 GB" />
|
|
</label>
|
|
|
|
<label>
|
|
Группы (права)
|
|
<select id="field-groups" multiple size="5"></select>
|
|
<span class="hint">Ctrl+клик для нескольких групп. Группа <code>admin</code> — права администратора.</span>
|
|
</label>
|
|
|
|
<label class="checkbox" id="field-enabled-wrap">
|
|
<input type="checkbox" id="field-enabled" checked />
|
|
Аккаунт активен
|
|
</label>
|
|
|
|
<div class="dialog-actions">
|
|
<button type="button" class="secondary" id="btn-cancel">Отмена</button>
|
|
<button type="submit" id="btn-save">Сохранить</button>
|
|
</div>
|
|
</form>
|
|
</dialog>
|
|
|
|
<script src="/app.js"></script>
|
|
</body>
|
|
</html>
|