import Footer from '@/components/Footer'; import { login } from '@/services/ant-design-pro/api'; import { getFakeCaptcha } from '@/services/ant-design-pro/login'; import { LockOutlined, MobileOutlined, UserOutlined } from '@ant-design/icons'; import { LoginForm, ProFormCaptcha, ProFormCheckbox, ProFormText, } from '@ant-design/pro-components'; import { useEmotionCss } from '@ant-design/use-emotion-css'; import { FormattedMessage, Helmet, history, useIntl, useModel } from '@umijs/max'; import { Alert, message } from 'antd'; import React, { useState } from 'react'; import { flushSync } from 'react-dom'; import Settings from '../../../../config/defaultSettings'; const LoginMessage: React.FC<{ content: string; }> = ({ content }) => { return ( ); }; const Login: React.FC = () => { const [userLoginState, setUserLoginState] = useState({}); const [type, setType] = useState('mobile'); const { initialState, setInitialState } = useModel('@@initialState'); const containerClassName = useEmotionCss(() => { return { display: 'flex', flexDirection: 'column', height: '100vh', overflow: 'auto', backgroundImage: "url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr')", backgroundSize: '100% 100%', }; }); const intl = useIntl(); const fetchUserInfo = async () => { const userInfo = await initialState?.fetchUserInfo?.(); if (userInfo) { console.log('userInfo--->', userInfo); flushSync(() => { setInitialState((s) => ({ ...s, currentUser: { avatar: `https://xsgames.co/randomusers/avatar.php?g=pixel&key=${Math.floor( Math.random() * 10, )}`, ...userInfo, }, })); }); } }; const handleSubmit = async (values: API.LoginParams) => { try { const { savePhone, ...value } = values; // 登录 const msg = await login({ ...value }); if (msg.success) { localStorage.setItem('Admin-Token', msg?.data?.token); const defaultLoginSuccessMessage = intl.formatMessage({ id: 'pages.login.success', defaultMessage: '登录成功!', }); if (savePhone) { localStorage.setItem('MOBILE', values.mobile as string); } message.success(defaultLoginSuccessMessage); await fetchUserInfo(); const urlParams = new URL(window.location.href).searchParams; history.push(urlParams.get('redirect') || '/'); return; } // 如果失败去设置用户错误信息 setUserLoginState(msg); } catch (error) { const defaultLoginFailureMessage = intl.formatMessage({ id: 'pages.login.failure', defaultMessage: '登录失败,请重试!', }); console.log(error); message.error(defaultLoginFailureMessage); } }; const { success = true } = userLoginState; return (
{intl.formatMessage({ id: 'menu.login', defaultMessage: '登录页', })} - {Settings.title}
} title="趣程素材库" subTitle={ {/** intl.formatMessage({ id: 'pages.layouts.userLayout.title' }) */} } initialValues={{ savePhone: true, mobile: localStorage.getItem('MOBILE') || null, }} onFinish={async (values) => { await handleSubmit(values as API.LoginParams); }} submitter={{ searchConfig: { submitText: '注册/登录', }, }} > {/* */} {!success && type === 'account' && } {type === 'account' && ( <> , }} placeholder={intl.formatMessage({ id: 'pages.login.username.placeholder', defaultMessage: '用户名: admin or user', })} rules={[ { required: true, message: ( ), }, ]} /> , }} placeholder={intl.formatMessage({ id: 'pages.login.password.placeholder', defaultMessage: '密码: ant.design', })} rules={[ { required: true, message: ( ), }, ]} /> )} {!success && type === 'mobile' && } {type === 'mobile' && ( <> , }} name="mobile" placeholder="手机号" rules={[ { required: true, message: '请输入手机号!', }, { pattern: /^1\d{10}$/, message: '手机号格式错误!', }, ]} /> , }} phoneName="mobile" captchaProps={{ size: 'large', }} placeholder="请输入验证码" captchaTextRender={(timing, count) => { if (timing) { return `${count} 获取验证码`; } return '获取验证码'; }} name="code" rules={[ { required: true, message: '请输入验证码!', }, ]} onGetCaptcha={async (mobile) => { const result: any = await getFakeCaptcha({ mobile, smsType: 'SMS_REG_LOGIN', }); if (!result?.success) { throw new Error(); } message.success('获取验证码成功!'); }} /> )}
保存手机号
); }; export default Login;