login.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import Vue from 'vue';
  2. import Vuex from 'vuex';
  3. import axios from 'axios';
  4. import _ from 'lodash';
  5. import { Notification } from 'element-ui';
  6. const jwt = require('jsonwebtoken');
  7. Vue.use(Vuex);
  8. const api = {
  9. interface: `/api/auth/login`,
  10. getUser: `/api/auth/token`,
  11. logout: '/api/auth/logout',
  12. getMenu: `/api/auth/user/menus`,
  13. updatePassword: '/api/user/pwd_edit',
  14. };
  15. const state = () => ({});
  16. const mutations = {};
  17. const actions = {
  18. /**
  19. user:Object required 登陆信息
  20. router:router 如果跳转就传
  21. path:String 跳转到的路由位置
  22. needReturn: Boolean 是否返回结果
  23. typeCheck: Boolean 是否检查身份对应匹配的前端项目
  24. isWx: Boolean 是否是微信登陆
  25. needNotice:Boolean 是否需要提示
  26. */
  27. async login({ commit, dispatch }, { user, router, path = '/', needReturn = false, typeCheck = false, isWx = false, needNotice = true }) {
  28. let res;
  29. //wx登陆,openid存在,user中是openid和qrcode;正常登陆,user中是mobile和passwd
  30. if (isWx) res = await this.$axios.$post(`${api.wxLogin}`, user);
  31. else res = await this.$axios.$post(`${api.interface}`, user);
  32. const setUser = async (token, commit) => {
  33. localStorage.setItem('token', token);
  34. let userInfo = await dispatch('toGetUser');
  35. return userInfo;
  36. };
  37. let userInfo = {};
  38. if (res.errcode == '0') {
  39. userInfo = await setUser(res.data.key, commit);
  40. Notification({
  41. title: '登录成功',
  42. // message: `欢迎,${user.user_name}`,
  43. type: 'success',
  44. duration: 2000,
  45. offset: 50,
  46. });
  47. return userInfo;
  48. } else {
  49. if (needReturn) return res;
  50. else {
  51. Notification({
  52. title: '登录失败',
  53. message: `失败原因:${res.errmsg || '登陆失败'}`,
  54. type: 'error',
  55. });
  56. }
  57. }
  58. },
  59. async toGetUser({ commit }, payload) {
  60. let key = localStorage.getItem('token');
  61. if (!key) {
  62. if (_.isFunction(payload)) {
  63. payload();
  64. return;
  65. }
  66. console.log('游客身份');
  67. let user = localStorage.getItem('user');
  68. if (user) {
  69. commit('setUser', JSON.parse(user), { root: true });
  70. } else {
  71. let stamp = new Date().getTime();
  72. let name = `游客${stamp}`;
  73. let obj = { name, suid: stamp, role: '7' };
  74. localStorage.setItem('user', JSON.stringify(obj));
  75. commit('setUser', obj, { root: true });
  76. }
  77. return;
  78. }
  79. console.log('用户');
  80. let res = await axios.post(api.getUser, { key: key });
  81. let user = {};
  82. if (res.data.errcode == '0') {
  83. let token = _.get(res, `data.data.token`);
  84. if (token) {
  85. user = jwt.decode(token);
  86. // console.log(user);
  87. commit('setUser', user, { root: true });
  88. }
  89. }
  90. return user;
  91. },
  92. async toGetMenu({ commit }, payload) {
  93. const res = await this.$axios.$get(api.getMenu, payload);
  94. return res;
  95. },
  96. async logout({ commit }, payload) {
  97. window.localStorage.removeItem('user');
  98. let key = localStorage.removeItem('token');
  99. const res = await this.$axios.$post(api.logout, { key: key });
  100. commit('deleteUser');
  101. },
  102. async update({ commit }, payload) {
  103. let res = await this.$axios.$post(`${api.updatePassword}`, {
  104. data: payload,
  105. });
  106. return res;
  107. },
  108. async bind({ commit }, payload) {
  109. let res = await this.$axios.$post(`${api.bind}`, payload);
  110. return res;
  111. },
  112. async userBind({ commit }, payload) {
  113. let res = await this.$axios.$post(`${api.userBind}`, payload);
  114. return res;
  115. },
  116. async getQrcode({ commit }, payload) {
  117. let res = await this.$axios.$get(`${api.connection}`);
  118. if (res.errcode === 0) return res.data;
  119. else {
  120. console.warn('请求qrcode失败');
  121. }
  122. },
  123. async wxCheck({ commit }, payload) {
  124. let res = await this.$axios.$post(`${api.wxCheck}`, payload);
  125. return res;
  126. },
  127. };
  128. export default {
  129. namespaced: true,
  130. state,
  131. mutations,
  132. actions,
  133. };