import React, { useCallback } from 'react' import Icon from '@ant-design/icons' import { Turnstile, TurnstileInstance } from '@marsidev/react-turnstile' import { H_CAPTCHA_SITE_KEY, PERMISSION_LOGIN_SUCCESS, PERMISSION_LOGIN_USERNAME_PASSWORD_ERROR, PERMISSION_USER_DISABLE, PERMISSION_USERNAME_NOT_FOUND, SYSTEM_INVALID_CAPTCHA_CODE } from '@/constants/common.constants' import { useUpdatedEffect } from '@/util/hooks' import { getUserInfo, setToken } from '@/util/auth' import { utcToLocalTime } from '@/util/datetime' import { r_auth_login } from '@/services/auth' import { AppContext } from '@/App' import FitCenter from '@/components/common/FitCenter' import FlexBox from '@/components/common/FlexBox' const SignIn: React.FC = () => { const { refreshRouter } = useContext(AppContext) const navigate = useNavigate() const [searchParams] = useSearchParams() const turnstileRef = useRef() const turnstileRefCallback = useCallback( (node: TurnstileInstance) => { turnstileRef.current = node if (location.pathname === '/login') { turnstileRef.current?.execute() } }, [location.pathname] ) const [isSigningIn, setIsSigningIn] = useState(false) const [captchaCode, setCaptchaCode] = useState('') useUpdatedEffect(() => { if (!isSigningIn) { setCaptchaCode('') turnstileRef.current?.reset() turnstileRef.current?.execute() } }, [isSigningIn]) const handleOnFinish = (loginParam: LoginParam) => { if (isSigningIn) { return } setIsSigningIn(true) if (!captchaCode) { void message.warning('请先通过验证') setIsSigningIn(false) return } void r_auth_login({ account: loginParam.account, password: loginParam.password, captchaCode }) .then((res) => { const response = res.data const { code, data } = response switch (code) { case PERMISSION_LOGIN_SUCCESS: setToken(data?.token ?? '') void message.success('登录成功') setTimeout(() => { void getUserInfo().then((user) => { refreshRouter() if (searchParams.has('redirect')) { navigate(searchParams.get('redirect') ?? '/') } else { navigate('/') } notification.success({ message: '欢迎回来', description: ( <> 你好 {user.userInfo.nickname}
最近登录: {user.lastLoginTime ? `${utcToLocalTime(user.lastLoginTime)}【${ user.lastLoginIp }】` : '无'} ), placement: 'topRight' }) }) }, 1500) break case PERMISSION_USERNAME_NOT_FOUND: case PERMISSION_LOGIN_USERNAME_PASSWORD_ERROR: void message.error( <> 账号密码错误,请重试 ) setIsSigningIn(false) break case PERMISSION_USER_DISABLE: void message.error( <> 该用户已被禁用 ) setIsSigningIn(false) break case SYSTEM_INVALID_CAPTCHA_CODE: void message.error('验证码有误,请重试') setIsSigningIn(false) break default: void message.error( <> 服务器出错了 ) setIsSigningIn(false) } }) .catch(() => { setIsSigningIn(false) }) } return (
欢迎回来
Welcome back
} placeholder={'邮箱/用户名'} disabled={isSigningIn} /> } placeholder={'密码'} disabled={isSigningIn} /> 记住密码 { navigate(`/forget${location.search}`, { replace: true }) }} > 忘记密码? 登    录
) } export default SignIn