'use client' import { Suspense, useState } from 'react' import { useRouter, useSearchParams } from 'next/navigation' import { signIn } from '@/lib/auth-client' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Spinner } from '@/components/ui/spinner' function LoginForm() { const router = useRouter() const searchParams = useSearchParams() const callbackUrl = searchParams.get('callbackUrl') || '/levels' const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState('') const [isLoading, setIsLoading] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError('') setIsLoading(true) try { const result = await signIn.email({ email, password, }) if (result.error) { setError(result.error.message || '登录失败,请检查邮箱和密码') setIsLoading(false) return } router.push(callbackUrl) router.refresh() } catch { setError('登录失败,请稍后重试') setIsLoading(false) } } return ( Meme Studio 谐音梗小游戏运营平台
{error && (
{error}
)}
setEmail(e.target.value)} required disabled={isLoading} />
setPassword(e.target.value)} required disabled={isLoading} />
) } function LoginLoading() { return ( Meme Studio 谐音梗小游戏运营平台 ) } export default function LoginPage() { return (
}>
) }