user.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import BaseStore from './base';
  2. export default class UserStore extends BaseStore {
  3. initState() {
  4. return {
  5. name: '管理后台',
  6. logo: '',
  7. login: false,
  8. username: '',
  9. info: {},
  10. collapsed: false,
  11. openMenu: {},
  12. };
  13. }
  14. initAfter() {
  15. if (this.state.login) this.refreshToken();
  16. }
  17. refreshToken() {
  18. return this.apiPost('/auth/token', { token: this.getToken() })
  19. .then(result => {
  20. this.infoHandle(result);
  21. })
  22. .catch(() => {
  23. this.logout(false);
  24. });
  25. }
  26. needLogin() {
  27. if (this.state.login) {
  28. return Promise.resolve();
  29. }
  30. return new Promise(resolve => {
  31. this.loginCB = resolve;
  32. this.setState({ needLogin: true });
  33. });
  34. }
  35. login({ username, password }) {
  36. return this.apiPost('/auth/login', { username, password }).then(result => {
  37. this.infoHandle(result);
  38. });
  39. }
  40. register({ username, password }) {
  41. return this.apiPost('/auth/register', { username, password }).then(result => {
  42. this.infoHandle(result);
  43. });
  44. }
  45. infoHandle(result) {
  46. if (result.token) this.setToken(result.token);
  47. this.setState({ login: true, needLogin: false, info: result, username: result.username });
  48. if (this.loginCB) this.loginCB();
  49. this.loginCB = null;
  50. }
  51. editPassword(params) {
  52. return this.apiPost('/auth/editPassword', params);
  53. }
  54. logout(login = true) {
  55. return Promise.resolve()
  56. .then(() => {
  57. if (login) {
  58. return this.apiPost('/auth/logout', {});
  59. }
  60. return true;
  61. })
  62. .then(() => {
  63. this.setState({ login: false, info: {}, username: '' });
  64. })
  65. .then(() => {
  66. linkTo(this.project.loginPath);
  67. });
  68. }
  69. switchCollapse() {
  70. this.setState({ collapsed: !this.state.collapsed });
  71. }
  72. openMenu(mKey, keys) {
  73. const { openMenu } = this.state;
  74. openMenu[mKey] = keys;
  75. this.setState({ openMenu });
  76. }
  77. }
  78. export const User = new UserStore({ key: 'user', local: true });