Добавить статистику и очистку аудита; доработать UI расшифровки.

- Страница /admin/stats: MinIO, pending/consumed, загрузки, audit-метрики
- Кнопка «Очистить» в аудите с подтверждением
- Красивые callout’ы и ошибки пароля; пустой пароль не тратит попытку
- Убрать автоопределение языка; «Расшифруй» в RU UI
This commit is contained in:
2026-07-18 23:50:44 +03:00
parent 8c8dbd2348
commit a881570938
17 changed files with 1007 additions and 258 deletions
+17
View File
@@ -2,6 +2,7 @@
const form = document.getElementById("audit-filter-form");
const typeSelect = document.getElementById("audit-event-type");
const perPage = document.getElementById("audit-per-page");
const clearForm = document.getElementById("audit-clear-form");
function resetToFirstPageAndSubmit() {
if (!form) return;
@@ -13,6 +14,22 @@
typeSelect?.addEventListener("change", resetToFirstPageAndSubmit);
perPage?.addEventListener("change", resetToFirstPageAndSubmit);
clearForm?.addEventListener("submit", async (e) => {
e.preventDefault();
const t = (k, fallback) => window.WrappedI18n?.t(k) || fallback;
const ok = await window.WrappedModal.confirm({
title: t("admin.audit.clearConfirmTitle", "Clear audit"),
message: t(
"admin.audit.clearConfirm",
"Delete all audit events? This cannot be undone."
),
confirmLabel: t("admin.audit.clearConfirmOk", "Clear all"),
cancelLabel: t("modal.confirm.cancel", "Cancel"),
danger: true,
});
if (ok) clearForm.submit();
});
document.querySelectorAll(".audit-time[data-ts]").forEach((el) => {
const raw = el.getAttribute("data-ts");
if (!raw) return;