"use client"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { useAuth } from "@/lib/auth"; /** * Acceso al módulo. Valida contra sige_sam_v3.usuario en el backend * (POST /api/proyectos/auth/login), igual que el resto de módulos SAM. * * Estructura idéntica a la de sam-portal (ventas/login.aspx): sidenav azul * sólido #00285d con la marca a la izquierda, y el formulario en .main, * que a partir de 768px se desplaza el 40% del sidenav. */ export default function LoginPage() { const router = useRouter(); const { user, loading, login } = useAuth(); const [idUsuario, setIdUsuario] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(null); const [submitting, setSubmitting] = useState(false); // Si ya hay sesión, no tiene sentido mostrar el login. useEffect(() => { if (!loading && user) router.replace("/inbox"); }, [loading, user, router]); async function handleSubmit(event: React.FormEvent) { event.preventDefault(); if (submitting) return; setError(null); setSubmitting(true); try { await login(idUsuario, password); router.push("/inbox"); } catch (err) { setError(err instanceof Error ? err.message : "Error al ingresar"); setSubmitting(false); } } return (
{/* eslint-disable-next-line @next/next/no-img-element */} Instituto Chileno Norteamericano

Proyectos

Welcome | Bienvenido/a

Gestión de Proyectos

USUARIO | CLAVE
{error && (
{error}
)} setIdUsuario(event.target.value)} className="form-control shadow mb-2" required placeholder="Usuario" autoComplete="username" autoFocus /> setPassword(event.target.value)} className="form-control shadow mb-2" required placeholder="Clave" autoComplete="current-password" />
); }