diff --git a/src/app/(Administrador)/crearCuenta/page.tsx b/src/app/(Administrador)/crearCuenta/page.tsx index 5cd4415..b3cc2c2 100644 --- a/src/app/(Administrador)/crearCuenta/page.tsx +++ b/src/app/(Administrador)/crearCuenta/page.tsx @@ -1,8 +1,8 @@ "use client"; import { useState } from "react"; -import "../styles/layout/login.scss"; // puedes usar los mismos estilos -import "../styles/base/globales.scss"; +import "../../styles/layout/login.scss"; +import "../../styles/base/globales.scss"; import Link from "next/link"; import axios from "axios"; @@ -29,23 +29,21 @@ function CrearCuenta() { setLoading(true); try { - const response = await axios.post( - `${process.env.NEXT_PUBLIC_API_URL}/auth/register`, - { - nombre, - correo, - contraseña: password, - } - ); + // const response = await axios.post( + // `${process.env.NEXT_PUBLIC_API_URL}/auth/register`, + // { + // nombre, + // correo, + // contraseña: password, + // } + // ); toast.success("Cuenta creada correctamente"); router.push("/"); // redirige al login } catch (err: unknown) { if (axios.isAxiosError(err)) { if (err.response) { - toast.error( - err.response.data?.message || "Error al crear la cuenta" - ); + 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 { @@ -57,7 +55,6 @@ function CrearCuenta() { } finally { setLoading(false); } - }; return ( @@ -116,9 +113,7 @@ function CrearCuenta() { ¿Ya tienes cuenta? Inicia sesión - - ); } -export default CrearCuenta; \ No newline at end of file +export default CrearCuenta; diff --git a/src/app/(Administrador)/forgotPassword/page.tsx b/src/app/(Administrador)/forgotPassword/page.tsx index 98e3cf1..ff68644 100644 --- a/src/app/(Administrador)/forgotPassword/page.tsx +++ b/src/app/(Administrador)/forgotPassword/page.tsx @@ -4,7 +4,8 @@ import { useState } from "react"; import axios from "axios"; import { useRouter } from "next/navigation"; import toast from "react-hot-toast"; -import "../styles/base/globales.scss"; // ajusta ruta si tu proyecto la tiene en otro sitio +import "../../styles/base/globales.scss"; // ajusta ruta si tu proyecto la tiene en otro sitio +import Link from "next/link"; export default function ForgotPasswordPage() { const [email, setEmail] = useState(""); @@ -26,27 +27,38 @@ export default function ForgotPasswordPage() { setLoading(true); const res = await axios.post("/api/auth/forgot-password", { email }); if (res.status === 200) { - toast.success("Si existe esa cuenta, recibirás un correo con instrucciones."); + toast.success( + "Si existe esa cuenta, recibirás un correo con instrucciones." + ); // Opcional: redirigir al login después de enviar setTimeout(() => router.push("/"), 1200); } else { toast.error("Ocurrió un error. Intenta de nuevo."); } - } catch (error:any ) { + } catch (error) { // manejar mensajes de error desde el servidor si vienen - const msg = error?.response?.data?.message ?? "Error al enviar el correo."; - toast.error(msg); + console.log(error); } finally { setLoading(false); } }; return ( -
+

¿Olvidaste tu contraseña?

-

Escribe el correo asociado a tu cuenta y te enviaremos instrucciones para restablecerla.

+

+ Escribe el correo asociado a tu cuenta y te enviaremos instrucciones + para restablecerla. +

