first commit

This commit is contained in:
2026-01-10 23:14:51 -06:00
commit 389715b4b4
503 changed files with 98244 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
@model Rs_system.Models.Permiso
@{
ViewData["Title"] = "Nueva Opción de Menú";
}
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h4 class="mb-1">Nueva Opción de Menú</h4>
<p class="text-muted mb-0">Crear un nuevo permiso o menú</p>
</div>
<a asp-action="Index" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left me-1"></i> Volver
</a>
</div>
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card-custom">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger mb-3"></div>
<div class="row g-3">
<div class="col-md-6">
<label asp-for="ModuloId" class="form-label">Módulo (Sección)</label>
<select asp-for="ModuloId" class="form-select"
asp-items="@(new SelectList(ViewBag.Modulos, "Id", "Nombre"))">
<option value="">-- Seleccione un Módulo --</option>
</select>
<span asp-validation-for="ModuloId" class="text-danger small"></span>
</div>
<div class="col-md-6">
<label asp-for="Codigo" class="form-label">Código Único (Controlador)</label>
<input asp-for="Codigo" class="form-control" placeholder="Ej: Expediente" />
<span asp-validation-for="Codigo" class="text-danger small"></span>
</div>
<div class="col-md-8">
<label asp-for="Nombre" class="form-label">Nombre en Menú</label>
<input asp-for="Nombre" class="form-control" placeholder="Ej: Expedientes" />
<span asp-validation-for="Nombre" class="text-danger small"></span>
</div>
<div class="col-md-4">
<label asp-for="Orden" class="form-label">Orden</label>
<input asp-for="Orden" class="form-control" type="number" />
<span asp-validation-for="Orden" class="text-danger small"></span>
</div>
<div class="col-md-8">
<label asp-for="Url" class="form-label">Ruta (URL)</label>
<input asp-for="Url" class="form-control" placeholder="Ej: /Expediente/Index" />
<span asp-validation-for="Url" class="text-danger small"></span>
</div>
<div class="col-md-4">
<label asp-for="Icono" class="form-label">Icono (Bootstrap Icons)</label>
<input asp-for="Icono" class="form-control" placeholder="Ej: bi-folder" />
<span asp-validation-for="Icono" class="text-danger small"></span>
</div>
<div class="col-12">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" asp-for="EsMenu">
<label class="form-check-label" asp-for="EsMenu">Mostrar en el menú lateral</label>
</div>
</div>
<div class="col-12">
<label asp-for="Descripcion" class="form-label">Descripción</label>
<textarea asp-for="Descripcion" class="form-control" rows="2"></textarea>
<span asp-validation-for="Descripcion" class="text-danger small"></span>
</div>
</div>
<div class="mt-4 text-end">
<a asp-action="Index" class="btn btn-outline-secondary me-2">Cancelar</a>
<button type="submit" class="btn btn-primary-custom px-4">
<i class="bi bi-save me-2"></i> Guardar Opción
</button>
</div>
</form>
</div>
</div>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

View File

