From bd2d2497bfa3a85e60455ddd4fd20132bac78e22 Mon Sep 17 00:00:00 2001 From: CarlosssFlores <307100636@pcpuma.acatlan.unam.mx> Date: Fri, 26 Sep 2025 02:43:46 -0600 Subject: [PATCH] funcionabilidad de botones componentes y arreglos --- .example.txt | 1 - app/Components/ActivosMantenimiento/Areas.tsx | 74 +++++-- .../ActivosMantenimiento/Equipos.tsx | 52 ++++- app/Components/ActivosMantenimiento/Mesas.tsx | 61 ++++-- .../ProgramSelector/ProgramSelector.tsx | 199 +++++++++--------- 5 files changed, 249 insertions(+), 138 deletions(-) delete mode 100644 .example.txt diff --git a/.example.txt b/.example.txt deleted file mode 100644 index 4b73e25..0000000 --- a/.example.txt +++ /dev/null @@ -1 +0,0 @@ -NEXT_PUBLIC_API_URL= \ No newline at end of file diff --git a/app/Components/ActivosMantenimiento/Areas.tsx b/app/Components/ActivosMantenimiento/Areas.tsx index d5d0da0..16a06e4 100644 --- a/app/Components/ActivosMantenimiento/Areas.tsx +++ b/app/Components/ActivosMantenimiento/Areas.tsx @@ -2,41 +2,83 @@ import { useState } from "react"; export default function Areas() { - const [tiempo, setTiempo] = useState(""); + const [area, setArea] = useState(""); // Área seleccionada + const [activo, setActivo] = useState(false); // Checkbox Activo + const [mantenimiento, setMantenimiento] = useState(false); // Checkbox Mantenimiento + const [mensaje, setMensaje] = useState(""); // Mensaje dinámico - const handleSubmit = (e: React.FormEvent) => { + const handleActualizar = (e: React.FormEvent) => { e.preventDefault(); - console.log("Equipo asignado con tiempo:", tiempo); + + if (!area) { + setMensaje("Selecciona un área antes de actualizar"); + return; + } + + // Crear mensaje dinámico + const estado = []; + if (activo) estado.push("Activo"); + if (mantenimiento) estado.push("Mantenimiento"); + const estadosSeleccionados = estado.length + ? estado.join(" y ") + : "Sin estado"; + + setMensaje(`Área ${area} actualizada con estado: ${estadosSeleccionados}`); + + // Aquí puedes enviar los datos al backend si quieres + console.log({ + area, + activo, + mantenimiento, + }); }; return ( -
- + +
- setArea(e.target.value)}> - - - - - + + + + + -
-
+ + {/* Mensaje dinámico */} + {mensaje &&

{mensaje}

} ); } diff --git a/app/Components/ActivosMantenimiento/Equipos.tsx b/app/Components/ActivosMantenimiento/Equipos.tsx index 43b6f70..9728709 100644 --- a/app/Components/ActivosMantenimiento/Equipos.tsx +++ b/app/Components/ActivosMantenimiento/Equipos.tsx @@ -2,19 +2,53 @@ import { useState } from "react"; function Equipos() { + const [cuenta, setCuenta] = useState(""); const [tiempo, setTiempo] = useState(""); + const [mensaje, setMensaje] = useState(""); - const handleSubmit = (e: React.FormEvent) => { + const handleBuscar = (e: React.FormEvent) => { e.preventDefault(); - console.log("Equipo asignado con tiempo:", tiempo); + if (!cuenta) { + setMensaje("Ingresa un número de cuenta antes de buscar"); + return; + } + setMensaje(`Buscando información del No. de cuenta: ${cuenta}`); + }; + + const handleAsignar = (e: React.FormEvent) => { + e.preventDefault(); + if (!tiempo) { + setMensaje("Selecciona un equipo antes de asignar"); + return; + } + setMensaje(`Equipo asignado con tiempo: ${tiempo} minutos`); }; return ( -
- -
+
+ {/* Formulario Buscar */} + + + setCuenta(e.target.value)} + placeholder="Ingresa el número de cuenta" + /> + + + + {/* Formulario Asignar */} +
+ setTiempo(e.target.value)}> + {/* Select de mesas */} + -
- - + {/* Checkbox Mantenimiento */} +
+
-
+ + {/* Mensaje dinámico */} + {mensaje &&

{mensaje}

}
); } + export default Mesas; diff --git a/app/Components/ProgramSelector/ProgramSelector.tsx b/app/Components/ProgramSelector/ProgramSelector.tsx index d08e070..f32241e 100644 --- a/app/Components/ProgramSelector/ProgramSelector.tsx +++ b/app/Components/ProgramSelector/ProgramSelector.tsx @@ -1,108 +1,111 @@ -// 1. Definimos la interfaz que describe las props del componente -export interface DatosEquipo { - titulo: string; // El título que aparecerá como label - opcion: string[]; // Lista de opciones para el select +"use client"; +import { useState } from "react"; + +interface DatosEquipo { + titulo: string; + opcion: string[]; } -// 2. Ya no necesitas tener "DatosOpciones" dentro de este archivo -// porque el componente debe ser reutilizable, no fijo. +// Lista de programas disponibles +const programas = [ + "3D MAX STUDIO 2014", + "ADOBE CREATIVE SUITE", + "ARCHICAD 20", + "AUDACITY -win - 2.0", + "AUTOCAD", + "CODE-BLOCKS", + "COREL DRAW", + "DEV-C++", + "EVIEWS Enterprise", + "Google Earth", + "INTERNERT", + "MAPLE", + "MATHEMATICA", + "MATLAB", + "Maxima", + "miktex", + "NETBEANS", + "OFFICE 2016", + "PSeint", + "R 3.0.1", + "R Studio", + "SPPS Statiscs", + "STATA 13", + "STATGRAOHICS Centurion XVI", +]; + +// Mapear cada equipo a sus programas (checkboxes que deberían seleccionarse) +const caracteristicasPorEquipo: Record = { + "Equipo 1": ["3D MAX STUDIO 2014", "AUTOCAD", "MATLAB"], + "Equipo 2": ["ADOBE CREATIVE SUITE", "COREL DRAW", "R Studio"], + "Equipo 3": ["ARCHICAD 20", "EVIEWS Enterprise", "SPPS Statiscs"], + "Equipo 4": ["MATHEMATICA", "MAPLE", "Maxima"], + // Agrega más equipos según necesites +}; -// 3. Recibimos las props como un objeto con estructura DatosEquipo function ProgramSelector({ titulo, opcion }: DatosEquipo) { + // Estado del equipo seleccionado + const [equipoSeleccionado, setEquipoSeleccionado] = useState(""); + // Estado de los checkboxes (programas) + const [checkboxes, setCheckboxes] = useState>( + programas.reduce((acc, prog) => ({ ...acc, [prog]: false }), {}) + ); + + // Función al cambiar el select + const handleChangeEquipo = (e: React.ChangeEvent) => { + const equipo = e.target.value; + setEquipoSeleccionado(equipo); + + // Actualizar checkboxes según características del equipo + const nuevosCheckboxes: Record = {}; + programas.forEach((prog) => { + nuevosCheckboxes[prog] = + caracteristicasPorEquipo[equipo]?.includes(prog) || false; + }); + setCheckboxes(nuevosCheckboxes); + }; + + // Guardar cambios (ejemplo) + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + console.log("Equipo:", equipoSeleccionado); + console.log( + "Programas seleccionados:", + Object.keys(checkboxes).filter((p) => checkboxes[p]) + ); + }; + return ( -
-
- {/* Label dinámico con el título que recibimos */} - + + + - {/* Renderizamos UN solo - {opcion.map((op, index) => ( - - ))} - +
+ {programas.map((prog) => ( + + ))} +
- {/* Lista de checkboxes (esto lo podrías optimizar igual con .map) */} -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
+ + ); }