import { useIntl } from "react-intl"; import { ProForm, type ProFormInstance, ProFormText, } from "@ant-design/pro-components"; import { Alert, type AlertProps, message } from "antd"; import { EyeInvisibleOutlined, EyeTwoTone } from "@ant-design/icons"; import { get, post } from "../../../request"; import { useRef, useState } from "react"; import { _Link } from "react-router"; import type { RuleObject } from "antd/lib/form"; import type { StoreValue } from "antd/lib/form/interface"; import LoginButton from "../../auth/LoginButton"; interface IFormData { username: string; token?: string | null; password?: string; confirmPassword?: string; } interface IResetPasswordResponse { ok: boolean; message: string; data: { username: string }; } interface IWidget { token?: string | null; } const Widget = ({ token }: IWidget) => { const intl = useIntl(); const [notify, setNotify] = useState(); const [type, setType] = useState("info"); const formRef = useRef(undefined); const [ok, setOk] = useState(false); const checkPass2 = ( _rule: RuleObject, value: StoreValue, callback: (error?: string) => void ) => { if (value && value !== formRef.current?.getFieldValue("password")) { callback( intl.formatMessage({ id: "message.confirm-password.validate.fail", }) ); } else { callback(); } }; return ( <> {notify ? ( : undefined} /> ) : ( <> )} formRef={formRef} onFinish={async (values: IFormData) => { if (!token) { return; } console.debug(values); values["token"] = token; const url = "/v2/auth/reset-password"; console.info("reset password url", url, values); const result = await post( url, values ); if (result.ok) { console.log("token", result.data); setType("success"); setNotify( intl.formatMessage({ id: "message.password.reset.successful", }) ); setOk(true); message.success(intl.formatMessage({ id: "flashes.success" })); } else { setType("error"); setNotify(result.message); } }} request={async () => { const url = `/v2/auth/reset-password/${token}`; console.log("url", url); try { const res = await get(url); console.log("ResetPassword get", res); if (res.ok) { setType("info"); setNotify(intl.formatMessage({ id: "message.password.reset" })); return { username: res.data.username, }; } else { return { username: "", }; } } catch (err) { //error if (err === 404) { setNotify(intl.formatMessage({ id: "获取token失败" })); setType("error"); } console.error(err); } return { username: "", }; }} > visible ? : , }} required label={intl.formatMessage({ id: "forms.fields.password.label", })} rules={[{ required: true, max: 32, min: 6 }]} /> visible ? : , }} required label={intl.formatMessage({ id: "forms.fields.confirm-password.label", })} rules={[{ required: true, max: 32, min: 6, validator: checkPass2 }]} /> ); }; export default Widget;