xlb-main-login
Version:
``` yarn install ```
163 lines (154 loc) • 4.98 kB
JavaScript
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