'use client'; import { useRouter } from "next/navigation"; import { toast } from "sonner"; import Header from "@/components/Header"; import Footer from "@/components/Footer"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { cn } from "@/lib/utils"; import { KeyRound, Phone, FileKey2 } from "lucide-react"; import PasswordLoginMode from "./components/PasswordLoginMode"; import PhoneLoginMode from "./components/SmsLoginMode"; import { useEffect, useState } from "react"; import LoginBG from './components/login-bg.jpg'; import Image from "next/image"; import { handleAPIError } from "@/lib/api/common"; import { useUserStore } from "@/store/useUserStore"; import PasskeyLoginPage from "./components/PasskeyLoginPage"; export type SubmitMode = 'password' | 'sms' | 'passkey'; export default function Login() { const router = useRouter(); const [loginMode, setLoginMode] = useState('password'); const userStore = useUserStore(); useEffect(() => { if (userStore.user) { router.replace('/console') } }, [userStore]) return ( <>
{ e.preventDefault(); const formData = new FormData(e.currentTarget); let handler = (await (async () => { if (loginMode === 'password') { return import('./components/PasswordLoginMode'); } else if (loginMode === 'sms') { return import('./components/SmsLoginMode'); } else if (loginMode === 'passkey') { return import('./components/PasskeyLoginPage'); } })())?.handleSubmit; if (!handler) { return toast.error('登陆状态异常'); } handler(formData).then((data) => { useUserStore.getState().setUser(data.user); // to main page router.replace('/console'); }, (e) => { handleAPIError(e, ({ message }) => toast.error(message)) }) }}>
{loginMode === 'password' ? : null} {loginMode === 'sms' ? : null} {loginMode === 'passkey' ? : null}
或者使用
{ ([['password', KeyRound], ['sms', Phone], ['passkey', FileKey2]] as const).map(([mode, Icon]) => ( )) }
还没有账号?{" "} setLoginMode('sms')}> 注册
Image
登录即表示您同意我们的{" "} 服务条款 {" "} 和{" "} 隐私政策