import React, { useState, useRef, useEffect } from 'react'; import { Form, Input, Button, message } from 'antd'; import { Link, useLocation, useNavigate } from 'react-router-dom'; import DepartmentSelect from '../components/models/department/department-select'; import { useAuth } from '../providers/auth-provider'; import SineWave from '../components/presentation/animation/sine-wave'; const LoginPage: React.FC = () => { const [showLogin, setShowLogin] = useState(true); const [registerLoading, setRegisterLoading] = useState(false); const { login, isAuthenticated, signup } = useAuth(); const loginFormRef = useRef(null); const registerFormRef = useRef(null); const location = useLocation(); const navigate = useNavigate(); const onFinishLogin = async (values: any) => { try { const { username, password } = values; await login(username, password); message.success('登录成功!'); } catch (err) { message.error('用户名或密码错误!'); console.error(err); } }; const onFinishRegister = async (values: any) => { setRegisterLoading(true); const { username, password, phoneNumber } = values; try { await signup(username, password, phoneNumber); message.success('注册成功!'); setShowLogin(true); loginFormRef.current.submit(); } catch (err) { console.error(err); } finally { setRegisterLoading(false); } }; useEffect(() => { if (isAuthenticated) { const params = new URLSearchParams(location.search); const redirectUrl = params.get('redirect_url') || '/'; navigate(redirectUrl, { replace: true }); } }, [isAuthenticated, location]); return (
{showLogin ? ( <>
登录
) : (
注册
({ validator(_, value) { if (!value || getFieldValue('password') === value) { return Promise.resolve(); } return Promise.reject(new Error('两次输入的密码不一致')); } }) ]}>
)}
{showLogin ? (
没有账号?
点击注册一个属于你自己的账号吧!
setShowLogin(false)} className="hover:translate-y-1 my-8 p-2 text-center rounded-xl border-white border hover:bg-white hover:text-primary hover:shadow-xl hover:cursor-pointer transition-all" > 注册
) : (
注册小贴士
请认真填写用户信息哦!
setShowLogin(true)} className="hover:translate-y-1 my-8 rounded-xl text-center border-white border p-2 hover:bg-white hover:text-primary hover:shadow-xl hover:cursor-pointer transition-all" > 返回登录
)}
); }; export default LoginPage;