import * as React from 'react'; import Avatar from '@mui/material/Avatar'; import Button from '@mui/material/Button'; import CssBaseline from '@mui/material/CssBaseline'; import Link from '@mui/material/Link'; import Grid from '@mui/material/Grid'; import Box from '@mui/material/Box'; import LockOutlinedIcon from '@mui/icons-material/LockOutlined'; import Typography from '@mui/material/Typography'; import Container from '@mui/material/Container'; import { Link as RouterLink } from "react-router-dom"; import { register } from '@/apis/apis' import CheckInput, { refType } from '@/components/CheckInput' import { useState } from 'react'; import Alert from '@mui/material/Alert'; import Snackbar from '@mui/material/Snackbar'; import Loading from '@/components/Loading' import { useNavigate } from "react-router-dom"; import CaptchaWidget from '@/components/CaptchaWidget'; export default function SignUp() { const [regErr, setRegErr] = useState(""); const [loading, setLoading] = useState(false); const navigate = useNavigate(); const [captchaToken, setCaptchaToken] = useState(""); const checkList = React.useRef>(new Map()) const handleSubmit = (event: React.FormEvent) => { event.preventDefault(); if (loading) return setLoading(true) const data = new FormData(event.currentTarget); const d = { email: data.get('email')?.toString(), password: data.get('password')?.toString(), username: data.get("username")?.toString() } if (!Array.from(checkList.current.values()).map(v => v.verify()).reduce((p, v) => (p == true) && (v == true))) { setLoading(false) return } if (captchaToken == "") { setLoading(false) setRegErr("验证码无效") } register(d.email ?? "", d.username ?? "", d.password ?? "", captchaToken). then(() => navigate("/login")). catch(v => [setRegErr(String(v)), console.warn(v)]). finally(() => setLoading(false)) }; return ( 注册 { dom && checkList.current.set("1", dom) }} /> { dom && checkList.current.set("2", dom) }} checkList={[ { errMsg: "长度在 3-16 之间", reg: /^.{3,16}$/ } ]} required fullWidth name="username" label="角色名" autoComplete="username" /> { dom && checkList.current.set("3", dom) }} checkList={[ { errMsg: "长度在 6-50 之间", reg: /^.{6,50}$/ } ]} required fullWidth label="密码" type="password" name="password" autoComplete="new-password" /> 登录 setRegErr("")} > setRegErr("")} severity="error">{regErr} {loading && } ); }