F2 avanzada

This commit is contained in:
2026-08-10 23:00:56 -03:00
parent 12b7b0f4b2
commit b4b25e49e0
49 changed files with 1304 additions and 227 deletions
+52 -58
View File
@@ -1,5 +1,9 @@
<!DOCTYPE html>
<html lang="en">
@{
var controller = ViewContext.RouteData.Values["controller"]?.ToString();
}
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
@@ -9,67 +13,57 @@
<link rel="stylesheet" href="~/vita_asistente.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">vita_asistente</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
@if (User.IsInRole("Admin"))
{
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="adminDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Administración
</a>
<ul class="dropdown-menu" aria-labelledby="adminDropdown">
<li><a class="dropdown-item" asp-controller="Usuarios" asp-action="Index">Usuarios</a></li>
<li><a class="dropdown-item" asp-controller="Roles" asp-action="Index">Roles</a></li>
</ul>
</li>
}
<ul class="navbar-nav ms-auto">
@if (User.Identity.IsAuthenticated)
{
<li class="nav-item">
<span class="navbar-text">Hola, @User.Identity.Name!</span>
</li>
<li class="nav-item">
<form asp-controller="Account" asp-action="Logout" method="post" class="form-inline">
<button type="submit" class="nav-link btn btn-link text-dark">Cerrar sesión</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Account" asp-action="Register">Registrarse</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Account" asp-action="Login">Iniciar sesión</a>
</li>
}
</ul>
<div class="app-wrapper">
<aside class="sidebar">
<a class="sidebar-brand" asp-area="" asp-controller="Home" asp-action="Index">vita_asistente</a>
<nav class="sidebar-nav">
<a class="nav-link @(controller == "Home" ? "active" : "")" asp-controller="Home" asp-action="Index">Inicio</a>
@if (User.IsInRole("Admin"))
{
<h6 class="sidebar-heading">Administración</h6>
<a class="nav-link @(controller == "Usuarios" ? "active" : "")" asp-controller="Usuarios" asp-action="Index">Usuarios</a>
<a class="nav-link @(controller == "Roles" ? "active" : "")" asp-controller="Roles" asp-action="Index">Roles</a>
<a class="nav-link @(controller == "Pacientes" ? "active" : "")" asp-controller="Pacientes" asp-action="Index">Pacientes</a>
}
@if (User.Identity?.IsAuthenticated ?? false)
{
<h6 class="sidebar-heading">Cuenta</h6>
<a class="nav-link" asp-controller="Account" asp-action="Logout">Cerrar sesión</a>
}
else
{
<h6 class="sidebar-heading">Cuenta</h6>
<a class="nav-link" asp-controller="Account" asp-action="Register">Registrarse</a>
<a class="nav-link" asp-controller="Account" asp-action="Login">Iniciar sesión</a>
}
</nav>
</aside>
<div class="main-content">
<header class="topbar">
@if (User.Identity?.IsAuthenticated ?? false)
{
<span class="navbar-text">Hola, @(User.Identity?.Name ?? "Usuario")!</span>
}
</header>
<main role="main" class="pb-3">
@RenderBody()
</main>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2026 - vita_asistente - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacidad</a>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</footer>
</div>
</div>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2026 - vita_asistente - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
</html>
+95
View File
@@ -0,0 +1,95 @@
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Identity
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
<nav class="sidebar">
<div class="sidebar-header d-flex align-items-center justify-content-between mb-4 px-3">
<a class="text-decoration-none" asp-controller="Home" asp-action="Index">
<span class="h5 fw-bold text-dark">VitaAsistente</span>
</a>
<button id="sidebarToggle" class="btn btn-sm p-0 ms-auto d-md-none" aria-label="Toggle sidebar">
<i class="bi bi-list"></i>
</button>
</div>
@if (SignInManager.IsSignedIn(User))
{
<div class="sidebar-user-info mb-4 px-3 pb-2 border-bottom d-flex align-items-center">
<div class="flex-grow-1 text-truncate">
<small class="text-muted">Hola,</small>
<span class="d-block small fw-medium" title="@User.Identity?.Name ?? "Usuario"">@User.Identity?.Name ?? "Usuario"</span>
</div>
</div>
@if (User.IsInRole("Admin"))
{
<div class="sidebar-section pb-2 px-3">
<h4 class="section-title mb-2">Administración</h4>
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" asp-controller="Usuarios" asp-action="Index">
<span class="me-2">👥</span> Gestión de Usuarios
</a>
</li>
<li class="nav-item">
<a class="nav-link" asp-controller="Roles" asp-action="Index">
<span class="me-2">📋</span> Gestión de Roles
</a>
</li>
</ul>
</div>
}
@if (User.IsInRole("Admin") || User.IsInRole("Usuario"))
{
<div class="sidebar-section pb-2 px-3">
<h4 class="section-title mb-2">Módulos Principales</h4>
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" asp-controller="Home" asp-action="Index">
<span class="me-2">🏠</span> Dashboard
</a>
</li>
</ul>
</div>
}
}
else
{
<div class="p-4 text-center">
<div class="mb-3">
<i class="bi bi-person-circle" style="font-size: 2.5rem;"></i>
</div>
<a href="/" class="btn btn-sm btn-outline-primary">Volver al inicio</a>
</div>
}
<form asp-controller="Account" asp-action="Logout" method="post" class="sidebar-footer p-3 border-top">
@Html.AntiForgeryToken()
@if (SignInManager.IsSignedIn(User))
{
<button type="submit" class="btn btn-sm btn-outline-danger w-100">Cerrar Sesión</button>
}
</form>
</nav>
<script>
document.addEventListener('DOMContentLoaded', function() {
const sidebar = document.querySelector('.sidebar');
const toggleButton = document.getElementById('sidebarToggle');
if (toggleButton && sidebar) {
toggleButton.addEventListener('click', function() {
sidebar.classList.toggle('collapsed');
// Update button icon based on state
const icon = toggleButton.querySelector('i');
if (sidebar.classList.contains('collapsed')) {
icon.className = 'bi bi-arrow-bar-right';
} else {
icon.className = 'bi bi-list';
}
});
}
});
</script>