From d82c064018e8e67c1073279a96a354944840ac09 Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Sat, 26 Apr 2025 12:59:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=99=BB=E5=BD=95page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tone-page-web/components/login-form.tsx | 205 +++++++++++++++++++++--- 1 file changed, 179 insertions(+), 26 deletions(-) diff --git a/tone-page-web/components/login-form.tsx b/tone-page-web/components/login-form.tsx index f70d3f9..eeb3026 100644 --- a/tone-page-web/components/login-form.tsx +++ b/tone-page-web/components/login-form.tsx @@ -5,9 +5,64 @@ import { Card, CardContent } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { KeyRound, Phone, Mail } from "lucide-react" -import { useState } from "react" +import { useCallback, useState } from "react" import { REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp" import { InputOTP, InputOTPGroup, InputOTPSlot } from "./ui/input-otp"; +import LoginBG from './login-bg.jpg'; +import { toast } from "sonner"; + +export type SubmitMode = 'password' | 'phone' | 'email' | 'register'; +export type LoginFormData = { + type: SubmitMode; + account?: string; + password?: string; + phone?: string; + email?: string; + code?: string; +} + +export type SendCodeMode = 'phone' | 'email'; +export type SendCodeFormData = { + type: SendCodeMode; + codeType: 'login' | 'register'; + phone?: string; + email?: string; +} + + +export function useLoginForm(onSubmit: (data: LoginFormData) => Promise, onSendCode: (data: SendCodeFormData) => Promise) { + const [loginMode, setLoginMode] = useState('password'); + + const handleForgetPassword = useCallback(() => { + toast.warning('开发中,敬请期待!暂时可通过发送邮件至网站管理员进行密码重置。'); + }, []); + + const handleSubmit = useCallback(async (formData: LoginFormData) => { + try { + await onSubmit({ ...formData, type: loginMode }); + } catch (error) { + toast.error('登录失败,请重试'); + } + }, [loginMode, onSubmit]); + + const handleSendCode = useCallback(async (formData: SendCodeFormData) => { + try { + await onSendCode(formData); + } catch (error) { + toast.error('发送验证码失败,请重试'); + } + }, [loginMode, onSendCode]); + + return { + loginMode, + setLoginMode, + handleForgetPassword, + handleSendCode, + handleSubmit + }; +} + + function LoginHeader() { return ( @@ -35,14 +90,15 @@ function RegisterHeader() { ) } -function PasswordMode() { +function PasswordLoginMode({ forgetPassword }: { forgetPassword: () => void }) { return ( <>
忘记密码?
- + + + +