login.jsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import React from 'react'
  2. import Login from 'ant-design-pro/lib/Login'
  3. import { Alert, Checkbox } from 'antd'
  4. import { Link, Redirect } from 'dva/router'
  5. import { connect } from 'dva'
  6. import * as service from '../../services/index'
  7. import URLS from '../../constants/url'
  8. import './login.less'
  9. const { UserName, Password, Submit } = Login;
  10. function authenticate(token, expireTime, user, cb) {
  11. window.localStorage.setItem("token", token);
  12. window.localStorage.setItem("expireTime", expireTime);
  13. window.localStorage.setItem("usercode", user.code);
  14. window.localStorage.setItem("account", user.account);
  15. // window.localStorage.setItem("password", user.password);
  16. window.localStorage.setItem("username", user.name);
  17. window.localStorage.setItem("userrole", user.role);
  18. setTimeout(cb, 100); // fake async
  19. }
  20. class LoginComponent extends React.Component {
  21. state = {
  22. notice: '',
  23. autoLogin: true,
  24. redirectToReferrer: false
  25. };
  26. onSubmit = (err, values) => {
  27. console.log('value collected ->', { ...values, autoLogin: this.state.autoLogin });
  28. this.setState({
  29. notice: '',
  30. }, () => {
  31. if (!err) {
  32. this.login(values.username, values.password);
  33. }
  34. });
  35. }
  36. changeAutoLogin = (e) => {
  37. this.setState({
  38. autoLogin: e.target.checked,
  39. });
  40. }
  41. login = (username, password) => {
  42. const { dispatch } = this.props;
  43. const self = this;
  44. let body = {
  45. userName: username,
  46. passWord: password
  47. };
  48. service.fetch({
  49. url: URLS.LOGIN,
  50. body: body
  51. }).then(r => {
  52. if(!r.err && r.data.code > 0) {
  53. return r.data.data;
  54. }else {
  55. self.setState({
  56. notice: r.err || r.data.msg,
  57. });
  58. let obj = {};
  59. throw obj;
  60. }
  61. }).then(resData => {
  62. console.log('登录', body, resData);
  63. const token = resData.token;
  64. const expireTime = resData.times;
  65. const user = resData.user;
  66. const currentUser = {
  67. code: user.id,
  68. account: user.userName,
  69. password: user.passWord,
  70. name: user.name,
  71. role: user.role
  72. };
  73. dispatch({ type: 'main/setCurrentUser', user: currentUser });
  74. authenticate(token, expireTime, currentUser, () => {
  75. this.setState({ redirectToReferrer: true });
  76. });
  77. }).catch(ex => {
  78. console.error('fetch error', ex);
  79. });
  80. };
  81. render() {
  82. const { from } = this.props.location.state || { from: { pathname: "/" } };
  83. const { redirectToReferrer } = this.state;
  84. if (redirectToReferrer) {
  85. return <Redirect to={from} />;
  86. }
  87. return (
  88. <div className='container'>
  89. <div className='content'>
  90. <div className='main'>
  91. <h3>登录</h3>
  92. <Login
  93. className='login'
  94. onSubmit={this.onSubmit}
  95. >
  96. {
  97. this.state.notice &&
  98. <Alert style={{ marginBottom: 24 }} message={this.state.notice} type="error" showIcon closable />
  99. }
  100. <UserName name="username" placeholder='输入用户名' />
  101. <Password name="password" placeholder='输入密码'/>
  102. <div>
  103. <Checkbox checked={this.state.autoLogin} onChange={this.changeAutoLogin}>记住密码</Checkbox>
  104. <a style={{ float: 'right' }} href="">忘记密码</a>
  105. </div>
  106. <Submit>登录</Submit>
  107. <div>
  108. <Link to="/register">
  109. <span style={{ float: 'right' }} href="">注册</span>
  110. </Link>
  111. </div>
  112. </Login>
  113. </div>
  114. </div>
  115. </div>
  116. );
  117. }
  118. }
  119. export default connect(({ present: { main } }) => ({ main }))(LoginComponent);