-
+ setEmail(e.target.value)} placeholder="tu@correo.com" required - style={{ padding: "0.6rem", borderRadius: 8, border: "1px solid #ccc" }} + style={{ + padding: "0.6rem", + borderRadius: 8, + border: "1px solid #ccc", + }} />
- Recordé mi contraseña — Iniciar sesión + Recordé mi contraseña — Iniciar sesión
diff --git a/src/app/(Operador)/AgregarEquipo/page.tsx b/src/app/(Operador)/AgregarEquipo/page.tsx index 9ba95fb..997b2ea 100644 --- a/src/app/(Operador)/AgregarEquipo/page.tsx +++ b/src/app/(Operador)/AgregarEquipo/page.tsx @@ -22,13 +22,52 @@ export default function Page() { responsable: "", }); - const [tiposUso, setTiposUso] = useState([]); - const [marcas, setMarcas] = useState([]); - const [estados, setEstados] = useState([]); - const [adscripciones, setAdscripciones] = useState([]); - const [tiposEquipo, setTiposEquipo] = useState([]); - const [sistemasOperativos, setSistemasOperativos] = useState([]); - const [procesadores, setProcesadores] = useState([]); + // Tipos de datos + interface TipoUso { + id_tipo_uso: number; + tipo_uso: string; + } + + interface Estado { + id_estado: number; + estado: string; + } + + interface TipoEquipo { + id_tipo_de_equipo: number; + tipo_equipo: string; + } + + interface SistemaOperativo { + id_sistema_operativo: number; + sistema_operativo: string; + } + + interface Procesador { + id_procesador: number; + procesador: string; + } + + interface Marca { + id_marca: number; + tipo_marca: string; + } + + interface Adscripcion { + id_adscripcion: number; + adscripcion: string; + } + + // Estados + const [tiposUso, setTiposUso] = useState([]); + const [marcas, setMarcas] = useState([]); + const [estados, setEstados] = useState([]); + const [adscripciones, setAdscripciones] = useState([]); + const [tiposEquipo, setTiposEquipo] = useState([]); + const [sistemasOperativos, setSistemasOperativos] = useState< + SistemaOperativo[] + >([]); + const [procesadores, setProcesadores] = useState([]); const [suggestions, setSuggestions] = useState({ adscripcion: [] as string[], @@ -68,6 +107,7 @@ export default function Page() { setTiposEquipo(tiposEquipoRes.data); setSistemasOperativos(sistemasOperativosRes.data); setProcesadores(procesadoresRes.data); + console.log(adscripciones); } catch (err) { if (axios.isAxiosError(err)) { if (err.response) { @@ -86,7 +126,7 @@ export default function Page() { }; fetchData(); - }, []); + }, [api_url]); const handleInputChange = (field: string, value: string) => { setFormData((prev) => ({ ...prev, [field]: value })); @@ -98,15 +138,32 @@ export default function Page() { }; const handleGuardar = async () => { - const token = Cookies.get("token"); - const headers = { Authorization: `Bearer ${token}` }; - - await axios.post(`${api_url}/equipos/crear`, formData, { headers }); - toast.success("Equipo guardado"); + try { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + await axios.post(`${api_url}/equipos/crear`, formData, { headers }); + toast.success("Equipo guardado correctamente"); + setFormData({ + serie: "", + marca: "", + modelo: "", + tipoEquipo: "", + estado: "", + sistemaOperativo: "", + procesador: "", + tipoUso: "", + observaciones: "", + adscripcion: "", + lugar: "", + responsable: "", + }); + } catch (err) { + toast.error("Error al guardar el equipo"); + } }; const handleCancelar = () => { - toast.success("Acción cancelada"); + toast.error("Acción cancelada"); }; return ( @@ -119,6 +176,7 @@ export default function Page() {
@@ -154,6 +213,7 @@ export default function Page() {
@@ -171,13 +231,14 @@ export default function Page() {
@@ -187,15 +248,16 @@ export default function Page() { {/* Columna Centro */}
- + @@ -213,8 +275,8 @@ export default function Page() { > {procesadores.map((p) => ( - ))} @@ -230,8 +292,11 @@ export default function Page() { > {sistemasOperativos.map((so) => ( - ))} @@ -242,6 +307,7 @@ export default function Page() {
- {/* Columna Derecha */}
diff --git a/src/app/(Operador)/Escaner/page.tsx b/src/app/(Operador)/Escaner/page.tsx index e1f486a..dcf9124 100644 --- a/src/app/(Operador)/Escaner/page.tsx +++ b/src/app/(Operador)/Escaner/page.tsx @@ -27,7 +27,7 @@ export default function Dashboard() { toast.error("Equipo no encontrado"); } } catch (error) { - toast.error("Equipo no encontrado"); + toast.error(`Equipo no encontrado,${error}`); } }; @@ -42,11 +42,12 @@ export default function Dashboard() { if (data) { router.push(`/Editar?equipoId=${data.id}`); } else { - router.push(`/AgregarEquipo?equipoId=${code}`); + router.push(`/AgregarEquipo?equipoId=${data.id}`); } } catch (error) { - router.push(`/AgregarEquipo?equipoId=${code}`); + toast.error("Error No se encontro el equipo"); } + toast(`${code}`); }; return ( diff --git a/src/app/login/Login.tsx b/src/app/login/Login.tsx index a87dc51..13dec2d 100644 --- a/src/app/login/Login.tsx +++ b/src/app/login/Login.tsx @@ -4,7 +4,6 @@ import { useState } from "react"; import "../styles/layout/login.scss"; import "../styles/base/globales.scss"; import Image from "next/image"; -import Link from "next/link"; import axios from "axios"; import { useRouter } from "next/navigation"; import toast from "react-hot-toast"; diff --git a/src/components/BarcodeScanner.tsx b/src/components/BarcodeScanner.tsx index f3e151e..4e7545a 100644 --- a/src/components/BarcodeScanner.tsx +++ b/src/components/BarcodeScanner.tsx @@ -27,7 +27,6 @@ export default function BarcodeScanner({ onScan }: BarcodeScannerProps) { useEffect(() => { if (!scannerRef.current) return; - // ✅ Sin `any`: usamos un objeto literal tipado implícitamente const config: QuaggaConfig = { inputStream: { name: "Live", @@ -40,19 +39,8 @@ export default function BarcodeScanner({ onScan }: BarcodeScannerProps) { }, }, decoder: { - readers: [ - "code_128_reader", - "code_39_reader", - "code_39_vin_reader", - "ean_reader", - "ean_8_reader", - "upc_reader", - "upc_e_reader", - "i2of5_reader", - "2of5_reader", - "code_93_reader", - ], -}, + readers: ["code_128_reader"], + }, locate: true, }; diff --git a/src/components/Editar.tsx b/src/components/Editar.tsx index 1640d4a..02c2faa 100644 --- a/src/components/Editar.tsx +++ b/src/components/Editar.tsx @@ -10,9 +10,10 @@ import toast from "react-hot-toast"; export default function Editar() { const searchParams = useSearchParams(); - const equipoId = searchParams.get("equipoId"); + const inventario = searchParams.get("equipoId"); const [formData, setFormData] = useState({ + inventario: "", serie: "", marca: "", modelo: "", @@ -27,17 +28,55 @@ export default function Editar() { responsable: "", }); - const [tiposUso, setTiposUso] = useState([]); - const [marcas, setMarcas] = useState([]); - const [estados, setEstados] = useState([]); - const [adscripciones, setAdscripciones] = useState([]); - const [tiposEquipo, setTiposEquipo] = useState([]); - const [sistemasOperativos, setSistemasOperativos] = useState([]); - const [procesadores, setProcesadores] = useState([]); + interface TipoUso { + id_tipo_uso: number; + tipo_uso: string; + } + + interface Estado { + id_estado: number; + estado: string; + } + + interface TipoEquipo { + id_tipo_de_equipo: number; + tipo_equipo: string; + } + + interface SistemaOperativo { + id_sistema_operativo: number; + sistema_operativo: string; + } + + interface Procesador { + id_procesador: number; + procesador: string; + } + + interface Marca { + id_marca: number; + tipo_marca: string; + } + + interface Adscripcion { + id_adscripcion: number; + adscripcion: string; + } + + const [tiposUso, setTiposUso] = useState([]); + const [marcas, setMarcas] = useState([]); + const [estados, setEstados] = useState([]); + const [adscripciones, setAdscripciones] = useState([]); + const [tiposEquipo, setTiposEquipo] = useState([]); + const [sistemasOperativos, setSistemasOperativos] = useState< + SistemaOperativo[] + >([]); + const [procesadores, setProcesadores] = useState([]); const api_url = process.env.NEXT_PUBLIC_API_URL; const mostrarCamposComputadora = formData.tipoEquipo !== "Impresora"; + // 🔹 Cargar catálogos useEffect(() => { const fetchCatalogos = async () => { const token = Cookies.get("token"); @@ -80,26 +119,55 @@ export default function Editar() { useEffect(() => { const fetchEquipo = async () => { + if (!inventario) return; const token = Cookies.get("token"); const headers = { Authorization: `Bearer ${token}` }; try { - const response = await axios.get(`${api_url}/equipos/${equipoId}`, { - headers, + const response = await axios.get( + `${api_url}/equipos/buscar/${inventario}`, + { + headers, + } + ); + + const equipo = response.data; + + setFormData({ + inventario: equipo.inventario || "", + serie: equipo.serie || "", + marca: equipo.marca?.marca || "", // <- relación + modelo: equipo.modelo || "", + tipoEquipo: equipo.tipoEquipo?.tipo || "", + estado: equipo.estado?.estado || "", + sistemaOperativo: equipo.sistemaOperativo?.nombre || "", + procesador: equipo.procesador?.nombre || "", + tipoUso: equipo.tipoUso?.tipo || "", + observaciones: equipo.observaciones || "", + adscripcion: equipo.adscripcion?.adscripcion || "", + lugar: equipo.lugar || "", + responsable: equipo.responsable || "", // <- devuelto por searchResponsable }); - setFormData(response.data); } catch (error) { console.error("Error al obtener el equipo:", error); toast.error("No se pudo cargar la información del equipo."); } }; - if (equipoId) fetchEquipo(); - }, [equipoId]); + fetchEquipo(); + }, [inventario]); + // 🔹 Guardar cambios const handleGuardar = async () => { + const token = Cookies.get("token"); + const headers = { Authorization: `Bearer ${token}` }; + try { - await axios.patch(`${api_url}/equipos/update/${equipoId}`, formData); + await axios.patch( + `${api_url}/equipos/update/${formData.inventario}`, + formData, + { headers } + ); toast.success("Equipo actualizado correctamente"); } catch (error) { console.error("Error al guardar:", error); @@ -115,17 +183,21 @@ export default function Editar() {

- {equipoId ? `Editar Equipo (${equipoId})` : "Agregar Equipo"} + {inventario ? `Editar Equipo (${inventario})` : "Agregar Equipo"}

{/* Columna 1 */}
+
+ + +
+
setFormData({ ...formData, serie: e.target.value }) @@ -143,8 +215,8 @@ export default function Editar() { > {marcas.map((m) => ( - ))} @@ -154,7 +226,6 @@ export default function Editar() { setFormData({ ...formData, modelo: e.target.value }) @@ -170,10 +241,10 @@ export default function Editar() { setFormData({ ...formData, tipoEquipo: e.target.value }) } > - + {tiposEquipo.map((t) => ( - ))} @@ -189,8 +260,8 @@ export default function Editar() { > {estados.map((e) => ( - ))} @@ -207,10 +278,10 @@ export default function Editar() { setFormData({ ...formData, tipoUso: e.target.value }) } > - + {tiposUso.map((t) => ( - ))} @@ -228,8 +299,8 @@ export default function Editar() { > {procesadores.map((p) => ( - ))} @@ -248,8 +319,11 @@ export default function Editar() { > {sistemasOperativos.map((so) => ( - ))} @@ -267,8 +341,8 @@ export default function Editar() { > {adscripciones.map((a) => ( - ))} @@ -276,12 +350,7 @@ export default function Editar() {
- +
@@ -290,7 +359,6 @@ export default function Editar() {