'use client'; import { authApi, verificationApi } from "@/lib/api"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; import Header from "@/app/components/Header"; import Footer from "@/app/components/Footer"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { cn } from "@/lib/utils"; import { KeyRound, Phone, Mail } from "lucide-react"; import EmailLoginMode from "./components/EmailLoginMode"; import PasswordLoginMode from "./components/PasswordLoginMode"; import PhoneLoginMode from "./components/PhoneLoginMode"; import { LoginFormData, SendCodeFormData, SubmitMode } from "./components/types"; import { useCallback, useState } from "react"; import LoginBG from './components/login-bg.jpg'; import Image from "next/image"; export default function Login() { const router = useRouter(); const [loginMode, setLoginMode] = useState('password'); const handleForgetPassword = useCallback(() => { toast.warning('开发中,敬请期待!暂时可通过发送邮件至网站管理员进行密码重置。'); }, []); const handleSendCode = async (data: SendCodeFormData) => { const res = await verificationApi.send({ type: 'login', targetType: data.type, phone: data.phone, email: data.email, }) if (res.statusCode === 200) { toast.success('验证码已发送,请注意查收'); return true; } else { toast.error(res.message || '验证码发送失败,请稍后再试'); return false; } } const handleSubmit = async (data: LoginFormData) => { const res = await authApi.login({ ...data, }); if (res.statusCode === 200 && res.data) { toast.success('登录成功'); localStorage.setItem('token', res.data.token); router.replace('/console'); return true; } else { toast.error(res.message || '登录失败,请稍后再试'); return false; } } return ( <>
{ e.preventDefault(); const formData = new FormData(e.currentTarget); handleSubmit({ type: loginMode, account: formData.get('account')?.toString(), password: formData.get('password')?.toString(), phone: formData.get('phone')?.toString(), email: formData.get('email')?.toString(), code: formData.get('code')?.toString(), }) }}>
{loginMode === 'password' ? : null} {loginMode === 'phone' ? : null} {loginMode === 'email' ? : null}
或者使用
还没有账号?{" "} setLoginMode('phone')}> 注册
Image
登录即表示您同意我们的{" "} 服务条款 {" "} 和{" "} 隐私政策