From 4004c208d480b5b55cd9854f4981bf2a93194123 Mon Sep 17 00:00:00 2001 From: IO <320154041@pcpuma.acatlan.unam.mx> Date: Wed, 19 Nov 2025 18:55:39 -0600 Subject: [PATCH 01/26] modified styles and orden --- src/app/(Administrador)/equipoComputo/page.tsx | 7 +------ src/app/styles/layout/BarNavigation.scss | 1 + src/app/styles/layout/reporte.scss | 2 +- src/components/Equipo_Computo/Pregunta9.tsx | 5 +++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/app/(Administrador)/equipoComputo/page.tsx b/src/app/(Administrador)/equipoComputo/page.tsx index 7319c63..64210a6 100644 --- a/src/app/(Administrador)/equipoComputo/page.tsx +++ b/src/app/(Administrador)/equipoComputo/page.tsx @@ -16,8 +16,7 @@ type PreguntaKey = | "pregunta2" | "pregunta3" | "pregunta7EP" - | "pregunta9" - | "pregunta10"; + | "pregunta9"; const LABELS: Record = { pregunta1: "Perfil de Usuario", @@ -25,7 +24,6 @@ const LABELS: Record = { pregunta3: "Plataforma y tipo procesador", pregunta7EP: "Laboratorios", pregunta9: "Generales", - pregunta10: "Garantía de Proveedor", }; // Mapeo de fondo por pregunta (puedes personalizarlo) @@ -35,7 +33,6 @@ const TAB_BACKGROUNDS: Record = { pregunta3: "bg-gray", pregunta7EP: "bg-gray", pregunta9: "bg-blue", - pregunta10: "bg-blue", }; export default function Page() { @@ -53,8 +50,6 @@ export default function Page() { return ; case "pregunta9": return ; - case "pregunta10": - return ; default: return (
diff --git a/src/app/styles/layout/BarNavigation.scss b/src/app/styles/layout/BarNavigation.scss index 2291f9b..081ca7e 100644 --- a/src/app/styles/layout/BarNavigation.scss +++ b/src/app/styles/layout/BarNavigation.scss @@ -152,6 +152,7 @@ left: 0; display: flex; width: 100vw; + z-index: 3; } .barNavigation li:hover { diff --git a/src/app/styles/layout/reporte.scss b/src/app/styles/layout/reporte.scss index 511c537..52f4ff9 100644 --- a/src/app/styles/layout/reporte.scss +++ b/src/app/styles/layout/reporte.scss @@ -77,7 +77,7 @@ box-shadow: 0 -2px 6px rgba(0,0,0,0.05), inset 0 -3px 0 #fff; /* simula borde inferior */ - z-index: 5; + z-index: 0; } } diff --git a/src/components/Equipo_Computo/Pregunta9.tsx b/src/components/Equipo_Computo/Pregunta9.tsx index 1513f2c..75b7dbe 100644 --- a/src/components/Equipo_Computo/Pregunta9.tsx +++ b/src/components/Equipo_Computo/Pregunta9.tsx @@ -5,6 +5,7 @@ import Cookies from "js-cookie"; import axios from "axios"; import "./pregunta9.css"; import Pregunta4 from "./Pregunta_4"; +import Pregunta10 from "./pregunta10"; type AntiguedadItem = { antiguedad: string | null; @@ -72,7 +73,6 @@ export default function Pregunta9() { const pct = (valor: number) => ((valor / totalEquipo) * 100).toFixed(2); - // [Menor a 2, Entre 2-3, Entre 4-5, Mayor a 6] return [pct(menores2), pct(entre2_3), pct(entre4_6), pct(mayores6),pct(notfound)]; }; @@ -177,7 +177,8 @@ export default function Pregunta9() {
- + + ); } \ No newline at end of file From 525d96255fb6c7ebe6a5c61b76a2a2416aa0a4a9 Mon Sep 17 00:00:00 2001 From: IO <320154041@pcpuma.acatlan.unam.mx> Date: Wed, 19 Nov 2025 18:56:49 -0600 Subject: [PATCH 02/26] delete import --- src/app/(Administrador)/equipoComputo/page.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/app/(Administrador)/equipoComputo/page.tsx b/src/app/(Administrador)/equipoComputo/page.tsx index 64210a6..c0a2c20 100644 --- a/src/app/(Administrador)/equipoComputo/page.tsx +++ b/src/app/(Administrador)/equipoComputo/page.tsx @@ -3,13 +3,10 @@ import { useState } from "react"; import Pregunta1 from "@/components/Equipo_Computo/Pregunta1"; import Pregutna2 from "@/components/Equipo_Computo/Pregunta2"; -import Pregunta2_1 from "@/components/Equipo_Computo/Pregunta2_1"; import Pregunta3 from "@/components/Equipo_Computo/Pregunta3"; import Pregunta7EP from "@/components/Perifericos/Pregunta7EP"; import Pregunta9 from "@/components/Equipo_Computo/Pregunta9"; -import Pregunta10 from "@/components/Equipo_Computo/pregunta10"; import "../../styles/layout/reporte.scss"; -import Pregunta_4 from "@/components/Equipo_Computo/Pregunta_4"; type PreguntaKey = | "pregunta1" From 5db62218c7aabbe01e46bb5ba71cc936be0bd874 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 11:19:31 -0600 Subject: [PATCH 03/26] modified tsconfig --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 5d606a9..b575f7d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "incremental": true, "plugins": [ { From 6724e23aef535c4a1ee7cb2dbbd5f6e4b3510f5b Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 12:53:22 -0600 Subject: [PATCH 04/26] comment pregunta4 --- src/components/Equipo_Computo/Pregunta9.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Equipo_Computo/Pregunta9.tsx b/src/components/Equipo_Computo/Pregunta9.tsx index 75b7dbe..4ca7386 100644 --- a/src/components/Equipo_Computo/Pregunta9.tsx +++ b/src/components/Equipo_Computo/Pregunta9.tsx @@ -124,11 +124,11 @@ export default function Pregunta9() { return (
{/* Pregunta intro (servidores) */} -
+ {/*
Indique cuantos servidores son utilizados en ambientes productivos y si en ellos se almacenan datos personales.
- + */} {/* Pregunta 9: Antigüedad */}
From 2df862f7747b252feb1b0ced33956a95173859f4 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 14:19:30 -0600 Subject: [PATCH 05/26] added new style and fixed ask 1 --- src/app/(Administrador)/perifericos/page.tsx | 28 ++++++++++--------- .../pregunta1_1/pregunta1.1.css | 2 +- .../(Administrador)/pregunta7/pregunta7.css | 1 + .../(Administrador)/pregunta7_1/pregunta7.css | 3 +- src/app/styles/layout/reporte.scss | 2 ++ src/components/Equipo_Computo/Pregunta7.tsx | 2 +- src/components/Equipo_Computo/pregunta7.css | 1 + src/components/Perifericos/Pregunta1EP.tsx | 8 +++--- src/components/Perifericos/Pregunta2EP.tsx | 5 +--- src/components/Perifericos/Pregunta4EP.tsx | 2 +- src/components/Perifericos/Pregunta5EP.tsx | 5 +--- .../Perifericos/pregunta1EP.module.scss | 14 +++++++++- 12 files changed, 43 insertions(+), 30 deletions(-) diff --git a/src/app/(Administrador)/perifericos/page.tsx b/src/app/(Administrador)/perifericos/page.tsx index e6d9a13..2611dbf 100644 --- a/src/app/(Administrador)/perifericos/page.tsx +++ b/src/app/(Administrador)/perifericos/page.tsx @@ -10,17 +10,13 @@ import "../../styles/layout/reporte.scss"; type PreguntaKey = | "pregunta1" - | "pregunta2" | "pregunta4" - | "pregunta5" | "pregunta7"; const LABELS: Record = { - pregunta1: "Pregunta 1", - pregunta2: "Pregunta 2", - pregunta4: "Pregunta 4", - pregunta5: "Pregunta 5", - pregunta7: "Pregunta 7", + pregunta1: "Impresion", + pregunta4: "Digitalizacion", + pregunta7: "Antiguedad", }; export default function Page() { @@ -29,13 +25,19 @@ export default function Page() { const renderPregunta = () => { switch (activeTab) { case "pregunta1": - return ; - case "pregunta2": - return ; + return ( + <> + + + + ) case "pregunta4": - return ; - case "pregunta5": - return ; + return ( + <> + + + + ) case "pregunta7": return ; default: diff --git a/src/app/(Administrador)/pregunta1_1/pregunta1.1.css b/src/app/(Administrador)/pregunta1_1/pregunta1.1.css index f7c439b..e53762a 100644 --- a/src/app/(Administrador)/pregunta1_1/pregunta1.1.css +++ b/src/app/(Administrador)/pregunta1_1/pregunta1.1.css @@ -15,7 +15,7 @@ .pregunta-cuadro { background-color: #f5f5f5; - border-left: 6px solid #001f3f; + border-left: 10px solid #001f3f; padding: 15px; border-radius: 8px; font-size: 16px; diff --git a/src/app/(Administrador)/pregunta7/pregunta7.css b/src/app/(Administrador)/pregunta7/pregunta7.css index 7441c2d..8170d48 100644 --- a/src/app/(Administrador)/pregunta7/pregunta7.css +++ b/src/app/(Administrador)/pregunta7/pregunta7.css @@ -8,6 +8,7 @@ padding: 15px; font-size: 16px; margin-bottom: 25px; + border-radius: 4px; } diff --git a/src/app/(Administrador)/pregunta7_1/pregunta7.css b/src/app/(Administrador)/pregunta7_1/pregunta7.css index 1006c85..2f13f7a 100644 --- a/src/app/(Administrador)/pregunta7_1/pregunta7.css +++ b/src/app/(Administrador)/pregunta7_1/pregunta7.css @@ -5,11 +5,12 @@ .contenedor-censo{ background-color: #001f3f; color: white; +border-radius: 4px; } .pregunta-cuadro { - border-left: 6px solid #001f3f; + border-left: 10px solid #001f3f; padding: 15px; border-radius: 8px; font-size: 16px; diff --git a/src/app/styles/layout/reporte.scss b/src/app/styles/layout/reporte.scss index 52f4ff9..505c16e 100644 --- a/src/app/styles/layout/reporte.scss +++ b/src/app/styles/layout/reporte.scss @@ -87,6 +87,8 @@ .data-table_reporte { display: flex; + flex-direction: column; + gap: 10px; justify-content: center; padding: 20px; background-color: #f5f5f7; diff --git a/src/components/Equipo_Computo/Pregunta7.tsx b/src/components/Equipo_Computo/Pregunta7.tsx index 9bd8b97..3d19c11 100644 --- a/src/components/Equipo_Computo/Pregunta7.tsx +++ b/src/components/Equipo_Computo/Pregunta7.tsx @@ -21,7 +21,7 @@ export default function Pregunta7() {
- 7. Calcule porcentualmente (%) la antiguedad que tienen los equipos + Antiguedad que tienen los equipos periféricos del área universitaria.
diff --git a/src/components/Equipo_Computo/pregunta7.css b/src/components/Equipo_Computo/pregunta7.css index 735b800..ecc84f0 100644 --- a/src/components/Equipo_Computo/pregunta7.css +++ b/src/components/Equipo_Computo/pregunta7.css @@ -8,6 +8,7 @@ padding: 15px; font-size: 16px; margin-bottom: 25px; + border-radius: 4px; } diff --git a/src/components/Perifericos/Pregunta1EP.tsx b/src/components/Perifericos/Pregunta1EP.tsx index 95c9a67..42c269a 100644 --- a/src/components/Perifericos/Pregunta1EP.tsx +++ b/src/components/Perifericos/Pregunta1EP.tsx @@ -1,6 +1,6 @@ "use client"; import React, { useState, useEffect } from "react"; -import "./pregunta1EP.module.scss"; +import style from "./pregunta1EP.module.scss"; interface EquiposImpresion { inyeccionTinta: string; @@ -48,15 +48,15 @@ export default function Pregunta1EP() { return (
- Censo de equipos periféricos - Equipo de digitalización + Censo de equipos periféricos - Equipo de Impresion
- 1. Desglose el número de equipos de impresión con que cuenta el área + Desglose el número de equipos de impresión con que cuenta el área universitaria.
-
+
{/* Columna 1 */}
diff --git a/src/components/Perifericos/Pregunta2EP.tsx b/src/components/Perifericos/Pregunta2EP.tsx index c8d0ccd..bf7ac66 100644 --- a/src/components/Perifericos/Pregunta2EP.tsx +++ b/src/components/Perifericos/Pregunta2EP.tsx @@ -41,12 +41,9 @@ export default function Pregunta2EP() { return (
-
- Censo de equipos periféricos - Equipo de digitalización -
- 2. Indique el número de equipos de impresión de acuerdo con la población universitaria al que se destina su uso primordialmente. + Indique el número de equipos de impresión de acuerdo con la población universitaria al que se destina su uso primordialmente.
diff --git a/src/components/Perifericos/Pregunta4EP.tsx b/src/components/Perifericos/Pregunta4EP.tsx index f0e50f5..75e5a52 100644 --- a/src/components/Perifericos/Pregunta4EP.tsx +++ b/src/components/Perifericos/Pregunta4EP.tsx @@ -43,7 +43,7 @@ export default function Pregunta4EP() {
- 4. Desglose el número de equipos de digitalización con que cuenta el + Desglose el número de equipos de digitalización con que cuenta el área universitaria.
diff --git a/src/components/Perifericos/Pregunta5EP.tsx b/src/components/Perifericos/Pregunta5EP.tsx index ea74b97..d8c27e3 100644 --- a/src/components/Perifericos/Pregunta5EP.tsx +++ b/src/components/Perifericos/Pregunta5EP.tsx @@ -41,12 +41,9 @@ export default function Pregunta5EP() { }; return (
-
- Censo de equipos periféricos - Equipo de digitalización -
- 5. Indique el número de equipos de digitalización de acuerdo con la + Indique el número de equipos de digitalización de acuerdo con la población universitaria al que se destina su uso primordialmente.
diff --git a/src/components/Perifericos/pregunta1EP.module.scss b/src/components/Perifericos/pregunta1EP.module.scss index 8e0df57..e63f09d 100644 --- a/src/components/Perifericos/pregunta1EP.module.scss +++ b/src/components/Perifericos/pregunta1EP.module.scss @@ -122,6 +122,18 @@ } } +.grid { + background-color: #fff; + border-radius: 10px; + grid-template-columns: repeat(3, 1fr); + align-items: end; + gap: 20px; + padding: 20px; + display: grid; + overflow-x: auto; + box-shadow: 0 4px 10px #0000001a; +} + @media (max-width: 700px) { .scanView_P1 .tabs_P1 { width: 160px; @@ -132,4 +144,4 @@ padding: 10px 12px; text-align: left; } -} +} \ No newline at end of file From a0266210e2c8c1a569094f718a9858e97bb91bdf Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 14:38:45 -0600 Subject: [PATCH 06/26] modified color --- src/app/(Administrador)/pregunta1_1/pregunta1.1.css | 8 ++++---- src/app/(Administrador)/pregunta7/pregunta7.css | 8 ++++---- src/app/(Administrador)/pregunta7_1/pregunta7.css | 8 ++++---- src/app/(Administrador)/pregunta9/pregunta1.css | 6 +++--- src/components/Equipo_Computo/pregunta1.1.css | 8 ++++---- src/components/Equipo_Computo/pregunta10.css | 8 ++++---- src/components/Equipo_Computo/pregunta7.css | 8 ++++---- src/components/Equipo_Computo/pregunta9.css | 6 +++--- src/components/Perifericos/Pregunta1EP.tsx | 3 +-- src/components/Perifericos/Pregunta2EP.tsx | 2 +- src/components/Perifericos/Pregunta4EP.tsx | 3 +-- src/components/Perifericos/Pregunta5EP.tsx | 4 ++-- 12 files changed, 35 insertions(+), 37 deletions(-) diff --git a/src/app/(Administrador)/pregunta1_1/pregunta1.1.css b/src/app/(Administrador)/pregunta1_1/pregunta1.1.css index e53762a..6cc4fa6 100644 --- a/src/app/(Administrador)/pregunta1_1/pregunta1.1.css +++ b/src/app/(Administrador)/pregunta1_1/pregunta1.1.css @@ -5,7 +5,7 @@ } .contenedor-censo{ - background-color: #002855; + background-color: #003e79; color: white; padding: 15px; font-size: 20px; @@ -61,7 +61,7 @@ /* Colores personalizados */ .azul-marino { - background-color: #002855; + background-color: #003e79; color: white; } @@ -83,7 +83,7 @@ .input-contenedor input { width: 100%; padding: 6px 25px 6px 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -127,7 +127,7 @@ /* Celda del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/app/(Administrador)/pregunta7/pregunta7.css b/src/app/(Administrador)/pregunta7/pregunta7.css index 8170d48..9e8fb13 100644 --- a/src/app/(Administrador)/pregunta7/pregunta7.css +++ b/src/app/(Administrador)/pregunta7/pregunta7.css @@ -3,7 +3,7 @@ } .contenedor-censo{ - background-color: #002855; + background-color: #003e79; color: white; padding: 15px; font-size: 16px; @@ -56,7 +56,7 @@ /* Colores personalizados */ .azul-marino { - background-color: #002855; + background-color: #003e79; color: white; } @@ -78,7 +78,7 @@ .input-contenedor input { width: 40%; padding: 6px 6px 6px 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -123,7 +123,7 @@ /* Celda del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/app/(Administrador)/pregunta7_1/pregunta7.css b/src/app/(Administrador)/pregunta7_1/pregunta7.css index 2f13f7a..b4eef82 100644 --- a/src/app/(Administrador)/pregunta7_1/pregunta7.css +++ b/src/app/(Administrador)/pregunta7_1/pregunta7.css @@ -3,7 +3,7 @@ } .contenedor-censo{ -background-color: #001f3f; +background-color: #003e79; color: white; border-radius: 4px; } @@ -53,7 +53,7 @@ border-radius: 4px; /* Colores personalizados */ .azul-marino { - background-color: #002855; + background-color: #003e79; color: white; } @@ -75,7 +75,7 @@ border-radius: 4px; .input-contenedor input { width: 40%; padding: 6px 6px 6px 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -120,7 +120,7 @@ border-radius: 4px; /* Celda del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/app/(Administrador)/pregunta9/pregunta1.css b/src/app/(Administrador)/pregunta9/pregunta1.css index 6ff6bc5..c0bd904 100644 --- a/src/app/(Administrador)/pregunta9/pregunta1.css +++ b/src/app/(Administrador)/pregunta9/pregunta1.css @@ -47,7 +47,7 @@ /* Colores personalizados */ .azul-marino { - background-color: #002855; + background-color: #003e79; color: white; } @@ -69,7 +69,7 @@ .input-contenedor input { width: 40%; padding: 6px 6px 6px 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -114,7 +114,7 @@ /* Celda del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/components/Equipo_Computo/pregunta1.1.css b/src/components/Equipo_Computo/pregunta1.1.css index c7aa8f5..224904f 100644 --- a/src/components/Equipo_Computo/pregunta1.1.css +++ b/src/components/Equipo_Computo/pregunta1.1.css @@ -1,6 +1,6 @@ .contenedor-censo{ - background-color: #002855; + background-color: #003e79; color: white; padding: 15px; font-size: 20px; @@ -56,7 +56,7 @@ /* Colores personalizados */ .azul-marino { - background-color: #002855; + background-color: #003e79; color: white; } @@ -78,7 +78,7 @@ .input-contenedor input { width: 100%; padding: 6px 25px 6px 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -122,7 +122,7 @@ /* Celda del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/components/Equipo_Computo/pregunta10.css b/src/components/Equipo_Computo/pregunta10.css index 2b6c086..5f73780 100644 --- a/src/components/Equipo_Computo/pregunta10.css +++ b/src/components/Equipo_Computo/pregunta10.css @@ -31,7 +31,7 @@ } .tabla th { - background-color: #002855; + background-color: #003e79; color: white; font-weight: 600; font-size: 15px; @@ -43,7 +43,7 @@ /* === Colores personalizados === */ .azul-marino { - background-color: #002855 !important; + background-color: #003e79 !important; color: white !important; } @@ -63,7 +63,7 @@ .input-contenedor input { width: 40%; padding: 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -93,7 +93,7 @@ /* Para celdas del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/components/Equipo_Computo/pregunta7.css b/src/components/Equipo_Computo/pregunta7.css index ecc84f0..01988a5 100644 --- a/src/components/Equipo_Computo/pregunta7.css +++ b/src/components/Equipo_Computo/pregunta7.css @@ -3,7 +3,7 @@ } .contenedor-censo{ - background-color: #002855; + background-color: #003e79; color: white; padding: 15px; font-size: 16px; @@ -57,7 +57,7 @@ /* Colores personalizados */ .azul-marino { - background-color: #002855; + background-color: #003e79; color: white; } @@ -79,7 +79,7 @@ .input-contenedor input { width: 40%; padding: 6px 6px 6px 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -124,7 +124,7 @@ /* Celda del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/components/Equipo_Computo/pregunta9.css b/src/components/Equipo_Computo/pregunta9.css index 0d8d189..54e9a2a 100644 --- a/src/components/Equipo_Computo/pregunta9.css +++ b/src/components/Equipo_Computo/pregunta9.css @@ -43,7 +43,7 @@ /* Colores personalizados */ .azul-marino { - background-color: #002855; + background-color: #003e79; color: white; } @@ -65,7 +65,7 @@ .input-contenedor input { width: 40%; padding: 6px 6px 6px 6px; - border: 2px solid #002855; + border: 2px solid #003e79; border-radius: 6px; font-size: 14px; color: #333; @@ -110,7 +110,7 @@ /* Celda del total */ .total-celda { font-weight: bold; - color: #002855; + color: #003e79; background-color: #eef2f6; } diff --git a/src/components/Perifericos/Pregunta1EP.tsx b/src/components/Perifericos/Pregunta1EP.tsx index 42c269a..5290b43 100644 --- a/src/components/Perifericos/Pregunta1EP.tsx +++ b/src/components/Perifericos/Pregunta1EP.tsx @@ -52,8 +52,7 @@ export default function Pregunta1EP() {
- Desglose el número de equipos de impresión con que cuenta el área - universitaria. + Equipos de impresión.
diff --git a/src/components/Perifericos/Pregunta2EP.tsx b/src/components/Perifericos/Pregunta2EP.tsx index bf7ac66..a85743b 100644 --- a/src/components/Perifericos/Pregunta2EP.tsx +++ b/src/components/Perifericos/Pregunta2EP.tsx @@ -43,7 +43,7 @@ export default function Pregunta2EP() {
- Indique el número de equipos de impresión de acuerdo con la población universitaria al que se destina su uso primordialmente. + Equipos de impresión de acuerdo con la población universitaria.
diff --git a/src/components/Perifericos/Pregunta4EP.tsx b/src/components/Perifericos/Pregunta4EP.tsx index 75e5a52..ba1934e 100644 --- a/src/components/Perifericos/Pregunta4EP.tsx +++ b/src/components/Perifericos/Pregunta4EP.tsx @@ -43,8 +43,7 @@ export default function Pregunta4EP() {
- Desglose el número de equipos de digitalización con que cuenta el - área universitaria. + Número de equipos de digitalización.
diff --git a/src/components/Perifericos/Pregunta5EP.tsx b/src/components/Perifericos/Pregunta5EP.tsx index d8c27e3..f97b647 100644 --- a/src/components/Perifericos/Pregunta5EP.tsx +++ b/src/components/Perifericos/Pregunta5EP.tsx @@ -43,8 +43,8 @@ export default function Pregunta5EP() {
- Indique el número de equipos de digitalización de acuerdo con la - población universitaria al que se destina su uso primordialmente. + Número de equipos de digitalización de acuerdo con la + población universitaria.
From 079d0dc60e805b04757cd2dfc1d5469e8b845c92 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 15:29:14 -0600 Subject: [PATCH 07/26] get digitalizacion and impressions --- src/components/Equipo_Computo/Pregunta3.tsx | 4 +- src/components/Perifericos/Pregunta2EP.tsx | 123 +++++++++++------ src/components/Perifericos/Pregunta5EP.tsx | 139 +++++++++++++------- 3 files changed, 181 insertions(+), 85 deletions(-) diff --git a/src/components/Equipo_Computo/Pregunta3.tsx b/src/components/Equipo_Computo/Pregunta3.tsx index d419a47..3dd8a8a 100644 --- a/src/components/Equipo_Computo/Pregunta3.tsx +++ b/src/components/Equipo_Computo/Pregunta3.tsx @@ -143,11 +143,9 @@ export default function Pregunta3_2() {
-

PREGUNTA 3 (2/5)

- 3. Desglose la cantidad de población beneficiada por plataforma y tipo de procesador: * + Cantidad de población beneficiada por plataforma y tipo de procesador:

-

Presione cada pestaña para ingresar la información.

diff --git a/src/components/Perifericos/Pregunta2EP.tsx b/src/components/Perifericos/Pregunta2EP.tsx index a85743b..599eac6 100644 --- a/src/components/Perifericos/Pregunta2EP.tsx +++ b/src/components/Perifericos/Pregunta2EP.tsx @@ -1,6 +1,8 @@ "use client"; -import React, { useState, useEffect } from "react"; +import { useState, useEffect } from "react"; import styles from "./pregunta2EP.module.scss"; +import axios from "axios"; +import Cookies from "js-cookie"; interface EquiposPoblacion { alumnos: string; @@ -13,35 +15,87 @@ interface EquiposPoblacion { export default function Pregunta2EP() { const [equipos, setEquipos] = useState({ - alumnos: "35", - profesores: "43", + alumnos: "0", + profesores: "0", tecnicosAcademicos: "", investigadores: "", - administrativos: "302", - total: "380", + administrativos: "0", + total: "0", }); - // Listo para conectar al backend - useEffect(() => { - /* - fetch("https://tu-api-backend.com/api/equipos-poblacion") - .then((res) => res.json()) - .then((data) => setEquipos(data)) - .catch((err) => console.error("Error al obtener datos:", err)); - */ - }, []); + const api_url = process.env.NEXT_PUBLIC_API_URL; - const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setEquipos((prev) => ({ - ...prev, - [name]: value, - })); - }; + useEffect(() => { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + + axios + .get(`${api_url}/equipos/reporte/contar_periferico_tipoUso/impresoras`, { + headers, + }) + .then((res) => { + const data = res.data; + + // Valores por defecto + const valores = { + alumnos: "0", + profesores: "0", + tecnicosAcademicos: "0", + investigadores: "0", + administrativos: "0", + total: "0", + }; + + data.forEach((item: any) => { + const uso = item.uso.toUpperCase().trim(); + const total = item.total ?? "0"; + + switch (uso) { + case "ALUMNO": + case "ALUMNOS": + valores.alumnos = total; + break; + + case "PROFESOR": + case "PROFESORES": + valores.profesores = total; + break; + + case "TÉCNICO ACADEMICO": + case "TÉCNICO ACADÉMICO": + valores.tecnicosAcademicos = total; + break; + + case "INVESTIGADOR": + case "INVESTIGADORES": + valores.investigadores = total; + break; + + case "ADMINISTRATIVO": + case "ADMINISTRATIVOS": + valores.administrativos = total; + break; + } + }); + + // Calcular total general + valores.total = String( + Number(valores.alumnos) + + Number(valores.profesores) + + Number(valores.tecnicosAcademicos) + + Number(valores.investigadores) + + Number(valores.administrativos) + ); + + setEquipos(valores); + }) + .catch((err) => { + console.error("Error:", err); + }); + }, []); return (
-
Equipos de impresión de acuerdo con la población universitaria.
@@ -54,20 +108,18 @@ export default function Pregunta2EP() { id="alumnos" name="alumnos" value={equipos.alumnos} - onChange={handleChange} + disabled />
- +
@@ -78,33 +130,29 @@ export default function Pregunta2EP() { id="tecnicosAcademicos" name="tecnicosAcademicos" value={equipos.tecnicosAcademicos} - onChange={handleChange} + disabled />
- +
- +
@@ -115,10 +163,11 @@ export default function Pregunta2EP() { id="total" name="total" value={equipos.total} - onChange={handleChange} + disabled />
); } +//IO diff --git a/src/components/Perifericos/Pregunta5EP.tsx b/src/components/Perifericos/Pregunta5EP.tsx index f97b647..b20e9af 100644 --- a/src/components/Perifericos/Pregunta5EP.tsx +++ b/src/components/Perifericos/Pregunta5EP.tsx @@ -2,6 +2,8 @@ import "./pregunta5EP.scss"; import styles from "./pregunta2EP.module.scss"; import { useEffect, useState } from "react"; +import Cookies from "js-cookie"; +import axios from "axios"; interface EquiposPoblacion { alumnos: string; @@ -13,41 +15,94 @@ interface EquiposPoblacion { } export default function Pregunta5EP() { - const [equipos, setEquipos] = useState({ - alumnos: "35", - profesores: "43", - tecnicosAcademicos: "", - investigadores: "", - administrativos: "302", - total: "380", - }); - - // Listo para conectar al backend - useEffect(() => { - /* - fetch("https://tu-api-backend.com/api/equipos-poblacion") - .then((res) => res.json()) - .then((data) => setEquipos(data)) - .catch((err) => console.error("Error al obtener datos:", err)); - */ - }, []); - - const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setEquipos((prev) => ({ - ...prev, - [name]: value, - })); - }; + const [equipos, setEquipos] = useState({ + alumnos: "0", + profesores: "0", + tecnicosAcademicos: "0", + investigadores: "0", + administrativos: "0", + total: "0", + }); + + const api_url = process.env.NEXT_PUBLIC_API_URL; + + useEffect(() => { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + + axios + .get(`${api_url}/equipos/reporte/contar_periferico_tipoUso/dijtales`, { + headers, + }) + .then((res) => { + const data = res.data; + + // Valores por defecto + const valores = { + alumnos: "0", + profesores: "0", + tecnicosAcademicos: "0", + investigadores: "0", + administrativos: "0", + total: "0", + }; + + data.forEach((item: any) => { + const uso = item.uso.toUpperCase().trim(); + const total = item.total ?? "0"; + + switch (uso) { + case "ALUMNO": + case "ALUMNOS": + valores.alumnos = total; + break; + + case "PROFESOR": + case "PROFESORES": + valores.profesores = total; + break; + + case "TÉCNICO ACADEMICO": + case "TÉCNICO ACADÉMICO": + valores.tecnicosAcademicos = total; + break; + + case "INVESTIGADOR": + case "INVESTIGADORES": + valores.investigadores = total; + break; + + case "ADMINISTRATIVO": + case "ADMINISTRATIVOS": + valores.administrativos = total; + break; + } + }); + + // Calcular total general + valores.total = String( + Number(valores.alumnos) + + Number(valores.profesores) + + Number(valores.tecnicosAcademicos) + + Number(valores.investigadores) + + Number(valores.administrativos) + ); + + setEquipos(valores); + }) + .catch((err) => { + console.error("Error:", err); + }); + }, []); + return (
-
- Número de equipos de digitalización de acuerdo con la - población universitaria. + Número de equipos de digitalización de acuerdo con la población + universitaria.
-
+
- +
@@ -79,33 +132,29 @@ export default function Pregunta5EP() { id="tecnicosAcademicos" name="tecnicosAcademicos" value={equipos.tecnicosAcademicos} - onChange={handleChange} + disabled />
- +
- +
@@ -116,7 +165,7 @@ export default function Pregunta5EP() { id="total" name="total" value={equipos.total} - onChange={handleChange} + disabled />
From 7ba649c0917dd550cd1ee302ac4ea9eba9ea77b0 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 18:19:09 -0600 Subject: [PATCH 08/26] added axios to pregunta 4 --- src/app/(Administrador)/perifericos/page.tsx | 4 +- src/components/Equipo_Computo/Pregunta1.tsx | 2 +- src/components/Equipo_Computo/pregunta10.tsx | 6 +- src/components/Equipo_Computo/pregunta7.css | 4 +- src/components/Perifericos/Pregunta4EP.tsx | 87 ++++++++++++++------ src/components/Perifericos/Pregunta5EP.tsx | 1 - 6 files changed, 67 insertions(+), 37 deletions(-) diff --git a/src/app/(Administrador)/perifericos/page.tsx b/src/app/(Administrador)/perifericos/page.tsx index 2611dbf..82a6752 100644 --- a/src/app/(Administrador)/perifericos/page.tsx +++ b/src/app/(Administrador)/perifericos/page.tsx @@ -14,8 +14,8 @@ type PreguntaKey = | "pregunta7"; const LABELS: Record = { - pregunta1: "Impresion", - pregunta4: "Digitalizacion", + pregunta1: "Impresoras", + pregunta4: "Digitales", pregunta7: "Antiguedad", }; diff --git a/src/components/Equipo_Computo/Pregunta1.tsx b/src/components/Equipo_Computo/Pregunta1.tsx index d19776f..267d44f 100644 --- a/src/components/Equipo_Computo/Pregunta1.tsx +++ b/src/components/Equipo_Computo/Pregunta1.tsx @@ -71,7 +71,7 @@ export default function Pregunta1() { ); for (const item of res.data) { - const categoria = item.categoria.trim(); // ⚠️ elimina espacios basura + const categoria = item.categoria.trim(); const mapping = CATEGORIA_MAP[categoria]; if (!mapping) continue; diff --git a/src/components/Equipo_Computo/pregunta10.tsx b/src/components/Equipo_Computo/pregunta10.tsx index 2862b27..b99e5a4 100644 --- a/src/components/Equipo_Computo/pregunta10.tsx +++ b/src/components/Equipo_Computo/pregunta10.tsx @@ -63,9 +63,9 @@ export default function Pregunta10() { - - - + + + diff --git a/src/components/Equipo_Computo/pregunta7.css b/src/components/Equipo_Computo/pregunta7.css index 01988a5..ef88781 100644 --- a/src/components/Equipo_Computo/pregunta7.css +++ b/src/components/Equipo_Computo/pregunta7.css @@ -10,18 +10,16 @@ margin-bottom: 25px; border-radius: 4px; } - .pregunta-cuadro { background-color: #fff; - border-left: 6px solid #001f3f; + border-left: 10px solid #001f3f; padding: 15px; border-radius: 8px; font-size: 16px; margin-bottom: 25px; } - .tabla-contenedor { background: white; padding: 20px; diff --git a/src/components/Perifericos/Pregunta4EP.tsx b/src/components/Perifericos/Pregunta4EP.tsx index ba1934e..ecfc7ec 100644 --- a/src/components/Perifericos/Pregunta4EP.tsx +++ b/src/components/Perifericos/Pregunta4EP.tsx @@ -1,40 +1,73 @@ "use client"; import React, { useState, useEffect } from "react"; import "@/app/styles/layout/pregunta4EP.scss"; +import Cookies from "js-cookie"; +import axios from "axios"; interface EquiposDigitalizacion { digitalizadorCamaPlana: string; - digitalizador3d: string; + d3D: string; digitalizadorAlimentador: string; digitalizadorGranVolumen: string; } export default function Pregunta4EP() { const [equipos, setEquipos] = useState({ - digitalizadorCamaPlana: "27", - digitalizador3d: "", - digitalizadorAlimentador: "108", - digitalizadorGranVolumen: "1", + digitalizadorCamaPlana: "0", + d3D: "0", + digitalizadorAlimentador: "0", + digitalizadorGranVolumen: "0", }); - // 🔹 Preparado para conectar con el backend - useEffect(() => { - // Cuando tengas la API, descomenta y reemplaza la URL: - /* - fetch("https://tu-api-backend.com/api/equipos-digitalizacion") - .then((res) => res.json()) - .then((data) => setEquipos(data)) - .catch((err) => console.error("Error al obtener datos:", err)); - */ - }, []); + const api_url = process.env.NEXT_PUBLIC_API_URL; - const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setEquipos({ - ...equipos, - [name]: value, - }); - }; + useEffect(() => { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + axios + .get(`${api_url}/equipos/reporte/equipos_impesion_group/dijitales`, { + headers, + }) + .then((res) => { + const data = res.data; + + const valores = { + digitalizadorCamaPlana: "0", + d3D: "0", + digitalizadorAlimentador: "0", + digitalizadorGranVolumen: "0", + }; + + data.forEach((item: any) => { + const periferico = item.periferico.toUpperCase().trim(); + const total = item.total ?? "0"; + + switch (periferico) { + case "DIGITALIZADOR DE CAMA PLANA PARA OFICINA": + valores.digitalizadorCamaPlana = total; + break; + + case "3D": + valores.d3D = total; + break; + + case "DIGITALIZADOR CON ALIMENTADOR DE HOJAS PARA OFICINA": + valores.digitalizadorAlimentador = total; + break; + + case "DIGITALIZADOR DE GRAN VOLUMEN": + valores.digitalizadorGranVolumen = total; + break; + } + }); + + setEquipos(valores); + }) + + .catch((err) => { + console.error("Error:", err); + }); + }, []); return (
@@ -56,7 +89,7 @@ export default function Pregunta4EP() { id="digitalizadorCamaPlana" name="digitalizadorCamaPlana" value={equipos.digitalizadorCamaPlana} - onChange={handleChange} + disabled />
@@ -66,8 +99,8 @@ export default function Pregunta4EP() { type="text" id="digitalizador3d" name="digitalizador3d" - value={equipos.digitalizador3d} - onChange={handleChange} + value={equipos.d3D} + disabled /> @@ -80,7 +113,7 @@ export default function Pregunta4EP() { id="digitalizadorAlimentador" name="digitalizadorAlimentador" value={equipos.digitalizadorAlimentador} - onChange={handleChange} + disabled /> @@ -93,7 +126,7 @@ export default function Pregunta4EP() { id="digitalizadorGranVolumen" name="digitalizadorGranVolumen" value={equipos.digitalizadorGranVolumen} - onChange={handleChange} + disabled /> diff --git a/src/components/Perifericos/Pregunta5EP.tsx b/src/components/Perifericos/Pregunta5EP.tsx index b20e9af..2b19b94 100644 --- a/src/components/Perifericos/Pregunta5EP.tsx +++ b/src/components/Perifericos/Pregunta5EP.tsx @@ -37,7 +37,6 @@ export default function Pregunta5EP() { .then((res) => { const data = res.data; - // Valores por defecto const valores = { alumnos: "0", profesores: "0", From 30f2dbd8b2d72ed0707236427a39861b5ed6eee5 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 18:31:37 -0600 Subject: [PATCH 09/26] fixed order --- src/components/Perifericos/Pregunta1EP.tsx | 125 ++++++++++----------- src/components/Perifericos/Pregunta4EP.tsx | 2 +- 2 files changed, 62 insertions(+), 65 deletions(-) diff --git a/src/components/Perifericos/Pregunta1EP.tsx b/src/components/Perifericos/Pregunta1EP.tsx index 5290b43..bce8855 100644 --- a/src/components/Perifericos/Pregunta1EP.tsx +++ b/src/components/Perifericos/Pregunta1EP.tsx @@ -16,15 +16,15 @@ interface EquiposImpresion { export default function Pregunta1EP() { const [equipos, setEquipos] = useState({ - inyeccionTinta: "7", - laserPequenaBN: "186", - matrizPuntos: "", - laserAltoVolumenBN: "28", - laserPequenaColor: "20", - multifuncionales: "108", - laserAltoVolumenColor: "18", - impresora3D: "2", - plotter: "11", + inyeccionTinta: "0", + laserPequenaBN: "0", + matrizPuntos: "0", + laserAltoVolumenBN: "0", + laserPequenaColor: "0", + multifuncionales: "0", + laserAltoVolumenColor: "0", + impresora3D: "0", + plotter: "0", }); // 🔹 Preparado para conectar con API del backend @@ -51,9 +51,7 @@ export default function Pregunta1EP() { Censo de equipos periféricos - Equipo de Impresion -
- Equipos de impresión. -
+
Equipos de impresión.
{/* Columna 1 */} @@ -64,29 +62,7 @@ export default function Pregunta1EP() { id="inyeccionTinta" name="inyeccionTinta" value={equipos.inyeccionTinta} - onChange={handleChange} - /> -
- -
- - -
- -
- -
@@ -98,7 +74,31 @@ export default function Pregunta1EP() { id="laserAltoVolumenBN" name="laserAltoVolumenBN" value={equipos.laserAltoVolumenBN} - onChange={handleChange} + disabled + /> + + +
+ + +
+ +
+ +
@@ -109,32 +109,7 @@ export default function Pregunta1EP() { id="laserPequenaColor" name="laserPequenaColor" value={equipos.laserPequenaColor} - onChange={handleChange} - /> - - -
- - -
- - {/* Columna 3 */} -
- -
@@ -145,7 +120,29 @@ export default function Pregunta1EP() { id="impresora3D" name="impresora3D" value={equipos.impresora3D} - onChange={handleChange} + disabled + /> + + +
+ + +
+ +
+ +
@@ -156,7 +153,7 @@ export default function Pregunta1EP() { id="plotter" name="plotter" value={equipos.plotter} - onChange={handleChange} + disabled /> diff --git a/src/components/Perifericos/Pregunta4EP.tsx b/src/components/Perifericos/Pregunta4EP.tsx index ecfc7ec..71a0cb5 100644 --- a/src/components/Perifericos/Pregunta4EP.tsx +++ b/src/components/Perifericos/Pregunta4EP.tsx @@ -1,5 +1,5 @@ "use client"; -import React, { useState, useEffect } from "react"; +import { useState, useEffect } from "react"; import "@/app/styles/layout/pregunta4EP.scss"; import Cookies from "js-cookie"; import axios from "axios"; From 8a93cc184dac5019c45142898c8ca841d480e645 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 18:42:23 -0600 Subject: [PATCH 10/26] added axios to pregunta 1 --- src/components/Perifericos/Pregunta1EP.tsx | 80 +++++++++++++++++++--- 1 file changed, 72 insertions(+), 8 deletions(-) diff --git a/src/components/Perifericos/Pregunta1EP.tsx b/src/components/Perifericos/Pregunta1EP.tsx index bce8855..23391cd 100644 --- a/src/components/Perifericos/Pregunta1EP.tsx +++ b/src/components/Perifericos/Pregunta1EP.tsx @@ -1,6 +1,8 @@ "use client"; import React, { useState, useEffect } from "react"; import style from "./pregunta1EP.module.scss"; +import axios from "axios"; +import Cookies from "js-cookie"; interface EquiposImpresion { inyeccionTinta: string; @@ -27,15 +29,77 @@ export default function Pregunta1EP() { plotter: "0", }); - // 🔹 Preparado para conectar con API del backend + const api_url = process.env.NEXT_PUBLIC_API_URL; + useEffect(() => { - // Cuando te den la API, descomenta y edita la URL 👇 - /* - fetch("https://tu-api-backend.com/api/equipos-impresion") - .then((res) => res.json()) - .then((data) => setEquipos(data)) - .catch((err) => console.error("Error al obtener datos:", err)); - */ + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + + axios + .get(`${api_url}/equipos/reporte/equipos_impesion_group/impresoras`, { + headers, + }) + .then((res) => { + const data = res.data; + + const valores = { + inyeccionTinta: "0", + laserPequenaBN: "0", + matrizPuntos: "0", + laserAltoVolumenBN: "0", + laserPequenaColor: "0", + multifuncionales: "0", + laserAltoVolumenColor: "0", + impresora3D: "0", + plotter: "0", + }; + + data.forEach((item: any) => { + const uso = item.periferico.toUpperCase().trim(); + const total = item.total ?? "0"; + + switch (uso) { + case "INYECCIÓN TINTA": + valores.inyeccionTinta = total; + break; + + case "LÁSER PEQUEÑA B/N": + valores.laserPequenaBN = total; + break; + + case "MATRIZ DE PUNTOS": + valores.matrizPuntos = total; + break; + + case "LÁSER DE ALTO VOLUMEN B/N": + valores.laserAltoVolumenBN = total; + break; + + case "LÁSER PEQUEÑA COLOR": + valores.laserPequenaColor = total; + break; + + case "MULTIFUNCIONALES": + valores.multifuncionales = total; + break; + + case "LÁSER DE ALTO VOLUMEN COLOR": + valores.laserAltoVolumenColor = total; + break; + case "3D": + valores.impresora3D = total; + break; + case "PLOTTER": + valores.plotter = total; + break; + } + }); + + setEquipos(valores); + }) + .catch((err) => { + console.error("Error:", err); + }); }, []); const handleChange = (e: React.ChangeEvent) => { From dc45629442fc2b0e492a89864bde28917dae4a15 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 18:53:55 -0600 Subject: [PATCH 11/26] modified pregunta7 to use axios --- src/components/Equipo_Computo/Pregunta7.tsx | 95 ++++++++++++++++++--- src/components/Perifericos/Pregunta1EP.tsx | 7 -- 2 files changed, 83 insertions(+), 19 deletions(-) diff --git a/src/components/Equipo_Computo/Pregunta7.tsx b/src/components/Equipo_Computo/Pregunta7.tsx index 3d19c11..0064981 100644 --- a/src/components/Equipo_Computo/Pregunta7.tsx +++ b/src/components/Equipo_Computo/Pregunta7.tsx @@ -1,28 +1,100 @@ "use client"; -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; +import axios from "axios"; +import Cookies from "js-cookie"; import "./pregunta7.css"; +interface AntiguedadItem { + antiguedad: string; + total: number; + porcentaje?: string; +} + +interface RespuestaAntiguedad { + impresion: AntiguedadItem[]; + digitalizacion: AntiguedadItem[]; +} + export default function Pregunta7() { const [datos, setDatos] = useState([ - { nombre: "Impresión", valores: ["", "", "", ""] }, - { nombre: "Digitalización", valores: ["", "", "", ""] }, + { nombre: "Impresión", valores: ["0.00", "0.00", "0.00", "0.00"] }, + { nombre: "Digitalización", valores: ["0.00", "0.00", "0.00", "0.00"] }, ]); - // Función para calcular total de cada fila en Pregunta 7 + const api_url = process.env.NEXT_PUBLIC_API_URL; + const calcularTotal = (valores: string[]) => valores.reduce((acc, val) => acc + (Number(val) || 0), 0); + useEffect(() => { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + + axios + .get(`${api_url}/equipos/reporte/contar_perifericos_antiguedad`, { + headers, + }) + .then((res) => { + const data: RespuestaAntiguedad = res.data; + + const orden = [ + "MENORES DE 2", + "ENTRE 2 Y 3", + "ENTRE 4 Y 5", + "MAYOR A 6", + ]; + + const nuevaTabla = [ + { nombre: "Impresión", totales: [0, 0, 0, 0] }, + { nombre: "Digitalización", totales: [0, 0, 0, 0] }, + ]; + + if (Array.isArray(data.impresion)) { + data.impresion.forEach((item) => { + const antig = item.antiguedad.toUpperCase().trim(); + const i = orden.indexOf(antig); + if (i !== -1) nuevaTabla[0].totales[i] = Number(item.total) || 0; + }); + } + + if (Array.isArray(data.digitalizacion)) { + data.digitalizacion.forEach((item) => { + const antig = item.antiguedad.toUpperCase().trim(); + const i = orden.indexOf(antig); + if (i !== -1) nuevaTabla[1].totales[i] = Number(item.total) || 0; + }); + } + + const tablaConPorcentajes = nuevaTabla.map((fila) => { + const totalFila = fila.totales.reduce((a, b) => a + b, 0); + + let valores = ["0", "0", "0", "0"]; + + if (totalFila > 0) { + valores = fila.totales.map((v) => + ((v / totalFila) * 100).toFixed(2) + ); + } + + return { nombre: fila.nombre, valores }; + }); + + setDatos(tablaConPorcentajes); + }) + .catch((err) => { + console.error("Error cargando datos:", err); + }); + }, []); + return (
- {/* Pregunta 7 */}
Censo de equipos periféricos - Estado del equipo periférico (impresión y digitalización.)
- Antiguedad que tienen los equipos - periféricos del área universitaria. + Antigüedad que tienen los equipos periféricos del área universitaria.
@@ -40,21 +112,20 @@ export default function Pregunta7() {
{datos.map((fila, filaIndex) => { const total = calcularTotal(fila.valores); + return ( + {fila.valores.map((valor, colIndex) => ( ))} +
Computadoras de Escritorio (247)Computadoras Portátiles (767)Alto Rendimiento (17)Computadoras de EscritorioComputadoras PortátilesAlto Rendimiento
{fila.nombre}
- + %
100 ? "total-error" : "" diff --git a/src/components/Perifericos/Pregunta1EP.tsx b/src/components/Perifericos/Pregunta1EP.tsx index 23391cd..e174c25 100644 --- a/src/components/Perifericos/Pregunta1EP.tsx +++ b/src/components/Perifericos/Pregunta1EP.tsx @@ -102,13 +102,6 @@ export default function Pregunta1EP() { }); }, []); - const handleChange = (e: React.ChangeEvent) => { - setEquipos({ - ...equipos, - [e.target.name]: e.target.value, - }); - }; - return (
From 7ba218df0195b513ee418fbd9ad309c081e13893 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 19:00:52 -0600 Subject: [PATCH 12/26] fixed little style and merge sarabia --- src/components/Equipo_Computo/Pregunta3.tsx | 3 --- src/components/Equipo_Computo/Pregunta9.tsx | 2 +- src/components/Equipo_Computo/pregunta10.css | 1 + src/components/Equipo_Computo/pregunta10.tsx | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/Equipo_Computo/Pregunta3.tsx b/src/components/Equipo_Computo/Pregunta3.tsx index 3dd8a8a..f683d92 100644 --- a/src/components/Equipo_Computo/Pregunta3.tsx +++ b/src/components/Equipo_Computo/Pregunta3.tsx @@ -243,9 +243,6 @@ export default function Pregunta3_2() {
- ) : (
diff --git a/src/components/Equipo_Computo/Pregunta9.tsx b/src/components/Equipo_Computo/Pregunta9.tsx index 4ca7386..7fdeeae 100644 --- a/src/components/Equipo_Computo/Pregunta9.tsx +++ b/src/components/Equipo_Computo/Pregunta9.tsx @@ -132,7 +132,7 @@ export default function Pregunta9() { {/* Pregunta 9: Antigüedad */}
- Calcule porcentualmente (%) la antigüedad que tienen los equipos de cómputo del área universitaria. + Antigüedad que tienen los equipos de cómputo del área universitaria.
diff --git a/src/components/Equipo_Computo/pregunta10.css b/src/components/Equipo_Computo/pregunta10.css index 5f73780..0993dd9 100644 --- a/src/components/Equipo_Computo/pregunta10.css +++ b/src/components/Equipo_Computo/pregunta10.css @@ -1,5 +1,6 @@ /* === Cuadro de la pregunta === */ .pregunta-cuadro { + background-color: #fff; border-left: 6px solid #001f3f; padding: 15px; border-radius: 8px; diff --git a/src/components/Equipo_Computo/pregunta10.tsx b/src/components/Equipo_Computo/pregunta10.tsx index b99e5a4..a396b9d 100644 --- a/src/components/Equipo_Computo/pregunta10.tsx +++ b/src/components/Equipo_Computo/pregunta10.tsx @@ -56,7 +56,7 @@ export default function Pregunta10() { return ( <>
- ¿Cuántos equipos de cómputo tienen garantía de proveedor? + Equipos de cómputo que tienen garantía de proveedor
From b2757dd18f3bdac7df367b7254517c501f2a0cb7 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 20 Nov 2025 19:26:49 -0600 Subject: [PATCH 13/26] added credenciales and comented --- package-lock.json | 17 +- src/app/(Administrador)/pregunta1/page.tsx | 124 ------ src/app/(Administrador)/pregunta1EP/page.tsx | 162 -------- src/app/(Administrador)/pregunta1_1/page.tsx | 129 ------ .../pregunta1_1/pregunta1.1.css | 148 ------- src/app/(Administrador)/pregunta1_2/page.tsx | 65 ---- src/app/(Administrador)/pregunta1_2/page1.css | 94 ----- src/app/(Administrador)/pregunta2/page.tsx | 161 -------- .../(Administrador)/pregunta2/pregunta2.scss | 164 -------- src/app/(Administrador)/pregunta2EP/page.tsx | 125 ------ src/app/(Administrador)/pregunta2_1/page.tsx | 59 --- src/app/(Administrador)/pregunta2_1/page2.css | 96 ----- src/app/(Administrador)/pregunta3/page.tsx | 366 ------------------ src/app/(Administrador)/pregunta3/page3.css | 167 -------- src/app/(Administrador)/pregunta3_1/page.tsx | 248 ------------ .../(Administrador)/pregunta3_1/page3.1.css | 171 -------- src/app/(Administrador)/pregunta3_2/page.tsx | 270 ------------- .../(Administrador)/pregunta3_2/page3.2.css | 170 -------- src/app/(Administrador)/pregunta3_3/page.tsx | 271 ------------- .../(Administrador)/pregunta3_3/page3.3.css | 170 -------- src/app/(Administrador)/pregunta3_4/page.tsx | 257 ------------ .../(Administrador)/pregunta3_4/page3.4.css | 166 -------- src/app/(Administrador)/pregunta3_5/page.tsx | 209 ---------- .../(Administrador)/pregunta3_5/page3.5.css | 201 ---------- src/app/(Administrador)/pregunta4EP/page.tsx | 105 ----- src/app/(Administrador)/pregunta5EP/page.tsx | 55 --- src/app/(Administrador)/pregunta7/page.tsx | 89 ----- .../(Administrador)/pregunta7/pregunta7.css | 135 ------- src/app/(Administrador)/pregunta7_1/page.tsx | 172 -------- .../(Administrador)/pregunta7_1/pregunta7.css | 132 ------- src/app/(Administrador)/pregunta9/page.tsx | 142 ------- .../(Administrador)/pregunta9/pregunta1.css | 131 ------- .../(Administrador)/reporteNOValido/page.tsx | 93 ----- .../reporteNOValido/reporte.css | 169 -------- src/components/AgregarEquipo.tsx | 51 ++- src/components/Editar.tsx | 3 +- src/components/Perifericos/Pregunta1EP.tsx | 15 + 37 files changed, 64 insertions(+), 5238 deletions(-) delete mode 100644 src/app/(Administrador)/pregunta1/page.tsx delete mode 100644 src/app/(Administrador)/pregunta1EP/page.tsx delete mode 100644 src/app/(Administrador)/pregunta1_1/page.tsx delete mode 100644 src/app/(Administrador)/pregunta1_1/pregunta1.1.css delete mode 100644 src/app/(Administrador)/pregunta1_2/page.tsx delete mode 100644 src/app/(Administrador)/pregunta1_2/page1.css delete mode 100644 src/app/(Administrador)/pregunta2/page.tsx delete mode 100644 src/app/(Administrador)/pregunta2/pregunta2.scss delete mode 100644 src/app/(Administrador)/pregunta2EP/page.tsx delete mode 100644 src/app/(Administrador)/pregunta2_1/page.tsx delete mode 100644 src/app/(Administrador)/pregunta2_1/page2.css delete mode 100644 src/app/(Administrador)/pregunta3/page.tsx delete mode 100644 src/app/(Administrador)/pregunta3/page3.css delete mode 100644 src/app/(Administrador)/pregunta3_1/page.tsx delete mode 100644 src/app/(Administrador)/pregunta3_1/page3.1.css delete mode 100644 src/app/(Administrador)/pregunta3_2/page.tsx delete mode 100644 src/app/(Administrador)/pregunta3_2/page3.2.css delete mode 100644 src/app/(Administrador)/pregunta3_3/page.tsx delete mode 100644 src/app/(Administrador)/pregunta3_3/page3.3.css delete mode 100644 src/app/(Administrador)/pregunta3_4/page.tsx delete mode 100644 src/app/(Administrador)/pregunta3_4/page3.4.css delete mode 100644 src/app/(Administrador)/pregunta3_5/page.tsx delete mode 100644 src/app/(Administrador)/pregunta3_5/page3.5.css delete mode 100644 src/app/(Administrador)/pregunta4EP/page.tsx delete mode 100644 src/app/(Administrador)/pregunta5EP/page.tsx delete mode 100644 src/app/(Administrador)/pregunta7/page.tsx delete mode 100644 src/app/(Administrador)/pregunta7/pregunta7.css delete mode 100644 src/app/(Administrador)/pregunta7_1/page.tsx delete mode 100644 src/app/(Administrador)/pregunta7_1/pregunta7.css delete mode 100644 src/app/(Administrador)/pregunta9/page.tsx delete mode 100644 src/app/(Administrador)/pregunta9/pregunta1.css delete mode 100644 src/app/(Administrador)/reporteNOValido/page.tsx delete mode 100644 src/app/(Administrador)/reporteNOValido/reporte.css diff --git a/package-lock.json b/package-lock.json index 135923a..25b4aa4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1632,6 +1633,7 @@ "integrity": "sha512-tBFxBp9Nfyy5rsmefN+WXc1JeW/j2BpBHFdLZbEVfs9wn3E3NRFxwV0pJg8M1qQAexFpvz73hJXFofV0ZAu92A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -1692,6 +1694,7 @@ "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.4", "@typescript-eslint/types": "8.46.4", @@ -2233,6 +2236,7 @@ "resolved": "https://registry.npmjs.org/@zxing/library/-/library-0.21.3.tgz", "integrity": "sha512-hZHqFe2JyH/ZxviJZosZjV+2s6EDSY0O24R+FQmlWZBZXP9IqMo7S3nb3+2LBWxodJQkSurdQGnqE7KXqrYgow==", "license": "MIT", + "peer": true, "dependencies": { "ts-custom-error": "^3.2.1" }, @@ -2256,6 +2260,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2655,6 +2660,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -2872,7 +2878,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/cwise-compiler": { "version": "1.1.3", @@ -3299,6 +3306,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3484,6 +3492,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -5702,6 +5711,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5711,6 +5721,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6015,6 +6026,7 @@ "integrity": "sha512-Dqh7SiYcaFtdv5Wvku6QgS5IGPm281L+ZtVD1U2FJa7Q0EFRlq8Z3sjYtz6gYObsYThUOz9ArwFqPZx+1azILQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -6549,6 +6561,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -6751,6 +6764,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7055,6 +7069,7 @@ "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/app/(Administrador)/pregunta1/page.tsx b/src/app/(Administrador)/pregunta1/page.tsx deleted file mode 100644 index d2d0174..0000000 --- a/src/app/(Administrador)/pregunta1/page.tsx +++ /dev/null @@ -1,124 +0,0 @@ -"use client"; - -import { useState } from "react"; - -type OsEntry = { - os: string; - count: number; - isTotal?: boolean; -}; - -type PlatformKey = - | "pc-desktop" - | "apple-desktop" - | "pc-laptop" - | "apple-laptop" - | "servers"; - -type PlatformData = Record; - -const MOCK_DATA: PlatformData = { - "pc-desktop": [ - { os: "Windows 11", count: 408 }, - { os: "Windows 10", count: 1171 }, - { os: "Windows 7/8", count: 177 }, - { os: "Windows XP/Vista", count: 43 }, - { os: "Linux", count: 45 }, - { os: "Total", count: 1844, isTotal: true }, - ], - "apple-desktop": [ - { os: "Mac OS X (13 - Ventura, 14 - Sonoma)", count: 205 }, - { - os: "Mac OS X (Mojave, Catalina, 11 - Big Sur, 12 - Monterrey)", - count: 180, - }, - { os: "Mac OS X (Yosemite, El Capitan, Sierra, High Sierra)", count: 95 }, - { os: "Mac OS X (Snow Leopard, Mountain Lion, Mavericks)", count: 6 }, - { os: "Total", count: 480, isTotal: true }, - ], - "pc-laptop": [ - { os: "Windows 11", count: 40 }, - { os: "Windows 10", count: 171 }, - { os: "Windows 7/8", count: 17 }, - { os: "Windows XP/Vista", count: 3 }, - { os: "Linux", count: 5 }, - { os: "Total", count: 236, isTotal: true }, - ], - "apple-laptop": [ - { os: "Mac OS X (13 - Ventura, 14 - Sonoma)", count: 205 }, - { - os: "Mac OS X (Mojave, Catalina, 11 - Big Sur, 12 - Monterrey)", - count: 180, - }, - { os: "Mac OS X (Yosemite, El Capitan, Sierra, High Sierra)", count: 95 }, - { os: "Mac OS X (Snow Leopard, Mountain Lion, Mavericks)", count: 6 }, - { os: "Total", count: 480, isTotal: true }, - ], - servers: [ - { - os: "Linux (CentOS, Fedora, Ubuntu, Red Hat Enterprise, entre otros)", - count: 120, - }, - { os: "Unix (AIX, Mac OS Server, Solaris, etc.)", count: 80 }, - { os: "Windows Server 2022/2023", count: 50 }, - { os: "Windows Server 2016/2019", count: 80 }, - { os: "Windows Server 2008/2012", count: 50 }, - { os: "Windows Server 2000/2003", count: 12 }, - { os: "Total", count: 392, isTotal: true }, - ], -}; - -const PLATFORM_LABELS: Record = { - "pc-desktop": "Computadoras de escritorio Plataforma PC", - "apple-desktop": "Computadoras de escritorio Plataforma Apple", - "pc-laptop": "Computadoras portátiles Plataforma PC", - "apple-laptop": "Computadoras portátiles Plataforma Apple", - servers: "Servidores de alto rendimiento", -}; - -export default function Pregunta1() { - const [activeTab, setActiveTab] = useState("pc-desktop"); - - const currentData = MOCK_DATA[activeTab]; - - return ( -
-
-
- Presione cada pestaña para ver la información de las plataformas. -
- -
- {/* Tabs */} -
- {Object.entries(PLATFORM_LABELS).map(([key, label]) => ( - - ))} -
- - {/* Data Table */} -
-
- {currentData.map((item, index) => ( -
-
{item.os}
-
{item.count}
-
- ))} -
-
-
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta1EP/page.tsx b/src/app/(Administrador)/pregunta1EP/page.tsx deleted file mode 100644 index 8f36988..0000000 --- a/src/app/(Administrador)/pregunta1EP/page.tsx +++ /dev/null @@ -1,162 +0,0 @@ -"use client"; -import React, { useState, useEffect } from "react"; -import "../../styles/layout/pregunta1EP.scss"; - -interface EquiposImpresion { - inyeccionTinta: string; - laserPequenaBN: string; - matrizPuntos: string; - laserAltoVolumenBN: string; - laserPequenaColor: string; - multifuncionales: string; - laserAltoVolumenColor: string; - impresora3D: string; - plotter: string; -} - -export default function Pregunta1EPPage() { - const [equipos, setEquipos] = useState({ - inyeccionTinta: "7", - laserPequenaBN: "186", - matrizPuntos: "", - laserAltoVolumenBN: "28", - laserPequenaColor: "20", - multifuncionales: "108", - laserAltoVolumenColor: "18", - impresora3D: "2", - plotter: "11", - }); - - // 🔹 Preparado para conectar con API del backend - useEffect(() => { - // Cuando te den la API, descomenta y edita la URL 👇 - /* - fetch("https://tu-api-backend.com/api/equipos-impresion") - .then((res) => res.json()) - .then((data) => setEquipos(data)) - .catch((err) => console.error("Error al obtener datos:", err)); - */ - }, []); - - const handleChange = (e: React.ChangeEvent) => { - setEquipos({ - ...equipos, - [e.target.name]: e.target.value, - }); - }; - - return ( -
-
- 1. Desglose el número de equipos de impresión con que cuenta el área - universitaria. -
- -
- {/* Columna 1 */} -
- - -
- -
- - -
- -
- - -
- - {/* Columna 2 */} -
- - -
- -
- - -
- -
- - -
- - {/* Columna 3 */} -
- - -
- -
- - -
- -
- - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta1_1/page.tsx b/src/app/(Administrador)/pregunta1_1/page.tsx deleted file mode 100644 index 610a596..0000000 --- a/src/app/(Administrador)/pregunta1_1/page.tsx +++ /dev/null @@ -1,129 +0,0 @@ -"use client"; -import React, { useState } from "react"; -import "./pregunta1.1.css"; - -export default function Pregunta1() { - const [datos, setDatos] = useState([ - { nombre: "Windows", valores: ["", "", "", "", ""] }, - { nombre: "Linux", valores: ["", "", "", "", ""] }, - { nombre: "Mac OS", valores: ["", "", "", "", ""] }, - { nombre: "Total", valores: ["", "", "", "", ""] }, - ]); - - const handleChange = (filaIndex: number, colIndex: number, value: string) => { - const nuevosDatos = [...datos]; - nuevosDatos[filaIndex].valores[colIndex] = value; - setDatos(nuevosDatos); - }; - - const calcularTotalFila = (valores: string[]) => - valores.reduce((acc, val) => acc + (Number(val) || 0), 0); - - const calcularTotalesColumnas = () => { - const numColumnas = datos[0].valores.length; - const totales = Array(numColumnas).fill(0); - datos.slice(0, -1).forEach((fila) => { - fila.valores.forEach((valor, colIndex) => { - totales[colIndex] += Number(valor) || 0; - }); - }); - return totales; - }; - - const totalesColumnas = calcularTotalesColumnas(); - - // Títulos de las tablas - const tablas = [ - "Computadoras de escritorio", - "Tabletas", - "Computadoras portátiles", - "Alto rendimiento", - ]; - - // Función para renderizar una tabla - const renderTabla = (titulo: string) => ( -
- - - - - - - - - - - - - - {datos.map((fila, filaIndex) => { - if (fila.nombre === "Total") { - const totalGeneral = calcularTotalFila( - totalesColumnas.map(String) - ); - return ( - - - {totalesColumnas.map((colTotal, i) => ( - - ))} - - - ); - } - - const totalFila = calcularTotalFila(fila.valores); - return ( - - - {fila.valores.map((valor, colIndex) => ( - - ))} - - - ); - })} - -
{titulo}AlumnosProfesoresTécnicos AcadémicosInvestigadoresAdministrativosTotal
{fila.nombre}{colTotal}{totalGeneral}
{fila.nombre} -
- - handleChange(filaIndex, colIndex, e.target.value) - } - /> -
-
100 ? "total-error" : "" - }`} - > - {totalFila} -
-
- ); - - return ( -
-
Censo de equipos de cómputo
- -
- 1. Desglose en cada renglón, el número de equipos de cómputo dedicado por cada categoría - enlistada, de acuerdo con el perfil de usuario al que se destina su uso primordialmente. * -
- - {/* FILA SUPERIOR */} -
- {renderTabla(tablas[0])} - {renderTabla(tablas[1])} -
- - {/* FILA INFERIOR */} -
- {renderTabla(tablas[2])} - {renderTabla(tablas[3])} -
-
- ); -} diff --git a/src/app/(Administrador)/pregunta1_1/pregunta1.1.css b/src/app/(Administrador)/pregunta1_1/pregunta1.1.css deleted file mode 100644 index 6cc4fa6..0000000 --- a/src/app/(Administrador)/pregunta1_1/pregunta1.1.css +++ /dev/null @@ -1,148 +0,0 @@ -.contenedor-pregunta { - padding: 20px; - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; - background-color: #f9fafc; -} - -.contenedor-censo{ - background-color: #003e79; - color: white; - padding: 15px; - font-size: 20px; - margin-bottom: 25px; -} - - -.pregunta-cuadro { - background-color: #f5f5f5; - border-left: 10px solid #001f3f; - padding: 15px; - border-radius: 8px; - font-size: 16px; - margin-bottom: 25px; -} - - -.tabla-contenedor { - background: white; - padding: 20px; - border-radius: 10px; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); - overflow-x: auto; - min-width: 700px; -} - -/* Tabla */ -.tabla { - width: 100%; - border-collapse: collapse; - text-align: center; - color: black; - width: 100%; /* ocupa todo el ancho del contenedor */ - table-layout: fixed; -} - -.tabla th, -.tabla td { - border: 1px solid #ddd; - padding: 12px; - -} - -.tabla th { - color: white; - font-weight: 600; - font-size: 15px; -} - -.tabla td { - font-size: 14px; -} - -/* Colores personalizados */ -.azul-marino { - background-color: #003e79; - color: white; -} - -.rosa-fuerte { - background-color: #dc1557; - color: white; -} - -/* Contenedor input */ -.input-contenedor { - position: relative; - display: flex; - justify-content: center; - align-items: center; - height: 100%; -} - -/* Input */ -.input-contenedor input { - width: 100%; - padding: 6px 25px 6px 6px; - border: 2px solid #003e79; - border-radius: 6px; - font-size: 14px; - color: #333; - text-align: center; - outline: none; - background-color: rgb(232, 226, 226); - box-sizing: border-box; -} - - -.input-contenedor input::-webkit-inner-spin-button, -.input-contenedor input::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} - -/* Focus del input */ -.input-contenedor input:focus { - border-color: #001f3f; - box-shadow: 0 0 6px rgba(0, 47, 95, 0.3); -} - -/* Placeholder gris claro */ -.input-contenedor input::placeholder { - color: #bbb; - opacity: 1; -} - - -.input-contenedor .porcentaje { - position: absolute; - right: 8px; - color: #555; - font-weight: bold; - pointer-events: none; - font-size: 14px; - top: 50%; - transform: translateY(-50%); -} - -/* Celda del total */ -.total-celda { - font-weight: bold; - color: #003e79; - background-color: #eef2f6; -} - -/* Total > 100% */ -.total-error { - background-color: #ffcccc; - color: #a80000; -} - -.contenedor-tablas { - display: flex; - gap: 20px; - flex-wrap: wrap; -} - -.tabla-contenedor { - flex: 1; -} diff --git a/src/app/(Administrador)/pregunta1_2/page.tsx b/src/app/(Administrador)/pregunta1_2/page.tsx deleted file mode 100644 index 6960eea..0000000 --- a/src/app/(Administrador)/pregunta1_2/page.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from "react"; -import Link from "next/link"; -import "./page1.css"; // Importamos los estilos - -export default function Pregunta1() { - return ( -
-
-

PREGUNTA 1

- -
-

- 1. Desglose el número de equipos de impresión con que cuenta el área - universitaria. -

- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
- - Ir a Pregunta 2 → - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta1_2/page1.css b/src/app/(Administrador)/pregunta1_2/page1.css deleted file mode 100644 index ab1bf2d..0000000 --- a/src/app/(Administrador)/pregunta1_2/page1.css +++ /dev/null @@ -1,94 +0,0 @@ -/* === ESTILOS GENERALES === */ -.pregunta-page { - min-height: 100vh; - display: flex; - justify-content: center; - align-items: center; - background: linear-gradient(to bottom, #ebf4ff, #ffffff); - font-family: "Inter", sans-serif; -} - -/* === CONTENEDOR === */ -.pregunta-container { - background: white; - border: 1px solid #e5e7eb; - border-radius: 20px; - box-shadow: 0 8px 20px rgba(0, 0, 0, 0.05); - width: 90%; - max-width: 900px; - padding: 3rem; -} - -/* === TÍTULO === */ -.pregunta-titulo { - font-size: 2rem; - font-weight: 700; - text-align: center; - color: #1e40af; - margin-bottom: 2rem; -} - -/* === TEXTO === */ -.pregunta-texto { - font-weight: 600; - color: #374151; - margin-bottom: 1.5rem; -} - -/* === GRID DE INPUTS === */ -.pregunta-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); - gap: 1.5rem; -} - -.pregunta-grid label { - display: block; - font-size: 0.9rem; - color: #4b5563; - margin-bottom: 0.4rem; -} - -.pregunta-grid input { - width: 100%; - padding: 0.6rem 0.8rem; - border: 1px solid #d1d5db; - border-radius: 8px; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); - background-color: #f9fafb; - transition: all 0.2s ease; -} - -.pregunta-grid input:focus { - border-color: #2563eb; - outline: none; - background-color: #ffffff; - box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.3); -} - -/* === BOTONES === */ -.boton-contenedor { - display: flex; - justify-content: center; - margin-top: 2.5rem; -} - -.boton { - display: inline-block; - padding: 0.8rem 1.6rem; - border-radius: 10px; - font-weight: 500; - text-decoration: none; - transition: all 0.2s ease; - box-shadow: 0 3px 8px rgba(37, 99, 235, 0.25); -} - -.boton.siguiente { - background-color: #2563eb; - color: white; -} - -.boton.siguiente:hover { - background-color: #1e3a8a; - transform: scale(1.05); -} diff --git a/src/app/(Administrador)/pregunta2/page.tsx b/src/app/(Administrador)/pregunta2/page.tsx deleted file mode 100644 index 197c114..0000000 --- a/src/app/(Administrador)/pregunta2/page.tsx +++ /dev/null @@ -1,161 +0,0 @@ -"use client"; - -import { useState, useEffect } from "react"; -import "./pregunta2.scss"; - -// Tipos -type OsEntry = { - os: string; - count: string; // o number si la API devuelve números - isTotal?: boolean; -}; - -type PlatformData = { - [key: string]: OsEntry[]; -}; - -// === DATOS TEMPORALES (mock) === -const MOCK_DATA: PlatformData = { - "pc-desktop": [ - { os: "Windows 11", count: "408" }, - { os: "Windows 10", count: "1171" }, - { os: "Windows 7/8", count: "177" }, - { os: "Windows XP/Vista", count: "43" }, - { os: "Linux", count: "45" }, - { os: "Total", count: "1844", isTotal: true }, - ], - "apple-desktop": [ - { os: "Mac OS X(13 - Ventura, 14 - Sonoma)", count: "205" }, - { - os: "Mac OS X(Mojave,Catalina,11 - Big Sur, 12 - Monterrey)", - count: "180", - }, - { os: "Mac OS X(Yosemite,El Capitan,Sierra,High Sierra)", count: "95" }, - { os: "Mac OS X(Snow Leopard,Mountain Lion,Mavericks)", count: "6" }, - { os: "Total", count: "480", isTotal: true }, - ], - "pc-laptop": [ - { os: "Windows 11", count: "40" }, - { os: "Windows 10", count: "171" }, - { os: "Windows 7/8", count: "17" }, - { os: "Windows XP/Vista", count: "3" }, - { os: "Linux", count: "5" }, - { os: "Total", count: "144", isTotal: true }, - ], - "apple-laptop": [ - { os: "Mac OS X(13 - Ventura, 14 - Sonoma)", count: "39" }, - { - os: "Mac OS X(Mojave,Catalina,11 - Big Sur, 12 - Monterrey)", - count: "23", - }, - { os: "Mac OS X(Yosemite,El Capitan,Sierra,High Sierra)", count: "0" }, - { os: "Mac OS X(Snow Leopard,Mountain Lion,Mavericks)", count: "9" }, - { os: "Total", count: "71", isTotal: true }, - ], - servers: [ - { - os: "Linux (CentOs,Fedora,Ubuntu,Red Hat Enterprise,entre otros)", - count: "21", - }, - { os: "Unix (AIX,MAC OS Server,Solaris,entre otros)", count: "2" }, - { os: "Windows Server 2022/2023", count: "6" }, - { os: "Windows Server 2016/2019", count: "3" }, - { os: "Windows Server 2008/2012", count: "3" }, - { os: "Windows Server 2000/2003", count: "2" }, - { os: "Total", count: "37", isTotal: true }, - ], -}; - -const API_ENDPOINT = "/api/platform-stats"; // ← ¡Reemplaza esto cuando sepas la URL real! - -const Page = () => { - const [activeTab, setActiveTab] = useState("pc-desktop"); - const [data, setData] = useState(MOCK_DATA); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - const fetchData = async () => { - try { - // === DESCOMENTA ESTO CUANDO TENGAS LA API === - // const response = await fetch(API_ENDPOINT); - // if (!response.ok) throw new Error('Error al cargar estadísticas'); - // const apiData: PlatformData = await response.json(); - // setData(apiData); - // setLoading(false); - - // === POR AHORA: usa datos simulados (y simula un retraso si quieres) === - // await new Promise(resolve => setTimeout(resolve, 300)); - setData(MOCK_DATA); - setLoading(false); - } catch (err) { - console.error("Error al cargar datos:", err); - setError( - "No se pudieron cargar las estadísticas. Usando datos temporales." - ); - setData(MOCK_DATA); // fallback en caso de error - setLoading(false); - } - }; - - fetchData(); - }, []); - - const currentData = data[activeTab] || []; - - // Si quisieras mostrar un estado de carga (opcional) - // if (loading) return

Cargando...

; - // if (error) console.warn(error); // o muestra un toast, etc. - - return ( -
-
-

Estadísticas de Plataformas

-
- -
-
-
- Presione cada pestaña para ver la información de las plataformas. -
- -
-
- {Object.entries({ - "pc-desktop": "Computadoras de escritorio Plataforma PC", - "apple-desktop": "Computadoras de escritorio Plataforma Apple", - "pc-laptop": "Computadoras portátiles Plataforma PC", - "apple-laptop": "Computadoras portátiles Plataforma Apple", - servers: "Servidores de alto rendimiento", - }).map(([key, label]) => ( -
setActiveTab(key)} - > - {label} -
- ))} -
- -
-
- {currentData.map((item, index) => ( -
-
{item.os}
-
{item.count}
-
- ))} -
-
-
-
-
-
- ); -}; - -export default Page; diff --git a/src/app/(Administrador)/pregunta2/pregunta2.scss b/src/app/(Administrador)/pregunta2/pregunta2.scss deleted file mode 100644 index ffd5807..0000000 --- a/src/app/(Administrador)/pregunta2/pregunta2.scss +++ /dev/null @@ -1,164 +0,0 @@ -.dashboardContainer { - display: flex; - flex-direction: column; - padding: 0; - margin: 0; - min-height: 100vh; - background-color: #f4f4f4; -} - -.header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 16px 24px; - background-color: #ffffff; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); - position: sticky; - top: 0; - z-index: 10; - - h2 { - margin: 0; - font-size: 1.5rem; - color: #0056b3; - } -} - -.scanView { - flex: 1; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; - padding: 20px; - width: 100%; - height: 100%; - - .container { - width: 100%; - max-width: 900px; - border-radius: 12px; - box-shadow: 0 6px 18px rgba(0, 0, 0, 0.1); - overflow: hidden; - display: flex; - flex-direction: column; - border: 1px solid #ddd; - } - - .header { - padding: 16px 20px; - background: #f7f7f7; - border-bottom: 1px solid #e0e0e0; - font-size: 15px; - color: #0056b3; - text-align: center; - font-weight: 500; - display: block; - box-shadow: none; - position: static; - } - - .main-content { - display: flex; - min-height: 420px; - } - - .tabs { - width: 230px; - background-color: #fafafa; - display: flex; - flex-direction: column; - justify-content: flex-start; - } - - .tab { - padding: 18px 16px; - cursor: pointer; - border-right: 1px solid #e0e0e0; - color: #555; - transition: all 0.3s ease; - border-left: 4px solid transparent; - font-size: 15px; - font-weight: 500; - } - - .tab:hover { - background-color: #f0f0f0; - color: #000; - } - - .tab.active { - background-color: #fff; - border-left: 4px solid #0056b3; - border-right: none; - border-bottom: 1px solid #0056b3; - color: #0056b3; - font-weight: 600; - } - - .data-table-wrapper { - flex: 1; - padding: 20px; - } - - .data-table { - width: 100%; - } - - .data-row { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px 16px; - background: #f9f9f9; - transition: background 0.2s ease; - } - - .data-row:hover { - background: #f1f1f1; - } - - .os-name { - flex: 1; - font-size: 15px; - color: #333; - } - - .count-box { - background: #ffffff; - border: 1px solid #0056b3; - padding: 6px 14px; - font-weight: 600; - font-size: 15px; - text-align: center; - min-width: 70px; - } - - .total-row { - background: #eaf4ff; - font-weight: bold; - - .count-box { - color:#0056b3; - } - } -} - -/* ======== RESPONSIVE ======== */ -@media (max-width: 700px) { - .scanView .main-content { - flex-direction: column; - } - - .scanView .tabs { - flex-direction: row; - width: 100%; - } - - .scanView .tab { - flex: 1; - text-align: center; - font-size: 13px; - } -} \ No newline at end of file diff --git a/src/app/(Administrador)/pregunta2EP/page.tsx b/src/app/(Administrador)/pregunta2EP/page.tsx deleted file mode 100644 index 0501263..0000000 --- a/src/app/(Administrador)/pregunta2EP/page.tsx +++ /dev/null @@ -1,125 +0,0 @@ -"use client"; -import React, { useState, useEffect } from "react"; -import "../../styles/layout/pregunta2EP.scss"; - -interface EquiposPoblacion { - alumnos: string; - profesores: string; - tecnicosAcademicos: string; - investigadores: string; - administrativos: string; - total: string; -} - -export default function Pregunta2EPPage() { - const [equipos, setEquipos] = useState({ - alumnos: "35", - profesores: "43", - tecnicosAcademicos: "", - investigadores: "", - administrativos: "302", - total: "380", - }); - - // 🔹 Preparado para conectarse al backend - useEffect(() => { - // Cuando tengas la API, descomenta esta parte 👇 y reemplaza la URL: - /* - fetch("https://tu-api-backend.com/api/equipos-poblacion") - .then((res) => res.json()) - .then((data) => setEquipos(data)) - .catch((err) => console.error("Error al obtener datos:", err)); - */ - }, []); - - const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setEquipos({ - ...equipos, - [name]: value, - }); - }; - - return ( -
-
- *{" "} - (Requerido en el caso de contar con Equipo de impresión) -
- -
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta2_1/page.tsx b/src/app/(Administrador)/pregunta2_1/page.tsx deleted file mode 100644 index c833ebb..0000000 --- a/src/app/(Administrador)/pregunta2_1/page.tsx +++ /dev/null @@ -1,59 +0,0 @@ -"use client"; - -import React from "react"; -import Link from "next/link"; -import "./page2.css"; // 👈 Importamos los estilos - -export default function Pregunta2() { - return ( -
-
-

PREGUNTA 2

- -
-

- Indique el número de equipos de impresión de acuerdo con la - población universitaria al que se destina su uso primordialmente. -

- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
- - ← Volver a Pregunta 1 - - - - Ir a Pregunta 3 → - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta2_1/page2.css b/src/app/(Administrador)/pregunta2_1/page2.css deleted file mode 100644 index ec987db..0000000 --- a/src/app/(Administrador)/pregunta2_1/page2.css +++ /dev/null @@ -1,96 +0,0 @@ -.pregunta-page { - min-height: 100vh; - display: flex; - justify-content: center; - align-items: center; - background: linear-gradient(to bottom, #eef2ff, #ffffff); - font-family: "Inter", sans-serif; -} - -.pregunta-container { - background: white; - border: 1px solid #e5e7eb; - border-radius: 20px; - box-shadow: 0 8px 20px rgba(0, 0, 0, 0.05); - width: 90%; - max-width: 900px; - padding: 3rem; -} - -.pregunta-titulo { - font-size: 2rem; - font-weight: 700; - text-align: center; - color: #4338ca; - margin-bottom: 2rem; -} - -.pregunta-texto { - font-weight: 500; - color: #374151; - margin-bottom: 1.5rem; - text-align: justify; -} - -.pregunta-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 1.5rem; -} - -.pregunta-grid label { - display: block; - color: #4b5563; - margin-bottom: 0.4rem; -} - -.pregunta-grid input { - width: 100%; - padding: 0.6rem 0.8rem; - border: 1px solid #d1d5db; - border-radius: 8px; - background-color: #f9fafb; - transition: all 0.2s ease; -} - -.pregunta-grid input:focus { - border-color: #6366f1; - outline: none; - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3); -} - -.boton-grupo { - display: flex; - justify-content: space-between; - margin-top: 2.5rem; -} - -.boton { - display: inline-block; - padding: 0.8rem 1.6rem; - border-radius: 10px; - font-weight: 500; - text-decoration: none; - transition: all 0.2s ease; - box-shadow: 0 3px 8px rgba(99, 102, 241, 0.25); -} - -.boton.anterior { - background-color: #6b7280; - color: white; -} - -.boton.anterior:hover { - background-color: #374151; - transform: scale(1.05); -} - -.boton.siguiente { - background-color: #4f46e5; - color: white; -} - -.boton.siguiente:hover { - background-color: #312e81; - transform: scale(1.05); -} diff --git a/src/app/(Administrador)/pregunta3/page.tsx b/src/app/(Administrador)/pregunta3/page.tsx deleted file mode 100644 index 2952041..0000000 --- a/src/app/(Administrador)/pregunta3/page.tsx +++ /dev/null @@ -1,366 +0,0 @@ -"use client"; - -import React, { useState } from "react"; -import Link from "next/link"; -import "./page3.css"; - -export default function Pregunta3() { - const [activeTab, setActiveTab] = useState(0); - - const tabs = [ - "Computadoras de escritorio Plataforma PC", - "Computadoras de escritorio Plataforma Apple", - "Computadoras portátiles Plataforma PC", - "Computadoras portátiles Plataforma Apple", - "Alto rendimiento Servidores", - ]; - - // === DATOS DE CADA TABLA === - const data = [ - // === 1. PC Escritorio === - { - color: "#16a34a", - headerColor: "#15803d", - rows: [ - { - tipo: "Core i9 / Ryzen 9", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Core i7 / Ryzen 7", - alumnos: "15", - profesores: "8", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "23", - }, - { - tipo: "Core i5 / Ryzen 5", - alumnos: "10", - profesores: "5", - tecnicos: "", - investigadores: "", - administrativos: "2", - total: "17", - }, - ], - total: { - alumnos: "25", - profesores: "13", - tecnicos: "0", - investigadores: "0", - administrativos: "2", - total: "40", - }, - }, - // === 2. Apple Escritorio === - { - color: "#a855f7", - headerColor: "#7e22ce", - rows: [ - { - tipo: "Familia M3", - alumnos: "10", - profesores: "2", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "12", - }, - { - tipo: "Familia M2", - alumnos: "5", - profesores: "3", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "8", - }, - ], - total: { - alumnos: "15", - profesores: "5", - tecnicos: "0", - investigadores: "0", - administrativos: "0", - total: "20", - }, - }, - // === 3. PC Portátiles === - { - color: "#22c55e", - headerColor: "#15803d", - rows: [ - { - tipo: "Core i5 (12a generación)", - alumnos: "12", - profesores: "5", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "17", - }, - { - tipo: "Core i7 (13a generación)", - alumnos: "6", - profesores: "4", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "11", - }, - ], - total: { - alumnos: "18", - profesores: "9", - tecnicos: "0", - investigadores: "0", - administrativos: "1", - total: "28", - }, - }, - // === 4. Apple Portátiles === - { - color: "#9333ea", - headerColor: "#7e22ce", - rows: [ - { - tipo: "Familia M2", - alumnos: "35", - profesores: "3", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "38", - }, - { - tipo: "Familia M1", - alumnos: "", - profesores: "5", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "6", - }, - { - tipo: "i5 o equivalentes (12a generación en adelante)", - alumnos: "", - profesores: "14", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "14", - }, - ], - total: { - alumnos: "35", - profesores: "31", - tecnicos: "0", - investigadores: "0", - administrativos: "5", - total: "71", - }, - }, - // === 5. Servidores === - { - color: "#2563eb", - headerColor: "#1e40af", - rows: [ - { - tipo: "Xeon E3, E5, E7", - alumnos: "19", - profesores: "", - tecnicos: "", - investigadores: "16", - administrativos: "", - total: "35", - }, - { - tipo: "Xeon Bronce, Plata, Oro 6a generación", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "Xeon Phi", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - ], - total: { - alumnos: "19", - profesores: "0", - tecnicos: "0", - investigadores: "16", - administrativos: "2", - total: "37", - }, - }, - ]; - - return ( -
-
-

PREGUNTA 3 (1/5 - 5/5)

- -
-

- 3. Desglose la cantidad de población beneficiada por plataforma y - tipo de procesador: * -

-

- Presione cada pestaña para ingresar la información. -

- - {/* === PESTAÑAS === */} -
- {tabs.map((tab, index) => ( -
setActiveTab(index)} - > - {tab} -
- ))} -
- - {/* === TABLA === */} -
- - - - - - - - - - - - - - - - - {data[activeTab].rows.map((item, i) => ( - - - - - - - - - - ))} - - - - - - - - - - -
- Tipo de procesador - - Población Beneficiada - - Total -
AlumnosProfesoresTécnicosInvestigadoresAdministrativos
{item.tipo} - - - - - - - - - - {item.total}
Total - - - - - - - - - - {data[activeTab].total.total}
- - -
-
- -
- - ← Volver al inicio - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta3/page3.css b/src/app/(Administrador)/pregunta3/page3.css deleted file mode 100644 index 1c0a843..0000000 --- a/src/app/(Administrador)/pregunta3/page3.css +++ /dev/null @@ -1,167 +0,0 @@ -/* === CONTENEDOR GENERAL === */ -.pregunta-page { - display: flex; - justify-content: center; - padding: 2rem; -} - -.pregunta-container { - width: 100%; - max-width: 1100px; -} - -.pregunta-titulo { - text-align: center; - color: #1e3a8a; - margin-bottom: 1.2rem; - font-size: 1.6rem; - font-weight: 700; -} - -.pregunta-texto { - font-size: 1rem; - font-weight: 500; - margin-bottom: 0.5rem; -} - -.pregunta-subtexto { - font-size: 0.9rem; - color: #6b7280; - margin-bottom: 1rem; -} - -/* === PESTAÑAS === */ -.tab-container { - display: flex; - overflow-x: auto; - border-bottom: 2px solid #e5e7eb; - margin-bottom: 1.5rem; -} - -.tab { - padding: 0.8rem 1.2rem; - cursor: pointer; - white-space: nowrap; - font-weight: 500; - border-radius: 8px 8px 0 0; - transition: all 0.2s ease; - margin-right: 0.25rem; -} - -.tab.active { - font-weight: 600; - background-color: #f3f4f6; -} - -.tab.inactive { - color: #6b7280; - background-color: #ffffff; -} - -.tab.inactive:hover { - background-color: #f9fafb; -} - -/* === TABLA === */ -.tabla-container { - overflow-x: auto; - position: relative; -} - -.tabla { - width: 100%; - border-collapse: collapse; - min-width: 950px; - font-size: 0.85rem; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05); -} - -.tabla th { - padding: 0.7rem 0.5rem; - text-align: center; - color: white; - font-weight: 600; - border: 1px solid #d1d5db; -} - -.tabla .sub-header { - background-color: #9ca3af; -} - -.tabla td { - border: 1px solid #e5e7eb; - text-align: center; - vertical-align: middle; -} - -.tabla tr:hover td { - background-color: #f9fafb; -} - -.tipo-procesador { - text-align: left; - font-weight: 500; - padding: 0.6rem 0.5rem; - background-color: #f9fafb; - color: #374151; -} - -.tabla input[type="text"] { - width: 100%; - padding: 0.45rem 0.3rem; - border: none; - background-color: #f3f4f6; - text-align: center; - box-sizing: border-box; - color: #374151; -} - -.total-celda { - font-weight: 600; - color: #111827; - background-color: #eef2ff; -} - -.fila-total td { - background-color: #e0e7ff; - font-weight: 700; -} - -/* === BOTONES === */ -.boton-consultar { - margin-top: 1rem; - background-color: #10b981; - color: white; - padding: 0.6rem 1.2rem; - border: none; - border-radius: 8px; - font-size: 0.9rem; - cursor: pointer; - box-shadow: 0 2px 5px rgba(16, 185, 129, 0.3); - transition: background-color 0.2s; - float: right; -} - -.boton-consultar:hover { - background-color: #059669; -} - -.boton-contenedor { - margin-top: 4rem; - text-align: right; -} - -.boton.volver { - background-color: #2563eb; - color: white; - padding: 0.7rem 1.4rem; - border-radius: 8px; - text-decoration: none; - font-weight: 500; - box-shadow: 0 2px 5px rgba(37, 99, 235, 0.3); - transition: background-color 0.2s; -} - -.boton.volver:hover { - background-color: #1d4ed8; -} diff --git a/src/app/(Administrador)/pregunta3_1/page.tsx b/src/app/(Administrador)/pregunta3_1/page.tsx deleted file mode 100644 index e42253a..0000000 --- a/src/app/(Administrador)/pregunta3_1/page.tsx +++ /dev/null @@ -1,248 +0,0 @@ -"use client"; - -import React from "react"; -import Link from "next/link"; -import "./page3.1.css"; - -export default function Pregunta3() { - const data = [ - { - tipo: "Core Ultra (i3, i5, i7) Serie 2", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Core Ultra (i3, i5, i7) Serie 1", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i9 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i7 o equivalentes (13a generación en adelante)", - alumnos: "15", - profesores: "16", - tecnicos: "", - investigadores: "", - administrativos: "52", - total: "97", - }, - { - tipo: "i7 o equivalentes (12a generación en adelante)", - alumnos: "29", - profesores: "16", - tecnicos: "", - investigadores: "", - administrativos: "52", - total: "97", - }, - { - tipo: "i5 o equivalentes (13a generación en adelante)", - alumnos: "107", - profesores: "3", - tecnicos: "", - investigadores: "", - administrativos: "8", - total: "118", - }, - { - tipo: "i5 o equivalentes (12a generación en adelante)", - alumnos: "250", - profesores: "59", - tecnicos: "3", - investigadores: "", - administrativos: "904", - total: "1216", - }, - { - tipo: "i3 o equivalentes (13a generación en adelante)", - alumnos: "3", - profesores: "1", - tecnicos: "", - investigadores: "", - administrativos: "12", - total: "16", - }, - { - tipo: "i3 o equivalentes (12a generación en adelante)", - alumnos: "36", - profesores: "19", - tecnicos: "2", - investigadores: "", - administrativos: "78", - total: "137", - }, - { - tipo: "i3 o equivalentes (11a generación en adelante)", - alumnos: "264", - profesores: "66", - tecnicos: "", - investigadores: "", - administrativos: "410", - total: "740", - }, - { - tipo: "Pentium Gold", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "Pentium Serie J, G", - alumnos: "2", - profesores: "3", - tecnicos: "", - investigadores: "", - administrativos: "3", - total: "8", - }, - { - tipo: "Celeron Dual Core, Pentium Dual Core o anteriores", - alumnos: "25", - profesores: "40", - tecnicos: "", - investigadores: "", - administrativos: "56", - total: "121", - }, - ]; - - const total = { - alumnos: "774", - profesores: "227", - tecnicos: "5", - investigadores: "0", - administrativos: "838", - total: "1844", - }; - - return ( -
-
-

PREGUNTA 3 (1/5)

- -
-

- 3. Desglose la cantidad de población beneficiada por plataforma y - tipo de procesador: * -

-

- Presione cada pestaña para ingresar la información. -

- - {/* Pestañas */} -
-
- Computadoras de escritorio Plataforma PC -
-
- Computadoras de escritorio Plataforma Apple -
-
- Computadoras portátiles Plataforma PC -
-
- Computadoras portátiles Plataforma Apple -
-
Alto rendimiento Servidores
-
- - {/* Tabla */} -
- - - - - - - - - - - - - - - - - {data.map((item, i) => ( - - - - - - - - - - ))} - - - - - - - - - - -
- Plataforma PC
Tipo de procesador -
- Población Beneficiada - - Total -
AlumnosProfesoresTécnicos AcadémicosInvestigadoresAdministrativos
{item.tipo} - - - - - - - - - - {item.total}
Total - - - - - - - - - - {total.total}
- -
-
- -
- - Pregunta 3 (2/5) → - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta3_1/page3.1.css b/src/app/(Administrador)/pregunta3_1/page3.1.css deleted file mode 100644 index 59fba05..0000000 --- a/src/app/(Administrador)/pregunta3_1/page3.1.css +++ /dev/null @@ -1,171 +0,0 @@ -/* === CONTENEDOR GENERAL === */ -.pregunta-page { - display: flex; - justify-content: center; - padding: 2rem 0; -} - -.pregunta-container { - width: 90%; - max-width: 1100px; - background-color: white; - padding: 1.5rem; - border-radius: 12px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); -} - -/* === TITULOS === */ -.pregunta-titulo { - text-align: center; - color: #0a2d6e; - margin-bottom: 1rem; - font-size: 1.6rem; - font-weight: 700; -} - -.pregunta-texto { - font-size: 1rem; - font-weight: 600; - margin-bottom: 0.2rem; - color: #1f2937; -} - -.pregunta-subtexto { - font-size: 0.9rem; - color: #6b7280; - margin-bottom: 1rem; -} - -/* === PESTAÑAS === */ -.tab-container { - display: flex; - border-bottom: 3px solid #d1d5db; - margin-bottom: 1rem; -} - -.tab { - padding: 0.6rem 1rem; - cursor: pointer; - font-weight: 600; - border-radius: 8px 8px 0 0; - margin-right: 0.25rem; - font-size: 0.9rem; -} - -.tab.active { - color: #1e40af; - border: 2px solid #1e40af; - border-bottom: none; - background-color: #f3f4f6; -} - -.tab.inactive { - color: #6b7280; - background-color: #fff; -} - -/* === TABLA === */ -.tabla-wrapper { - overflow-x: auto; - display: flex; - justify-content: center; -} - -.tabla-pc { - border-collapse: collapse; - width: 95%; - text-align: center; - font-size: 0.83rem; -} - -.tabla-pc th, -.tabla-pc td { - border: 1px solid #d1d5db; - padding: 0.4rem; -} - -.header-procesador, -.header-total { - background-color: #3b82f6; - color: white; - font-weight: 700; -} - -.header-poblacion { - background-color: #9333ea; - color: white; - font-weight: 700; -} - -.tabla-pc th { - text-align: center; -} - -.tipo-procesador { - text-align: left; - background-color: #f9fafb; - font-weight: 600; - padding-left: 0.5rem; -} - -.tabla-pc input { - width: 60px; - text-align: center; - border: none; - background-color: #f3f4f6; - border-radius: 4px; - padding: 0.2rem; - font-size: 0.8rem; - color: #111827; -} - -.total-celda { - background-color: #e0f2fe; - font-weight: 600; - color: #1e3a8a; -} - -.fila-total td { - background-color: #bfdbfe; - font-weight: 700; -} - -.fila-total .total-celda { - background-color: #93c5fd; -} - -/* === BOTONES === */ -.boton-consultar { - margin-top: 1rem; - background-color: #10b981; - color: white; - padding: 0.5rem 1rem; - border: none; - border-radius: 8px; - font-size: 0.9rem; - cursor: pointer; - float: right; - box-shadow: 0 2px 6px rgba(16, 185, 129, 0.3); -} - -.boton-consultar:hover { - background-color: #059669; -} - -.boton-contenedor { - text-align: right; - margin-top: 4rem; -} - -.boton.siguiente { - background-color: #2563eb; - color: white; - padding: 0.6rem 1.2rem; - border-radius: 8px; - text-decoration: none; - font-weight: 500; -} - -.boton.siguiente:hover { - background-color: #1e3a8a; -} diff --git a/src/app/(Administrador)/pregunta3_2/page.tsx b/src/app/(Administrador)/pregunta3_2/page.tsx deleted file mode 100644 index 37d5445..0000000 --- a/src/app/(Administrador)/pregunta3_2/page.tsx +++ /dev/null @@ -1,270 +0,0 @@ -"use client"; - -import React from "react"; -import Link from "next/link"; -import "./page3.2.css"; - -export default function Pregunta3_2() { - const data = [ - { - tipo: "Core Ultra (i3, i5, i7) Serie 2", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Core Ultra (i3, i5, i7) Serie 1", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Familia M4", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "2", - total: "2", - }, - { - tipo: "Familia M3", - alumnos: "", - profesores: "1", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "2", - }, - { - tipo: "Familia M2", - alumnos: "", - profesores: "2", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "2", - }, - { - tipo: "Familia M1", - alumnos: "51", - profesores: "1", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "52", - }, - { - tipo: "i9 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i7 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i7 o equivalentes (12a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "i5 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "i5 o equivalentes (12a generación en adelante)", - alumnos: "11", - profesores: "1", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "12", - }, - { - tipo: "i3 o equivalentes (13a generación en adelante)", - alumnos: "175", - profesores: "5", - tecnicos: "", - investigadores: "", - administrativos: "26", - total: "206", - }, - { - tipo: "i3 o equivalentes (12a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "i3 o equivalentes (11a generación en adelante)", - alumnos: "", - profesores: "2", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "2", - }, - { - tipo: "Core2 Mac, Quad Core o anteriores", - alumnos: "12", - profesores: "3", - tecnicos: "3", - investigadores: "", - administrativos: "3", - total: "21", - }, - ]; - - const total = { - alumnos: "249", - profesores: "14", - tecnicos: "3", - investigadores: "0", - administrativos: "37", - total: "303", - }; - - return ( -
-
-

PREGUNTA 3 (2/5)

- -
-

- 3. Desglose la cantidad de población beneficiada por plataforma y - tipo de procesador: * -

-

- Presione cada pestaña para ingresar la información. -

- - {/* === PESTAÑAS === */} -
-
- Computadoras de escritorio Plataforma PC -
-
- Computadoras de escritorio Plataforma Apple -
-
- Computadoras portátiles Plataforma PC -
-
- Computadoras portátiles Plataforma Apple -
-
Alto rendimiento Servidores
-
- - {/* === TABLA === */} -
- - - - - - - - - - - - - - - - - {data.map((item, index) => ( - - - - - - - - - - ))} - - - - - - - - - - -
- Plataforma Apple
Tipo de procesador -
- Población Beneficiada - - Total -
AlumnosProfesoresTécnicos AcadémicosInvestigadoresAdministrativos
{item.tipo} - - - - - - - - - - {item.total}
Total - - - - - - - - - - {total.total}
- -
-
- -
- - Pregunta 3 (3/5) → - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta3_2/page3.2.css b/src/app/(Administrador)/pregunta3_2/page3.2.css deleted file mode 100644 index 20173f9..0000000 --- a/src/app/(Administrador)/pregunta3_2/page3.2.css +++ /dev/null @@ -1,170 +0,0 @@ -/* === ESTILOS PREGUNTA 3 (2/5) - Plataforma Apple === */ - -.pregunta-titulo { - text-align: center; - color: #7e22ce; - margin-bottom: 1.2rem; - font-size: 1.5rem; - font-weight: 700; -} - -.pregunta-texto { - font-size: 1rem; - font-weight: 500; - margin-bottom: 0.5rem; -} - -.pregunta-subtexto { - font-size: 0.9rem; - color: #6b7280; - margin-bottom: 1rem; -} - -/* === PESTAÑAS === */ -.tab-container { - display: flex; - overflow-x: auto; - border-bottom: 2px solid #e5e7eb; - margin-bottom: 1.5rem; -} - -.tab { - padding: 0.8rem 1.2rem; - cursor: pointer; - white-space: nowrap; - font-weight: 500; - border-radius: 8px 8px 0 0; - transition: all 0.2s ease; - margin-right: 0.25rem; -} - -.tab.active { - color: #7e22ce; - border-bottom: 3px solid #7e22ce; - background-color: #f3f4f6; -} - -.tab.inactive { - color: #6b7280; - background-color: #ffffff; -} - -.tab.inactive:hover { - color: #7e22ce; - background-color: #f9fafb; -} - -/* === TABLA === */ -.tabla-apple-container { - overflow-x: auto; - margin-bottom: 2rem; - position: relative; -} - -.tabla-apple { - width: 100%; - border-collapse: collapse; - min-width: 950px; - font-size: 0.85rem; -} - -.tabla-apple th { - padding: 0.7rem 0.5rem; - text-align: center; - color: white; - font-weight: 600; - border: 1px solid #d1d5db; -} - -.tabla-apple .header-procesador, -.tabla-apple .header-total { - background-color: #9333ea; -} - -.tabla-apple .header-poblacion { - background-color: #7e22ce; -} - -.tabla-apple .sub-header { - background-color: #a855f7; - color: white; -} - -.tabla-apple td { - border: 1px solid #e5e7eb; - text-align: center; - vertical-align: middle; -} - -.tabla-apple .tipo-procesador { - text-align: left; - font-weight: 500; - padding: 0.6rem 0.5rem; - background-color: #faf5ff; - color: #4b5563; -} - -.tabla-apple input[type="text"] { - width: 100%; - padding: 0.45rem 0.3rem; - border: none; - background-color: #f3f4f6; - text-align: center; - box-sizing: border-box; - color: #374151; -} - -.tabla-apple .total-celda { - background-color: #f3e8ff; - font-weight: 600; - color: #7e22ce; -} - -.tabla-apple .fila-total td { - background-color: #e9d5ff; - font-weight: 700; -} - -.tabla-apple .fila-total .total-celda { - background-color: #d8b4fe; -} - -/* === BOTONES === */ -.boton-consultar { - position: absolute; - bottom: -3.5rem; - right: 0; - background-color: #10b981; - color: white; - padding: 0.6rem 1.2rem; - border: none; - border-radius: 8px; - font-size: 0.9rem; - cursor: pointer; - box-shadow: 0 2px 5px rgba(16, 185, 129, 0.3); - transition: background-color 0.2s; -} - -.boton-consultar:hover { - background-color: #059669; -} - -.boton-contenedor { - margin-top: 5rem; - text-align: right; -} - -.boton.siguiente { - background-color: #9333ea; - color: white; - padding: 0.7rem 1.4rem; - border-radius: 8px; - text-decoration: none; - font-weight: 500; - box-shadow: 0 2px 5px rgba(147, 51, 234, 0.3); - transition: background-color 0.2s; -} - -.boton.siguiente:hover { - background-color: #7e22ce; -} diff --git a/src/app/(Administrador)/pregunta3_3/page.tsx b/src/app/(Administrador)/pregunta3_3/page.tsx deleted file mode 100644 index e74e421..0000000 --- a/src/app/(Administrador)/pregunta3_3/page.tsx +++ /dev/null @@ -1,271 +0,0 @@ -"use client"; - -import React from "react"; -import Link from "next/link"; -import "./page3.3.css"; - -export default function Pregunta3_3() { - const data = [ - { - tipo: "Core Ultra (i3, i5, i7) Serie 2", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Core Ultra (i3, i5, i7) Serie 1", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i9 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i7 o equivalentes (12a generación en adelante)", - alumnos: "16", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "27", - total: "43", - }, - { - tipo: "i7 o equivalentes (11a generación)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "i5 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "1", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "2", - }, - { - tipo: "i5 o equivalentes (12a generación en adelante)", - alumnos: "146", - profesores: "34", - tecnicos: "", - investigadores: "", - administrativos: "42", - total: "222", - }, - { - tipo: "i5 o equivalentes (11a generación en adelante)", - alumnos: "", - profesores: "2", - tecnicos: "", - investigadores: "", - administrativos: "15", - total: "19", - }, - { - tipo: "i3 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "12", - total: "12", - }, - { - tipo: "i3 o equivalentes (12a generación en adelante)", - alumnos: "", - profesores: "8", - tecnicos: "", - investigadores: "", - administrativos: "23", - total: "31", - }, - { - tipo: "i3 o equivalentes (11a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Pentium Dual Core o anteriores", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Celeron (equivalente 2018 hasta la fecha)", - alumnos: "299", - profesores: "8", - tecnicos: "", - investigadores: "", - administrativos: "4", - total: "311", - }, - { - tipo: "Celeron anteriores", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Core2 Duo, Quad Core, Pentium Dual Core o anteriores", - alumnos: "4", - profesores: "4", - tecnicos: "", - investigadores: "", - administrativos: "3", - total: "11", - }, - ]; - - const total = { - alumnos: "445", - profesores: "132", - tecnicos: "0", - investigadores: "0", - administrativos: "139", - total: "716", - }; - - return ( -
-
-

PREGUNTA 3 (3/5)

- -
-

- 3. Desglose la cantidad de población beneficiada por plataforma y - tipo de procesador: * -

-

- Presione cada pestaña para ingresar la información. -

- - {/* === PESTAÑAS === */} -
-
- Computadoras de escritorio Plataforma PC -
-
- Computadoras de escritorio Plataforma Apple -
-
- Computadoras portátiles Plataforma PC -
-
- Computadoras portátiles Plataforma Apple -
-
Alto rendimiento Servidores
-
- - {/* === TABLA === */} -
- - - - - - - - - - - - - - - - - - {data.map((item, index) => ( - - - - - - - - - - ))} - - - - - - - - - - -
- Plataforma PC
Tipo de procesador -
- Población Beneficiada - - Total -
AlumnosProfesoresTécnicos AcadémicosInvestigadoresAdministrativos
{item.tipo} - - - - - - - - - - {item.total}
Total - - - - - - - - - - {total.total}
- -
-
- -
- - Pregunta 3 (4/5) → - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta3_3/page3.3.css b/src/app/(Administrador)/pregunta3_3/page3.3.css deleted file mode 100644 index 663c736..0000000 --- a/src/app/(Administrador)/pregunta3_3/page3.3.css +++ /dev/null @@ -1,170 +0,0 @@ -/* === ESTILOS PREGUNTA 3 (3/5) - Portátiles Plataforma PC === */ - -.pregunta-titulo { - text-align: center; - color: #dc2626; - margin-bottom: 1.2rem; - font-size: 1.5rem; - font-weight: 700; -} - -.pregunta-texto { - font-size: 1rem; - font-weight: 500; - margin-bottom: 0.5rem; -} - -.pregunta-subtexto { - font-size: 0.9rem; - color: #6b7280; - margin-bottom: 1rem; -} - -/* === PESTAÑAS === */ -.tab-container { - display: flex; - overflow-x: auto; - border-bottom: 2px solid #e5e7eb; - margin-bottom: 1.5rem; -} - -.tab { - padding: 0.8rem 1.2rem; - cursor: pointer; - white-space: nowrap; - font-weight: 500; - border-radius: 8px 8px 0 0; - transition: all 0.2s ease; - margin-right: 0.25rem; -} - -.tab.active { - color: #dc2626; - border-bottom: 3px solid #dc2626; - background-color: #fef2f2; -} - -.tab.inactive { - color: #6b7280; - background-color: #ffffff; -} - -.tab.inactive:hover { - color: #dc2626; - background-color: #f9fafb; -} - -/* === TABLA === */ -.tabla-pc-container { - overflow-x: auto; - margin-bottom: 2rem; - position: relative; -} - -.tabla-pc { - width: 100%; - border-collapse: collapse; - min-width: 950px; - font-size: 0.85rem; -} - -.tabla-pc th { - padding: 0.7rem 0.5rem; - text-align: center; - color: white; - font-weight: 600; - border: 1px solid #d1d5db; -} - -.tabla-pc .header-procesador, -.tabla-pc .header-total { - background-color: #b91c1c; -} - -.tabla-pc .header-poblacion { - background-color: #dc2626; -} - -.tabla-pc .sub-header { - background-color: #ef4444; - color: white; -} - -.tabla-pc td { - border: 1px solid #e5e7eb; - text-align: center; - vertical-align: middle; -} - -.tabla-pc .tipo-procesador { - text-align: left; - font-weight: 500; - padding: 0.6rem 0.5rem; - background-color: #fef2f2; - color: #4b5563; -} - -.tabla-pc input[type="text"] { - width: 100%; - padding: 0.45rem 0.3rem; - border: none; - background-color: #f3f4f6; - text-align: center; - box-sizing: border-box; - color: #374151; -} - -.tabla-pc .total-celda { - background-color: #fee2e2; - font-weight: 600; - color: #b91c1c; -} - -.tabla-pc .fila-total td { - background-color: #fecaca; - font-weight: 700; -} - -.tabla-pc .fila-total .total-celda { - background-color: #fca5a5; -} - -/* === BOTONES === */ -.boton-consultar { - position: absolute; - bottom: -3.5rem; - right: 0; - background-color: #10b981; - color: white; - padding: 0.6rem 1.2rem; - border: none; - border-radius: 8px; - font-size: 0.9rem; - cursor: pointer; - box-shadow: 0 2px 5px rgba(16, 185, 129, 0.3); - transition: background-color 0.2s; -} - -.boton-consultar:hover { - background-color: #059669; -} - -.boton-contenedor { - margin-top: 5rem; - text-align: right; -} - -.boton.siguiente { - background-color: #b91c1c; - color: white; - padding: 0.7rem 1.4rem; - border-radius: 8px; - text-decoration: none; - font-weight: 500; - box-shadow: 0 2px 5px rgba(220, 38, 38, 0.3); - transition: background-color 0.2s; -} - -.boton.siguiente:hover { - background-color: #dc2626; -} diff --git a/src/app/(Administrador)/pregunta3_4/page.tsx b/src/app/(Administrador)/pregunta3_4/page.tsx deleted file mode 100644 index 7c5c13f..0000000 --- a/src/app/(Administrador)/pregunta3_4/page.tsx +++ /dev/null @@ -1,257 +0,0 @@ -"use client"; - -import React from "react"; -import Link from "next/link"; -import "./page3.4.css"; - -export default function Pregunta3_4() { - const data = [ - { - tipo: "Core Ultra (i3, i5, i7) Serie 2", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Core Ultra (i3, i5, i7) Serie 1", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Familia M4", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Familia M3", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Familia M2", - alumnos: "35", - profesores: "3", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "38", - }, - { - tipo: "Familia M1", - alumnos: "", - profesores: "5", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "6", - }, - { - tipo: "i9 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i7 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i7 o equivalentes (12a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i7 o equivalentes (11a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i5 o equivalentes (13a generación en adelante)", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "i5 o equivalentes (12a generación en adelante)", - alumnos: "", - profesores: "14", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "14", - }, - { - tipo: "i5 o equivalentes (11a generación en adelante)", - alumnos: "", - profesores: "9", - tecnicos: "", - investigadores: "", - administrativos: "4", - total: "13", - }, - { - tipo: "Core2 Mac, Quad Core o anteriores", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - ]; - - const total = { - alumnos: "35", - profesores: "31", - tecnicos: "0", - investigadores: "0", - administrativos: "5", - total: "71", - }; - - return ( -
-

PREGUNTA 3 (4/5)

- -
-

- 3. Desglose la cantidad de población beneficiada por - plataforma y tipo de procesador: -

- - Presione cada pestaña para ingresar la información. - -
- - {/* === PESTAÑAS === */} -
- - - - - -
- - {/* === TABLA === */} -
- - - - - - - - - - - - - - - - - - {data.map((item, index) => ( - - - - - - - - - - ))} - - - - - - - - - - -
- Plataforma Apple
Tipo de procesador -
- Población Beneficiada - - Total -
AlumnosProfesoresTécnicos AcadémicosInvestigadoresAdministrativos
{item.tipo} - - - - - - - - - - {item.total}
Total - - - - - - - - - - {total.total}
- - -
- -
- - Pregunta 3 (5/5) → - -
-
- ); -} diff --git a/src/app/(Administrador)/pregunta3_4/page3.4.css b/src/app/(Administrador)/pregunta3_4/page3.4.css deleted file mode 100644 index 1f94b1f..0000000 --- a/src/app/(Administrador)/pregunta3_4/page3.4.css +++ /dev/null @@ -1,166 +0,0 @@ -/* === CONTENEDOR GENERAL === */ -.pregunta3-container { - max-width: 1100px; - margin: 2rem auto; - padding: 2rem; - background: #fff; - border-radius: 16px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); - font-family: "Inter", sans-serif; -} - -.pregunta3-titulo { - text-align: left; - font-size: 1.3rem; - font-weight: 700; - color: #6d28d9; - margin-bottom: 1rem; -} - -.pregunta3-descripcion p { - font-size: 1rem; - margin-bottom: 0.3rem; -} - -.subtexto { - font-size: 0.9rem; - color: #6b7280; -} - -/* === TABS === */ -.tabs { - display: flex; - flex-wrap: wrap; - margin: 1rem 0 1.5rem; - border-bottom: 2px solid #e5e7eb; -} - -.tab { - padding: 0.8rem 1.1rem; - font-size: 0.9rem; - border: none; - cursor: pointer; - background: #fff; - color: #6b7280; - transition: all 0.2s ease; - border-radius: 8px 8px 0 0; - margin-right: 0.25rem; -} - -.tab.active { - background: #f3f4f6; - color: #7e22ce; - border-bottom: 3px solid #9333ea; -} - -.tab.inactive:hover { - background: #f9fafb; - color: #9333ea; -} - -/* === TABLA === */ -.tabla-wrapper { - overflow-x: auto; - position: relative; - margin-bottom: 2.5rem; -} - -.tabla-pregunta3 { - width: 100%; - border-collapse: collapse; - min-width: 950px; - font-size: 0.85rem; -} - -.tabla-pregunta3 th, -.tabla-pregunta3 td { - border: 1px solid #e5e7eb; - text-align: center; - padding: 0.5rem; -} - -.header-procesador, -.header-total { - background-color: #9333ea; - color: #fff; - font-weight: 600; -} - -.header-poblacion { - background-color: #7e22ce; - color: #fff; - font-weight: 600; -} - -.tabla-pregunta3 th { - padding: 0.7rem; -} - -.tabla-pregunta3 input { - width: 100%; - padding: 0.4rem; - border: none; - background-color: #f3f4f6; - text-align: center; - font-size: 0.85rem; -} - -.tipo-procesador { - text-align: left; - background-color: #faf5ff; - font-weight: 500; - color: #4b5563; -} - -.celda-total { - background-color: #f3e8ff; - font-weight: 600; - color: #6b21a8; -} - -.fila-total td { - background-color: #e9d5ff; - font-weight: 700; -} - -.fila-total .celda-total.final { - background-color: #d8b4fe; -} - -/* === BOTONES === */ -.boton-consultar { - position: absolute; - bottom: -3rem; - right: 0; - background-color: #10b981; - color: white; - padding: 0.6rem 1.1rem; - border: none; - border-radius: 8px; - font-size: 0.9rem; - cursor: pointer; - transition: all 0.2s; -} - -.boton-consultar:hover { - background-color: #059669; -} - -.boton-siguiente { - text-align: right; - margin-top: 4rem; -} - -.next { - background-color: #9333ea; - color: white; - padding: 0.7rem 1.4rem; - border-radius: 8px; - text-decoration: none; - font-weight: 500; - transition: 0.2s; -} - -.next:hover { - background-color: #7e22ce; -} diff --git a/src/app/(Administrador)/pregunta3_5/page.tsx b/src/app/(Administrador)/pregunta3_5/page.tsx deleted file mode 100644 index 4bc0f71..0000000 --- a/src/app/(Administrador)/pregunta3_5/page.tsx +++ /dev/null @@ -1,209 +0,0 @@ -"use client"; - -import React from "react"; -import Link from "next/link"; -import "./page3.5.css"; - -export default function Pregunta3_5() { - const data = [ - { - tipo: "Xeon 6", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Xeon Bronce, Plata, Oro 3a generación", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Xeon Bronce, Plata, Oro 4a generación", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Xeon Bronce, Plata, Oro 5a generación", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - { - tipo: "Xeon Bronce, Plata, Oro 6a generación", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "Xeon E3, E5, E7", - alumnos: "19", - profesores: "", - tecnicos: "", - investigadores: "16", - administrativos: "", - total: "35", - }, - { - tipo: "Xeon Phi", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "1", - total: "1", - }, - { - tipo: "Xeon o anteriores", - alumnos: "", - profesores: "", - tecnicos: "", - investigadores: "", - administrativos: "", - total: "0", - }, - ]; - - const total = { - alumnos: "19", - profesores: "0", - tecnicos: "0", - investigadores: "16", - administrativos: "2", - total: "37", - }; - - return ( -
-
-

PREGUNTA 3 (5/5)

- -
-

- 3. Desglose la cantidad de población beneficiada por plataforma y - tipo de procesador: * -

-

- Presione cada pestaña para ingresar la información. -

- - {/* === PESTAÑAS === */} -
-
- Computadoras de escritorio Plataforma PC -
-
- Computadoras de escritorio Plataforma Apple -
-
- Computadoras portátiles Plataforma PC -
-
- Computadoras portátiles Plataforma Apple -
-
Alto rendimiento Servidores
-
- - {/* === TABLA === */} -
- - - - - - - - - - - - - - - - - - {data.map((item, index) => ( - - - - - - - - - - ))} - - - - - - - - - - -
- Servidores
Tipo de procesador -
- Población Beneficiada - - Total -
AlumnosProfesoresTécnicos AcadémicosInvestigadoresAdministrativos
{item.tipo} - - - - - - - - - - {item.total}
Total - - - - - - - - - - {total.total}
- - -
-
- -
- - ← Volver al inicio - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta3_5/page3.5.css b/src/app/(Administrador)/pregunta3_5/page3.5.css deleted file mode 100644 index efbc42d..0000000 --- a/src/app/(Administrador)/pregunta3_5/page3.5.css +++ /dev/null @@ -1,201 +0,0 @@ -/* === ESTILOS PREGUNTA 3 (5/5) - Alto Rendimiento Servidores === */ - -.pregunta-page { - display: flex; - justify-content: center; - padding: 2rem 1rem; - background-color: #f9fafb; -} - -.pregunta-container { - width: 100%; - max-width: 1100px; - background-color: #ffffff; - border-radius: 12px; - padding: 2rem 2.5rem; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05); -} - -.pregunta-titulo { - text-align: center; - color: #2563eb; - margin-bottom: 1.5rem; - font-size: 1.6rem; - font-weight: 700; - border-bottom: 3px solid #2563eb; - display: inline-block; - padding-bottom: 0.3rem; -} - -.pregunta-texto { - font-size: 1rem; - font-weight: 500; - margin-bottom: 0.5rem; - color: #1f2937; -} - -.pregunta-subtexto { - font-size: 0.9rem; - color: #6b7280; - margin-bottom: 1.2rem; -} - -/* === PESTAÑAS === */ -.tab-container { - display: flex; - overflow-x: auto; - border-bottom: 2px solid #e5e7eb; - margin-bottom: 1.5rem; -} - -.tab { - padding: 0.8rem 1.2rem; - cursor: pointer; - white-space: nowrap; - font-weight: 500; - border-radius: 8px 8px 0 0; - transition: all 0.2s ease; - margin-right: 0.25rem; -} - -.tab.active { - color: #2563eb; - border-bottom: 3px solid #2563eb; - background-color: #f3f4f6; - box-shadow: inset 0 -2px 4px rgba(37, 99, 235, 0.1); -} - -.tab.inactive { - color: #6b7280; - background-color: #ffffff; -} - -.tab.inactive:hover { - color: #2563eb; - background-color: #f9fafb; -} - -/* === TABLA === */ -.tabla-servidores-container { - overflow-x: auto; - margin-bottom: 3rem; - position: relative; -} - -.tabla-servidores { - width: 100%; - border-collapse: collapse; - min-width: 950px; - font-size: 0.85rem; - border-radius: 10px; - overflow: hidden; - box-shadow: 0 2px 6px rgba(37, 99, 235, 0.08); -} - -.tabla-servidores th { - padding: 0.7rem 0.5rem; - text-align: center; - color: white; - font-weight: 600; - border: 1px solid #d1d5db; -} - -.tabla-servidores .header-procesador, -.tabla-servidores .header-total { - background-color: #2563eb; -} - -.tabla-servidores .header-poblacion { - background-color: #1e40af; -} - -.tabla-servidores .sub-header { - background-color: #3b82f6; - color: white; -} - -.tabla-servidores td { - border: 1px solid #e5e7eb; - text-align: center; - vertical-align: middle; - background-color: #ffffff; - transition: background-color 0.2s; -} - -.tabla-fila:hover td { - background-color: #f3f4f6; -} - -.tabla-servidores .tipo-procesador { - text-align: left; - font-weight: 500; - padding: 0.6rem 0.7rem; - background-color: #eff6ff; - color: #374151; -} - -.tabla-servidores input[type="text"] { - width: 100%; - padding: 0.45rem 0.3rem; - border: none; - background-color: #f9fafb; - text-align: center; - color: #374151; - border-radius: 4px; - font-weight: 500; -} - -.tabla-servidores .total-celda { - background-color: #dbeafe; - font-weight: 600; - color: #1d4ed8; -} - -.tabla-servidores .fila-total td { - background-color: #bfdbfe; - font-weight: 700; -} - -.tabla-servidores .fila-total .total-celda { - background-color: #93c5fd; -} - -/* === BOTONES === */ -.boton-consultar { - position: absolute; - bottom: -3.5rem; - right: 0; - background-color: #10b981; - color: white; - padding: 0.6rem 1.2rem; - border: none; - border-radius: 8px; - font-size: 0.9rem; - cursor: pointer; - box-shadow: 0 2px 5px rgba(16, 185, 129, 0.3); - transition: background-color 0.2s; -} - -.boton-consultar:hover { - background-color: #059669; -} - -.boton-contenedor { - margin-top: 5rem; - text-align: right; -} - -.boton.volver { - background-color: #2563eb; - color: white; - padding: 0.7rem 1.4rem; - border-radius: 8px; - text-decoration: none; - font-weight: 500; - box-shadow: 0 2px 5px rgba(37, 99, 235, 0.3); - transition: background-color 0.2s; -} - -.boton.volver:hover { - background-color: #1d4ed8; -} diff --git a/src/app/(Administrador)/pregunta4EP/page.tsx b/src/app/(Administrador)/pregunta4EP/page.tsx deleted file mode 100644 index 79f2c3b..0000000 --- a/src/app/(Administrador)/pregunta4EP/page.tsx +++ /dev/null @@ -1,105 +0,0 @@ -"use client"; -import React, { useState, useEffect } from "react"; -import "../../styles/layout/pregunta4EP.scss"; - -interface EquiposDigitalizacion { - digitalizadorCamaPlana: string; - digitalizador3d: string; - digitalizadorAlimentador: string; - digitalizadorGranVolumen: string; -} - -export default function Pregunta4EPPage() { - const [equipos, setEquipos] = useState({ - digitalizadorCamaPlana: "27", - digitalizador3d: "", - digitalizadorAlimentador: "108", - digitalizadorGranVolumen: "1", - }); - - // 🔹 Preparado para conectar con el backend - useEffect(() => { - // Cuando tengas la API, descomenta y reemplaza la URL: - /* - fetch("https://tu-api-backend.com/api/equipos-digitalizacion") - .then((res) => res.json()) - .then((data) => setEquipos(data)) - .catch((err) => console.error("Error al obtener datos:", err)); - */ - }, []); - - const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setEquipos({ - ...equipos, - [name]: value, - }); - }; - - return ( -
- -
- Censo de equipos periféricos - Equipo de digitalización -
- -
- 7. Calcule porcentualmente (%) la antiguedad que tienen los equipos - periféricos del área universitaria. * (Requerido en el caso de contar - con Equipo de impresión o digitalización.) -
- -
-
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta5EP/page.tsx b/src/app/(Administrador)/pregunta5EP/page.tsx deleted file mode 100644 index db90668..0000000 --- a/src/app/(Administrador)/pregunta5EP/page.tsx +++ /dev/null @@ -1,55 +0,0 @@ -"use client"; -import "../../styles/layout/pregunta5EP.scss"; - -export default function Pregunta5EP() { - return ( -
-
- Indique el número de equipos de digitalización de acuerdo con la - población universitaria al que se destina su uso primordialmente. - * - (Requerido en el caso de contar con Equipo de digitalización) -
- -
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta7/page.tsx b/src/app/(Administrador)/pregunta7/page.tsx deleted file mode 100644 index b0b176d..0000000 --- a/src/app/(Administrador)/pregunta7/page.tsx +++ /dev/null @@ -1,89 +0,0 @@ -"use client"; -import React, { useState } from "react"; -import "./pregunta7.css"; - -export default function Pregunta7() { - const [datos, setDatos] = useState([ - { nombre: "Impresión", valores: ["", "", "", ""] }, - { nombre: "Digitalización", valores: ["", "", "", ""] }, - ]); - - const [garantia, setGarantia] = useState({ - escritorio: "", - portatil: "", - altoRendimiento: "", - }); - - // Función para actualizar datos de Pregunta 7 - const handleChange = (filaIndex: number, colIndex: number, value: string) => { - const nuevosDatos = [...datos]; - nuevosDatos[filaIndex].valores[colIndex] = value; - setDatos(nuevosDatos); - }; - - // Función para calcular total de cada fila en Pregunta 7 - const calcularTotal = (valores: string[]) => - valores.reduce((acc, val) => acc + (Number(val) || 0), 0); - - return ( -
- {/* Pregunta 7 */} -
- Censo de equipos periféricos - Estado del equipo periférico (impresión y - digitalización.) -
- -
- 7. Calcule porcentualmente (%) la antiguedad que tienen los equipos - periféricos del área universitaria. * (Requerido en el caso de contar - con Equipo de impresión o digitalización.) -
- -
- - - - - - - - - - - - - {datos.map((fila, filaIndex) => { - const total = calcularTotal(fila.valores); - return ( - - - {fila.valores.map((valor, colIndex) => ( - - ))} - - - ); - })} - -
% Antiguedad de los equiposMenor a 2 añosEntre 2 y 3 añosEntre 4 y 5 añosMayor a 6 añosTotal
{fila.nombre} -
- - handleChange(filaIndex, colIndex, e.target.value) - } - /> - % -
-
100 ? "total-error" : "" - }`} - > - {total.toFixed(2)}% -
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta7/pregunta7.css b/src/app/(Administrador)/pregunta7/pregunta7.css deleted file mode 100644 index 9e8fb13..0000000 --- a/src/app/(Administrador)/pregunta7/pregunta7.css +++ /dev/null @@ -1,135 +0,0 @@ -.contenedor-pregunta { - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; -} - -.contenedor-censo{ - background-color: #003e79; - color: white; - padding: 15px; - font-size: 16px; - margin-bottom: 25px; - border-radius: 4px; -} - - -.pregunta-cuadro { - border-left: 6px solid #001f3f; - padding: 15px; - border-radius: 8px; - font-size: 16px; - margin-bottom: 25px; -} - - -.tabla-contenedor { - background: white; - padding: 20px; - border-radius: 10px; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); - overflow-x: auto; -} - -/* Tabla */ -.tabla { - width: 100%; - border-collapse: collapse; - text-align: center; - color: black; -} - -.tabla th, -.tabla td { - border: 1px solid #ddd; - padding: 12px; - -} - -.tabla th { - color: white; - font-weight: 600; - font-size: 15px; -} - -.tabla td { - font-size: 14px; -} - -/* Colores personalizados */ -.azul-marino { - background-color: #003e79; - color: white; -} - -.rosa-fuerte { - background-color: #dc1557; - color: white; -} - -/* Contenedor input */ -.input-contenedor { - position: relative; - display: flex; - justify-content: center; - align-items: center; - height: 100%; -} - -/* Input */ -.input-contenedor input { - width: 40%; - padding: 6px 6px 6px 6px; - border: 2px solid #003e79; - border-radius: 6px; - font-size: 14px; - color: #333; - text-align: center; - outline: none; - background-color: rgb(232, 226, 226); - box-sizing: border-box; -} - - -.input-contenedor input::-webkit-inner-spin-button, -.input-contenedor input::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} - -/* Focus del input */ -.input-contenedor input:focus { - border-color: #001f3f; - box-shadow: 0 0 6px rgba(0, 47, 95, 0.3); -} - -/* Placeholder gris claro */ -.input-contenedor input::placeholder { - color: #bbb; - opacity: 1; -} - - -.input-contenedor .porcentaje { - position: absolute; - - right: 8px; - color: #555; - font-weight: bold; - pointer-events: none; - font-size: 14px; - top: 50%; - transform: translateY(-50%); -} - -/* Celda del total */ -.total-celda { - font-weight: bold; - color: #003e79; - background-color: #eef2f6; -} - -/* Total > 100% */ -.total-error { - background-color: #ffcccc; - color: #a80000; -} - diff --git a/src/app/(Administrador)/pregunta7_1/page.tsx b/src/app/(Administrador)/pregunta7_1/page.tsx deleted file mode 100644 index b9ab73e..0000000 --- a/src/app/(Administrador)/pregunta7_1/page.tsx +++ /dev/null @@ -1,172 +0,0 @@ -"use client"; - -import React, { useState, useEffect } from "react"; -import "../../styles/layout/pregunta7.scss"; - -interface Dato { - nombre: string; - cantidad: number; -} - -const datosSimulados: Dato[] = [ - { nombre: "AULA DE ROBÓTICA 101", cantidad: 18 }, - { nombre: "LAB DE QUÍMICA 201", cantidad: 25 }, - { nombre: "LAB DE FÍSICA 202", cantidad: 30 }, - { nombre: "LAB DE PROGRAMACIÓN 301", cantidad: 40 }, - { nombre: "AULA DE DISEÑO 102", cantidad: 22 }, - { nombre: "LAB ELECTRÓNICA 204", cantidad: 35 }, - { nombre: "LAB COMPUTACIÓN 305", cantidad: 28 }, - { nombre: "AULA INTERACTIVA 106", cantidad: 15 }, - { nombre: "LAB DE INNOVACIÓN 307", cantidad: 33 }, - { nombre: "SALA DE CONFERENCIAS A", cantidad: 12 }, - { nombre: "LAB DE MECATRÓNICA 308", cantidad: 45 }, - { nombre: "LAB DE INTELIGENCIA ARTIFICIAL 309", cantidad: 38 }, - { nombre: "LAB DE REDES 310", cantidad: 27 }, - { nombre: "SALA MULTIMEDIA B", cantidad: 20 }, - { nombre: "LAB DE BIOLOGÍA 205", cantidad: 26 }, - { nombre: "LAB DE MECÁNICA 210", cantidad: 32 }, - { nombre: "AULA DE INGLÉS 110", cantidad: 19 }, - { nombre: "SALA DE DOCENTES", cantidad: 14 }, - { nombre: "LAB DE BIG DATA 311", cantidad: 36 }, - { nombre: "LAB DE CIBERSEGURIDAD 312", cantidad: 29 }, -]; - -const Page: React.FC = () => { - const [data, setData] = useState([]); - const [currentPage, setCurrentPage] = useState(1); - const [recordsPerPage, setRecordsPerPage] = useState(10); - const [sortColumn, setSortColumn] = useState(null); - const [sortAsc, setSortAsc] = useState(true); - - useEffect(() => { - setData(datosSimulados); - }, []); - - const sortedData = React.useMemo(() => { - if (!sortColumn) return data; - return [...data].sort((a, b) => { - if (a[sortColumn] < b[sortColumn]) return sortAsc ? -1 : 1; - if (a[sortColumn] > b[sortColumn]) return sortAsc ? 1 : -1; - return 0; - }); - }, [data, sortColumn, sortAsc]); - - const paginatedData = React.useMemo(() => { - const start = (currentPage - 1) * recordsPerPage; - return sortedData.slice(start, start + recordsPerPage); - }, [sortedData, currentPage, recordsPerPage]); - - const totalPages = Math.ceil(sortedData.length / recordsPerPage); - - const handleSort = (column: keyof Dato) => { - if (sortColumn === column) { - setSortAsc(!sortAsc); - } else { - setSortColumn(column); - setSortAsc(true); - } - setCurrentPage(1); - }; - - const handleRecordsPerPageChange = ( - e: React.ChangeEvent - ) => { - setRecordsPerPage(Number(e.target.value)); - setCurrentPage(1); - }; - - const startItem = (currentPage - 1) * recordsPerPage + 1; - const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length); - - return ( -
-
-
- Mostrar - - registros -
-
- Mostrando {startItem} al {endItem} de {sortedData.length} resultados -
-
- -
- - - - - - - - - {paginatedData.map((item, index) => ( - - - - - ))} - -
handleSort("nombre")} - style={{ cursor: "pointer" }} - > - Nombre del laboratorio o aula - {sortColumn === "nombre" && sortAsc && ( - ascendente - )} - {sortColumn === "nombre" && !sortAsc && ( - descendente - )} - {sortColumn !== "nombre" && <>} - handleSort("cantidad")} - style={{ cursor: "pointer" }} - > - Cantidad - {sortColumn === "cantidad" && sortAsc && ( - ascendente - )} - {sortColumn === "cantidad" && !sortAsc && ( - descendente - )} - {sortColumn !== "cantidad" && <>} -
{item.nombre}{item.cantidad}
-
- -
- - - {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( - - ))} - - -
-
- ); -}; - -export default Page; diff --git a/src/app/(Administrador)/pregunta7_1/pregunta7.css b/src/app/(Administrador)/pregunta7_1/pregunta7.css deleted file mode 100644 index b4eef82..0000000 --- a/src/app/(Administrador)/pregunta7_1/pregunta7.css +++ /dev/null @@ -1,132 +0,0 @@ -.contenedor-pregunta { - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; -} - -.contenedor-censo{ -background-color: #003e79; -color: white; -border-radius: 4px; -} - - -.pregunta-cuadro { - border-left: 10px solid #001f3f; - padding: 15px; - border-radius: 8px; - font-size: 16px; - margin-bottom: 25px; -} - - -.tabla-contenedor { - background: white; - padding: 20px; - border-radius: 10px; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); - overflow-x: auto; -} - -/* Tabla */ -.tabla { - width: 100%; - border-collapse: collapse; - text-align: center; - color: black; -} - -.tabla th, -.tabla td { - border: 1px solid #ddd; - padding: 12px; - -} - -.tabla th { - color: white; - font-weight: 600; - font-size: 15px; -} - -.tabla td { - font-size: 14px; -} - -/* Colores personalizados */ -.azul-marino { - background-color: #003e79; - color: white; -} - -.rosa-fuerte { - background-color: #dc1557; - color: white; -} - -/* Contenedor input */ -.input-contenedor { - position: relative; - display: flex; - justify-content: center; - align-items: center; - height: 100%; -} - -/* Input */ -.input-contenedor input { - width: 40%; - padding: 6px 6px 6px 6px; - border: 2px solid #003e79; - border-radius: 6px; - font-size: 14px; - color: #333; - text-align: center; - outline: none; - background-color: rgb(232, 226, 226); - box-sizing: border-box; -} - - -.input-contenedor input::-webkit-inner-spin-button, -.input-contenedor input::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} - -/* Focus del input */ -.input-contenedor input:focus { - border-color: #001f3f; - box-shadow: 0 0 6px rgba(0, 47, 95, 0.3); -} - -/* Placeholder gris claro */ -.input-contenedor input::placeholder { - color: #bbb; - opacity: 1; -} - - -.input-contenedor .porcentaje { - position: absolute; - - right: 8px; - color: #555; - font-weight: bold; - pointer-events: none; - font-size: 14px; - top: 50%; - transform: translateY(-50%); -} - -/* Celda del total */ -.total-celda { - font-weight: bold; - color: #003e79; - background-color: #eef2f6; -} - -/* Total > 100% */ -.total-error { - background-color: #ffcccc; - color: #a80000; -} - diff --git a/src/app/(Administrador)/pregunta9/page.tsx b/src/app/(Administrador)/pregunta9/page.tsx deleted file mode 100644 index 5b2ecdf..0000000 --- a/src/app/(Administrador)/pregunta9/page.tsx +++ /dev/null @@ -1,142 +0,0 @@ -"use client"; -import React, { useState } from "react"; -import "./pregunta9.css"; - -export default function Pregunta9() { - - const [datos, setDatos] = useState([ - { nombre: "Computadoras de Escritorio", valores: ["", "", "", ""] }, - { nombre: "Computadoras Portátiles", valores: ["", "", "", ""] }, - { nombre: "Alto Rendimiento", valores: ["", "", "", ""] }, - ]); - - - const [garantia, setGarantia] = useState({ - escritorio: "", - portatil: "", - altoRendimiento: "", - }); - - // Función para actualizar datos de Pregunta 9 - const handleChange = (filaIndex: number, colIndex: number, value: string) => { - const nuevosDatos = [...datos]; - nuevosDatos[filaIndex].valores[colIndex] = value; - setDatos(nuevosDatos); - }; - - // Función para calcular total de cada fila en Pregunta 9 - const calcularTotal = (valores: string[]) => - valores.reduce((acc, val) => acc + (Number(val) || 0), 0); - - return ( -
- {/* Pregunta 9 */} - - -
- 9. Calcule porcentualmente (%) la antigüedad que tienen los equipos de - cómputo del área universitaria. * -
- -
- - - - - - - - - - - - - {datos.map((fila, filaIndex) => { - const total = calcularTotal(fila.valores); - return ( - - - {fila.valores.map((valor, colIndex) => ( - - ))} - - - ); - })} - -
% Antiguedad de los equiposMenor a 2 añosEntre 2 y 3 añosEntre 4 y 5 añosMayor a 6 añosTotal
{fila.nombre} -
- - handleChange(filaIndex, colIndex, e.target.value) - } - /> - % -
-
100 ? "total-error" : "" - }`} - > - {total.toFixed(2)}% -
-
- - {/* Pregunta 10 */} -
- 10. ¿Cuántos equipos de cómputo tienen garantía de proveedor?. * -
- -
- - - - - - - - - - - - - - - -
Computadoras de Escritorio (247)Computadoras Portátiles (767)Alto Rendimiento (17)
-
- - setGarantia({ ...garantia, escritorio: e.target.value }) - } - /> -
-
-
- - setGarantia({ ...garantia, portatil: e.target.value }) - } - /> -
-
-
- - setGarantia({ ...garantia, altoRendimiento: e.target.value }) - } - /> -
-
-
-
- ); -} diff --git a/src/app/(Administrador)/pregunta9/pregunta1.css b/src/app/(Administrador)/pregunta9/pregunta1.css deleted file mode 100644 index c0bd904..0000000 --- a/src/app/(Administrador)/pregunta9/pregunta1.css +++ /dev/null @@ -1,131 +0,0 @@ -.contenedor-pregunta { - background-color: #f9fafc; -} - - -.pregunta-cuadro { - border-left: 6px solid #001f3f; - padding: 15px; - border-radius: 8px; - font-size: 16px; - margin-bottom: 25px; -} - - -.tabla-contenedor { - background: white; - padding: 20px; - border-radius: 10px; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); - overflow-x: auto; -} - -/* Tabla */ -.tabla { - width: 100%; - border-collapse: collapse; - text-align: center; - color: black; -} - -.tabla th, -.tabla td { - border: 1px solid #ddd; - padding: 12px; - -} - -.tabla th { - color: white; - font-weight: 600; - font-size: 15px; -} - -.tabla td { - font-size: 14px; -} - -/* Colores personalizados */ -.azul-marino { - background-color: #003e79; - color: white; -} - -.rosa-fuerte { - background-color: #dc1557; - color: white; -} - -/* Contenedor input */ -.input-contenedor { - position: relative; - display: flex; - justify-content: center; - align-items: center; - height: 100%; -} - -/* Input */ -.input-contenedor input { - width: 40%; - padding: 6px 6px 6px 6px; - border: 2px solid #003e79; - border-radius: 6px; - font-size: 14px; - color: #333; - text-align: center; - outline: none; - background-color: rgb(232, 226, 226); - box-sizing: border-box; -} - - -.input-contenedor input::-webkit-inner-spin-button, -.input-contenedor input::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} - -/* Focus del input */ -.input-contenedor input:focus { - border-color: #001f3f; - box-shadow: 0 0 6px rgba(0, 47, 95, 0.3); -} - -/* Placeholder gris claro */ -.input-contenedor input::placeholder { - color: #bbb; - opacity: 1; -} - - -.input-contenedor .porcentaje { - position: absolute; - - right: 8px; - color: #555; - font-weight: bold; - pointer-events: none; - font-size: 14px; - top: 50%; - transform: translateY(-50%); -} - -/* Celda del total */ -.total-celda { - font-weight: bold; - color: #003e79; - background-color: #eef2f6; -} - -/* Total > 100% */ -.total-error { - background-color: #ffcccc; - color: #a80000; -} - - -.input-sp input { - width: 38%; - padding: 6px 6px 6px 6px; -} diff --git a/src/app/(Administrador)/reporteNOValido/page.tsx b/src/app/(Administrador)/reporteNOValido/page.tsx deleted file mode 100644 index 6cf87c7..0000000 --- a/src/app/(Administrador)/reporteNOValido/page.tsx +++ /dev/null @@ -1,93 +0,0 @@ -"use client"; -import { useState } from "react"; -import "./reporte.css"; -import axios from "axios"; -import Pregunta9 from "../pregunta9/page"; -export default function Page() { - const [report, setReport] = useState(); - - async function Report() { - const res = await axios.get("https"); - setReport(res.data); - } - - return ( -
- {/* Panel izquierdo: título, buscador y tabla */} -
-
-

REPORTE

-
- -
- - -
- -
- {/* Aquí irá tu tabla real */} -

Tabla de equipos...

-
-
- - {/* Panel derecho: filtros + botón descargar */} -
-
-
-

Filtro

-
- - - - - - - - - - - - - -
- - -
- -
- - -
- -
- ); -} diff --git a/src/app/(Administrador)/reporteNOValido/reporte.css b/src/app/(Administrador)/reporteNOValido/reporte.css deleted file mode 100644 index 3bd0b48..0000000 --- a/src/app/(Administrador)/reporteNOValido/reporte.css +++ /dev/null @@ -1,169 +0,0 @@ -/* Contenedor principal del reporte */ -.reporte-layout { - display: flex; - flex-wrap: wrap; - gap: 50px; - padding: 20px; - max-width: 1400px; - margin: 0 20px; -} - -/* Panel izquierdo: contenedor + tabla */ -.panel-izquierdo { - flex: 1; - min-width: 300px; /* evita que se colapse demasiado en móviles */ -} - -/* Panel derecho: filtro */ -.panel-derecho { - width: 320px; /* ancho fijo razonable para filtros */ - min-width: 280px; -} - -.titulo-reporte { - font-weight: bold; - font-size: 24px; - text-align: center; - margin-bottom: 15px; - color: #0056b3; -} - -/* Buscador */ -form[action="/buscar"] { - display: flex; - gap: 10px; - margin-bottom: 20px; - align-items: center; - flex-wrap: wrap; -} - -form[action="/buscar"] input { - padding: 8px 12px; - border: 1px solid #ccc; - border-radius: 5px; - font-size: 16px; - flex: 1; - min-width: 200px; -} - -form[action="/buscar"] button { - background-color: #0056b3; - color: white; - border: none; - padding: 8px 16px; - border-radius: 5px; - cursor: pointer; - font-size: 16px; -} - -form[action="/buscar"] button:hover { - background-color: #0056b3; -} - -/* Tabla de reporte */ -.tabla-rec { - border: 2px solid #0056b3; - border-radius: 10px; - padding: 15px; - background-color: #f9f9f9; - min-height: 400px; - width: 100%; - box-sizing: border-box; -} - -/* Filtro */ -.filtro-rec { - border: 2px solid #0056b3; - border-radius: 10px; - padding: 15px; - background-color: #f9f9f9; - font-family: Arial, sans-serif; - width: 100%; - box-sizing: border-box; -} - -.filtro-rec .titulo-rec { - font-weight: bold; - margin-top: 0; - margin-bottom: 10px; - color: #0056b3; -} - -.filtro-rec label { - display: block; - margin-top: 12px; - font-weight: bold; - font-size: 14px; -} - -.filtro-rec select { - width: 100%; - padding: 8px; - margin-top: 4px; - border: 1px solid #0056b3; - border-radius: 5px; - font-size: 14px; -} - -/* Botones del filtro */ -.botones-filtro { - display: flex; - gap: 10px; - margin-top: 20px; -} - -.botones-filtro .aplicar, -.botones-filtro .limpiar { - flex: 1; - padding: 8px; - border: none; - border-radius: 4px; - color: white; - font-size: 14px; - cursor: pointer; -} - -.botones-filtro .aplicar { - background-color: #0056b3; -} - -.botones-filtro .limpiar { - background-color: #ffb700; - color: #0056b3; - font-weight: bold; -} - -/* Botón descargar */ -.boton-descargar { - margin-top: 25px; - padding: 10px 20px; - font-size: 16px; - border: none; - background-color: #0056b3; - color: white; - border-radius: 4px; - cursor: pointer; - width: 100%; -} - -/* Responsive: en pantallas pequeñas (iPad portrait, etc.) */ -@media (max-width: 768px) { - .reporte-layout { - flex-direction: column; - align-items: center; - } - - .panel-derecho { - width: 100%; - max-width: 500px; - } - - .panel-izquierdo { - width: 100%; - max-width: 500px; - } - - .boton-descargar { - max-width: 500px; - } -} diff --git a/src/components/AgregarEquipo.tsx b/src/components/AgregarEquipo.tsx index fbbb6d2..f08e605 100644 --- a/src/components/AgregarEquipo.tsx +++ b/src/components/AgregarEquipo.tsx @@ -10,7 +10,7 @@ import { SO_POR_EQUIPO } from "@/data/so_por_equipo"; import { PROCESADORES_POR_EQUIPO } from "@/data/procesadores"; import { useRouter } from "next/navigation"; import "../app/styles/layout/agregarEquipo.scss"; - interface FormData { +interface FormData { inventario: string; serie: string; lugar: string; @@ -25,8 +25,8 @@ import "../app/styles/layout/agregarEquipo.scss"; id_uso: number; id_marca: number; id_periferico: number; - id_laboratorio: number | null; // ✅ ahora acepta null - id_proyecto: number | null; // ✅ ahora acepta null + id_laboratorio: number | null; + id_proyecto: number | null; isImpresora: boolean; } export default function Page() { @@ -70,7 +70,6 @@ export default function Page() { } }, [inventario]); - // Interfaces interface TipoUso { id_uso: number; @@ -190,7 +189,7 @@ export default function Page() { } }; fetchProcesador(); - }, []); // Ya no depende de tiposEquipo (si la API los da todos juntos) + }, []); useEffect(() => { const fetchPerifericos = async () => { @@ -203,7 +202,12 @@ export default function Page() { const response = await axios.get(`${api_url}/equipos/perifericos`, { headers, }); - setPerifericos(response.data); + + const ordenados = response.data.sort((a: any, b: any) => + a.periferico.localeCompare(b.periferico) + ); + + setPerifericos(ordenados); } catch (err) { console.error(err); toast.error("No se pudieron cargar los periféricos"); @@ -265,18 +269,18 @@ export default function Page() { setFormData((prev) => { let newValue: string | number | null | boolean = value; -if (field.startsWith("id_")) { - if (value === "" || value === 0) { - // Para campos opcionales, usamos null en lugar de 0 - if (field === "id_laboratorio" || field === "id_proyecto") { - newValue = null; - } else { - newValue = 0; - } - } else { - newValue = Number(value); - } -} + if (field.startsWith("id_")) { + if (value === "" || value === 0) { + // Para campos opcionales, usamos null en lugar de 0 + if (field === "id_laboratorio" || field === "id_proyecto") { + newValue = null; + } else { + newValue = 0; + } + } else { + newValue = Number(value); + } + } if (field === "id_tipo_equipo") { const idTipoEquipo = Number(value); const tipoSeleccionado = tiposEquipo.find( @@ -380,8 +384,15 @@ if (field.startsWith("id_")) { await axios.post(`${api_url}/equipos/crear`, dataToSend, { headers }); toast.success("Equipo guardado correctamente"); router.push("/escaner"); - } catch (err) { + } catch (err: any) { console.error(err); + + if (err.response && err.response.status === 400) { + const mensaje = err.response.data?.message || "El equipo ya 1existe"; + toast.error(mensaje); + return; + } + toast.error("Error al guardar el equipo"); } }; @@ -605,7 +616,6 @@ if (field.startsWith("id_")) {
+
*/}
); From 9c4b47422532c8a0a02bc7e3e95f1089a3ea038f Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Fri, 21 Nov 2025 08:33:42 -0600 Subject: [PATCH 14/26] fixed update and create machine and added button to dowload excel --- src/app/(Administrador)/perifericos/page.tsx | 21 ++++----- src/components/AgregarEquipo.tsx | 4 +- src/components/Dowload/Reporte.tsx | 43 ++++++++++++++++++ src/components/Dowload/style.module.css | 47 ++++++++++++++++++++ src/components/Editar.tsx | 15 ++++--- 5 files changed, 111 insertions(+), 19 deletions(-) create mode 100644 src/components/Dowload/Reporte.tsx create mode 100644 src/components/Dowload/style.module.css diff --git a/src/app/(Administrador)/perifericos/page.tsx b/src/app/(Administrador)/perifericos/page.tsx index 82a6752..f60e798 100644 --- a/src/app/(Administrador)/perifericos/page.tsx +++ b/src/app/(Administrador)/perifericos/page.tsx @@ -7,11 +7,9 @@ import Pregunta2EP from "@/components/Perifericos/Pregunta2EP"; import Pregunta4EP from "@/components/Perifericos/Pregunta4EP"; import Pregunta5EP from "@/components/Perifericos/Pregunta5EP"; import "../../styles/layout/reporte.scss"; +import DownloadReporteXLSX from "@/components/Dowload/Reporte"; -type PreguntaKey = - | "pregunta1" - | "pregunta4" - | "pregunta7"; +type PreguntaKey = "pregunta1" | "pregunta4" | "pregunta7"; const LABELS: Record = { pregunta1: "Impresoras", @@ -30,16 +28,21 @@ export default function Page() { - ) + ); case "pregunta4": return ( <> - ) + ); case "pregunta7": - return ; + return ( + <> + + + + ); default: return (
@@ -66,9 +69,7 @@ export default function Page() { ))}
-
- {renderPregunta()} -
+
{renderPregunta()}
diff --git a/src/components/AgregarEquipo.tsx b/src/components/AgregarEquipo.tsx index f08e605..8d5232e 100644 --- a/src/components/AgregarEquipo.tsx +++ b/src/components/AgregarEquipo.tsx @@ -385,10 +385,8 @@ export default function Page() { toast.success("Equipo guardado correctamente"); router.push("/escaner"); } catch (err: any) { - console.error(err); - if (err.response && err.response.status === 400) { - const mensaje = err.response.data?.message || "El equipo ya 1existe"; + const mensaje = err.response.data?.message || "El equipo ya existe"; toast.error(mensaje); return; } diff --git a/src/components/Dowload/Reporte.tsx b/src/components/Dowload/Reporte.tsx new file mode 100644 index 0000000..6b542cb --- /dev/null +++ b/src/components/Dowload/Reporte.tsx @@ -0,0 +1,43 @@ +"use client"; + +import styles from "./style.module.css"; +import Cookies from "js-cookie"; + +export default function DownloadReporteXLSX() { + const handleDownload = async () => { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + + try { + const response = await fetch( + "https://venus.acatlan.unam.mx/censo_test/equipos/reporteXLSX",{headers} + ); + + if (!response.ok) { + throw new Error("Error al descargar el archivo"); + } + + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + + const a = document.createElement("a"); + a.href = url; + a.download = "reporte.xlsx"; + document.body.appendChild(a); + a.click(); + a.remove(); + + window.URL.revokeObjectURL(url); + } catch (error) { + console.error(error); + alert("Hubo un problema al descargar el archivo."); + } + }; + + return ( + + ); +} diff --git a/src/components/Dowload/style.module.css b/src/components/Dowload/style.module.css new file mode 100644 index 0000000..f44b599 --- /dev/null +++ b/src/components/Dowload/style.module.css @@ -0,0 +1,47 @@ +.downloadBtn { + display: flex; + align-items: center; + gap: 8px; + background: #1a73e8; + color: white; + border: none; + padding: 10px 16px; + cursor: pointer; + border-radius: 6px; + font-size: 14px; + font-weight: 600; + transition: background 0.2s ease; +} + +.downloadBtn:hover { + background: #1459b3; +} + +/* Icono con css puro */ +.icon { + width: 18px; + height: 18px; + position: relative; +} + +.icon::before { + content: ""; + width: 3px; + height: 10px; + background: white; + position: absolute; + left: 7px; + top: 0; +} + +.icon::after { + content: ""; + width: 10px; + height: 10px; + border-left: 3px solid white; + border-bottom: 3px solid white; + transform: rotate(-45deg); + position: absolute; + left: 4px; + top: 8px; +} diff --git a/src/components/Editar.tsx b/src/components/Editar.tsx index b1dbb4d..080a202 100644 --- a/src/components/Editar.tsx +++ b/src/components/Editar.tsx @@ -108,7 +108,6 @@ export default function Editar() { const api_url = process.env.NEXT_PUBLIC_API_URL; const mostrarCamposComputadora = Number(formData.id_tipo_equipo) !== 9; - // 🔹 Cargar catálogos useEffect(() => { const fetchCatalogos = async () => { const token = Cookies.get("token"); @@ -194,8 +193,12 @@ export default function Editar() { marca: { id_marca: number; marca: string }; periferico: { id_periferico: number; periferico: string }; observaciones?: string; - id_laboratorio?: number; - id_proyecto?: number; + laboratorio:{ + id_laboratorio?: number; + } + proyecto:{ + id_proyecto?: number; + } } const fetchEquipo = async () => { @@ -245,8 +248,8 @@ export default function Editar() { id_adscripcion: equipo.adscripcion?.id_adscripcion || 0, lugar: equipo.lugar || "", id_periferico: equipo.periferico?.id_periferico || 0, - id_laboratorio: equipo.id_laboratorio || 0, - id_proyecto: equipo.id_proyecto || 0, + id_laboratorio: equipo.laboratorio?.id_laboratorio || 0, + id_proyecto: equipo.proyecto?.id_proyecto || 0, fechaMovimiento: equipo.fechaMovimiento || "", responsable, }); @@ -390,7 +393,7 @@ export default function Editar() { headers, }); toast.success("Equipo actualizado correctamente"); - // router.push("/escaner"); + router.push("/escaner"); } catch (error) { console.error("Error al guardar:", error); toast.error("Hubo un error al guardar el equipo."); From 19db5ec5cbb48a4d351519520166c37f040f080e Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Fri, 21 Nov 2025 08:43:38 -0600 Subject: [PATCH 15/26] added redirect based in type user --- package-lock.json | 10 ++++++++++ package.json | 1 + src/app/login/Login.tsx | 17 +++++++++++++---- src/app/styles/layout/pregunta7.scss | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 25b4aa4..89613e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@zxing/library": "^0.21.3", "axios": "^1.13.2", "js-cookie": "^3.0.5", + "jwt-decode": "^4.0.0", "next": "16.0.2", "react": "19.2.0", "react-dom": "19.2.0", @@ -4978,6 +4979,15 @@ "node": ">=4.0" } }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", diff --git a/package.json b/package.json index 4bb973a..809aa92 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@zxing/library": "^0.21.3", "axios": "^1.13.2", "js-cookie": "^3.0.5", + "jwt-decode": "^4.0.0", "next": "16.0.2", "react": "19.2.0", "react-dom": "19.2.0", diff --git a/src/app/login/Login.tsx b/src/app/login/Login.tsx index 58124ae..cb75a5d 100644 --- a/src/app/login/Login.tsx +++ b/src/app/login/Login.tsx @@ -7,6 +7,7 @@ import Image from "next/image"; import axios from "axios"; import { useRouter } from "next/navigation"; import toast from "react-hot-toast"; +import { jwtDecode } from "jwt-decode"; export default function Login() { const [nombre, setNombre] = useState(""); @@ -31,7 +32,18 @@ export default function Login() { const { token } = response.data; document.cookie = `token=${token}; path=/; SameSite=Strict`; - router.push("/escaner"); + + const decoded: any = jwtDecode(token); + const tipo = decoded?.tipoUsuario; + + if (tipo === 2) { + router.push("/escaner"); + } else if (tipo === 1) { + router.push("/equipoComputo"); + } else { + toast.error("Tipo de usuario no válido"); + } + } catch (err) { if (axios.isAxiosError(err)) { if (err.response) { @@ -79,9 +91,6 @@ export default function Login() { - - {/* Olvidaste Contraseña? */} - {/* Crear Cuenta */}
diff --git a/src/app/styles/layout/pregunta7.scss b/src/app/styles/layout/pregunta7.scss index ce8fbdb..8919808 100644 --- a/src/app/styles/layout/pregunta7.scss +++ b/src/app/styles/layout/pregunta7.scss @@ -47,7 +47,7 @@ table { } thead th { - background-color: #0056b3; + background-color: #003e79; color: #fff; text-align: left; padding: 14px; From d8282a4dc8661a71aaf1d1024924dc9a22beb9f2 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Fri, 21 Nov 2025 10:33:36 -0600 Subject: [PATCH 16/26] added termic printer and scanner printer --- src/components/Perifericos/Pregunta1EP.tsx | 49 +++++++++++++++------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/src/components/Perifericos/Pregunta1EP.tsx b/src/components/Perifericos/Pregunta1EP.tsx index 98a57dc..34694f3 100644 --- a/src/components/Perifericos/Pregunta1EP.tsx +++ b/src/components/Perifericos/Pregunta1EP.tsx @@ -14,7 +14,8 @@ interface EquiposImpresion { laserAltoVolumenColor: string; impresora3D: string; plotter: string; - // credencial: string; + credencial: string; + termica: string; } export default function Pregunta1EP() { @@ -28,7 +29,8 @@ export default function Pregunta1EP() { laserAltoVolumenColor: "0", impresora3D: "0", plotter: "0", - // credencial: "0", + credencial: "0", + termica: "0", }); const api_url = process.env.NEXT_PUBLIC_API_URL; @@ -54,7 +56,8 @@ export default function Pregunta1EP() { laserAltoVolumenColor: "0", impresora3D: "0", plotter: "0", - // credencial: "0", + credencial: "0", + termica: "0", }; data.forEach((item: any) => { @@ -92,9 +95,12 @@ export default function Pregunta1EP() { case "3D": valores.impresora3D = total; break; - // case "IMPRESORA CREDENCIALES": - // valores.credencial = total; - // break; + case "IMPRESORA CREDENCIALES": + valores.credencial = total; + break; + case "IMPRESORA TÉRMICA": + valores.termica = total; + break; case "PLOTTER": valores.plotter = total; break; @@ -154,6 +160,17 @@ export default function Pregunta1EP() { />
+
+ + +
+
+
+ + +
+
- - {/*
- - -
*/}
); From 1f4bdf5b978583e5ec9aa88409790d7d14c3f1bf Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Fri, 21 Nov 2025 10:36:33 -0600 Subject: [PATCH 17/26] change grid and names --- src/components/Perifericos/Pregunta1EP.tsx | 4 ++-- src/components/Perifericos/pregunta1EP.module.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Perifericos/Pregunta1EP.tsx b/src/components/Perifericos/Pregunta1EP.tsx index 34694f3..820d711 100644 --- a/src/components/Perifericos/Pregunta1EP.tsx +++ b/src/components/Perifericos/Pregunta1EP.tsx @@ -161,7 +161,7 @@ export default function Pregunta1EP() {
- +
- + Date: Fri, 21 Nov 2025 11:29:47 -0600 Subject: [PATCH 18/26] added pregunta 8 and edited styles --- .../(Administrador)/equipoComputo/page.tsx | 8 +- src/app/styles/layout/BarNavigation.scss | 4 +- src/app/styles/layout/BarNavigationAdmin.scss | 4 +- src/app/styles/layout/reporte.scss | 3 +- src/components/Equipo_Computo/Pregunta1.tsx | 5 +- src/components/Equipo_Computo/Pregunta2.tsx | 8 +- src/components/Perifericos/Pregunta7EP.tsx | 58 +++--- src/components/Perifericos/Pregunta8.tsx | 167 ++++++++++++++++++ 8 files changed, 216 insertions(+), 41 deletions(-) create mode 100644 src/components/Perifericos/Pregunta8.tsx diff --git a/src/app/(Administrador)/equipoComputo/page.tsx b/src/app/(Administrador)/equipoComputo/page.tsx index c0a2c20..15fc4f2 100644 --- a/src/app/(Administrador)/equipoComputo/page.tsx +++ b/src/app/(Administrador)/equipoComputo/page.tsx @@ -7,6 +7,7 @@ import Pregunta3 from "@/components/Equipo_Computo/Pregunta3"; import Pregunta7EP from "@/components/Perifericos/Pregunta7EP"; import Pregunta9 from "@/components/Equipo_Computo/Pregunta9"; import "../../styles/layout/reporte.scss"; +import Pregunta8 from "@/components/Perifericos/Pregunta8"; type PreguntaKey = | "pregunta1" @@ -44,7 +45,12 @@ export default function Page() { case "pregunta3": return ; case "pregunta7EP": - return ; + return ( + <> + + + + ); case "pregunta9": return ; default: diff --git a/src/app/styles/layout/BarNavigation.scss b/src/app/styles/layout/BarNavigation.scss index 081ca7e..a001dfd 100644 --- a/src/app/styles/layout/BarNavigation.scss +++ b/src/app/styles/layout/BarNavigation.scss @@ -21,7 +21,7 @@ cursor: pointer; width: auto; transition: background-color 0.3s ease; - font-size: 1.5rem; + font-size: 1rem; } .menuToggle { @@ -88,7 +88,7 @@ align-items: center; justify-content: center; color: #383838; - font-size: 2rem; + font-size: 1.5rem; } .links { diff --git a/src/app/styles/layout/BarNavigationAdmin.scss b/src/app/styles/layout/BarNavigationAdmin.scss index 2291f9b..7213c37 100644 --- a/src/app/styles/layout/BarNavigationAdmin.scss +++ b/src/app/styles/layout/BarNavigationAdmin.scss @@ -21,7 +21,7 @@ cursor: pointer; width: auto; transition: background-color 0.3s ease; - font-size: 1.5rem; + font-size: 1rem; } .menuToggle { @@ -88,7 +88,7 @@ align-items: center; justify-content: center; color: #383838; - font-size: 2rem; + font-size: 1.5rem; } .links { diff --git a/src/app/styles/layout/reporte.scss b/src/app/styles/layout/reporte.scss index 505c16e..c0efb70 100644 --- a/src/app/styles/layout/reporte.scss +++ b/src/app/styles/layout/reporte.scss @@ -88,11 +88,12 @@ .data-table_reporte { display: flex; flex-direction: column; - gap: 10px; + gap: 20px; justify-content: center; padding: 20px; background-color: #f5f5f7; + text-align: center; border: none; min-height: 300px; animation: fadein 0.2s ease; diff --git a/src/components/Equipo_Computo/Pregunta1.tsx b/src/components/Equipo_Computo/Pregunta1.tsx index 8ae966d..d2cb113 100644 --- a/src/components/Equipo_Computo/Pregunta1.tsx +++ b/src/components/Equipo_Computo/Pregunta1.tsx @@ -170,9 +170,8 @@ export default function Pregunta1() {
Censo de equipos de cómputo
- 1. Desglose en cada renglón, el número de equipos de cómputo dedicado - por cada categoría enlistada, de acuerdo con el perfil de usuario al que - se destina su uso primordialmente. * + Número de equipos de cómputo + por cada categoría enlistada, de acuerdo con el perfil de usuario.
diff --git a/src/components/Equipo_Computo/Pregunta2.tsx b/src/components/Equipo_Computo/Pregunta2.tsx index 5414df3..ced4338 100644 --- a/src/components/Equipo_Computo/Pregunta2.tsx +++ b/src/components/Equipo_Computo/Pregunta2.tsx @@ -57,9 +57,9 @@ export default function Pregunta2() { const token = Cookies.get("token"); const headers = {Authorization: `Bearer ${token}`}; axios - .get("https://venus.acatlan.unam.mx/censo_test/equipos/reporte/tipoEquipos_sistemasOperativos",{headers}) // ← TU API AQUI + .get("https://venus.acatlan.unam.mx/censo_test/equipos/reporte/tipoEquipos_sistemasOperativos",{headers}) .then((res) => { - const json = res.data; // Tu JSON con 5 arreglos + const json = res.data; const formatted: PlatformData = { "pc-desktop": transformPlatform(json[0]), @@ -85,10 +85,6 @@ export default function Pregunta2() { Censo de equipos — Sistemas Operativos
-
- Presione cada pestaña para ver la información de las plataformas. -
-
{/* Tabs */}
diff --git a/src/components/Perifericos/Pregunta7EP.tsx b/src/components/Perifericos/Pregunta7EP.tsx index 5901232..406a6e3 100644 --- a/src/components/Perifericos/Pregunta7EP.tsx +++ b/src/components/Perifericos/Pregunta7EP.tsx @@ -1,6 +1,8 @@ "use client"; import React, { useState, useEffect } from "react"; +import axios from "axios"; +import Cookies from "js-cookie"; import "../../app/styles/layout/pregunta7.scss"; interface Dato { @@ -8,29 +10,6 @@ interface Dato { cantidad: number; } -const datosSimulados: Dato[] = [ - { nombre: "AULA DE ROBÓTICA 101", cantidad: 18 }, - { nombre: "LAB DE QUÍMICA 201", cantidad: 25 }, - { nombre: "LAB DE FÍSICA 202", cantidad: 30 }, - { nombre: "LAB DE PROGRAMACIÓN 301", cantidad: 40 }, - { nombre: "AULA DE DISEÑO 102", cantidad: 22 }, - { nombre: "LAB ELECTRÓNICA 204", cantidad: 35 }, - { nombre: "LAB COMPUTACIÓN 305", cantidad: 28 }, - { nombre: "AULA INTERACTIVA 106", cantidad: 15 }, - { nombre: "LAB DE INNOVACIÓN 307", cantidad: 33 }, - { nombre: "SALA DE CONFERENCIAS A", cantidad: 12 }, - { nombre: "LAB DE MECATRÓNICA 308", cantidad: 45 }, - { nombre: "LAB DE INTELIGENCIA ARTIFICIAL 309", cantidad: 38 }, - { nombre: "LAB DE REDES 310", cantidad: 27 }, - { nombre: "SALA MULTIMEDIA B", cantidad: 20 }, - { nombre: "LAB DE BIOLOGÍA 205", cantidad: 26 }, - { nombre: "LAB DE MECÁNICA 210", cantidad: 32 }, - { nombre: "AULA DE INGLÉS 110", cantidad: 19 }, - { nombre: "SALA DE DOCENTES", cantidad: 14 }, - { nombre: "LAB DE BIG DATA 311", cantidad: 36 }, - { nombre: "LAB DE CIBERSEGURIDAD 312", cantidad: 29 }, -]; - export default function Pregunta7EP() { const [data, setData] = useState([]); const [currentPage, setCurrentPage] = useState(1); @@ -38,8 +17,25 @@ export default function Pregunta7EP() { const [sortColumn, setSortColumn] = useState(null); const [sortAsc, setSortAsc] = useState(true); + const api_url = process.env.NEXT_PUBLIC_API_URL; + useEffect(() => { - setData(datosSimulados); + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + + axios + .get(`${api_url}/equipos/reporte/contar_laboratorio`, { headers }) + .then((res) => { + const formato: Dato[] = res.data.map((item: any) => ({ + nombre: item.laboratorio || "SIN NOMBRE", + cantidad: item.total || 0, + })); + + setData(formato); + }) + .catch((err) => { + console.error("Error cargando datos:", err); + }); }, []); const sortedData = React.useMemo(() => { @@ -80,6 +76,10 @@ export default function Pregunta7EP() { return (
+
+ Numero de laboratorios. +
+
Mostrar @@ -99,7 +99,10 @@ export default function Pregunta7EP() { -
handleSort("nombre")}> + handleSort("nombre")} + style={{ textAlign: "center" }} + > Nombre del laboratorio o aula {sortColumn === "nombre" && ( - handleSort("cantidad")}> + handleSort("cantidad")} + style={{ textAlign: "center" }} + > Cantidad {sortColumn === "cantidad" && ( ([]); + const [currentPage, setCurrentPage] = useState(1); + const [recordsPerPage, setRecordsPerPage] = useState(10); + const [sortColumn, setSortColumn] = useState(null); + const [sortAsc, setSortAsc] = useState(true); + + const api_url = process.env.NEXT_PUBLIC_API_URL; + + useEffect(() => { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + + axios + .get(`${api_url}/equipos/reporte/contar_proyecto`, { headers }) + .then((res) => { + const formato: Dato[] = res.data.map((item: any) => ({ + nombre: item.proyecto || "SIN PROYECTO", + cantidad: Number(item.total) || 0, + })); + + setData(formato); + }) + .catch((err) => { + console.error("Error cargando datos:", err); + }); + }, []); + + const sortedData = React.useMemo(() => { + if (!sortColumn) return data; + return [...data].sort((a, b) => { + if (a[sortColumn] < b[sortColumn]) return sortAsc ? -1 : 1; + if (a[sortColumn] > b[sortColumn]) return sortAsc ? 1 : -1; + return 0; + }); + }, [data, sortColumn, sortAsc]); + + const paginatedData = React.useMemo(() => { + const start = (currentPage - 1) * recordsPerPage; + return sortedData.slice(start, start + recordsPerPage); + }, [sortedData, currentPage, recordsPerPage]); + + const totalPages = Math.ceil(sortedData.length / recordsPerPage); + + const handleSort = (column: keyof Dato) => { + if (sortColumn === column) { + setSortAsc(!sortAsc); + } else { + setSortColumn(column); + setSortAsc(true); + } + setCurrentPage(1); + }; + + const handleRecordsPerPageChange = ( + e: React.ChangeEvent + ) => { + setRecordsPerPage(Number(e.target.value)); + setCurrentPage(1); + }; + + const startItem = (currentPage - 1) * recordsPerPage + 1; + const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length); + + return ( +
+
Numero de proyectos.
+
+
+ Mostrar + + registros +
+
+ Mostrando {startItem} al {endItem} de {sortedData.length} resultados +
+
+ +
+ + + + + + + + + + + {paginatedData.map((item, index) => ( + + + + + ))} + +
handleSort("nombre")} + style={{ textAlign: "center" }} + > + Proyecto + {sortColumn === "nombre" && ( + orden + )} + handleSort("cantidad")} + style={{ textAlign: "center" }} + > + Cantidad + {sortColumn === "cantidad" && ( + orden + )} +
{item.nombre}{item.cantidad}
+
+ +
+ + + {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( + + ))} + + +
+
+ ); +} From 97ef0add392107e7d6daffffc76bf3c4f10325f4 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Fri, 21 Nov 2025 12:11:37 -0600 Subject: [PATCH 19/26] fixed % --- .../(Administrador)/equipoComputo/page.tsx | 12 +- src/app/styles/layout/pregunta7.scss | 9 + src/components/Equipo_Computo/Pregunta7.tsx | 176 ++++++++++-------- src/components/Equipo_Computo/Pregunta9.tsx | 15 +- src/components/Equipo_Computo/pregunta10.tsx | 5 +- src/components/Perifericos/Pregunta7EP.tsx | 9 +- src/components/Perifericos/Pregunta8.tsx | 8 + 7 files changed, 129 insertions(+), 105 deletions(-) diff --git a/src/app/(Administrador)/equipoComputo/page.tsx b/src/app/(Administrador)/equipoComputo/page.tsx index 15fc4f2..a325f36 100644 --- a/src/app/(Administrador)/equipoComputo/page.tsx +++ b/src/app/(Administrador)/equipoComputo/page.tsx @@ -14,6 +14,7 @@ type PreguntaKey = | "pregunta2" | "pregunta3" | "pregunta7EP" + | "pregunta8" | "pregunta9"; const LABELS: Record = { @@ -21,6 +22,7 @@ const LABELS: Record = { pregunta2: "Sistema Operativo", pregunta3: "Plataforma y tipo procesador", pregunta7EP: "Laboratorios", + pregunta8:"Proyectos", pregunta9: "Generales", }; @@ -30,6 +32,7 @@ const TAB_BACKGROUNDS: Record = { pregunta2: "bg-gray", pregunta3: "bg-gray", pregunta7EP: "bg-gray", + pregunta8:"bg-gray", pregunta9: "bg-blue", }; @@ -45,12 +48,9 @@ export default function Page() { case "pregunta3": return ; case "pregunta7EP": - return ( - <> - - - - ); + return + case "pregunta8": + return ; case "pregunta9": return ; default: diff --git a/src/app/styles/layout/pregunta7.scss b/src/app/styles/layout/pregunta7.scss index 8919808..63c695c 100644 --- a/src/app/styles/layout/pregunta7.scss +++ b/src/app/styles/layout/pregunta7.scss @@ -110,6 +110,15 @@ tr:nth-child(even) { } } +.total-labs { + margin-top: 20px; + padding: 10px; + font-size: 18px; + text-align: center; + background: #fff; + border-radius: 8px; +} + @media (max-width: 768px) { .controls { flex-direction: column; diff --git a/src/components/Equipo_Computo/Pregunta7.tsx b/src/components/Equipo_Computo/Pregunta7.tsx index 0064981..ed3c7d0 100644 --- a/src/components/Equipo_Computo/Pregunta7.tsx +++ b/src/components/Equipo_Computo/Pregunta7.tsx @@ -1,99 +1,113 @@ "use client"; -import React, { useState, useEffect } from "react"; -import axios from "axios"; + +import { useState, useEffect } from "react"; import Cookies from "js-cookie"; +import axios from "axios"; import "./pregunta7.css"; -interface AntiguedadItem { - antiguedad: string; - total: number; - porcentaje?: string; -} +type AntiguedadItem = { + antiguedad: string | null; + total: number | string; +}; -interface RespuestaAntiguedad { +type RespuestaAntiguedad = { impresion: AntiguedadItem[]; digitalizacion: AntiguedadItem[]; -} +}; export default function Pregunta7() { const [datos, setDatos] = useState([ - { nombre: "Impresión", valores: ["0.00", "0.00", "0.00", "0.00"] }, - { nombre: "Digitalización", valores: ["0.00", "0.00", "0.00", "0.00"] }, + { nombre: "Impresión", valores: ["0.00", "0.00", "0.00", "0.00", "0.00"] }, + { + nombre: "Digitalización", + valores: ["0.00", "0.00", "0.00", "0.00", "0.00"], + }, ]); + const [loading, setLoading] = useState(true); + const api_url = process.env.NEXT_PUBLIC_API_URL; - const calcularTotal = (valores: string[]) => - valores.reduce((acc, val) => acc + (Number(val) || 0), 0); + // ------------------------------ + // TRANSFORMADOR (maneja null) + // ------------------------------ + const transformarDatos = (items: AntiguedadItem[]): string[] => { + let menores2 = 0; + let entre2_3 = 0; + let entre4_5 = 0; + let mayores6 = 0; + let notfound = 0; + for (const item of items) { + const total = Number(item.total) || 0; + const antig = item.antiguedad ? item.antiguedad.toUpperCase().trim() : null; + + switch (antig) { + case "MENORES DE 2": + menores2 += total; + break; + case "ENTRE 2 Y 3": + entre2_3 += total; + break; + case "ENTRE 4 Y 5": + entre4_5 += total; + break; + case "ENTRE 6 Y MAYORES": + mayores6 += total; + break; + default: + notfound += total; // incluye null + } + } + + const total = menores2 + entre2_3 + entre4_5 + mayores6 + notfound; + + if (total === 0) return ["0.00", "0.00", "0.00", "0.00", "0.00"]; + + const pct = (v: number) => ((v / total) * 100).toFixed(2); + + return [ + pct(menores2), + pct(entre2_3), + pct(entre4_5), + pct(mayores6), + pct(notfound), + ]; + }; + + // ------------------------------ + // CARGA DE DATOS + // ------------------------------ useEffect(() => { const token = Cookies.get("token"); - const headers = { Authorization: `Bearer ${token}` }; axios - .get(`${api_url}/equipos/reporte/contar_perifericos_antiguedad`, { - headers, - }) + .get( + `${api_url}/equipos/reporte/contar_perifericos_antiguedad`, + { + headers: { Authorization: `Bearer ${token}` }, + } + ) .then((res) => { - const data: RespuestaAntiguedad = res.data; + const { impresion, digitalizacion } = res.data; - const orden = [ - "MENORES DE 2", - "ENTRE 2 Y 3", - "ENTRE 4 Y 5", - "MAYOR A 6", - ]; - - const nuevaTabla = [ - { nombre: "Impresión", totales: [0, 0, 0, 0] }, - { nombre: "Digitalización", totales: [0, 0, 0, 0] }, - ]; - - if (Array.isArray(data.impresion)) { - data.impresion.forEach((item) => { - const antig = item.antiguedad.toUpperCase().trim(); - const i = orden.indexOf(antig); - if (i !== -1) nuevaTabla[0].totales[i] = Number(item.total) || 0; - }); - } - - if (Array.isArray(data.digitalizacion)) { - data.digitalizacion.forEach((item) => { - const antig = item.antiguedad.toUpperCase().trim(); - const i = orden.indexOf(antig); - if (i !== -1) nuevaTabla[1].totales[i] = Number(item.total) || 0; - }); - } - - const tablaConPorcentajes = nuevaTabla.map((fila) => { - const totalFila = fila.totales.reduce((a, b) => a + b, 0); - - let valores = ["0", "0", "0", "0"]; - - if (totalFila > 0) { - valores = fila.totales.map((v) => - ((v / totalFila) * 100).toFixed(2) - ); - } - - return { nombre: fila.nombre, valores }; - }); - - setDatos(tablaConPorcentajes); + setDatos([ + { nombre: "Impresión", valores: transformarDatos(impresion) }, + { nombre: "Digitalización", valores: transformarDatos(digitalizacion) }, + ]); }) - .catch((err) => { - console.error("Error cargando datos:", err); - }); + .catch((err) => console.error("Error cargando datos:", err)) + .finally(() => setLoading(false)); }, []); + const calcularTotalFila = (valores: string[]) => + valores.reduce((t, v) => t + Number(v), 0); + + if (loading) return
Cargando datos...
; + return (
-
- Censo de equipos periféricos - Estado del equipo periférico (impresión y - digitalización.) -
- -
+
Antigüedad que tienen los equipos periféricos del área universitaria.
@@ -101,36 +115,34 @@ export default function Pregunta7() { - + + + - {datos.map((fila, filaIndex) => { - const total = calcularTotal(fila.valores); + {datos.map((fila, idx) => { + const total = calcularTotalFila(fila.valores); return ( - + - {fila.valores.map((valor, colIndex) => ( - ))} - diff --git a/src/components/Equipo_Computo/Pregunta9.tsx b/src/components/Equipo_Computo/Pregunta9.tsx index 7fdeeae..bd89769 100644 --- a/src/components/Equipo_Computo/Pregunta9.tsx +++ b/src/components/Equipo_Computo/Pregunta9.tsx @@ -1,16 +1,15 @@ "use client"; -import React, { useState, useEffect } from "react"; +import { useState, useEffect } from "react"; import Cookies from "js-cookie"; import axios from "axios"; import "./pregunta9.css"; -import Pregunta4 from "./Pregunta_4"; import Pregunta10 from "./pregunta10"; type AntiguedadItem = { antiguedad: string | null; total: string; - porcentaje: string; // lo ignoramos + porcentaje: string; }; type ApiResponse = { @@ -26,12 +25,6 @@ export default function Pregunta9() { { nombre: "Alto Rendimiento", valores: ["0.00", "0.00", "0.00", "0.00","0.00"] }, ]); - const [garantia, setGarantia] = useState({ - escritorio: "", - portatil: "", - altoRendimiento: "", - }); - const [loading, setLoading] = useState(true); // Transforma los datos del backend al formato de 4 columnas con % calculados @@ -48,7 +41,7 @@ export default function Pregunta9() { const total = Number(item.total) || 0; switch (item.antiguedad) { - case "MENOR A 2": + case "MENORES DE 2": menores2 += total; break; case "ENTRE 2 Y 3": @@ -57,7 +50,7 @@ export default function Pregunta9() { case "ENTRE 4 Y 5": entre4_6 += total; break; - case "MAYORES DE 6": + case "ENTRE 6 Y MAYORES": mayores6 += total; break; // Cualquier otro valor (aunque no debería haber) lo meteríamos en mayores6 diff --git a/src/components/Equipo_Computo/pregunta10.tsx b/src/components/Equipo_Computo/pregunta10.tsx index a396b9d..e629041 100644 --- a/src/components/Equipo_Computo/pregunta10.tsx +++ b/src/components/Equipo_Computo/pregunta10.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useState, useEffect } from "react"; +import { useState, useEffect } from "react"; import axios from "axios"; import Cookies from "js-cookie"; import "./pregunta10.css"; @@ -37,7 +37,6 @@ export default function Pregunta10() { }) .catch((err) => { console.error("Error al cargar datos de garantía", err); - // Opcional: establecer valores por defecto en caso de error setGarantia({ escritorio: "0", portatil: "0", altoRendimiento: "0" }); }) .finally(() => { @@ -75,7 +74,7 @@ export default function Pregunta10() { diff --git a/src/components/Perifericos/Pregunta7EP.tsx b/src/components/Perifericos/Pregunta7EP.tsx index 406a6e3..967663d 100644 --- a/src/components/Perifericos/Pregunta7EP.tsx +++ b/src/components/Perifericos/Pregunta7EP.tsx @@ -73,12 +73,11 @@ export default function Pregunta7EP() { const startItem = (currentPage - 1) * recordsPerPage + 1; const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length); + const totalLaboratorios = data.reduce((sum, item) => sum + Number(item.cantidad), 0); return (
-
- Numero de laboratorios. -
+
Numero de laboratorios.
@@ -138,6 +137,10 @@ export default function Pregunta7EP() {
% Antiguedad de los equipos% Antigüedad de los equipos Menor a 2 años Entre 2 y 3 años Entre 4 y 5 años Mayor a 6 añosNo registrados Total
{fila.nombre} + {fila.valores.map((v, c) => ( +
- + %
100 ? "total-error" : "" - }`} - > + 100.1 ? "total-error" : ""}`}> {total.toFixed(2)}%
+
+ Total de laboratorios: {totalLaboratorios} +
+
+
+ Total de proyecto: {totalLaboratorios} +
+
-
From c4383a4d6bc314fdd95c4781e351c6c4cc5a149d Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Mon, 24 Nov 2025 16:51:20 -0600 Subject: [PATCH 22/26] sort marca --- src/components/AgregarEquipo.tsx | 7 +++- src/components/BarNavigation.tsx | 3 +- src/components/BarNavigationAdmin.tsx | 5 ++- src/components/Equipo_Computo/Pregunta1.tsx | 2 +- src/middleware.ts | 18 -------- src/proxy.ts | 46 +++++++++++++++++++++ 6 files changed, 58 insertions(+), 23 deletions(-) delete mode 100644 src/middleware.ts create mode 100644 src/proxy.ts diff --git a/src/components/AgregarEquipo.tsx b/src/components/AgregarEquipo.tsx index 8d5232e..87ca839 100644 --- a/src/components/AgregarEquipo.tsx +++ b/src/components/AgregarEquipo.tsx @@ -155,8 +155,13 @@ export default function Page() { axios.get(`${api_url}/equipos/laboratorios`, { headers }), axios.get(`${api_url}/equipos/proyectos`, { headers }), ]); + + const ordenados = marcasRes.data.sort((a: Marca, b: Marca) => + a.marca.localeCompare(b.marca) + ); + setTiposUso(usosRes.data); - setMarcas(marcasRes.data); + setMarcas(ordenados); setEstados(estadosRes.data); setAdscripciones(adscripcionesRes.data); setTiposEquipo(tiposEquipoRes.data); diff --git a/src/components/BarNavigation.tsx b/src/components/BarNavigation.tsx index bf2a026..ffc898f 100644 --- a/src/components/BarNavigation.tsx +++ b/src/components/BarNavigation.tsx @@ -13,7 +13,8 @@ function BarNavigation() { const cerrarSesion = () => { if (typeof window !== "undefined") { - localStorage.removeItem("loggedIn"); + document.cookie = + "token=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict"; router.push("/"); } setOpenMenu(false); diff --git a/src/components/BarNavigationAdmin.tsx b/src/components/BarNavigationAdmin.tsx index 55a1f25..68063b5 100644 --- a/src/components/BarNavigationAdmin.tsx +++ b/src/components/BarNavigationAdmin.tsx @@ -13,7 +13,8 @@ function BarNavigation() { const cerrarSesion = () => { if (typeof window !== "undefined") { - localStorage.removeItem("loggedIn"); + document.cookie = + "token=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict"; router.push("/"); } setOpenMenu(false); @@ -43,7 +44,7 @@ function BarNavigation() { Equipo de Computo -
  • +
  • Perifericos diff --git a/src/components/Equipo_Computo/Pregunta1.tsx b/src/components/Equipo_Computo/Pregunta1.tsx index d2cb113..20e5a6d 100644 --- a/src/components/Equipo_Computo/Pregunta1.tsx +++ b/src/components/Equipo_Computo/Pregunta1.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useState, useEffect } from "react"; +import { useState, useEffect } from "react"; import axios from "axios"; import Cookies from "js-cookie"; import "./pregunta1.1.css"; diff --git a/src/middleware.ts b/src/middleware.ts deleted file mode 100644 index 1579800..0000000 --- a/src/middleware.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NextResponse } from "next/server"; -import type { NextRequest } from "next/server"; - -export function middleware(request: NextRequest) { - const token = request.cookies.get("token")?.value; - - if (!token) { - console.log("No hay token, redirigiendo a la página de inicio de sesión"); - return NextResponse.redirect(new URL("/", request.url)); - } - - return NextResponse.next(); -} - -export const config = { - matcher: ["/escaner","/agregarEquipo","/editar","/crearCuenta","/equipoComputo","/perifericos"], -}; -//IO diff --git a/src/proxy.ts b/src/proxy.ts new file mode 100644 index 0000000..1e55642 --- /dev/null +++ b/src/proxy.ts @@ -0,0 +1,46 @@ +import { NextResponse } from "next/server"; +import type { NextRequest } from "next/server"; +import { jwtDecode } from "jwt-decode"; + +const permisos: Record = { + 1: ["/crearCuenta", "/equipoComputo", "/perifericos","/escaner", "/agregarEquipo", "/editar"], + 2: ["/escaner", "/agregarEquipo", "/editar"], +}; + +export function proxy(request: NextRequest) { + const token = request.cookies.get("token")?.value; + + if (!token) { + return NextResponse.redirect(new URL("/", request.url)); + } + + const decoded: any = jwtDecode(token); + const tipoUsuario = decoded.tipoUsuario + + if (!tipoUsuario) { + return NextResponse.redirect(new URL("/", request.url)); + } + + const pathname = new URL(request.url).pathname; + + const rutasPermitidas = permisos[tipoUsuario] ?? []; + + if (!rutasPermitidas.includes(pathname)) { + console.log(`Usuario tipo ${tipoUsuario} NO autorizado para: ${pathname}`); + return NextResponse.redirect(new URL("/", request.url)); + } + + return NextResponse.next(); +} + +export const config = { + matcher: [ + "/escaner", + "/agregarEquipo", + "/editar", + "/crearCuenta", + "/equipoComputo", + "/perifericos", + ], +}; +//IO From f89f09600149f4eca1f788378a46e0f7f7ad7520 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Tue, 25 Nov 2025 12:47:54 -0600 Subject: [PATCH 23/26] now dont count 'no aplica' --- src/components/Perifericos/Pregunta7EP.tsx | 7 +++++-- src/components/Perifericos/Pregunta8.tsx | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/Perifericos/Pregunta7EP.tsx b/src/components/Perifericos/Pregunta7EP.tsx index 967663d..5424cec 100644 --- a/src/components/Perifericos/Pregunta7EP.tsx +++ b/src/components/Perifericos/Pregunta7EP.tsx @@ -73,8 +73,11 @@ export default function Pregunta7EP() { const startItem = (currentPage - 1) * recordsPerPage + 1; const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length); - const totalLaboratorios = data.reduce((sum, item) => sum + Number(item.cantidad), 0); - + const totalLaboratorios = data.reduce( + (sum, item) => sum + (item.nombre != "NO_APLICA" ? Number(item.cantidad):0), + 0 + ); + return (
    Numero de laboratorios.
    diff --git a/src/components/Perifericos/Pregunta8.tsx b/src/components/Perifericos/Pregunta8.tsx index c31bec8..2c5d370 100644 --- a/src/components/Perifericos/Pregunta8.tsx +++ b/src/components/Perifericos/Pregunta8.tsx @@ -74,7 +74,7 @@ export default function Pregunta8() { const startItem = (currentPage - 1) * recordsPerPage + 1; const endItem = Math.min(startItem + recordsPerPage - 1, sortedData.length); const totalLaboratorios = data.reduce( - (sum, item) => sum + Number(item.cantidad), + (sum, item) => sum + (item.nombre != "NO_APLICA" ? Number(item.cantidad):0), 0 ); From 7e43591f8a8daf707d3b83e61f9f26f5f3f3f155 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Wed, 26 Nov 2025 10:42:45 -0600 Subject: [PATCH 24/26] removed tipo de equipo and removed laboratorios and proyectos to periferico --- src/app/(Administrador)/cambiarPass/page.tsx | 1 - src/app/(Administrador)/crearCuenta/page.tsx | 1 - src/components/AgregarEquipo.tsx | 73 ++++++------ src/components/Editar.tsx | 113 +++++++++++-------- src/components/Equipo_Computo/pregunta10.css | 2 +- 5 files changed, 108 insertions(+), 82 deletions(-) diff --git a/src/app/(Administrador)/cambiarPass/page.tsx b/src/app/(Administrador)/cambiarPass/page.tsx index 089183d..cb9dc5f 100644 --- a/src/app/(Administrador)/cambiarPass/page.tsx +++ b/src/app/(Administrador)/cambiarPass/page.tsx @@ -4,7 +4,6 @@ import { useState } from "react"; import axios from "axios"; import toast from "react-hot-toast"; import "../../styles/layout/ForgotPasswordPage.scss"; -import Link from "next/link"; export default function Page() { const [nombre, setNombre] = useState(""); diff --git a/src/app/(Administrador)/crearCuenta/page.tsx b/src/app/(Administrador)/crearCuenta/page.tsx index f6eb483..69545d4 100644 --- a/src/app/(Administrador)/crearCuenta/page.tsx +++ b/src/app/(Administrador)/crearCuenta/page.tsx @@ -5,7 +5,6 @@ import "../../styles/layout/login.scss"; import "../../styles/base/globales.scss"; import axios from "axios"; -import { useRouter } from "next/navigation"; import toast from "react-hot-toast"; import Cookies from "js-cookie"; diff --git a/src/components/AgregarEquipo.tsx b/src/components/AgregarEquipo.tsx index 87ca839..a0972b2 100644 --- a/src/components/AgregarEquipo.tsx +++ b/src/components/AgregarEquipo.tsx @@ -615,41 +615,46 @@ export default function Page() { {/* Columna Derecha */}
    - {/* Laboratorio */} -
    - - -
    + {mostrarCamposComputadora && ( + <> +
    + + +
    - {/* Proyecto */} -
    - - -
    +
    + + +
    + + )} {/* Lugar */}
    diff --git a/src/components/Editar.tsx b/src/components/Editar.tsx index 080a202..8ca3fef 100644 --- a/src/components/Editar.tsx +++ b/src/components/Editar.tsx @@ -95,7 +95,9 @@ export default function Editar() { const [tiposEquipo, setTiposEquipo] = useState([]); const [laboratorios, setLaboratorios] = useState([]); const [proyectos, setProyectos] = useState([]); - const [sistemasOperativos, setSistemasOperativos] = useState([]); + const [sistemasOperativos, setSistemasOperativos] = useState< + SistemaOperativo[] + >([]); const [procesadores, setProcesadores] = useState([]); const [perifericos, setPerifericos] = useState([]); const [adscripcionLabel, setAdscripcionLabel] = useState(""); @@ -193,12 +195,12 @@ export default function Editar() { marca: { id_marca: number; marca: string }; periferico: { id_periferico: number; periferico: string }; observaciones?: string; - laboratorio:{ + laboratorio: { id_laboratorio?: number; - } - proyecto:{ + }; + proyecto: { id_proyecto?: number; - } + }; } const fetchEquipo = async () => { @@ -256,8 +258,20 @@ export default function Editar() { setAdscripcionLabel(equipo.adscripcion?.adscripcion); setId(equipo.id_equipo); - } catch (error) { - console.error("Error al obtener el equipo:", error); + } catch (err) { + if (axios.isAxiosError(err)) { + if (err.response) { + toast.error( + err.response.data?.message || "Error al crear la cuenta" + ); + } else if (err.request) { + toast.error("No se pudo conectar con el servidor"); + } else { + toast.error("Ocurrió un error inesperado"); + } + } else { + toast.error("Ocurrió un error inesperado"); + } toast.error("No se pudo cargar la información del equipo."); } }; @@ -334,7 +348,8 @@ export default function Editar() { return; } - {/*if (!formData.id_laboratorio) { + { + /*if (!formData.id_laboratorio) { toast.error("Laboratorio no seleccionado"); return; } @@ -342,7 +357,8 @@ export default function Editar() { if (!formData.id_proyecto) { toast.error("Proyecto no seleccionado"); return; - }*/} + }*/ + } if (formData.id_tipo_equipo == 9) { if (!formData.id_periferico) { @@ -381,7 +397,7 @@ export default function Editar() { lugar: formData.lugar, id_sistema_operativo: formData.id_sistema_operativo, id_tipo_uso: formData.id_uso, - id_periferico:formData.id_periferico, + id_periferico: formData.id_periferico, serie: formData.serie, modelo: formData.modelo, id_marca: formData.id_marca, @@ -466,7 +482,9 @@ export default function Editar() { const first = data[0]; setFormData((prev) => ({ ...prev, - responsable: `${first.nombre ?? ""} ${first.apellidos ?? ""}`.trim(), + responsable: `${first.nombre ?? ""} ${ + first.apellidos ?? "" + }`.trim(), })); } else { toast.error( @@ -553,7 +571,7 @@ export default function Editar() { />
    -
    + {/*
    -
    +
    */}
    @@ -592,9 +610,7 @@ export default function Editar() { ))}
    -
    - {/* Columna 2 */}
    @@ -731,39 +747,46 @@ export default function Editar() { placeholder="Selecciona una Adscripción" />
    -
    - - -
    - + {mostrarCamposComputadora && ( +
    + + +
    + )}
    {/* Columna 3 */}
    -
    - - -
    + {mostrarCamposComputadora && ( +
    + + +
    + )}