import { LockOutlined, MobileOutlined, UserOutlined, } from '@ant-design/icons'; import { LoginForm, ProFormCaptcha, ProFormText, } from '@ant-design/pro-components'; import { FormattedMessage, history, useIntl, useModel, Helmet } from '@umijs/max'; import { Alert, message, Tabs } from 'antd'; import Settings from '../../../../config/defaultSettings'; import React, { useState } from 'react'; import { flushSync } from 'react-dom'; import { createStyles } from 'antd-style'; import { useAjax } from '@/Hook/useAjax'; import { getPCode, loginByPCode, loginByPwd } from '@/services/login'; const useStyles = createStyles(({ token }) => { return { action: { marginLeft: '8px', color: 'rgba(0, 0, 0, 0.2)', fontSize: '24px', verticalAlign: 'middle', cursor: 'pointer', transition: 'color 0.3s', '&:hover': { color: token.colorPrimaryActive, }, }, lang: { width: 42, height: 42, lineHeight: '42px', position: 'fixed', right: 16, borderRadius: token.borderRadius, ':hover': { backgroundColor: token.colorBgTextHover, }, }, container: { 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 LoginMessage: React.FC<{ content: string; }> = ({ content }) => { return ( ); }; const Login: React.FC = () => { const [userLoginState, setUserLoginState] = useState({}); const [type, setType] = useState('account'); const { initialState, setInitialState } = useModel('@@initialState'); const { styles } = useStyles(); const intl = useIntl(); const loginByPwdFn = useAjax((data) => loginByPwd(data))//账号密码登录 const loginByPCodeFn = useAjax((data) => loginByPCode(data))//手机登录 const fetchUserInfo = async (data: any) => { // const userInfo = await initialState?.fetchUserInfo?.(); if (data) { flushSync(() => { setInitialState((s) => ({ ...s, currentUser: data.userInfo, token: data.token, menuType: 'distributor' })); }); } }; const handleSubmit = async (values: any) => { try { // 登录 console.log(type, values) const urlParams = new URL(window.location.href).searchParams; let api = type === 'account' ? loginByPwdFn : loginByPCodeFn; let newValues = type === 'account' ? values : { phoneNum: values.mobile, code: values.captcha } api.run(newValues).then(async res => { if (res.data) { console.log(res.data.userInfo) await fetchUserInfo({ userInfo: res.data.userInfo, token: res.data.token }); console.log(res.data.token) localStorage.setItem("Token", res.data.token) localStorage.setItem("manageAccount",res.data.userInfo.manageAccount) // 管理员跳转 if(res.data.userInfo?.manageAccount){ history.push(urlParams.get('redirect') || '/'); }else{//非管理员跳转 history.push('/distributor/appList') } } }) return } catch (error) { const defaultLoginFailureMessage = intl.formatMessage({ id: 'pages.login.failure', defaultMessage: '登录失败,请重试!', }); console.log(error); message.error(defaultLoginFailureMessage); } }; const { status, type: loginType } = userLoginState; return (
{intl.formatMessage({ id: 'menu.login', defaultMessage: '登录页', })} - {Settings.title}
} title="分销商平台" // subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })} // actions={[ // , // , // ]} loading={loginByPwdFn?.loading || loginByPCodeFn?.loading} onFinish={async (values) => { await handleSubmit(values as any); }} > {status === 'error' && loginType === '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: ( ), }, ]} /> )} {status === 'error' && loginType === 'mobile' && } {type === 'mobile' && ( <> , }} name="mobile" placeholder={intl.formatMessage({ id: 'pages.login.phoneNumber.placeholder', defaultMessage: '手机号', })} rules={[ { required: true, message: ( ), }, { pattern: /^1\d{10}$/, message: ( ), }, ]} /> , }} phoneName='mobile' captchaProps={{ size: 'large', }} placeholder={intl.formatMessage({ id: 'pages.login.captcha.placeholder', defaultMessage: '请输入验证码', })} captchaTextRender={(timing, count) => { if (timing) { return `${count} ${intl.formatMessage({ id: 'pages.getCaptchaSecondText', defaultMessage: '获取验证码', })}`; } return intl.formatMessage({ id: 'pages.login.phoneLogin.getVerificationCode', defaultMessage: '获取验证码', }); }} name="captcha" rules={[ { required: true, message: ( ), }, ]} onGetCaptcha={async (mobile) => { const result = await getPCode(mobile); if (!result) { return; } message.success('获取验证码成功!请查看手机短信!'); }} /> )}
); }; export default Login;