mirror of
https://gitee.com/chu1204505056/vue-admin-beautiful.git
synced 2025-04-06 03:58:00 +08:00
149 lines
4.2 KiB
JavaScript
149 lines
4.2 KiB
JavaScript
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 登录、获取用户信息、退出登录、清除accessToken逻辑,不建议修改
|
||
*/
|
||
import { getUserInfo, login, logout } from '@/api/user'
|
||
import {
|
||
getAccessToken,
|
||
removeAccessToken,
|
||
setAccessToken,
|
||
} from '@/utils/accessToken'
|
||
import { title, tokenName } from '@/config'
|
||
import { message, notification } from 'ant-design-vue'
|
||
|
||
const state = {
|
||
accessToken: getAccessToken(),
|
||
username: '',
|
||
avatar: '',
|
||
}
|
||
const getters = {
|
||
accessToken: (state) => state.accessToken,
|
||
username: (state) => state.username,
|
||
avatar: (state) => state.avatar,
|
||
}
|
||
const mutations = {
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 设置accessToken
|
||
* @param {*} state
|
||
* @param {*} accessToken
|
||
*/
|
||
setAccessToken(state, accessToken) {
|
||
state.accessToken = accessToken
|
||
setAccessToken(accessToken)
|
||
},
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 设置用户名
|
||
* @param {*} state
|
||
* @param {*} username
|
||
*/
|
||
setUsername(state, username) {
|
||
state.username = username
|
||
},
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 设置头像
|
||
* @param {*} state
|
||
* @param {*} avatar
|
||
*/
|
||
setAvatar(state, avatar) {
|
||
state.avatar = avatar
|
||
},
|
||
}
|
||
const actions = {
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 登录拦截放行时,设置虚拟角色
|
||
* @param {*} { commit, dispatch }
|
||
*/
|
||
setVirtualRoles({ commit, dispatch }) {
|
||
dispatch('acl/setFull', true, { root: true })
|
||
commit('setAvatar', 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif')
|
||
commit('setUsername', 'admin(未开启登录拦截)')
|
||
},
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 登录
|
||
* @param {*} { commit }
|
||
* @param {*} userInfo
|
||
*/
|
||
async login({ commit }, userInfo) {
|
||
const { data } = await login(userInfo)
|
||
const accessToken = data[tokenName]
|
||
if (accessToken) {
|
||
commit('setAccessToken', accessToken)
|
||
const hour = new Date().getHours()
|
||
const thisTime =
|
||
hour < 8
|
||
? '早上好'
|
||
: hour <= 11
|
||
? '上午好'
|
||
: hour <= 13
|
||
? '中午好'
|
||
: hour < 18
|
||
? '下午好'
|
||
: '晚上好'
|
||
notification.open({
|
||
message: `欢迎登录${title}`,
|
||
description: `${thisTime}!`,
|
||
})
|
||
} else {
|
||
message.error(`登录接口异常,未正确返回${tokenName}...`)
|
||
}
|
||
},
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 获取用户信息接口 这个接口非常非常重要,如果没有明确底层前逻辑禁止修改此方法,错误的修改可能造成整个框架无法正常使用
|
||
* @param {*} { commit, dispatch, state }
|
||
* @returns
|
||
*/
|
||
async getUserInfo({ commit, dispatch, state }) {
|
||
const { data } = await getUserInfo(state.accessToken)
|
||
if (!data) {
|
||
message.error(`验证失败,请重新登录...`)
|
||
return false
|
||
}
|
||
let { username, avatar, roles, ability } = data
|
||
if (username && roles && Array.isArray(roles)) {
|
||
dispatch('acl/setRole', roles, { root: true })
|
||
if (ability && ability.length > 0)
|
||
dispatch('acl/setAbility', ability, { root: true })
|
||
commit('setUsername', username)
|
||
commit('setAvatar', avatar)
|
||
} else {
|
||
message.error('用户信息接口异常')
|
||
}
|
||
},
|
||
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 退出登录
|
||
* @param {*} { dispatch }
|
||
*/
|
||
async logout({ dispatch }) {
|
||
await logout(state.accessToken)
|
||
await dispatch('resetAll')
|
||
},
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 重置accessToken、roles、ability、router等
|
||
* @param {*} { commit, dispatch }
|
||
*/
|
||
async resetAll({ dispatch }) {
|
||
await dispatch('setAccessToken', '')
|
||
await dispatch('acl/setFull', false, { root: true })
|
||
await dispatch('acl/setRole', [], { root: true })
|
||
await dispatch('acl/setAbility', [], { root: true })
|
||
removeAccessToken()
|
||
},
|
||
/**
|
||
* @author chuzhixin 1204505056@qq.com
|
||
* @description 设置token
|
||
*/
|
||
setAccessToken({ commit }, accessToken) {
|
||
commit('setAccessToken', accessToken)
|
||
},
|
||
}
|
||
export default { state, getters, mutations, actions }
|