Login.js 3.8 KB
Newer Older
1 2
import React, { Component } from 'react';
import { connect } from 'dva';
3
import { formatMessage, FormattedMessage } from 'umi/locale';
Z
zinkey 已提交
4
import Link from 'umi/link';
D
ddcat1115 已提交
5
import { Checkbox, Alert, Icon } from 'antd';
6
import Login from '@/components/Login';
7 8
import styles from './Login.less';

D
ddcat1115 已提交
9
const { Tab, UserName, Password, Mobile, Captcha, Submit } = Login;
10

A
Andreas Cederström 已提交
11 12 13
@connect(({ login, loading }) => ({
  login,
  submitting: loading.effects['login/login'],
14
}))
A
afc163 已提交
15
class LoginPage extends Component {
16 17
  state = {
    type: 'account',
D
ddcat1115 已提交
18
    autoLogin: true,
J
jim 已提交
19
  };
20

J
jim 已提交
21
  onTabChange = type => {
A
afc163 已提交
22
    this.setState({ type });
J
jim 已提交
23
  };
24

25 26
  onGetCaptcha = () =>
    new Promise((resolve, reject) => {
27 28 29 30
      this.loginForm.validateFields(['mobile'], {}, (err, values) => {
        if (err) {
          reject(err);
        } else {
陈帅 已提交
31 32 33 34 35
          const { dispatch } = this.props;
          dispatch({
            type: 'login/getCaptcha',
            payload: values.mobile,
          })
36 37 38 39 40
            .then(resolve)
            .catch(reject);
        }
      });
    });
陈帅 已提交
41

D
ddcat1115 已提交
42 43 44
  handleSubmit = (err, values) => {
    const { type } = this.state;
    if (!err) {
陈帅 已提交
45 46
      const { dispatch } = this.props;
      dispatch({
D
ddcat1115 已提交
47 48 49 50 51 52 53
        type: 'login/login',
        payload: {
          ...values,
          type,
        },
      });
    }
J
jim 已提交
54
  };
55

J
jim 已提交
56
  changeAutoLogin = e => {
D
ddcat1115 已提交
57 58 59
    this.setState({
      autoLogin: e.target.checked,
    });
J
jim 已提交
60
  };
61

62 63 64
  renderMessage = content => (
    <Alert style={{ marginBottom: 24 }} message={content} type="error" showIcon />
  );
65 66

  render() {
A
Andreas Cederström 已提交
67
    const { login, submitting } = this.props;
陈帅 已提交
68
    const { type, autoLogin } = this.state;
69 70
    return (
      <div className={styles.main}>
71 72 73 74 75 76 77 78
        <Login
          defaultActiveKey={type}
          onTabChange={this.onTabChange}
          onSubmit={this.handleSubmit}
          ref={form => {
            this.loginForm = form;
          }}
        >
79
          <Tab key="account" tab={formatMessage({ id: 'app.login.tab-login-credentials' })}>
J
jim 已提交
80
            {login.status === 'error' &&
D
ddcat1115 已提交
81
              login.type === 'account' &&
82
              !submitting &&
83
              this.renderMessage(formatMessage({ id: 'app.message-login.invalid-credentials' }))}
D
ddcat1115 已提交
84
            <UserName name="userName" placeholder="admin/user" />
陈帅 已提交
85 86 87 88 89
            <Password
              name="password"
              placeholder="888888/123456"
              onPressEnter={() => this.loginForm.validateFields(this.handleSubmit)}
            />
D
ddcat1115 已提交
90
          </Tab>
91
          <Tab key="mobile" tab={formatMessage({ id: 'app.login.tab-login-mobile' })}>
J
jim 已提交
92
            {login.status === 'error' &&
D
ddcat1115 已提交
93
              login.type === 'mobile' &&
94
              !submitting &&
95
              this.renderMessage(formatMessage({ id: 'app.login.message-invalid-verification-code' }))}
D
ddcat1115 已提交
96
            <Mobile name="mobile" />
97
            <Captcha name="captcha" countDown={120} onGetCaptcha={this.onGetCaptcha} />
D
ddcat1115 已提交
98 99
          </Tab>
          <div>
陈帅 已提交
100
            <Checkbox checked={autoLogin} onChange={this.changeAutoLogin}>
101
              <FormattedMessage id="app.login.remember-me" />
J
jim 已提交
102 103
            </Checkbox>
            <a style={{ float: 'right' }} href="">
104
              <FormattedMessage id="app.login.forgot-password" />
J
jim 已提交
105
            </a>
D
ddcat1115 已提交
106
          </div>
107 108 109
          <Submit loading={submitting}>
            <FormattedMessage id="app.login.login" />
          </Submit>
D
ddcat1115 已提交
110
          <div className={styles.other}>
111
            <FormattedMessage id="app.login.sign-in-with" />
陈帅 已提交
112 113 114
            <Icon type="alipay-circle" className={styles.icon} theme="outlined" />
            <Icon type="taobao-circle" className={styles.icon} theme="outlined" />
            <Icon type="weibo-circle" className={styles.icon} theme="outlined" />
陈小聪-小虎Oni's avatar
陈小聪-小虎Oni 已提交
115
            <Link className={styles.register} to="/User/Register">
116
              <FormattedMessage id="app.login.signup" />
J
jim 已提交
117
            </Link>
D
ddcat1115 已提交
118 119
          </div>
        </Login>
120 121 122 123
      </div>
    );
  }
}
陈帅 已提交
124 125

export default LoginPage;