import React, { forwardRef, useImperativeHandle } from 'react'; import { Form, Input, message, Modal } from 'antd'; import { useBoolean } from 'ahooks'; import { changePassword } from '@/services/user'; import { pick } from 'lodash'; import { encryptPassword } from '@/utils/utils'; import CryptoJS from 'crypto-js'; export interface IRef { open: () => void; close: () => void; } const ChangePasswordModal = forwardRef((_, ref) => { const [form] = Form.useForm(); const [open, { setTrue: openModal, setFalse: closeModal }] = useBoolean(false); const [confirmLoading, { set: setConfirmLoading }] = useBoolean(false); const encryptKey = CryptoJS.enc.Utf8.parse('supersonic@2024'); useImperativeHandle(ref, () => ({ open: () => { openModal(); form.resetFields(); }, close: () => { closeModal(); form.resetFields(); }, })); const handleOk = async () => { try { const values = await form.validateFields(); setConfirmLoading(true); // Call API to change password const res = await changePassword({ oldPassword: encryptPassword(values.oldPassword, encryptKey), newPassword: encryptPassword(values.newPassword, encryptKey), }); if (res && res.code !== 200) { return message.warning(res.msg); } closeModal(); } catch (error) { console.log('Failed:', error); } finally { setConfirmLoading(false); } }; return (
({ validator(_, value) { if (!value || getFieldValue('newPassword') === value) { return Promise.resolve(); } return Promise.reject(new Error('两次输入的密码不一致!')); }, }), ]} >
); }); export default ChangePasswordModal;