import { setToken, getToken } from '../utils/tools' import uiTool from '../utils/uiTool' // 注意:这里的 userServer 需要在使用时注入 let userServerInstance = null export const setUserServer = (server) => { userServerInstance = server } export default { namespaced: true, state: { userName: '', avatorImgPath: '', token: getToken(), authorityMenus: [], menuList: [] }, mutations: { setAvator(state, avatorPath) { state.avatorImgPath = avatorPath }, setUserName(state, userName) { state.userName = userName localStorage.userName = state.userName }, setToken(state, token) { state.token = token setToken(token) }, setAuthorityMenus(state, menus) { state.authorityMenus = menus localStorage.authorityMenus = menus }, setMenuList(state, menus) { state.menuList = menus } }, getters: { avatorImgPath: state => state.avatorImgPath, userName(state) { if (!state.userName) { state.userName = localStorage.userName } return state.userName }, menuList: state => state.menuList }, actions: { async setAuthorityMenus({ state, commit }, { Main, ParentView, Page404 }) { if (!userServerInstance) { console.error('userServer not initialized') return } let res = await userServerInstance.authorityMenus() let authorityMenus = res.data commit('setAuthorityMenus', JSON.stringify(authorityMenus)) let mainMenu = uiTool.getRoutes(Main, ParentView, Page404) commit('setMenuList', mainMenu.children) }, async handleLogin({ state, commit, dispatch }, { userFrom, Main, ParentView, Page404 }) { if (!userServerInstance) { throw new Error('userServer not initialized') } let promise = new Promise(async (resolve, reject) => { try { let res = await userServerInstance.login(userFrom) let token = res.data.token let name = res.data.user.name.trim() commit('setUserName', name) commit('setToken', token) await dispatch('setAuthorityMenus', { Main, ParentView, Page404 }) resolve(res) } catch (error) { reject(error) } }) return promise }, async handleLogOut({ state, commit }, vue) { commit('setToken', '') commit('setAuthorityMenus', '[]') window.location.reload() } } }