145 lines
4.3 KiB
TypeScript
145 lines
4.3 KiB
TypeScript
|
|
import React, { useEffect, useState } from 'react';
|
|||
|
|
import { Form, Input, Button, Spin, message } from 'antd';
|
|||
|
|
import { UserRegistr } from '@/services/services/login';
|
|||
|
|
import { set } from 'lodash';
|
|||
|
|
import { history } from '@umijs/max';
|
|||
|
|
|
|||
|
|
const Register: React.FC = () => {
|
|||
|
|
const [form] = Form.useForm();
|
|||
|
|
const [spinning, setSpinning] = useState(false);
|
|||
|
|
const [messageApi, messageHolder] = message.useMessage();
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
// 检查当前网址是不是包含query,并且?aff=后面有6位数字
|
|||
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|||
|
|
const affiliateCode = urlParams.get('aff');
|
|||
|
|
if (affiliateCode) {
|
|||
|
|
form.setFieldsValue({ affiliateCode });
|
|||
|
|
}
|
|||
|
|
}, []);
|
|||
|
|
|
|||
|
|
const onFinish = async (values: UserModel.UserRegisterParams) => {
|
|||
|
|
// 判断两次密码是否一致
|
|||
|
|
if (values.password !== values.confirm) {
|
|||
|
|
messageApi.warning('两次密码不一致!');
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 开始注册
|
|||
|
|
setSpinning(true);
|
|||
|
|
try {
|
|||
|
|
await UserRegistr(values);
|
|||
|
|
messageApi.success('注册成功,即将跳转到登录界面');
|
|||
|
|
// 注册成功后,跳转到登录页面
|
|||
|
|
setTimeout(() => {
|
|||
|
|
history.push('/user/login');
|
|||
|
|
}, 3000);
|
|||
|
|
}
|
|||
|
|
catch (error: any) {
|
|||
|
|
messageApi.error(error.message);
|
|||
|
|
}
|
|||
|
|
finally {
|
|||
|
|
setSpinning(false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
return (
|
|||
|
|
<Spin spinning={spinning} tip="注册中。。。">
|
|||
|
|
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100vh' }}>
|
|||
|
|
<div style={{ maxWidth: '400px', width: '100%' }}>
|
|||
|
|
<h2>注册</h2>
|
|||
|
|
<Form
|
|||
|
|
form={form}
|
|||
|
|
size='large'
|
|||
|
|
name="register"
|
|||
|
|
onFinish={onFinish}
|
|||
|
|
scrollToFirstError
|
|||
|
|
>
|
|||
|
|
<Form.Item
|
|||
|
|
name="userName"
|
|||
|
|
rules={[{ required: true, message: '请输入你的用户名!' }]}
|
|||
|
|
>
|
|||
|
|
<Input placeholder='用户名' />
|
|||
|
|
</Form.Item>
|
|||
|
|
|
|||
|
|
<Form.Item
|
|||
|
|
name="email"
|
|||
|
|
rules={[
|
|||
|
|
{
|
|||
|
|
type: 'email',
|
|||
|
|
message: '你的输入不是一个有效的邮箱号!',
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
required: true,
|
|||
|
|
message: '请输入邮箱号!',
|
|||
|
|
},
|
|||
|
|
]}
|
|||
|
|
>
|
|||
|
|
<Input placeholder='邮箱号' />
|
|||
|
|
</Form.Item>
|
|||
|
|
|
|||
|
|
<Form.Item
|
|||
|
|
name="password"
|
|||
|
|
rules={[
|
|||
|
|
{
|
|||
|
|
required: true,
|
|||
|
|
message: '请输入密码!',
|
|||
|
|
},
|
|||
|
|
]}
|
|||
|
|
hasFeedback
|
|||
|
|
>
|
|||
|
|
<Input.Password placeholder='密码,包含大小写英文,汉字和特殊字符' />
|
|||
|
|
</Form.Item>
|
|||
|
|
|
|||
|
|
<Form.Item
|
|||
|
|
name="confirm"
|
|||
|
|
dependencies={['password']}
|
|||
|
|
hasFeedback
|
|||
|
|
rules={[
|
|||
|
|
{
|
|||
|
|
required: true,
|
|||
|
|
message: '请输入确认密码!',
|
|||
|
|
},
|
|||
|
|
({ getFieldValue }) => ({
|
|||
|
|
validator(_, value) {
|
|||
|
|
if (!value || getFieldValue('password') === value) {
|
|||
|
|
return Promise.resolve();
|
|||
|
|
}
|
|||
|
|
return Promise.reject(new Error('两次输入的密码不一致!'));
|
|||
|
|
},
|
|||
|
|
}),
|
|||
|
|
{
|
|||
|
|
pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?.&.])[A-Za-z\d@$!%*?.&]{8,}$/,
|
|||
|
|
message: '密码必须包含至少八位,必须包含大小写字母,数字,特殊字符 @$!%*?.&. ',
|
|||
|
|
},
|
|||
|
|
]}
|
|||
|
|
>
|
|||
|
|
<Input.Password placeholder='确认密码' />
|
|||
|
|
</Form.Item>
|
|||
|
|
|
|||
|
|
<Form.Item
|
|||
|
|
name="affiliateCode"
|
|||
|
|
rules={[
|
|||
|
|
{ required: true, message: '请输入邀请码!' },
|
|||
|
|
{ pattern: /^\d{6}$/, message: '邀请码必须是六位数字!' }
|
|||
|
|
]}
|
|||
|
|
>
|
|||
|
|
<Input placeholder='邀请码' />
|
|||
|
|
</Form.Item>
|
|||
|
|
|
|||
|
|
<Form.Item>
|
|||
|
|
<Button type="primary" htmlType="submit">
|
|||
|
|
注册
|
|||
|
|
</Button>
|
|||
|
|
</Form.Item>
|
|||
|
|
</Form>
|
|||
|
|
</div>
|
|||
|
|
{messageHolder}
|
|||
|
|
</div>
|
|||
|
|
</Spin>
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
export default Register;
|