blob: 25bf6dc7de1e2499565f3eaf1d8974020e250875 [file] [log] [blame]
import { MailOutlined, LockOutlined } from '@ant-design/icons';
import { Button, Form, Input, message, Row, Col } from 'antd';
import { NavLink } from 'react-router';
import { useState, useEffect } from 'react';
function Forget() {
const [countdown, setCountdown] = useState(0);
const [emailSent,] = useState(false);
const onFinish = async () => {
};
useEffect(() => {
let countdownTimer = null;
if (countdown > 0) {
countdownTimer = setTimeout(() => {
setCountdown(prev => prev - 1);
}, 1000);
}
return () => {
if (countdownTimer) {
clearTimeout(countdownTimer);
}
};
}, [countdown]);
const resendCode = () => {
if (countdown > 0) return;
setCountdown(60);
message.info('验证码已重新发送');
};
return (
<Form
name="forget"
initialValues={{ remember: true }}
style={{ maxWidth: 360 }}
onFinish={onFinish}
>
<h2>重置密码</h2>
<p>请输入您注册时使用的邮箱地址</p>
<Form.Item
name="email"
rules={[
{ required: true, message: '请输入您的邮箱!' },
{ type: 'email', message: '请输入正确的邮箱格式' }
]}
>
<Input prefix={<MailOutlined />} placeholder="注册邮箱" />
</Form.Item>
{emailSent && (
<>
<Form.Item
name="code"
rules={[{ required: true, message: '请输入验证码!' }]}
>
<Row gutter={8}>
<Col span={16}>
<Input placeholder="验证码" />
</Col>
<Col span={8}>
<Button
disabled={countdown > 0}
onClick={resendCode}
style={{ width: '100%' }}
>
{countdown > 0 ? `${countdown}s后重试` : '重新发送'}
</Button>
</Col>
</Row>
</Form.Item>
<Form.Item
name="password"
rules={[
{ required: true, message: '请设置新密码!' },
{ min: 6, message: '密码长度至少为6位' }
]}
>
<Input.Password prefix={<LockOutlined />} placeholder="新密码" />
</Form.Item>
<Form.Item
name="confirmPassword"
dependencies={['password']}
rules={[
{ required: true, message: '请确认新密码!' },
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('password') === value) {
return Promise.resolve();
}
return Promise.reject(new Error('两次输入的密码不一致!'));
},
}),
]}
>
<Input.Password prefix={<LockOutlined />} placeholder="确认新密码" />
</Form.Item>
</>
)}
<Form.Item>
<Button block type="primary" htmlType="submit">
{emailSent ? '确认重置' : '获取验证码'}
</Button>
<NavLink to='/login'>返回登录</NavLink>
</Form.Item>
</Form>
);
}
export default Forget;