import { AlipayCircleOutlined, LockOutlined, MailOutlined, MobileOutlined, TaobaoCircleOutlined, UserOutlined, WeiboCircleOutlined, } from '@ant-design/icons'; import { Alert, Space, message, Tabs } from 'antd'; import React, { useState } from 'react'; import ProForm, { ProFormCaptcha, ProFormCheckbox, ProFormText } from '@ant-design/pro-form'; import { useIntl, connect, FormattedMessage } from 'umi'; import { getFakeCaptcha } from '@/services/login'; import type { Dispatch } from 'umi'; import type { StateType } from '@/models/login'; import type { LoginParamsType } from '@/services/login'; import type { ConnectState } from '@/models/connect'; import styles from './index.less'; export type LoginProps = { dispatch: Dispatch; userLogin: StateType; submitting?: boolean; }; const LoginMessage: React.FC<{ content: string; }> = ({ content }) => ( ); const Login: React.FC = (props) => { const { userLogin = {}, submitting } = props; const { status, type: loginType } = userLogin; const [type, setType] = useState('account'); const intl = useIntl(); const handleSubmit = (values: LoginParamsType) => { const { dispatch } = props; dispatch({ type: 'login/login', payload: { ...values, type }, }); }; return (
dom.pop(), submitButtonProps: { loading: submitting, size: 'large', style: { width: '100%', }, }, }} onFinish={(values) => { handleSubmit(values as LoginParamsType); return Promise.resolve(); }} > {status === 'error' && loginType === 'account' && !submitting && ( )} {type === 'account' && ( <> , }} placeholder={intl.formatMessage({ id: 'pages.login.username.placeholder', defaultMessage: 'Username: admin or user', })} rules={[ { required: true, message: ( ), }, ]} /> , }} placeholder={intl.formatMessage({ id: 'pages.login.password.placeholder', defaultMessage: 'Password: ant.design', })} rules={[ { required: true, message: ( ), }, ]} /> )} {status === 'error' && loginType === 'mobile' && !submitting && ( )} {type === 'mobile' && ( <> , }} name="mobile" placeholder={intl.formatMessage({ id: 'pages.login.phoneNumber.placeholder', defaultMessage: 'Phone number', })} rules={[ { required: true, message: ( ), }, { pattern: /^1\d{10}$/, message: ( ), }, ]} /> , }} captchaProps={{ size: 'large', }} placeholder={intl.formatMessage({ id: 'pages.login.captcha.placeholder', defaultMessage: 'Please enter verification code', })} captchaTextRender={(timing, count) => { if (timing) { return `${count} ${intl.formatMessage({ id: 'pages.getCaptchaSecondText', defaultMessage: 'Get verification code', })}`; } return intl.formatMessage({ id: 'pages.login.phoneLogin.getVerificationCode', defaultMessage: 'Get verification code', }); }} name="captcha" rules={[ { required: true, message: ( ), }, ]} onGetCaptcha={async (mobile) => { const result = await getFakeCaptcha(mobile); if (result === false) { return; } message.success( 'Get the verification code successfully! The verification code is: 1234', ); }} /> )}
); }; export default connect(({ login, loading }: ConnectState) => ({ userLogin: login, submitting: loading.effects['login/login'], }))(Login);