美文网首页
store 里面添加登录,退出。重新获取权限

store 里面添加登录,退出。重新获取权限

作者: 冰落寞成 | 来源:发表于2023-02-22 16:00 被阅读0次
    1677139157364.png

    modules 添加user.js

    
    import { setStore, getStore, removeStore } from '@/utils/tools'
    import {
      getInfo, login as loginApi, logout as logoutApi
    } from '@/api'
    // import { login, logout, getInfo } from '@/api'
    const user = {
      namespaced: false,
      state: {
        userId: getStore('userId'), // 当前用户id
        account: getStore('account'), // 用户账号
        name: '', // 用户真实姓名
        perms: [], // 权限路径
        roles: [], // 权限路径
        phonenumber: '', // 当前用户手机号
        token: getStore('token') // 系统token
      },
      mutations: {
        SET_TOKEN (state, val) {
          state.token = val
          if (val) {
            setStore('token', val)
          } else {
            removeStore('token')
          }
        },
        SET_USER_ID (state, val) {
          // console.log('SET_USER_ID', val, val || val === 0)
          state.userId = val
          if (val || val === 0) {
            setStore('userId', val)
          } else {
            removeStore('userId')
          }
        },
        SET_PERMS (state, val) {
          state.perms = val || []
        },
        SET_ROLES (state, val) {
          state.roles = val || []
        },
        SET_ACCOUNT (state, val) {
          state.account = val
          if (val) {
            setStore('account', val)
          } else {
            removeStore('account')
          }
        },
        SET_NAME (state, val) {
          state.name = val
        },
        SET_PHONE (state, val) {
          state.phonenumber = val
        }
      },
      actions: {
        // 登录
        login ({ commit, state }, val) {
          return new Promise((resolve, reject) => {
            loginApi(val).then(res => {
              console.log('res', res, res.code === 200)
              if (res.code === 200) {
                commit('SET_TOKEN', res?.data?.token)
                setUserInfo(commit, res?.data)
                return resolve()
              } else {
                return reject(res)
              }
            }).catch(err => {
              console.log(err)
              return reject(err)
            })
          })
        },
        logOut ({ commit }) {
          return new Promise((resolve, reject) => {
            logoutApi().then(res => {
              if (res.code === 200) {
                commit('SET_TOKEN', '')
                setUserInfo(commit)
                // commit('SET_SYSTEM_LABEL', '')
                return resolve(res)
              } else {
                return reject(res)
              }
            }).catch(err => {
              return reject(err)
            })
          })
        },
        // 重加载用户信息
        reloadUserInfo ({ commit, state, getters }) {
          return new Promise((resolve, reject) => {
            getInfo().then(res => {
              if (res?.code === 200) {
                setUserInfo(commit, res.data.user)
                return resolve(getters.getPerms)
              } else {
                return reject(res)
              }
            }).catch(err => {
              return reject(err)
            })
          })
        },
        // 清空用户信息
        clearUserInfo ({ commit }) {
          commit('SET_TOKEN', '')
          commit('SET_SYSTEM_LABEL', '')
          setUserInfo(commit)
        }
      }
    }
    
    function setUserInfo (commit, data = {}) {
      // console.log('data', data?.id)
      commit('SET_USER_ID', data?.id || '')
      commit('SET_ACCOUNT', data?.account || '')
      commit('SET_NAME', data?.name || '')
      commit('SET_PHONE', data?.phonenumber || '')
      commit('SET_PERMS', data?.perms ? data?.perms.map(p => p?.pval) : [])
      commit('SET_ROLES', data?.roles ? data?.roles.map(r => r?.grade) : [])
    }
    
    export default user
    
    

    getters.js

    const getters = {
      token: state => state.user.token,
      getUserId: state => state.user.userId,
      getPerms: state => state.user.perms
    }
    export default getters
    
    

    index.js
    ···
    import Vue from 'vue'
    import Vuex from 'vuex'
    import user from './modules/user'
    import getters from './getters'
    Vue.use(Vuex)
    const store = new Vuex.Store({
    modules: {
    user
    },
    getters
    })

    export default store

    ···

    相关文章

      网友评论

          本文标题:store 里面添加登录,退出。重新获取权限

          本文链接:https://www.haomeiwen.com/subject/djpakdtx.html