add superadmin dashboard. subscriptions

This commit is contained in:
root
2026-01-13 20:03:16 +03:00
parent 3c24c250e5
commit edb4df7e37
36 changed files with 3329 additions and 100 deletions
+109
View File
@@ -59,6 +59,56 @@
font-weight: 500;
margin-bottom: 0.5rem;
}
.session-item {
padding: 1rem;
border: 1px solid #e9ecef;
border-radius: 0.5rem;
margin-bottom: 0.75rem;
background: #fafafa;
}
.session-item:last-child {
margin-bottom: 0;
}
.session-device {
font-weight: 500;
color: #333;
}
.session-meta {
font-size: 0.875rem;
color: #6c757d;
margin-top: 0.25rem;
}
.session-current {
border-color: #198754;
background: #f0fff4;
}
.session-current .badge {
background: #198754;
}
.session-badge {
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
}
.empty-sessions {
text-align: center;
padding: 2rem;
color: #6c757d;
}
.empty-sessions i {
font-size: 3rem;
margin-bottom: 1rem;
opacity: 0.5;
}
</style>
{% endblock %}
@@ -137,6 +187,65 @@
</div>
</div>
<!-- Активные сессии и устройства -->
<div class="card mb-4">
<div class="card-header bg-white d-flex justify-content-between align-items-center">
<h4 class="mb-0"><i class="fa-solid fa-desktop me-2"></i>Активные сессии</h4>
{% if sessions|length > 0 %}
<form action="{{ base_url('/profile/sessions/revoke-all') }}" method="post" onsubmit="return confirm('Вы уверены? Это завершит сессии на всех устройствах, кроме текущего.');">
{{ csrf_field()|raw }}
<button type="submit" class="btn btn-outline-danger btn-sm">
<i class="fa-solid fa-times me-1"></i>Завершить все
</button>
</form>
{% endif %}
</div>
<div class="card-body">
{% if sessions|length > 0 %}
{% for session in sessions %}
<div class="session-item{% if session.is_current %} session-current{% endif %}">
<div class="d-flex justify-content-between align-items-start">
<div>
<div class="session-device">
<i class="fa-solid fa-desktop me-2"></i>{{ session.device }}
{% if session.is_current %}
<span class="badge session-badge ms-2">Текущая сессия</span>
{% endif %}
</div>
<div class="session-meta">
<i class="fa-solid fa-globe me-1"></i>{{ session.ip_address }}
{% if session.expires_at %}
&nbsp;|&nbsp;
<i class="fa-solid fa-clock me-1"></i>истекает {{ session.expires_at|date('d.m.Y H:i') }}
{% endif %}
</div>
</div>
{% if not session.is_current %}
<form action="{{ base_url('/profile/session/revoke') }}" method="post">
{{ csrf_field()|raw }}
<input type="hidden" name="session_id" value="{{ session.id }}">
<button type="submit" class="btn btn-outline-danger btn-sm" onclick="return confirm('Завершить эту сессию?');">
<i class="fa-solid fa-times"></i>
</button>
</form>
{% endif %}
</div>
</div>
{% endfor %}
<div class="alert alert-info mt-3 mb-0">
<i class="fa-solid fa-info-circle me-2"></i>
<strong>Запомненные устройства:</strong> Если вы отметили "Запомнить меня" при входе, устройство будет автоматически авторизовано в течение 30 дней. Вы можете завершить эти сессии вручную.
</div>
{% else %}
<div class="empty-sessions">
<i class="fa-solid fa-shield-check"></i>
<p>Нет активных сессий на других устройствах</p>
</div>
{% endif %}
</div>
</div>
<!-- Информация о безопасности -->
<div class="card">
<div class="card-header bg-white">