lq1405 df0da4c73d V 1.0.5
新增用户重置密码和用户修改密码
2025-03-22 20:50:24 +08:00

143 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useState } from 'react';
import { Form, Input, Button, message, Card, Typography } from 'antd';
import { LockOutlined } from '@ant-design/icons';
import { request, useModel } from '@umijs/max';
import { isEmpty } from 'lodash';
const { Title } = Typography;
const ResetPassword: React.FC = () => {
const [form] = Form.useForm();
const [loading, setLoading] = useState(false);
const [messageApi, contextHolder] = message.useMessage();
const { initialState, setInitialState } = useModel('@@initialState');
// 提交重置密码请求
const handleResetPassword = async () => {
try {
debugger;
const values = form.getFieldsValue();
if (initialState?.currentUser?.id == null) {
messageApi.error('用户信息不存在,请重新登录');
return;
}
// 检查两次密码是否一致
if (values.newPassword !== values.confirmPassword) {
messageApi.error('两次输入的密码不一致');
return;
}
if (isEmpty(values.newPassword)) {
messageApi.error('请输入新密码');
return;
}
setLoading(true);
// 发送重置密码请求
const res = await request<ApiResponse.SuccessItem<string>>(`/lms/User/ResetPassword/${initialState?.currentUser?.id}`, {
method: 'POST',
data: {
"newPassword": values.newPassword,
}
});
if (res.code !== 1) {
throw new Error(res.message);
}
messageApi.success('密码重置成功');
form.resetFields();
} catch (error: any) {
messageApi.error(error.message || '密码重置失败');
} finally {
setLoading(false);
}
};
return (
<Card
bordered={false}
style={{
borderRadius: '8px',
boxShadow: '0 4px 12px rgba(0, 0, 0, 0.05)',
margin: "20px"
}}
>
{contextHolder}
<div style={{ textAlign: 'center', marginBottom: '20px' }}>
<LockOutlined style={{ fontSize: '28px', color: '#1890ff', marginBottom: '12px' }} />
<Title level={4} style={{ margin: 0 }}></Title>
</div>
<Form
form={form}
layout="vertical"
name="resetPassword"
size="large"
onFinish={handleResetPassword}
>
<Form.Item
name="newPassword"
rules={[
{ required: true, message: '请输入新密码' },
{
pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?.&.])[A-Za-z\d@$!%*?.&]{8,}$/,
message: '密码必须至少8位包含大小写字母、数字和特殊字符'
}
]}
>
<Input.Password
prefix={<LockOutlined style={{ color: '#d9d9d9' }} />}
placeholder="请输入新密码"
style={{
height: '45px',
borderRadius: '4px',
}}
/>
</Form.Item>
<Form.Item
name="confirmPassword"
dependencies={['newPassword']}
rules={[
{ required: true, message: '请再次输入新密码' },
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('newPassword') === value) {
return Promise.resolve();
}
return Promise.reject(new Error('两次输入的密码不一致'));
},
})
]}
>
<Input.Password
prefix={<LockOutlined style={{ color: '#d9d9d9' }} />}
placeholder="请再次输入新密码"
style={{
height: '45px',
borderRadius: '4px',
}}
/>
</Form.Item>
<Form.Item style={{ marginTop: '24px', marginBottom: '0' }}>
<Button
type="primary"
htmlType="submit"
loading={loading}
style={{
width: '100%',
height: '45px',
borderRadius: '4px',
}}
>
</Button>
</Form.Item>
</Form>
</Card>
);
};
export default ResetPassword;