import Vue from 'vue'; import Vuex from 'vuex'; import axios from 'axios'; import _ from 'lodash'; import { Notification } from 'element-ui'; const jwt = require('jsonwebtoken'); Vue.use(Vuex); const api = { interface: `/api/auth/login`, getUser: `/api/auth/token`, logout: '/api/auth/logout', getMenu: `/api/auth/user/menus`, updatePassword: '/api/user/pwd_edit', }; const state = () => ({}); const mutations = {}; const actions = { /** user:Object required 登陆信息 router:router 如果跳转就传 path:String 跳转到的路由位置 needReturn: Boolean 是否返回结果 typeCheck: Boolean 是否检查身份对应匹配的前端项目 isWx: Boolean 是否是微信登陆 needNotice:Boolean 是否需要提示 */ async login({ commit, dispatch }, { user, router, path = '/', needReturn = false, typeCheck = false, isWx = false, needNotice = true }) { let res; //wx登陆,openid存在,user中是openid和qrcode;正常登陆,user中是mobile和passwd if (isWx) res = await this.$axios.$post(`${api.wxLogin}`, user); else res = await this.$axios.$post(`${api.interface}`, user); const setUser = async (token, commit) => { localStorage.setItem('token', token); let userInfo = await dispatch('toGetUser'); return userInfo; }; let userInfo = {}; if (res.errcode == '0') { userInfo = await setUser(res.data.key, commit); Notification({ title: '登录成功', // message: `欢迎,${user.user_name}`, type: 'success', duration: 2000, }); return userInfo; } else { if (needReturn) return res; else { Notification({ title: '登录失败', message: `失败原因:${res.errmsg || '登陆失败'}`, type: 'error', }); } } }, async toGetUser({ commit }, payload) { let key = localStorage.getItem('token'); if (!key) { if (_.isFunction(payload)) { payload(); return; } console.log('游客身份'); let user = localStorage.getItem('user'); if (user) { commit('setUser', JSON.parse(user), { root: true }); } else { let stamp = new Date().getTime(); let name = `游客${stamp}`; localStorage.setItem('user', JSON.stringify({ name })); commit('setUser', { name }, { root: true }); } return; } console.log('用户'); let res = await axios.post(api.getUser, { key: key }); let user = {}; if (res.data.errcode == '0') { let token = _.get(res, `data.data.token`); if (token) { user = jwt.decode(token); commit('setUser', user, { root: true }); } } return user; }, async toGetMenu({ commit }, payload) { const res = await this.$axios.$get(api.getMenu, payload); return res; }, async logout({ commit }, payload) { let key = localStorage.removeItem('token'); const res = await this.$axios.$post(api.logout, { key: key }); commit('deleteUser'); }, async update({ commit }, payload) { let res = await this.$axios.$post(`${api.updatePassword}`, { data: payload, }); return res; }, async bind({ commit }, payload) { let res = await this.$axios.$post(`${api.bind}`, payload); return res; }, async userBind({ commit }, payload) { let res = await this.$axios.$post(`${api.userBind}`, payload); return res; }, async getQrcode({ commit }, payload) { let res = await this.$axios.$get(`${api.connection}`); if (res.errcode === 0) return res.data; else { console.warn('请求qrcode失败'); } }, async wxCheck({ commit }, payload) { let res = await this.$axios.$post(`${api.wxCheck}`, payload); return res; }, }; export default { namespaced: true, state, mutations, actions, };