feat: роли customer/admin, админ-панель, admin@site.com

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 11:19:01 +03:00
parent 58c789d5f8
commit f24f35d0fc
18 changed files with 497 additions and 9 deletions
+62
View File
@@ -0,0 +1,62 @@
<%- include('../partials/layout-start') %>
<div class="admin-header">
<h1>Админ-панель</h1>
<nav class="admin-nav">
<a href="/admin" class="admin-nav__link admin-nav__link--active">Обзор</a>
<a href="/admin/orders" class="admin-nav__link">Заказы</a>
<a href="/admin/users" class="admin-nav__link">Пользователи</a>
<a href="/admin/products" class="admin-nav__link">Товары</a>
<a href="/" class="admin-nav__link">В магазин</a>
</nav>
</div>
<div class="stats-grid">
<div class="stat-card">
<span class="stat-card__label">Пользователи</span>
<strong class="stat-card__value"><%= stats.users %></strong>
</div>
<div class="stat-card">
<span class="stat-card__label">Товары</span>
<strong class="stat-card__value"><%= stats.products %></strong>
</div>
<div class="stat-card">
<span class="stat-card__label">Заказы</span>
<strong class="stat-card__value"><%= stats.orders %></strong>
</div>
<div class="stat-card">
<span class="stat-card__label">Выручка</span>
<strong class="stat-card__value"><%= formatPrice(stats.revenue) %></strong>
</div>
</div>
<h2>Последние заказы</h2>
<% if (!recentOrders.length) { %>
<p class="muted">Заказов пока нет.</p>
<% } else { %>
<table class="cart-table">
<thead>
<tr>
<th>№</th>
<th>Клиент</th>
<th>Статус</th>
<th>Сумма</th>
<th>Дата</th>
</tr>
</thead>
<tbody>
<% const statusLabels = { pending: 'Ожидает', paid: 'Оплачен', shipped: 'Отправлен', cancelled: 'Отменён' }; %>
<% recentOrders.forEach(o => { %>
<tr>
<td>#<%= o.id %></td>
<td><%= o.customer_name %><br><span class="muted"><%= o.user_email %></span></td>
<td><span class="status status--<%= o.status %>"><%= statusLabels[o.status] || o.status %></span></td>
<td><%= formatPrice(o.total_cents) %></td>
<td><%= new Date(o.created_at).toLocaleString('ru-RU') %></td>
</tr>
<% }) %>
</tbody>
</table>
<% } %>
<%- include('../partials/layout-end') %>