import Login from '@/components/Login'; import { ILoginModelState } from '@/models/login'; import { Alert, Checkbox, Icon } from 'antd'; import { CheckboxChangeEvent } from 'antd/es/checkbox'; import { connect } from 'dva'; import React, { Component } from 'react'; import { formatMessage, FormattedMessage } from 'umi-plugin-locale'; import Link from 'umi/link'; import styles from './Login.less'; const { Tab, UserName, Password, Mobile, Captcha, Submit } = Login; export interface ILoginPageProps { login: ILoginModelState; dispatch: (args: any) => Promise; submitting: boolean; } interface ILoginPageState { type: string; autoLogin: boolean; } @connect(({ login, loading }) => ({ login, submitting: loading.effects['login/login'], })) class LoginPage extends Component { state: ILoginPageState = { type: 'account', autoLogin: true, }; loginForm: Login; onTabChange = (type: string) => { this.setState({ type }); }; onGetCaptcha = () => new Promise((resolve, reject) => { this.loginForm.validateFields(['mobile'], {}, (err, values) => { if (err) { reject(err); } else { const { dispatch } = this.props; dispatch({ type: 'login/getCaptcha', payload: values.mobile, }) .then(resolve) .catch(reject); } }); }); handleSubmit = (err: { [field: string]: object }, values: { [field: string]: string }) => { const { type } = this.state; if (!err) { const { dispatch } = this.props; dispatch({ type: 'login/login', payload: { ...values, type, }, }); } }; changeAutoLogin = (e: CheckboxChangeEvent) => { this.setState({ autoLogin: e.target.checked, }); }; renderMessage = (content: string) => ( ); render() { const { login, submitting } = this.props; const { type, autoLogin } = this.state; return (
(this.loginForm = form)} > {login.status === 'error' && login.type === 'account' && !submitting && this.renderMessage(formatMessage({ id: 'app.login.message-invalid-credentials' }))} { e.preventDefault(); this.loginForm.validateFields(this.handleSubmit); }} /> {login.status === 'error' && login.type === 'mobile' && !submitting && this.renderMessage( formatMessage({ id: 'app.login.message-invalid-verification-code' }), )}
); } } export default LoginPage;