UNPKG

xlb-main-login

Version:

``` yarn install ```

163 lines (154 loc) 4.98 kB
import Vue from 'vue' import { login, getInfo, logout } from '@/api/auth' import { ACCESS_TOKEN } from '@/store/mutation-types' import Cookies from 'js-cookie' import router from '@/router' const user = { state: { token: '', name: '', userId: '', avatar: '', roles: [], permissions: {}, authorized: true, // 已登录 redirectUrl: '', }, mutations: { UPDATE_NAME: (state, name) => { state.name = name }, SET_TOKEN: (state, token) => { state.token = token }, SET_NAME: (state, { name, userId }) => { state.name = name state.userId = userId }, SET_AVATAR: (state, avatar) => { state.avatar = avatar }, SET_ROLES: (state, roles) => { state.roles = roles }, SET_PERMISSIONS: (state, permissions) => { state.permissions = permissions }, ADD_PERMISSIONS: (state, { appCode, permissions }) => { if (state.permissions[appCode]) { state.permissions[appCode] = { ...state.permissions[appCode], ...permissions } } else { state.permissions[appCode] = permissions } }, SET_AUTHORIZED: (state, authorized) => { state.authorized = authorized }, SET_REDIRECTURL: (state, redirectUrl) => { state.redirectUrl = redirectUrl.redirectUrl }, SET_USER_PERMISSIONS_TEMP: (state, data) => { state.userPermissionTemp = data }, SET_USER_PERMISSIONS: (state, data) => { state.userPermission = data }, }, getters: {}, actions: { updateName({ commit }, name) { commit('UPDATE_NAME', name) }, // 登录 login({ commit }, userInfo) { commit('SET_USER_PERMISSIONS_TEMP', null) commit('SET_USER_PERMISSIONS', null) Vue.ls.clear() return new Promise((resolve, reject) => { login(userInfo) .then(async (response) => { const result = response.data // 设置token及失效时间 Vue.ls.set(ACCESS_TOKEN, result['access_token'], result['expiresIn'] * 1000) Cookies.set('login', true) commit('SET_TOKEN', result['access_token']) resolve(response) }) .catch((error) => { reject(error) }) }) }, // 获取用户信息 getInfo({ commit }) { return new Promise((resolve, reject) => { getInfo() .then((response) => { const appName = process.env.VUE_APP_NAME const result = response.data if (result.user.roles) { commit('SET_ROLES', result.user.roles[appName]) commit('SET_INFO', result) } else { reject(new Error('当前用户尚未获得权限')) } commit('SET_REDIRECTURL', { redirectUrl: result.logoutUrl }) resolve(response) }) .catch((error) => { reject(error) }) }) }, // 登出 logout({ commit, state }) { return new Promise((resolve) => { commit('SET_TOKEN', '') Vue.ls.clear() const kefushow = localStorage.getItem('kefushow') window.localStorage.clear() window.sessionStorage.clear() // window.location.reload() localStorage.setItem('kefushow', kefushow) if(window.location.href.indexOf('homereport') !== -1) { router.push({ name: 'login' }) } else { window.location.reload() } resolve({}) // logout({ access_token: state.token }) // .then((res) => { // commit('SET_TOKEN', '') // Vue.ls.clear() // window.localStorage.clear() // window.sessionStorage.clear() // const redirectUrl = state.redirectUrl // // Vue.ls.set('LOGOUT_REDIRECT', res.data.redirecturl) // // 按后端返回跳转 // if (res.data.redirecturl) { // location.href = res.data.redirecturl + '?redirectUrl=' + location.href // } else if (redirectUrl !== '') { // location.href = redirectUrl + '?redirectUrl=' + location.href // } else { // // router.push({ name: 'login' }) // window.location.reload() // } // resolve(res) // }) // .catch((e) => { // console.error(e) // }) // .finally(() => { // Vue.ls.clear() // window.localStorage.clear() // window.sessionStorage.clear() // Cookies.remove('access-token') // Cookies.remove('login') // window.location.reload() // // router.push({ name: 'login' }) // }) }) }, }, } export default user