5 changed files with 180 additions and 33 deletions
@ -0,0 +1,32 @@ |
|||
import Vue from 'vue' |
|||
import Vuex from 'vuex' |
|||
import user from './modules/user' |
|||
import storage from 'store' |
|||
|
|||
Vue.use(Vuex) |
|||
|
|||
const store = new Vuex.Store({ |
|||
modules: { |
|||
user |
|||
}, |
|||
state: { |
|||
// 全局状态
|
|||
}, |
|||
mutations: { |
|||
// 全局mutations
|
|||
}, |
|||
actions: { |
|||
// 全局actions
|
|||
}, |
|||
getters: { |
|||
// 全局getters
|
|||
} |
|||
}) |
|||
|
|||
// 初始化时从localStorage恢复用户状态
|
|||
const token = storage.get('token') |
|||
if (token) { |
|||
store.commit('user/SET_TOKEN', token) |
|||
} |
|||
|
|||
export default store |
|||
@ -0,0 +1,111 @@ |
|||
import storage from 'store' |
|||
import { login } from '@/api/scinfo' |
|||
|
|||
const user = { |
|||
namespaced: true, |
|||
state: { |
|||
token: '', |
|||
userInfo: null, |
|||
isLoggedIn: false, |
|||
permissions: [] |
|||
}, |
|||
mutations: { |
|||
// 设置token
|
|||
SET_TOKEN(state, token) { |
|||
state.token = token |
|||
state.isLoggedIn = !!token |
|||
}, |
|||
|
|||
// 设置用户信息
|
|||
SET_USER_INFO(state, userInfo) { |
|||
state.userInfo = userInfo |
|||
}, |
|||
|
|||
// 设置权限列表
|
|||
SET_PERMISSIONS(state, permissions) { |
|||
state.permissions = permissions |
|||
}, |
|||
|
|||
// 登出
|
|||
LOGOUT(state) { |
|||
state.token = '' |
|||
state.userInfo = null |
|||
state.isLoggedIn = false |
|||
state.permissions = [] |
|||
storage.remove('token') |
|||
} |
|||
}, |
|||
actions: { |
|||
// 用户登录
|
|||
async login({ commit }, userData) { |
|||
try { |
|||
const res = await login(userData) |
|||
if (res && res.data && res.data.token) { |
|||
// 保存token到localStorage
|
|||
storage.set('token', res.data.token) |
|||
// 更新store状态
|
|||
commit('SET_TOKEN', res.data.token) |
|||
// 如果有用户信息,同时设置
|
|||
if (res.data.userInfo) { |
|||
commit('SET_USER_INFO', res.data.userInfo) |
|||
} |
|||
// 如果有权限信息,设置权限
|
|||
if (res.data.permissions) { |
|||
commit('SET_PERMISSIONS', res.data.permissions) |
|||
} |
|||
return true |
|||
} |
|||
return false |
|||
} catch (error) { |
|||
console.error('登录失败:', error) |
|||
throw error |
|||
} |
|||
}, |
|||
|
|||
// 获取用户信息
|
|||
async getUserInfo({ commit, state }) { |
|||
if (!state.token) return |
|||
|
|||
try { |
|||
// 这里可以调用获取用户信息的API
|
|||
// 暂时模拟数据
|
|||
const userInfo = { |
|||
username: storage.get('username') || '未知用户', |
|||
// 其他用户信息
|
|||
} |
|||
commit('SET_USER_INFO', userInfo) |
|||
return userInfo |
|||
} catch (error) { |
|||
console.error('获取用户信息失败:', error) |
|||
// 信息获取失败,清除登录状态
|
|||
commit('LOGOUT') |
|||
throw error |
|||
} |
|||
}, |
|||
|
|||
// 用户登出
|
|||
logout({ commit }) { |
|||
commit('LOGOUT') |
|||
} |
|||
}, |
|||
getters: { |
|||
// 获取token
|
|||
getToken: state => state.token, |
|||
|
|||
// 获取用户信息
|
|||
getUserInfo: state => state.userInfo, |
|||
|
|||
// 判断是否登录
|
|||
isLoggedIn: state => state.isLoggedIn, |
|||
|
|||
// 获取权限列表
|
|||
getPermissions: state => state.permissions, |
|||
|
|||
// 判断是否有权限
|
|||
hasPermission: state => permission => { |
|||
return state.permissions.includes(permission) |
|||
} |
|||
} |
|||
} |
|||
|
|||
export default user |
|||
Loading…
Reference in new issue