@@ -0,0 +1,91 @@
@model Rs_system.Models.Permiso
@{
ViewData["Title"] = "Editar Opción de Menú";
}
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h4 class="mb-1">Editar Opción de Menú</h4>
<p class="text-muted mb-0">Modificar permiso existente</p>
</div>
<a asp-action="Index" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left me-1"></i> Volver
</a>
</div>
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card-custom">
<form asp-action="Edit">
<input type="hidden" asp-for="Id" />
<div asp-validation-summary="ModelOnly" class="text-danger mb-3"></div>
<div class="row g-3">
<div class="col-md-6">
<label asp-for="ModuloId" class="form-label">Módulo (Sección)</label>
<select asp-for="ModuloId" class="form-select"
asp-items="@(new SelectList(ViewBag.Modulos, "Id", "Nombre"))">
<option value="">-- Seleccione un Módulo --</option>
</select>
<span asp-validation-for="ModuloId" class="text-danger small"></span>
</div>
<div class="col-md-6">
<label asp-for="Codigo" class="form-label">Código Único</label>
<input asp-for="Codigo" class="form-control" readonly />
<span asp-validation-for="Codigo" class="text-danger small"></span>
</div>
<div class="col-md-8">
<label asp-for="Nombre" class="form-label">Nombre en Menú</label>
<input asp-for="Nombre" class="form-control" />
<span asp-validation-for="Nombre" class="text-danger small"></span>
</div>
<div class="col-md-4">
<label asp-for="Orden" class="form-label">Orden</label>
<input asp-for="Orden" class="form-control" type="number" />
<span asp-validation-for="Orden" class="text-danger small"></span>
</div>
<div class="col-md-8">
<label asp-for="Url" class="form-label">Ruta (URL)</label>
<input asp-for="Url" class="form-control" />
<span asp-validation-for="Url" class="text-danger small"></span>
</div>
<div class="col-md-4">
<label asp-for="Icono" class="form-label">Icono</label>
<input asp-for="Icono" class="form-control" />
<span asp-validation-for="Icono" class="text-danger small"></span>
</div>
<div class="col-12">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" asp-for="EsMenu">
<label class="form-check-label" asp-for="EsMenu">Mostrar en el menú lateral</label>
</div>
</div>
<div class="col-12">
<label asp-for="Descripcion" class="form-label">Descripción</label>
<textarea asp-for="Descripcion" class="form-control" rows="2"></textarea>
<span asp-validation-for="Descripcion" class="text-danger small"></span>
</div>
</div>
<div class="mt-4 text-end">
<a asp-action="Index" class="btn btn-outline-secondary me-2">Cancelar</a>
<button type="submit" class="btn btn-primary-custom px-4">
<i class="bi bi-save me-2"></i> Guardar Cambios
</button>
</div>
</form>
</div>
</div>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

View File

@@ -0,0 +1,96 @@
@model IEnumerable<Rs_system.Models.Permiso>
@{
ViewData["Title"] = "Gestión de Menú y Permisos";
}
<div class="container-fluid">
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h4 class="mb-1">Gestión de Menú y Permisos</h4>
<p class="text-muted mb-0">Administración de opciones del sistema</p>
</div>
<a asp-action="Create" class="btn btn-primary-custom">
<i class="bi bi-plus-lg me-1"></i> Nueva Opción
</a>
</div>
@if (TempData["ErrorMessage"] != null)
{
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="bi bi-exclamation-triangle-fill me-2"></i> @TempData["ErrorMessage"]
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
}
<div class="card-custom">
<div class="table-responsive">
<table class="table-custom">
<thead>
<tr>
<th>Módulo</th>
<th>Orden</th>
<th>Nombre</th>
<th>Ruta (URL)</th>
<th>Icono</th>
<th class="text-center">Es Menú</th>
<th class="text-center">Acciones</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<span class="badge bg-info text-dark">
<i class="bi @item.Modulo?.Icono me-1"></i>
@(item.Modulo?.Nombre ?? "Sin Módulo")
</span>
</td>
<td><span class="badge bg-secondary">@item.Orden</span></td>
<td class="fw-bold">@item.Nombre</td>
<td class="font-monospace small">@item.Url</td>
<td><i class="bi @item.Icono me-2"></i>@item.Icono</td>
<td class="text-center">
@if (item.EsMenu)
{
<span class="text-success"><i class="bi bi-check-circle-fill"></i></span>
}
else
{
<span class="text-muted"><i class="bi bi-x-circle"></i></span>
}
</td>
<td class="text-center">
<div class="btn-group btn-group-sm">
<a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-outline-primary" title="Editar">
<i class="bi bi-pencil"></i>
</a>
<button type="button" class="btn btn-outline-danger" title="Eliminar"
onclick="confirmDelete(@item.Id, '@item.Nombre')">
<i class="bi bi-trash"></i>
</button>
</div>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
<form id="deleteForm" asp-action="Delete" method="post" style="display:none;">
<input type="hidden" name="id" id="deleteId" />
</form>
@section Scripts {
<script>
function confirmDelete(id, name) {
if (confirm(`¿Está seguro de que desea eliminar "${name}"?`)) {
document.getElementById('deleteId').value = id;
document.getElementById('deleteForm').submit();
}
}
</script>
}