import intl from 'react-intl-universal'; import React, { useEffect, useState } from 'react'; import { Typography, Input, Form, Button, message, Avatar, Upload } from 'antd'; import { request } from '@/utils/http'; import config from '@/utils/config'; import { history } from '@umijs/max'; import QRCode from 'qrcode.react'; import { PageLoading } from '@ant-design/pro-layout'; import { UploadOutlined, UserOutlined } from '@ant-design/icons'; import ImgCrop from 'antd-img-crop'; import 'antd/es/slider/style'; const { Title, Link } = Typography; const SecuritySettings = ({ user, userChange }: any) => { const [loading, setLoading] = useState(false); const [twoFactorActivated, setTwoFactorActivated] = useState(); const [twoFactoring, setTwoFactoring] = useState(false); const [twoFactorInfo, setTwoFactorInfo] = useState(); const [code, setCode] = useState(); const [avatar, setAvatar] = useState(); const handleOk = (values: any) => { request .put(`${config.apiPrefix}user`, { username: values.username, password: values.password, }) .then(({ code, data }) => { if (code === 200) { localStorage.removeItem(config.authKey); history.push('/login'); } }) .catch((error: any) => { console.log(error); }); }; const activeOrDeactiveTwoFactor = () => { if (twoFactorActivated) { deactiveTowFactor(); } else { getTwoFactorInfo(); setTwoFactoring(true); } }; const deactiveTowFactor = () => { request .put(`${config.apiPrefix}user/two-factor/deactive`) .then(({ code, data }) => { if (code === 200 && data) { setTwoFactorActivated(false); userChange(); } }) .catch((error: any) => { console.log(error); }); }; const completeTowFactor = () => { setLoading(true); request .put(`${config.apiPrefix}user/two-factor/active`, { code }) .then(({ code, data }) => { if (code === 200) { if (data) { message.success(intl.get('激活成功')); setTwoFactoring(false); setTwoFactorActivated(true); userChange(); } else { message.success(intl.get('验证失败')); } } }) .catch((error: any) => { console.log(error); }) .finally(() => setLoading(false)); }; const getTwoFactorInfo = () => { request .get(`${config.apiPrefix}user/two-factor/init`) .then(({ code, data }) => { if (code === 200) { setTwoFactorInfo(data); } }) .catch((error: any) => { console.log(error); }); }; const onChange = (e) => { if (e.file && e.file.response) { setAvatar( `${config.apiPrefix}static/${e.file.response.data}`, ); userChange(); } }; useEffect(() => { setTwoFactorActivated(user && user.twoFactorActivated); setAvatar(user.avatar && `${config.apiPrefix}static/${user.avatar}`); }, [user]); return twoFactoring ? ( <> {twoFactorInfo ? (
{intl.get('第一步')} {intl.get('下载两步验证手机应用,比如 Google Authenticator 、')} Microsoft Authenticator 、 Authy 、 1Password 、 LastPass Authenticator {intl.get('第二步')} {intl.get('使用手机应用扫描二维码,或者输入秘钥')}{' '} {twoFactorInfo?.secret}
{intl.get('第三步')} {intl.get('输入手机应用上的6位数字')} setCode(e.target.value)} placeholder="123456" />
) : ( )} ) : ( <>
{intl.get('修改用户名密码')}
{intl.get('两步验证')}
{intl.get('头像')}
} src={avatar} /> ); }; export default SecuritySettings;