Vista Escaner y Agregar equipo agregados

This commit is contained in:
jls846
2025-10-25 20:05:16 -06:00
parent 11e253e405
commit 2ea93697f4
17 changed files with 647 additions and 215 deletions
+19 -2
View File
@@ -1,9 +1,12 @@
"use client";
import { useState } from "react";
import { useRouter } from "next/navigation"; // ✅ Importa useRouter
import "../app/styles/layout/BarNavigation.scss";
import Link from "next/link";
function BarNavigation() {
const router = useRouter(); // ✅ Para redirigir
const [openMenu, setOpenMenu] = useState(false);
const [openSubMenu, setOpenSubMenu] = useState<number | null>(null);
@@ -14,9 +17,17 @@ function BarNavigation() {
}
};
const cerrarSesion = () => {
if (typeof window !== "undefined") {
localStorage.removeItem("loggedIn");
router.push("/"); // ✅ Redirige al inicio
}
setOpenMenu(false); // Cierra menú móvil
};
return (
<nav className="barNavigation">
<div className={`menuToggle ${openMenu ? "" : ""}`} onClick={toggleMenu}>
<div className="menuToggle" onClick={toggleMenu}>
<div></div>
<div></div>
<div></div>
@@ -33,9 +44,15 @@ function BarNavigation() {
<span>Agregar equipo</span>
</Link>
</li>
{/* ✅ Botón directo, sin onClick en el <li> */}
<li>
<button className="logout-button" onClick={cerrarSesion}>
Cerrar sesión
</button>
</li>
</ul>
</nav>
);
}
export default BarNavigation;
export default BarNavigation;
-42
View File
@@ -1,42 +0,0 @@
"use client";
import { useEffect, useRef } from "react";
import { BrowserMultiFormatReader } from "@zxing/library";
type Props = { onDetected: (code: string) => void; };
export default function BarcodeScanner({ onDetected }: Props) {
const videoRef = useRef<HTMLVideoElement>(null);
useEffect(() => {
const codeReader = new BrowserMultiFormatReader();
if (!videoRef.current) return;
// Obtener la cámara trasera si existe
codeReader.listVideoInputDevices().then((devices) => {
const backDevice = devices.find(d => d.label.toLowerCase().includes("back"));
const deviceId = backDevice ? backDevice.deviceId : devices[0].deviceId;
// Inicia la cámara inmediatamente
codeReader.decodeFromVideoDevice(deviceId, videoRef.current!, (result) => {
if (result) onDetected(result.getText());
});
}).catch(console.error);
return () => { codeReader.reset(); };
}, [onDetected]);
return (
<video
ref={videoRef}
style={{
width: "100%",
maxWidth: "600px", // Más grande
border: "2px solid #004aad",
borderRadius: "10px"
}}
autoPlay
muted
/>
);
}
+1 -1
View File
@@ -3,7 +3,7 @@
import { useState } from "react";
import "../app/styles/layout/login.scss";
import "../app/styles/base/_globales.scss"; // si tienes estilos globales
import "../app/styles/base/globales.scss";
import Image from "next/image";
import Link from "next/link";