mirror of
				https://github.com/songquanpeng/one-api.git
				synced 2025-11-04 15:53:42 +08:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			6298b83e16
			...
			791f14f25a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					791f14f25a | ||
| 
						 | 
					f9774698e9 | ||
| 
						 | 
					2af6f6a166 | ||
| 
						 | 
					3f06711501 | 
@@ -1,6 +1,7 @@
 | 
			
		||||
package cloudflare
 | 
			
		||||
 | 
			
		||||
var ModelList = []string{
 | 
			
		||||
	"@cf/meta/llama-3.1-8b-instruct",
 | 
			
		||||
	"@cf/meta/llama-2-7b-chat-fp16",
 | 
			
		||||
	"@cf/meta/llama-2-7b-chat-int8",
 | 
			
		||||
	"@cf/mistral/mistral-7b-instruct-v0.1",
 | 
			
		||||
 
 | 
			
		||||
@@ -3,13 +3,13 @@ import { useSelector } from 'react-redux';
 | 
			
		||||
import useRegister from 'hooks/useRegister';
 | 
			
		||||
import Turnstile from 'react-turnstile';
 | 
			
		||||
import { useSearchParams } from 'react-router-dom';
 | 
			
		||||
// import { useSelector } from 'react-redux';
 | 
			
		||||
 | 
			
		||||
// material-ui
 | 
			
		||||
import { useTheme } from '@mui/material/styles';
 | 
			
		||||
import {
 | 
			
		||||
  Box,
 | 
			
		||||
  Button,
 | 
			
		||||
  CircularProgress,
 | 
			
		||||
  FormControl,
 | 
			
		||||
  FormHelperText,
 | 
			
		||||
  Grid,
 | 
			
		||||
@@ -50,6 +50,9 @@ const RegisterForm = ({ ...others }) => {
 | 
			
		||||
  const [strength, setStrength] = useState(0);
 | 
			
		||||
  const [level, setLevel] = useState();
 | 
			
		||||
 | 
			
		||||
  const [timer, setTimer] = useState(0);
 | 
			
		||||
  const [loading, setLoading] = useState(false);
 | 
			
		||||
 | 
			
		||||
  const handleClickShowPassword = () => {
 | 
			
		||||
    setShowPassword(!showPassword);
 | 
			
		||||
  };
 | 
			
		||||
@@ -74,11 +77,17 @@ const RegisterForm = ({ ...others }) => {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setLoading(true); // Start loading
 | 
			
		||||
 | 
			
		||||
    const { success, message } = await sendVerificationCode(email, turnstileToken);
 | 
			
		||||
    setLoading(false); // Stop loading
 | 
			
		||||
 | 
			
		||||
    if (!success) {
 | 
			
		||||
      showError(message);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setTimer(60); // Start the 60-second timer
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
@@ -94,217 +103,233 @@ const RegisterForm = ({ ...others }) => {
 | 
			
		||||
    }
 | 
			
		||||
  }, [siteInfo]);
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    let interval;
 | 
			
		||||
    if (timer > 0) {
 | 
			
		||||
      interval = setInterval(() => {
 | 
			
		||||
        setTimer((prevTimer) => prevTimer - 1);
 | 
			
		||||
      }, 1000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return () => clearInterval(interval);
 | 
			
		||||
  }, [timer]);
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <Formik
 | 
			
		||||
        initialValues={{
 | 
			
		||||
          username: '',
 | 
			
		||||
          password: '',
 | 
			
		||||
          confirmPassword: '',
 | 
			
		||||
          email: showEmailVerification ? '' : undefined,
 | 
			
		||||
          verification_code: showEmailVerification ? '' : undefined,
 | 
			
		||||
          submit: null
 | 
			
		||||
        }}
 | 
			
		||||
        validationSchema={Yup.object().shape({
 | 
			
		||||
          username: Yup.string().max(255).required('用户名是必填项'),
 | 
			
		||||
          password: Yup.string().max(255).required('密码是必填项'),
 | 
			
		||||
          confirmPassword: Yup.string()
 | 
			
		||||
            .required('确认密码是必填项')
 | 
			
		||||
            .oneOf([Yup.ref('password'), null], '两次输入的密码不一致'),
 | 
			
		||||
          email: showEmailVerification ? Yup.string().email('必须是有效的Email地址').max(255).required('Email是必填项') : Yup.mixed(),
 | 
			
		||||
          verification_code: showEmailVerification ? Yup.string().max(255).required('验证码是必填项') : Yup.mixed()
 | 
			
		||||
        })}
 | 
			
		||||
        onSubmit={async (values, { setErrors, setStatus, setSubmitting }) => {
 | 
			
		||||
          if (turnstileEnabled && turnstileToken === '') {
 | 
			
		||||
            showInfo('请稍后几秒重试,Turnstile 正在检查用户环境!');
 | 
			
		||||
            setSubmitting(false);
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
      <>
 | 
			
		||||
        <Formik
 | 
			
		||||
            initialValues={{
 | 
			
		||||
              username: '',
 | 
			
		||||
              password: '',
 | 
			
		||||
              confirmPassword: '',
 | 
			
		||||
              email: showEmailVerification ? '' : undefined,
 | 
			
		||||
              verification_code: showEmailVerification ? '' : undefined,
 | 
			
		||||
              submit: null
 | 
			
		||||
            }}
 | 
			
		||||
            validationSchema={Yup.object().shape({
 | 
			
		||||
              username: Yup.string().max(255).required('用户名是必填项'),
 | 
			
		||||
              password: Yup.string().max(255).required('密码是必填项'),
 | 
			
		||||
              confirmPassword: Yup.string()
 | 
			
		||||
                  .required('确认密码是必填项')
 | 
			
		||||
                  .oneOf([Yup.ref('password'), null], '两次输入的密码不一致'),
 | 
			
		||||
              email: showEmailVerification ? Yup.string().email('必须是有效的Email地址').max(255).required('Email是必填项') : Yup.mixed(),
 | 
			
		||||
              verification_code: showEmailVerification ? Yup.string().max(255).required('验证码是必填项') : Yup.mixed()
 | 
			
		||||
            })}
 | 
			
		||||
            onSubmit={async (values, { setErrors, setStatus, setSubmitting }) => {
 | 
			
		||||
              if (turnstileEnabled && turnstileToken === '') {
 | 
			
		||||
                showInfo('请稍后几秒重试,Turnstile 正在检查用户环境!');
 | 
			
		||||
                setSubmitting(false);
 | 
			
		||||
                return;
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
          const { success, message } = await register(values, turnstileToken);
 | 
			
		||||
          if (success) {
 | 
			
		||||
            setStatus({ success: true });
 | 
			
		||||
          } else {
 | 
			
		||||
            setStatus({ success: false });
 | 
			
		||||
            if (message) {
 | 
			
		||||
              setErrors({ submit: message });
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }}
 | 
			
		||||
      >
 | 
			
		||||
        {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (
 | 
			
		||||
          <form noValidate onSubmit={handleSubmit} {...others}>
 | 
			
		||||
            <FormControl fullWidth error={Boolean(touched.username && errors.username)} sx={{ ...theme.typography.customInput }}>
 | 
			
		||||
              <InputLabel htmlFor="outlined-adornment-username-register">用户名</InputLabel>
 | 
			
		||||
              <OutlinedInput
 | 
			
		||||
                id="outlined-adornment-username-register"
 | 
			
		||||
                type="text"
 | 
			
		||||
                value={values.username}
 | 
			
		||||
                name="username"
 | 
			
		||||
                onBlur={handleBlur}
 | 
			
		||||
                onChange={handleChange}
 | 
			
		||||
                inputProps={{ autoComplete: 'username' }}
 | 
			
		||||
              />
 | 
			
		||||
              {touched.username && errors.username && (
 | 
			
		||||
                <FormHelperText error id="standard-weight-helper-text--register">
 | 
			
		||||
                  {errors.username}
 | 
			
		||||
                </FormHelperText>
 | 
			
		||||
              )}
 | 
			
		||||
            </FormControl>
 | 
			
		||||
 | 
			
		||||
            <FormControl fullWidth error={Boolean(touched.password && errors.password)} sx={{ ...theme.typography.customInput }}>
 | 
			
		||||
              <InputLabel htmlFor="outlined-adornment-password-register">密码</InputLabel>
 | 
			
		||||
              <OutlinedInput
 | 
			
		||||
                id="outlined-adornment-password-register"
 | 
			
		||||
                type={showPassword ? 'text' : 'password'}
 | 
			
		||||
                value={values.password}
 | 
			
		||||
                name="password"
 | 
			
		||||
                label="Password"
 | 
			
		||||
                onBlur={handleBlur}
 | 
			
		||||
                onChange={(e) => {
 | 
			
		||||
                  handleChange(e);
 | 
			
		||||
                  changePassword(e.target.value);
 | 
			
		||||
                }}
 | 
			
		||||
                endAdornment={
 | 
			
		||||
                  <InputAdornment position="end">
 | 
			
		||||
                    <IconButton
 | 
			
		||||
                      aria-label="toggle password visibility"
 | 
			
		||||
                      onClick={handleClickShowPassword}
 | 
			
		||||
                      onMouseDown={handleMouseDownPassword}
 | 
			
		||||
                      edge="end"
 | 
			
		||||
                      size="large"
 | 
			
		||||
                      color={'primary'}
 | 
			
		||||
                    >
 | 
			
		||||
                      {showPassword ? <Visibility /> : <VisibilityOff />}
 | 
			
		||||
                    </IconButton>
 | 
			
		||||
                  </InputAdornment>
 | 
			
		||||
              const { success, message } = await register(values, turnstileToken);
 | 
			
		||||
              if (success) {
 | 
			
		||||
                setStatus({ success: true });
 | 
			
		||||
              } else {
 | 
			
		||||
                setStatus({ success: false });
 | 
			
		||||
                if (message) {
 | 
			
		||||
                  setErrors({ submit: message });
 | 
			
		||||
                }
 | 
			
		||||
                inputProps={{}}
 | 
			
		||||
              />
 | 
			
		||||
              {touched.password && errors.password && (
 | 
			
		||||
                <FormHelperText error id="standard-weight-helper-text-password-register">
 | 
			
		||||
                  {errors.password}
 | 
			
		||||
                </FormHelperText>
 | 
			
		||||
              )}
 | 
			
		||||
            </FormControl>
 | 
			
		||||
            <FormControl
 | 
			
		||||
              fullWidth
 | 
			
		||||
              error={Boolean(touched.confirmPassword && errors.confirmPassword)}
 | 
			
		||||
              sx={{ ...theme.typography.customInput }}
 | 
			
		||||
            >
 | 
			
		||||
              <InputLabel htmlFor="outlined-adornment-confirm-password-register">确认密码</InputLabel>
 | 
			
		||||
              <OutlinedInput
 | 
			
		||||
                id="outlined-adornment-confirm-password-register"
 | 
			
		||||
                type={showPassword ? 'text' : 'password'}
 | 
			
		||||
                value={values.confirmPassword}
 | 
			
		||||
                name="confirmPassword"
 | 
			
		||||
                label="Confirm Password"
 | 
			
		||||
                onBlur={handleBlur}
 | 
			
		||||
                onChange={handleChange}
 | 
			
		||||
                inputProps={{}}
 | 
			
		||||
              />
 | 
			
		||||
              {touched.confirmPassword && errors.confirmPassword && (
 | 
			
		||||
                <FormHelperText error id="standard-weight-helper-text-confirm-password-register">
 | 
			
		||||
                  {errors.confirmPassword}
 | 
			
		||||
                </FormHelperText>
 | 
			
		||||
              )}
 | 
			
		||||
            </FormControl>
 | 
			
		||||
 | 
			
		||||
            {strength !== 0 && (
 | 
			
		||||
              <FormControl fullWidth>
 | 
			
		||||
                <Box sx={{ mb: 2 }}>
 | 
			
		||||
                  <Grid container spacing={2} alignItems="center">
 | 
			
		||||
                    <Grid item>
 | 
			
		||||
                      <Box style={{ backgroundColor: level?.color }} sx={{ width: 85, height: 8, borderRadius: '7px' }} />
 | 
			
		||||
                    </Grid>
 | 
			
		||||
                    <Grid item>
 | 
			
		||||
                      <Typography variant="subtitle1" fontSize="0.75rem">
 | 
			
		||||
                        {level?.label}
 | 
			
		||||
                      </Typography>
 | 
			
		||||
                    </Grid>
 | 
			
		||||
                  </Grid>
 | 
			
		||||
                </Box>
 | 
			
		||||
              </FormControl>
 | 
			
		||||
            )}
 | 
			
		||||
 | 
			
		||||
            {showEmailVerification && (
 | 
			
		||||
              <>
 | 
			
		||||
                <FormControl fullWidth error={Boolean(touched.email && errors.email)} sx={{ ...theme.typography.customInput }}>
 | 
			
		||||
                  <InputLabel htmlFor="outlined-adornment-email-register">Email</InputLabel>
 | 
			
		||||
              }
 | 
			
		||||
            }}
 | 
			
		||||
        >
 | 
			
		||||
          {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (
 | 
			
		||||
              <form noValidate onSubmit={handleSubmit} {...others}>
 | 
			
		||||
                <FormControl fullWidth error={Boolean(touched.username && errors.username)} sx={{ ...theme.typography.customInput }}>
 | 
			
		||||
                  <InputLabel htmlFor="outlined-adornment-username-register">用户名</InputLabel>
 | 
			
		||||
                  <OutlinedInput
 | 
			
		||||
                    id="outlined-adornment-email-register"
 | 
			
		||||
                    type="text"
 | 
			
		||||
                    value={values.email}
 | 
			
		||||
                    name="email"
 | 
			
		||||
                    onBlur={handleBlur}
 | 
			
		||||
                    onChange={handleChange}
 | 
			
		||||
                    endAdornment={
 | 
			
		||||
                      <InputAdornment position="end">
 | 
			
		||||
                        <Button variant="contained" color="primary" onClick={() => handleSendCode(values.email)}>
 | 
			
		||||
                          发送验证码
 | 
			
		||||
                        </Button>
 | 
			
		||||
                      </InputAdornment>
 | 
			
		||||
                    }
 | 
			
		||||
                    inputProps={{}}
 | 
			
		||||
                      id="outlined-adornment-username-register"
 | 
			
		||||
                      type="text"
 | 
			
		||||
                      value={values.username}
 | 
			
		||||
                      name="username"
 | 
			
		||||
                      onBlur={handleBlur}
 | 
			
		||||
                      onChange={handleChange}
 | 
			
		||||
                      inputProps={{ autoComplete: 'username' }}
 | 
			
		||||
                  />
 | 
			
		||||
                  {touched.email && errors.email && (
 | 
			
		||||
                    <FormHelperText error id="standard-weight-helper-text--register">
 | 
			
		||||
                      {errors.email}
 | 
			
		||||
                    </FormHelperText>
 | 
			
		||||
                  {touched.username && errors.username && (
 | 
			
		||||
                      <FormHelperText error id="standard-weight-helper-text--register">
 | 
			
		||||
                        {errors.username}
 | 
			
		||||
                      </FormHelperText>
 | 
			
		||||
                  )}
 | 
			
		||||
                </FormControl>
 | 
			
		||||
 | 
			
		||||
                <FormControl fullWidth error={Boolean(touched.password && errors.password)} sx={{ ...theme.typography.customInput }}>
 | 
			
		||||
                  <InputLabel htmlFor="outlined-adornment-password-register">密码</InputLabel>
 | 
			
		||||
                  <OutlinedInput
 | 
			
		||||
                      id="outlined-adornment-password-register"
 | 
			
		||||
                      type={showPassword ? 'text' : 'password'}
 | 
			
		||||
                      value={values.password}
 | 
			
		||||
                      name="password"
 | 
			
		||||
                      label="Password"
 | 
			
		||||
                      onBlur={handleBlur}
 | 
			
		||||
                      onChange={(e) => {
 | 
			
		||||
                        handleChange(e);
 | 
			
		||||
                        changePassword(e.target.value);
 | 
			
		||||
                      }}
 | 
			
		||||
                      endAdornment={
 | 
			
		||||
                        <InputAdornment position="end">
 | 
			
		||||
                          <IconButton
 | 
			
		||||
                              aria-label="toggle password visibility"
 | 
			
		||||
                              onClick={handleClickShowPassword}
 | 
			
		||||
                              onMouseDown={handleMouseDownPassword}
 | 
			
		||||
                              edge="end"
 | 
			
		||||
                              size="large"
 | 
			
		||||
                              color={'primary'}
 | 
			
		||||
                          >
 | 
			
		||||
                            {showPassword ? <Visibility /> : <VisibilityOff />}
 | 
			
		||||
                          </IconButton>
 | 
			
		||||
                        </InputAdornment>
 | 
			
		||||
                      }
 | 
			
		||||
                      inputProps={{}}
 | 
			
		||||
                  />
 | 
			
		||||
                  {touched.password && errors.password && (
 | 
			
		||||
                      <FormHelperText error id="standard-weight-helper-text-password-register">
 | 
			
		||||
                        {errors.password}
 | 
			
		||||
                      </FormHelperText>
 | 
			
		||||
                  )}
 | 
			
		||||
                </FormControl>
 | 
			
		||||
                <FormControl
 | 
			
		||||
                  fullWidth
 | 
			
		||||
                  error={Boolean(touched.verification_code && errors.verification_code)}
 | 
			
		||||
                  sx={{ ...theme.typography.customInput }}
 | 
			
		||||
                    fullWidth
 | 
			
		||||
                    error={Boolean(touched.confirmPassword && errors.confirmPassword)}
 | 
			
		||||
                    sx={{ ...theme.typography.customInput }}
 | 
			
		||||
                >
 | 
			
		||||
                  <InputLabel htmlFor="outlined-adornment-verification_code-register">验证码</InputLabel>
 | 
			
		||||
                  <InputLabel htmlFor="outlined-adornment-confirm-password-register">确认密码</InputLabel>
 | 
			
		||||
                  <OutlinedInput
 | 
			
		||||
                    id="outlined-adornment-verification_code-register"
 | 
			
		||||
                    type="text"
 | 
			
		||||
                    value={values.verification_code}
 | 
			
		||||
                    name="verification_code"
 | 
			
		||||
                    onBlur={handleBlur}
 | 
			
		||||
                    onChange={handleChange}
 | 
			
		||||
                    inputProps={{}}
 | 
			
		||||
                      id="outlined-adornment-confirm-password-register"
 | 
			
		||||
                      type={showPassword ? 'text' : 'password'}
 | 
			
		||||
                      value={values.confirmPassword}
 | 
			
		||||
                      name="confirmPassword"
 | 
			
		||||
                      label="Confirm Password"
 | 
			
		||||
                      onBlur={handleBlur}
 | 
			
		||||
                      onChange={handleChange}
 | 
			
		||||
                      inputProps={{}}
 | 
			
		||||
                  />
 | 
			
		||||
                  {touched.verification_code && errors.verification_code && (
 | 
			
		||||
                    <FormHelperText error id="standard-weight-helper-text--register">
 | 
			
		||||
                      {errors.verification_code}
 | 
			
		||||
                    </FormHelperText>
 | 
			
		||||
                  {touched.confirmPassword && errors.confirmPassword && (
 | 
			
		||||
                      <FormHelperText error id="standard-weight-helper-text-confirm-password-register">
 | 
			
		||||
                        {errors.confirmPassword}
 | 
			
		||||
                      </FormHelperText>
 | 
			
		||||
                  )}
 | 
			
		||||
                </FormControl>
 | 
			
		||||
              </>
 | 
			
		||||
            )}
 | 
			
		||||
 | 
			
		||||
            {errors.submit && (
 | 
			
		||||
              <Box sx={{ mt: 3 }}>
 | 
			
		||||
                <FormHelperText error>{errors.submit}</FormHelperText>
 | 
			
		||||
              </Box>
 | 
			
		||||
            )}
 | 
			
		||||
            {turnstileEnabled ? (
 | 
			
		||||
              <Turnstile
 | 
			
		||||
                sitekey={turnstileSiteKey}
 | 
			
		||||
                onVerify={(token) => {
 | 
			
		||||
                  setTurnstileToken(token);
 | 
			
		||||
                }}
 | 
			
		||||
              />
 | 
			
		||||
            ) : (
 | 
			
		||||
              <></>
 | 
			
		||||
            )}
 | 
			
		||||
                {strength !== 0 && (
 | 
			
		||||
                    <FormControl fullWidth>
 | 
			
		||||
                      <Box sx={{ mb: 2 }}>
 | 
			
		||||
                        <Grid container spacing={2} alignItems="center">
 | 
			
		||||
                          <Grid item>
 | 
			
		||||
                            <Box style={{ backgroundColor: level?.color }} sx={{ width: 85, height: 8, borderRadius: '7px' }} />
 | 
			
		||||
                          </Grid>
 | 
			
		||||
                          <Grid item>
 | 
			
		||||
                            <Typography variant="subtitle1" fontSize="0.75rem">
 | 
			
		||||
                              {level?.label}
 | 
			
		||||
                            </Typography>
 | 
			
		||||
                          </Grid>
 | 
			
		||||
                        </Grid>
 | 
			
		||||
                      </Box>
 | 
			
		||||
                    </FormControl>
 | 
			
		||||
                )}
 | 
			
		||||
 | 
			
		||||
            <Box sx={{ mt: 2 }}>
 | 
			
		||||
              <AnimateButton>
 | 
			
		||||
                <Button disableElevation disabled={isSubmitting} fullWidth size="large" type="submit" variant="contained" color="primary">
 | 
			
		||||
                  注册
 | 
			
		||||
                </Button>
 | 
			
		||||
              </AnimateButton>
 | 
			
		||||
            </Box>
 | 
			
		||||
          </form>
 | 
			
		||||
        )}
 | 
			
		||||
      </Formik>
 | 
			
		||||
    </>
 | 
			
		||||
                {showEmailVerification && (
 | 
			
		||||
                    <>
 | 
			
		||||
                      <FormControl fullWidth error={Boolean(touched.email && errors.email)} sx={{ ...theme.typography.customInput }}>
 | 
			
		||||
                        <InputLabel htmlFor="outlined-adornment-email-register">Email</InputLabel>
 | 
			
		||||
                        <OutlinedInput
 | 
			
		||||
                            id="outlined-adornment-email-register"
 | 
			
		||||
                            type="text"
 | 
			
		||||
                            value={values.email}
 | 
			
		||||
                            name="email"
 | 
			
		||||
                            onBlur={handleBlur}
 | 
			
		||||
                            onChange={handleChange}
 | 
			
		||||
                            endAdornment={
 | 
			
		||||
                              <InputAdornment position="end">
 | 
			
		||||
                                <Button
 | 
			
		||||
                                    variant="contained"
 | 
			
		||||
                                    color="primary"
 | 
			
		||||
                                    onClick={() => handleSendCode(values.email)}
 | 
			
		||||
                                    disabled={timer > 0 || loading}
 | 
			
		||||
                                >
 | 
			
		||||
                                  {loading ? <CircularProgress size={24} /> : timer > 0 ? `${timer}s` : '发送验证码'}
 | 
			
		||||
                                </Button>
 | 
			
		||||
                              </InputAdornment>
 | 
			
		||||
                            }
 | 
			
		||||
                            inputProps={{}}
 | 
			
		||||
                        />
 | 
			
		||||
                        {touched.email && errors.email && (
 | 
			
		||||
                            <FormHelperText error id="standard-weight-helper-text--register">
 | 
			
		||||
                              {errors.email}
 | 
			
		||||
                            </FormHelperText>
 | 
			
		||||
                        )}
 | 
			
		||||
                      </FormControl>
 | 
			
		||||
                      <FormControl
 | 
			
		||||
                          fullWidth
 | 
			
		||||
                          error={Boolean(touched.verification_code && errors.verification_code)}
 | 
			
		||||
                          sx={{ ...theme.typography.customInput }}
 | 
			
		||||
                      >
 | 
			
		||||
                        <InputLabel htmlFor="outlined-adornment-verification_code-register">验证码</InputLabel>
 | 
			
		||||
                        <OutlinedInput
 | 
			
		||||
                            id="outlined-adornment-verification_code-register"
 | 
			
		||||
                            type="text"
 | 
			
		||||
                            value={values.verification_code}
 | 
			
		||||
                            name="verification_code"
 | 
			
		||||
                            onBlur={handleBlur}
 | 
			
		||||
                            onChange={handleChange}
 | 
			
		||||
                            inputProps={{}}
 | 
			
		||||
                        />
 | 
			
		||||
                        {touched.verification_code && errors.verification_code && (
 | 
			
		||||
                            <FormHelperText error id="standard-weight-helper-text--register">
 | 
			
		||||
                              {errors.verification_code}
 | 
			
		||||
                            </FormHelperText>
 | 
			
		||||
                        )}
 | 
			
		||||
                      </FormControl>
 | 
			
		||||
                    </>
 | 
			
		||||
                )}
 | 
			
		||||
 | 
			
		||||
                {errors.submit && (
 | 
			
		||||
                    <Box sx={{ mt: 3 }}>
 | 
			
		||||
                      <FormHelperText error>{errors.submit}</FormHelperText>
 | 
			
		||||
                    </Box>
 | 
			
		||||
                )}
 | 
			
		||||
                {turnstileEnabled ? (
 | 
			
		||||
                    <Turnstile
 | 
			
		||||
                        sitekey={turnstileSiteKey}
 | 
			
		||||
                        onVerify={(token) => {
 | 
			
		||||
                          setTurnstileToken(token);
 | 
			
		||||
                        }}
 | 
			
		||||
                    />
 | 
			
		||||
                ) : (
 | 
			
		||||
                    <></>
 | 
			
		||||
                )}
 | 
			
		||||
 | 
			
		||||
                <Box sx={{ mt: 2 }}>
 | 
			
		||||
                  <AnimateButton>
 | 
			
		||||
                    <Button disableElevation disabled={isSubmitting} fullWidth size="large" type="submit" variant="contained" color="primary">
 | 
			
		||||
                      注册
 | 
			
		||||
                    </Button>
 | 
			
		||||
                  </AnimateButton>
 | 
			
		||||
                </Box>
 | 
			
		||||
              </form>
 | 
			
		||||
          )}
 | 
			
		||||
        </Formik>
 | 
			
		||||
      </>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default RegisterForm;
 | 
			
		||||
export default RegisterForm;
 | 
			
		||||
		Reference in New Issue
	
	Block a user