diff --git a/apps/frontend/app/console/login/components/PasswordLoginMode.tsx b/apps/frontend/app/console/login/components/PasswordLoginMode.tsx index 2b0ee47..74eadff 100644 --- a/apps/frontend/app/console/login/components/PasswordLoginMode.tsx +++ b/apps/frontend/app/console/login/components/PasswordLoginMode.tsx @@ -2,16 +2,24 @@ import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import LoginHeader from "./LoginHeader"; import { Label } from "@/components/ui/label" +import { FormEvent, useCallback } from "react"; +import { toast } from "sonner"; +import { AuthAPI } from "@/lib/api/client"; +import { handleAPIError } from "@/lib/api/common"; + +export default function PasswordLoginMode() { + const handleForgetPassword = useCallback(() => { + toast.warning('开发中,敬请期待!暂时可通过发送邮件至网站管理员进行密码重置。'); + }, []); -export default function PasswordLoginMode({ forgetPassword }: { forgetPassword: () => void }) { return ( <>
- +
- + 忘记密码? @@ -38,4 +46,11 @@ export default function PasswordLoginMode({ forgetPassword }: { forgetPassword: ) +} + +export async function handleSubmit(formData: FormData) { + const identifier = formData.get('identifier')?.toString() || ''; + const password = formData.get('password')?.toString() || ''; + + return AuthAPI.loginByPassword(identifier, password) } \ No newline at end of file diff --git a/apps/frontend/app/console/login/page.tsx b/apps/frontend/app/console/login/page.tsx index dc2f49b..9e9e854 100644 --- a/apps/frontend/app/console/login/page.tsx +++ b/apps/frontend/app/console/login/page.tsx @@ -1,5 +1,5 @@ 'use client'; -import { authApi, verificationApi } from "@/lib/api"; +// import { authApi, verificationApi } from "@/lib/api"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; import Header from "@/components/Header"; @@ -7,7 +7,7 @@ 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, Mail } from "lucide-react"; +import { KeyRound, Phone, FileKey2 } from "lucide-react"; import EmailLoginMode from "./components/EmailLoginMode"; import PasswordLoginMode from "./components/PasswordLoginMode"; import PhoneLoginMode from "./components/PhoneLoginMode"; @@ -15,56 +15,53 @@ import { LoginFormData, SendCodeFormData, SubmitMode } from "./components/types" import { useCallback, useState } from "react"; import LoginBG from './components/login-bg.jpg'; import Image from "next/image"; -import { ApiError } from "@/lib/api/fetcher"; +import { handleAPIError } from "@/lib/api/common"; +// import { ApiError } from "@/lib/api/fetcher"; export default function Login() { const router = useRouter(); const [loginMode, setLoginMode] = useState('password'); - const handleForgetPassword = useCallback(() => { - toast.warning('开发中,敬请期待!暂时可通过发送邮件至网站管理员进行密码重置。'); - }, []); + // const handleSendCode = async (data: SendCodeFormData) => { + // try { + // const res = await verificationApi.send({ + // type: 'login', + // targetType: data.type, + // phone: data.phone, + // email: data.email, + // }) - const handleSendCode = async (data: SendCodeFormData) => { - try { - const res = await verificationApi.send({ - type: 'login', - targetType: data.type, - phone: data.phone, - email: data.email, - }) + // if (res) { + // toast.success('验证码已发送,请注意查收'); + // return true; + // } else { + // throw new Error(); + // } + // } catch (error) { + // toast.error((error as ApiError).message || '验证码发送失败,请稍后再试'); + // return false; + // } + // } - if (res) { - toast.success('验证码已发送,请注意查收'); - return true; - } else { - throw new Error(); - } - } catch (error) { - toast.error((error as ApiError).message || '验证码发送失败,请稍后再试'); - return false; - } - } + // const handleSubmit = async (data: LoginFormData) => { + // try { + // const res = await authApi.login({ + // ...data, + // }); - const handleSubmit = async (data: LoginFormData) => { - try { - const res = await authApi.login({ - ...data, - }); - - if (res.token) { - toast.success('登录成功'); - localStorage.setItem('token', res.token); - router.replace('/console'); - return true; - } else { - throw new Error(); - } - } catch (error) { - toast.error((error as ApiError).message || '登录失败,请稍后再试'); - return false; - } - } + // if (res.token) { + // toast.success('登录成功'); + // localStorage.setItem('token', res.token); + // router.replace('/console'); + // return true; + // } else { + // throw new Error(); + // } + // } catch (error) { + // toast.error((error as ApiError).message || '登录失败,请稍后再试'); + // return false; + // } + // } return ( <> @@ -74,23 +71,31 @@ export default function Login() {
-
{ + { 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(), + + let handler = (await (async () => { + if (loginMode === 'password') { + return import('./components/PasswordLoginMode'); + } + })())?.handleSubmit; + if (!handler) { + return toast.error('登陆状态异常'); + } + + handler(formData).then((user) => { + localStorage.setItem('user_profile', JSON.stringify(user)); + // to main page + }, (e) => { + handleAPIError(e, ({ message }) => toast.error(message)) }) }}>
- {loginMode === 'password' ? : null} - {loginMode === 'phone' ? : null} - {loginMode === 'email' ? : null} + {loginMode === 'password' ? : null} + {/* {loginMode === 'phone' ? : null} */} + {/* {loginMode === 'email' ? : null} */}
@@ -105,7 +110,7 @@ export default function Login() {
@@ -142,7 +147,7 @@ export default function Login() {
-
+