| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /**
- * @description 登录、获取用户信息、退出登录、清除token逻辑,不建议修改
- */
- import Vue from 'vue'
- import userApi from '@/api/system/user'
- import { getToken, removeToken, setToken } from '@/utils/token'
- import { resetRouter } from '@/router'
- import { isArray, isString } from '@/utils/validate'
- import { title, tokenName } from '@/config'
- const state = () => ({
- id: '',
- token: getToken(),
- username: '游客',
- avatar: 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif',
- })
- const getters = {
- id: (state) => state.id,
- token: (state) => state.token,
- username: (state) => state.username,
- avatar: (state) => state.avatar,
- }
- const mutations = {
- /**
- * @description 设置token
- * @param {*} state
- * @param {*} token
- */
- setToken(state, token) {
- state.token = token
- setToken(token)
- },
- /**
- * @description 设置用户名
- * @param {*} state
- * @param {*} username
- */
- setUsername(state, username) {
- state.username = username
- },
- setUserId(state, id) {
- state.id = id
- },
- /**
- * @description 设置头像
- * @param {*} state
- * @param {*} avatar
- */
- setAvatar(state, avatar) {
- state.avatar = avatar
- },
- }
- const actions = {
- /**
- * @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(未开启登录拦截)')
- },
- /**
- * @description 登录
- * @param {*} { commit }
- * @param {*} userInfo
- */
- async login({ commit }, userInfo) {
- const {
- data: { [tokenName]: token },
- } = await userApi.login(userInfo)
- if (token) {
- commit('setToken', token)
- const hour = new Date().getHours()
- const thisTime =
- hour < 8 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 18 ? '下午好' : '晚上好'
- Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`)
- } else {
- const err = `登录接口异常,未正确返回${tokenName}...`
- Vue.prototype.$baseMessage(err, 'error', 'vab-hey-message-error')
- throw err
- }
- },
- /**
- * @description 获取用户信息接口 这个接口非常非常重要,如果没有明确底层前逻辑禁止修改此方法,错误的修改可能造成整个框架无法正常使用
- * @param {*} { commit, dispatch, state }
- * @returns
- */
- async getUserInfo({ commit, dispatch }) {
- // const {
- // data: { username, avatar, roles, permissions },
- // } = await userApi.getUserInfo()
- // console.log(username, avatar, roles, permissions)
- const res = await userApi.getUserInfo()
- const userId = res.data.entity.id
- const username = res.data.entity.userName
- const avatar = res.data.entity.avatar
- let roles
- let permissions
- /**
- * 检验返回数据是否正常,无对应参数,将使用默认用户名,头像,Roles和Permissions
- * username {String}
- * avatar {String}
- * roles {List}
- * ability {List}
- */
- if (
- (username && !isString(username)) ||
- (avatar && !isString(avatar)) ||
- (roles && !isArray(roles)) ||
- (permissions && !isArray(permissions))
- ) {
- const err = 'getUserInfo核心接口异常,请检查返回JSON格式是否正确'
- Vue.prototype.$baseMessage(err, 'error', 'vab-hey-message-error')
- throw err
- } else {
- // 如不使用username用户名,可删除以下代码
- if (userId) commit('setUserId', userId)
- // 如不使用username用户名,可删除以下代码
- if (username) commit('setUsername', username)
- // 如不使用avatar头像,可删除以下代码
- if (avatar) commit('setAvatar', avatar)
- // 如不使用roles权限控制,可删除以下代码
- if (roles) dispatch('acl/setRole', roles, { root: true })
- // 如不使用permissions权限控制,可删除以下代码
- if (permissions) dispatch('acl/setPermission', permissions, { root: true })
- }
- },
- /**
- * @description 退出登录
- * @param {*} { dispatch }
- */
- async logout({ dispatch }) {
- await userApi.logout()
- await dispatch('resetAll')
- },
- /**
- * @description 重置token、roles、permission、router、tabsBar等
- * @param {*} { commit, dispatch }
- */
- async resetAll({ commit, dispatch }) {
- commit('setUsername', '游客')
- commit('setAvatar', 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif')
- commit('routes/setRoutes', [], { root: true })
- await dispatch('setToken', '')
- await dispatch('acl/setFull', false, { root: true })
- await dispatch('acl/setRole', [], { root: true })
- await dispatch('acl/setPermission', [], { root: true })
- await dispatch('tabs/delAllVisitedRoutes', null, { root: true })
- await resetRouter()
- removeToken()
- },
- /**
- * @description 设置token
- * @param {*} { commit }
- * @param {*} token
- */
- setToken({ commit }, token) {
- commit('setToken', token)
- },
- /**
- * @description 设置头像
- * @param {*} { commit }
- * @param {*} avatar
- */
- setAvatar({ commit }, avatar) {
- commit('setAvatar', avatar)
- },
- }
- export default { state, getters, mutations, actions }
|