fix: три бага — CSRF в админке, пагинация аудита, скрыта кнопка выхода
1. Изменение лимитов (Баг 1): добавлен CSRF-токен в форму /v2/admin/limit
- v2/src/admin/index.js: createAdminRouter принимает {generateCsrfToken},
передаёт csrfToken в шаблон admin.ejs
- views/v2/admin.ejs: скрытое поле <input name=_csrf> в форме лимита
2. Журнал операций (Баг 2): пагинация + фильтр по дате вместо хардкод LIMIT 500
- v2/src/db/queries.js: getAudit({companyId,days,page,limit}) —
COUNT(*) OVER() для пагинации, WHERE created_at > NOW() - INTERVAL
- v2/src/admin/index.js: чтение days/page из query string, limit=100
- views/v2/admin-audit.ejs: фильтр 30/90/365 дней, prev/next пагинация
3. Кнопка Выйти (Баг 3): скрыта, т.к. /v2/logout не разлогинивает из Keycloak
- views/v2/user.ejs: кнопка закомментирована с пояснением
v0.1.8 → v0.1.9
This commit is contained in:
@@ -73,9 +73,21 @@
|
||||
|
||||
<div class="page">
|
||||
<div class="card">
|
||||
<div class="card-header">Журнал операций <span style="font-weight:400;font-size:.82rem;color:var(--muted);">(макс 500)</span></div>
|
||||
<div class="card-header">
|
||||
Журнал операций
|
||||
<span style="font-weight:400;font-size:.82rem;color:var(--muted);">
|
||||
(<%= total %> записей за <%= days %> дн.)
|
||||
</span>
|
||||
<span style="float:right;display:flex;gap:.3rem;">
|
||||
<% [30, 90, 365].forEach(function(d) { %>
|
||||
<a href="?<%= company ? 'companyId=' + company.id + '&' : '' %>days=<%= d %>"
|
||||
class="btn btn-sm<%= days === d ? ' btn-primary' : '' %>"
|
||||
style="padding:.2rem .5rem;font-size:.75rem;"><%= d %>д</a>
|
||||
<% }) %>
|
||||
</span>
|
||||
</div>
|
||||
<% if (audit.length === 0) { %>
|
||||
<div class="empty">Нет записей</div>
|
||||
<div class="empty">Нет записей за выбранный период</div>
|
||||
<% } else { %>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
@@ -103,6 +115,23 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<% if (pages > 1) { %>
|
||||
<div style="padding:.75rem 1rem;display:flex;justify-content:center;align-items:center;gap:.75rem;border-top:1px solid var(--border);">
|
||||
<% if (page > 1) { %>
|
||||
<a href="?<%= company ? 'companyId=' + company.id + '&' : '' %>days=<%= days %>&page=<%= page - 1 %>" class="btn btn-sm">← Назад</a>
|
||||
<% } else { %>
|
||||
<span class="btn btn-sm" style="opacity:.4;cursor:default;">← Назад</span>
|
||||
<% } %>
|
||||
<span style="font-size:.85rem;color:var(--muted);">стр. <%= page %> из <%= pages %></span>
|
||||
<% if (page < pages) { %>
|
||||
<a href="?<%= company ? 'companyId=' + company.id + '&' : '' %>days=<%= days %>&page=<%= page + 1 %>" class="btn btn-sm">Вперёд →</a>
|
||||
<% } else { %>
|
||||
<span class="btn btn-sm" style="opacity:.4;cursor:default;">Вперёд →</span>
|
||||
<% } %>
|
||||
</div>
|
||||
<% } %>
|
||||
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user