import { useEffect, useRef, useState } from "react"; import api from "../helpers/api"; import { validate, ValidatorConfig } from "../helpers/validator"; import useLoading from "../hooks/useLoading"; import { locationService, userService } from "../services"; import toastHelper from "../components/Toast"; import "../less/signin.less"; interface Props {} const validateConfig: ValidatorConfig = { minLength: 4, maxLength: 24, noSpace: true, noChinese: true, }; const Signin: React.FC = () => { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [showAutoSigninAsGuest, setShowAutoSigninAsGuest] = useState(true); const signinBtnsClickLoadingState = useLoading(false); const autoSigninAsGuestBtn = useRef(null); const signinBtn = useRef(null); useEffect(() => { const handleKeyPress = (e: KeyboardEvent) => { if (e.key === "Enter") { autoSigninAsGuestBtn.current?.click(); signinBtn.current?.click(); } }; document.body.addEventListener("keypress", handleKeyPress); return () => { document.body.removeEventListener("keypress", handleKeyPress); }; }, []); const handleUsernameInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setUsername(text); }; const handlePasswordInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setPassword(text); }; const handleSigninBtnsClick = async (action: "signin" | "signup" = "signin") => { if (signinBtnsClickLoadingState.isLoading) { return; } const usernameValidResult = validate(username, validateConfig); if (!usernameValidResult.result) { toastHelper.error("用户名 " + usernameValidResult.reason); return; } const passwordValidResult = validate(password, validateConfig); if (!passwordValidResult.result) { toastHelper.error("密码 " + passwordValidResult.reason); return; } try { signinBtnsClickLoadingState.setLoading(); let actionFunc = api.login; if (action === "signup") { actionFunc = api.signup; } await actionFunc(username, password); const user = await userService.doSignIn(); if (user) { locationService.replaceHistory("/"); } else { toastHelper.error("😟 登录失败"); } } catch (error: any) { console.error(error); toastHelper.error("😟 " + error.message); } signinBtnsClickLoadingState.setFinish(); }; const handleSwitchAccountSigninBtnClick = () => { if (signinBtnsClickLoadingState.isLoading) { return; } setShowAutoSigninAsGuest(false); }; const handleAutoSigninAsGuestBtnClick = async () => { if (signinBtnsClickLoadingState.isLoading) { return; } try { signinBtnsClickLoadingState.setLoading(); await api.login("guest", "123456"); const user = await userService.doSignIn(); if (user) { locationService.replaceHistory("/"); } else { toastHelper.error("😟 登录失败"); } } catch (error: any) { console.error(error); toastHelper.error("😟 " + error.message); } signinBtnsClickLoadingState.setFinish(); }; return (

登录 Memos ✍️

{showAutoSigninAsGuest ? ( <>
👉 快速登录进行体验
已有账号,我要自己登录
) : ( <>
账号
密码
{/* nth */}
/ /
)}
); }; export default Signin;