470 lines
27 KiB
HTML
470 lines
27 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="{{ current_lang }}" data-bs-theme="dark">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>{% block title %}Edu-Space Admin{% endblock %}</title>
|
|
|
|
<!-- Favicon -->
|
|
<link rel="icon" type="image/png" href="/img/favicon.png">
|
|
|
|
<!-- Script Anti-Flicker para Modo Claro / Oscuro -->
|
|
<script>
|
|
(function() {
|
|
let userTheme = "{{ user.theme_preference if (user and user.is_authenticated) else '' }}";
|
|
let theme = userTheme;
|
|
if (!theme || theme === 'auto') {
|
|
const storedTheme = localStorage.getItem('theme');
|
|
theme = storedTheme || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
|
|
}
|
|
document.documentElement.setAttribute('data-bs-theme', theme);
|
|
})();
|
|
</script>
|
|
|
|
<!-- Bootstrap 5 CSS -->
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<!-- Bootstrap Icons -->
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css" rel="stylesheet">
|
|
<!-- Design System & Custom Theme -->
|
|
<link href="/css/theme.css" rel="stylesheet">
|
|
<link href="/css/style.css" rel="stylesheet">
|
|
|
|
|
|
<style>
|
|
body {
|
|
font-family: 'Inter', sans-serif;
|
|
min-height: 100vh;
|
|
transition: background-color 0.25s ease, color 0.25s ease;
|
|
}
|
|
|
|
/* --- MODO CLARO ([data-bs-theme="light"]) --- */
|
|
[data-bs-theme="light"] body {
|
|
background: #F8FAFC !important;
|
|
color: #1E293B !important;
|
|
}
|
|
[data-bs-theme="light"] .navbar-logo {
|
|
/* Filtro para convertir blanco a rosa (#B43E8E) */
|
|
filter: brightness(0) saturate(100%) invert(35%) sepia(55%) saturate(2250%) hue-rotate(289deg) brightness(90%) contrast(90%);
|
|
}
|
|
[data-bs-theme="light"] .glass-navbar {
|
|
background: rgba(255, 255, 255, 0.88) !important;
|
|
backdrop-filter: blur(12px);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.08) !important;
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04) !important;
|
|
}
|
|
[data-bs-theme="light"] .glass-navbar .nav-link {
|
|
color: #334155 !important;
|
|
}
|
|
[data-bs-theme="light"] .glass-navbar .nav-link:hover,
|
|
[data-bs-theme="light"] .glass-navbar .nav-link.active {
|
|
color: #B43E8E !important;
|
|
}
|
|
[data-bs-theme="light"] .glass-navbar .dropdown-menu {
|
|
background: #FFFFFF !important;
|
|
border: 1px solid rgba(0, 0, 0, 0.1) !important;
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1) !important;
|
|
}
|
|
[data-bs-theme="light"] .glass-navbar .dropdown-item {
|
|
color: #334155 !important;
|
|
}
|
|
[data-bs-theme="light"] .glass-navbar .dropdown-item:hover {
|
|
background-color: #F1F5F9 !important;
|
|
color: #B43E8E !important;
|
|
}
|
|
[data-bs-theme="light"] .glass-card,
|
|
[data-bs-theme="light"] .card {
|
|
background: #FFFFFF !important;
|
|
color: #1E293B !important;
|
|
border: 1px solid rgba(0, 0, 0, 0.08) !important;
|
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.04) !important;
|
|
}
|
|
[data-bs-theme="light"] .table {
|
|
--bs-table-color: #1E293B;
|
|
--bs-table-bg: transparent;
|
|
}
|
|
[data-bs-theme="light"] .bg-body-tertiary {
|
|
background-color: #F1F5F9 !important;
|
|
color: #334155 !important;
|
|
}
|
|
[data-bs-theme="light"] .text-body {
|
|
color: #1E293B !important;
|
|
}
|
|
[data-bs-theme="light"] .text-muted {
|
|
color: #64748B !important;
|
|
}
|
|
[data-bs-theme="light"] .theme-toggle-btn {
|
|
background: rgba(0, 0, 0, 0.06);
|
|
color: #1E293B;
|
|
border: 1px solid rgba(0, 0, 0, 0.12);
|
|
border-radius: 50%;
|
|
width: 36px;
|
|
height: 36px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
}
|
|
[data-bs-theme="light"] .theme-toggle-btn:hover {
|
|
background: rgba(0, 0, 0, 0.12);
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
/* --- MODO OSCURO ([data-bs-theme="dark"]) --- */
|
|
[data-bs-theme="dark"] body {
|
|
background: linear-gradient(135deg, #0F172A 0%, #1E1B4B 100%) !important;
|
|
color: #F8FAFC !important;
|
|
}
|
|
[data-bs-theme="dark"] .glass-navbar {
|
|
background: rgba(15, 23, 42, 0.78) !important;
|
|
backdrop-filter: blur(14px);
|
|
-webkit-backdrop-filter: blur(14px);
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
|
|
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.3) !important;
|
|
}
|
|
[data-bs-theme="dark"] .glass-navbar .nav-link {
|
|
color: #CBD5E1 !important;
|
|
}
|
|
[data-bs-theme="dark"] .glass-navbar .nav-link:hover,
|
|
[data-bs-theme="dark"] .glass-navbar .nav-link.active {
|
|
color: #FF8AB6 !important;
|
|
}
|
|
[data-bs-theme="dark"] .glass-navbar .dropdown-menu {
|
|
background: #1E293B !important;
|
|
border: 1px solid rgba(255, 255, 255, 0.1) !important;
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5) !important;
|
|
}
|
|
[data-bs-theme="dark"] .glass-navbar .dropdown-item {
|
|
color: #CBD5E1 !important;
|
|
}
|
|
[data-bs-theme="dark"] .glass-navbar .dropdown-item:hover {
|
|
background-color: rgba(255, 255, 255, 0.08) !important;
|
|
color: #FF8AB6 !important;
|
|
}
|
|
[data-bs-theme="dark"] .glass-card,
|
|
[data-bs-theme="dark"] .card {
|
|
background: rgba(30, 41, 59, 0.7) !important;
|
|
color: #F8FAFC !important;
|
|
border: 1px solid rgba(255, 255, 255, 0.08) !important;
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3) !important;
|
|
}
|
|
[data-bs-theme="dark"] .table {
|
|
--bs-table-color: #E2E8F0;
|
|
--bs-table-bg: transparent;
|
|
}
|
|
[data-bs-theme="dark"] .bg-body-tertiary {
|
|
background-color: rgba(255, 255, 255, 0.05) !important;
|
|
color: #CBD5E1 !important;
|
|
}
|
|
[data-bs-theme="dark"] .text-body {
|
|
color: #F8FAFC !important;
|
|
}
|
|
[data-bs-theme="dark"] .text-muted {
|
|
color: #94A3B8 !important;
|
|
}
|
|
[data-bs-theme="dark"] .theme-toggle-btn {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
color: #FFD54F;
|
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
border-radius: 50%;
|
|
width: 36px;
|
|
height: 36px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
}
|
|
[data-bs-theme="dark"] .theme-toggle-btn:hover {
|
|
background: rgba(255, 255, 255, 0.2);
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.navbar-brand span {
|
|
background: linear-gradient(90deg, #B43E8E, #682CAD);
|
|
-webkit-background-clip: text;
|
|
background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
font-weight: 700;
|
|
}
|
|
</style>
|
|
|
|
{% block extra_css %}{% endblock %}
|
|
</head>
|
|
<body data-user-authenticated="{{ 'true' if (user and user.is_authenticated) else 'false' }}">
|
|
{% if user.is_authenticated %}
|
|
<!-- Navigation -->
|
|
<nav class="navbar navbar-expand-lg glass-navbar fixed-top">
|
|
<div class="container-fluid">
|
|
<a class="navbar-brand d-flex align-items-center" href="/dashboard">
|
|
<img src="/img/logo_unicaba_mini.png" alt="Logo UniCABA" class="navbar-logo me-2" height="30">
|
|
<span>Edu-Space Admin</span>
|
|
</a>
|
|
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
|
|
<div class="collapse navbar-collapse" id="navbarNav">
|
|
{% set user_role = 'admin' %}
|
|
<ul class="navbar-nav me-auto">
|
|
{% if user_role == 'admin' %}
|
|
<!-- ================= ADMIN NAVIGATION ================= -->
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/dashboard">
|
|
<i class="bi bi-speedometer2 me-1"></i>Panel General
|
|
</a>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-door-open me-1"></i>Espacios & Sedes
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms?view_mode=physical"><i class="bi bi-door-open me-2 text-primary"></i>Aulas Presenciales</a></li>
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms?view_mode=virtual"><i class="bi bi-camera-video me-2 text-info"></i>Aulas Virtuales (Reunión)</a></li>
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms"><i class="bi bi-grid me-2 text-secondary"></i>Todas las Aulas</a></li>
|
|
<li><a class="dropdown-item" href="/classrooms/add_classroom"><i class="bi bi-plus-circle me-2 text-success"></i>Nueva Aula</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item" href="/buildings/list_buildings"><i class="bi bi-buildings me-2 text-secondary"></i>Edificios y Sedes</a></li>
|
|
<li><a class="dropdown-item" href="/admin/occupancy_metrics"><i class="bi bi-graph-up-arrow me-2 text-success"></i>Métricas de Ocupación</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-calendar3 me-1"></i>Cronograma & Reservas
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/schedule/calendar_view"><i class="bi bi-calendar-week me-2 text-primary"></i>Calendario General</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/today_schedule"><i class="bi bi-calendar-day me-2 text-info"></i>Cartelera del Día</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/list_reservations"><i class="bi bi-list-check me-2 text-warning"></i>Gestión de Reservas</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/add_reservation"><i class="bi bi-plus-circle me-2 text-success"></i>Nueva Reserva</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/commissions_view"><i class="bi bi-diagram-3 me-2 text-primary"></i>Comisiones y Cursadas</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item" href="/genetic_algorithm_web/genetic_optimizer"><i class="bi bi-cpu me-2 text-info"></i>Optimizador de Aulas (IA)</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-mortarboard me-1"></i>Gestión Académica
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/admin/careers_list"><i class="bi bi-mortarboard me-2 text-primary"></i>Carreras</a></li>
|
|
<li><a class="dropdown-item" href="/admin/subjects_list"><i class="bi bi-book me-2 text-info"></i>Asignaturas</a></li>
|
|
<li><a class="dropdown-item" href="/admin/commissions_list"><i class="bi bi-diagram-3 me-2 text-success"></i>Comisiones</a></li>
|
|
<li><a class="dropdown-item" href="/admin/academic_terms_list"><i class="bi bi-calendar-range me-2 text-warning"></i>Ciclo Lectivo</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-shield-lock me-1"></i>Administración
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/admin/users_list"><i class="bi bi-people me-2 text-primary"></i>Usuarios</a></li>
|
|
<li><a class="dropdown-item" href="/admin/roles_list"><i class="bi bi-person-badge me-2 text-info"></i>Roles y Permisos RBAC</a></li>
|
|
<li><a class="dropdown-item" href="/admin/milestone_types_list"><i class="bi bi-tags me-2 text-secondary"></i>Tipificaciones de Hitos</a></li>
|
|
<li><a class="dropdown-item" href="/admin/google_sheets_import"><i class="bi bi-file-earmark-spreadsheet me-2 text-success"></i>Sincronización Sheets</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item" href="/admin/audit_logs"><i class="bi bi-shield-check me-2 text-warning"></i>Registro de Auditoría</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
{% elif user_role == 'bedelia' %}
|
|
<!-- ================= BEDELÍA NAVIGATION ================= -->
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/dashboard">
|
|
<i class="bi bi-speedometer2 me-1"></i>Panel Bedelía
|
|
</a>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-door-open me-1"></i>Espacios & Aulas
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms?view_mode=physical"><i class="bi bi-door-open me-2 text-primary"></i>Aulas Presenciales</a></li>
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms?view_mode=virtual"><i class="bi bi-camera-video me-2 text-info"></i>Aulas Virtuales (Reunión)</a></li>
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms"><i class="bi bi-grid me-2 text-secondary"></i>Todas las Aulas</a></li>
|
|
<li><a class="dropdown-item" href="/classrooms/add_classroom"><i class="bi bi-plus-circle me-2 text-success"></i>Nueva Aula</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item" href="/buildings/list_buildings"><i class="bi bi-buildings me-2 text-secondary"></i>Edificios y Sedes</a></li>
|
|
<li><a class="dropdown-item" href="/admin/occupancy_metrics"><i class="bi bi-graph-up-arrow me-2 text-success"></i>Métricas de Ocupación</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-calendar3 me-1"></i>Operaciones & Reservas
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/schedule/today_schedule"><i class="bi bi-calendar-day me-2 text-info"></i>Cartelera del Día</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/calendar_view"><i class="bi bi-calendar-week me-2 text-primary"></i>Calendario General</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/list_reservations"><i class="bi bi-list-check me-2 text-warning"></i>Gestión de Reservas</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/add_reservation"><i class="bi bi-plus-circle me-2 text-success"></i>Registrar Reserva</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/commissions_view"><i class="bi bi-diagram-3 me-2 text-primary"></i>Comisiones y Cursadas</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-mortarboard me-1"></i>Académica & Cursadas
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/admin/careers_list"><i class="bi bi-mortarboard me-2 text-primary"></i>Carreras</a></li>
|
|
<li><a class="dropdown-item" href="/admin/subjects_list"><i class="bi bi-book me-2 text-info"></i>Asignaturas</a></li>
|
|
<li><a class="dropdown-item" href="/admin/commissions_list"><i class="bi bi-diagram-3 me-2 text-success"></i>Gestión de Comisiones</a></li>
|
|
<li><a class="dropdown-item" href="/admin/academic_terms_list"><i class="bi bi-calendar-range me-2 text-warning"></i>Ciclo Lectivo</a></li>
|
|
<li><a class="dropdown-item" href="/admin/milestone_types_list"><i class="bi bi-tags me-2 text-secondary"></i>Tipificaciones de Hitos</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item" href="/admin/google_sheets_import"><i class="bi bi-file-earmark-spreadsheet me-2 text-success"></i>Sincronización Sheets</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
{% elif user_role == 'docente' %}
|
|
<!-- ================= DOCENTE / PROFESOR NAVIGATION ================= -->
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/dashboard">
|
|
<i class="bi bi-speedometer2 me-1"></i>Panel Docente
|
|
</a>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-calendar-check me-1"></i>Mis Clases & Reservas
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/schedule/list_reservations"><i class="bi bi-calendar2-check me-2 text-primary"></i>Mis Reservas de Aulas</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/add_reservation"><i class="bi bi-plus-circle me-2 text-success"></i>Solicitar Nueva Reserva</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/commissions_view"><i class="bi bi-diagram-3 me-2 text-info"></i>Mis Comisiones & Cursadas</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link fw-semibold" href="/my_subjects/my_subjects_list">
|
|
<i class="bi bi-mortarboard me-1 text-info"></i>Mis Materias
|
|
</a>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
|
<i class="bi bi-building me-1"></i>Campus & Horarios
|
|
</a>
|
|
<ul class="dropdown-menu shadow-sm">
|
|
<li><a class="dropdown-item" href="/schedule/today_schedule"><i class="bi bi-calendar-day me-2 text-info"></i>Cartelera del Día (¿Dónde curso hoy?)</a></li>
|
|
<li><a class="dropdown-item" href="/schedule/calendar_view"><i class="bi bi-calendar-week me-2 text-primary"></i>Calendario General de Aulas</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms"><i class="bi bi-camera-video me-2 text-info"></i>Aulas Virtuales (Reuniones)</a></li>
|
|
<li><a class="dropdown-item" href="/classrooms/list_classrooms"><i class="bi bi-door-open me-2 text-secondary"></i>Consulta de Aulas Presenciales</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
{% else %}
|
|
<!-- ================= ALUMNO / ESTUDIANTE NAVIGATION ================= -->
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/dashboard">
|
|
<i class="bi bi-house-door me-1"></i>Mi Portal
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link fw-semibold" href="/my_subjects/my_subjects_list">
|
|
<i class="bi bi-mortarboard me-1 text-success"></i>Mis Materias
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/schedule/today_schedule">
|
|
<i class="bi bi-geo-alt me-1"></i>Cartelera de Hoy
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/schedule/calendar_view">
|
|
<i class="bi bi-calendar-week me-1"></i>Cronograma de Clases
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/classrooms/list_classrooms">
|
|
<i class="bi bi-camera-video me-1"></i>Aulas Virtuales
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/classrooms/list_classrooms">
|
|
<i class="bi bi-door-open me-1"></i>Espacios del Campus
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
|
|
<ul class="navbar-nav align-items-center">
|
|
<!-- Theme Mode Toggle Button -->
|
|
<li class="nav-item me-2">
|
|
<button class="theme-toggle-btn" type="button" aria-label="Cambiar tema" title="Modo Claro/Oscuro">
|
|
<i class="bi bi-moon-stars-fill"></i>
|
|
</button>
|
|
</li>
|
|
|
|
<!-- Language Switcher -->
|
|
<li class="nav-item me-2">
|
|
{% include 'partials/language_switcher.html' %}
|
|
</li>
|
|
|
|
<!-- User Dropdown with Avatar and Institutional Role -->
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle d-flex align-items-center py-1" href="#" role="button" data-bs-toggle="dropdown">
|
|
<span class="user-avatar-small">{{ user.name[0]|upper if user.name else 'U' }}</span>
|
|
<div class="d-none d-lg-block text-start ms-2">
|
|
<div class="lh-1 small fw-semibold">{{ user.first_name }}</div>
|
|
<span class="badge {{ user.role_badge_display.class }} role-pill mt-1" style="font-size: 0.65rem; padding: 0.15rem 0.45rem;">
|
|
<i class="bi {{ user.role_badge_display.icon }}"></i> {{ user.role_badge_display.label }}
|
|
</span>
|
|
</div>
|
|
</a>
|
|
<ul class="dropdown-menu dropdown-menu-end shadow-sm border-0">
|
|
<li>
|
|
<div class="px-3 py-2 border-bottom">
|
|
<small class="text-muted d-block">Sesión iniciada como</small>
|
|
<span class="fw-bold small d-block">{{ user.email }}</span>
|
|
<span class="badge {{ user.role_badge_display.class }} role-pill mt-1">
|
|
<i class="bi {{ user.role_badge_display.icon }}"></i> {{ user.role_badge_display.label }}
|
|
</span>
|
|
</div>
|
|
</li>
|
|
<li><a class="dropdown-item" href="/auth/profile">
|
|
<i class="bi bi-person me-2"></i> Mi Perfil
|
|
</a></li>
|
|
<li><a class="dropdown-item" href="/auth/change_password">
|
|
<i class="bi bi-key me-2"></i> Cambiar Contraseña
|
|
</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item text-danger" href="/auth/logout">
|
|
<i class="bi bi-box-arrow-right me-2"></i> Cerrar Sesión
|
|
</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
{% endif %}
|
|
|
|
<!-- Flash Messages -->
|
|
<div class="toast-container position-fixed bottom-0 end-0 p-3" style="z-index: 1080;">
|
|
|
|
</div>
|
|
|
|
<!-- Main Content -->
|
|
{% block content %}{% endblock %}
|
|
|
|
<!-- Bootstrap JS -->
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
<!-- jQuery -->
|
|
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
<!-- Theme Toggle JS -->
|
|
<script src="/js/theme-toggle.js"></script>
|
|
<!-- Custom JS -->
|
|
<script src="/js/main.js"></script>
|
|
<!-- View Switcher JS -->
|
|
<script src="/js/view_switcher.js"></script>
|
|
|
|
<!-- Show flash messages -->
|
|
<script>
|
|
$(document).ready(function() {
|
|
$('.toast').toast('show');
|
|
});
|
|
</script>
|
|
|
|
{% block extra_js %}{% endblock %}
|
|
</body>
|
|
</html> |