"use client"; import { useState } from "react"; import { signIn } from "next-auth/react"; import { useSearchParams } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; export function LoginForm({ hasKeycloak, callbackUrl: callbackUrlProp, onSuccess, }: { hasKeycloak: boolean; callbackUrl?: string; onSuccess?: () => void; }) { const searchParams = useSearchParams(); const callbackUrl = callbackUrlProp ?? searchParams.get("callbackUrl") ?? "/dashboard"; const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(""); const res = await signIn("credentials", { username, password, redirect: false, callbackUrl, }); if (res?.error) { setError("登录失败,请检查用户名和密码"); } else { onSuccess?.(); const redirectUrl = callbackUrl.startsWith("http") ? callbackUrl : window.location.origin + callbackUrl; window.location.href = redirectUrl; } } return (