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