94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
import { createStore } from 'vuex'
|
|
import { adminApi } from '../api/index.js'
|
|
|
|
export default createStore({
|
|
state: {
|
|
accessToken: localStorage.getItem('accessToken') || '', // 短令牌
|
|
refreshToken: localStorage.getItem('refreshToken') || '', // 长令牌
|
|
userInfo: JSON.parse(localStorage.getItem('userInfo')) || null // 用户信息
|
|
},
|
|
mutations: {
|
|
SET_TOKEN(state, data) {
|
|
// 初始化 短令牌
|
|
state.accessToken = data.accessToken
|
|
// 初始化 长令牌
|
|
state.refreshToken = data.refreshToken
|
|
// 缓存到本地
|
|
localStorage.setItem('accessToken', state.accessToken)
|
|
// 缓存到本地
|
|
localStorage.setItem('refreshToken', state.refreshToken)
|
|
},
|
|
CLEAR_AUTH(state) {
|
|
// 清空 短令牌
|
|
state.accessToken = ''
|
|
// 清空 长令牌
|
|
state.refreshToken = ''
|
|
// 清空用户信息
|
|
state.userInfo = null
|
|
// 清除本地缓存
|
|
localStorage.removeItem('accessToken')
|
|
// 清除本地缓存
|
|
localStorage.removeItem('refreshToken')
|
|
// 清除本地缓存
|
|
localStorage.removeItem('userInfo')
|
|
},
|
|
SET_USER_INFO(state, userInfo) {
|
|
// 初始化 用户信息
|
|
state.userInfo = userInfo
|
|
// 缓存到本地
|
|
localStorage.setItem('userInfo', JSON.stringify(state.userInfo))
|
|
}
|
|
},
|
|
actions: {
|
|
async login({commit}, data) {
|
|
try {
|
|
// 调用登录接口
|
|
const response = await adminApi.login(data)
|
|
|
|
// 检查响应状态
|
|
if (response.code !== 200) {
|
|
throw new Error(response.message || '登录失败')
|
|
}
|
|
|
|
// 设置 状态
|
|
commit('SET_TOKEN', response.data)
|
|
|
|
try {
|
|
// 调用查询接口获取用户信息
|
|
const admin = await adminApi.getAdmin()
|
|
|
|
// 检查响应状态
|
|
if (admin.code !== 200) {
|
|
console.error('获取用户信息失败:', admin.message)
|
|
// 不清空认证信息,仅返回警告
|
|
return Promise.resolve('登录成功,但获取用户信息失败')
|
|
}
|
|
|
|
// 设置 管理员信息
|
|
commit('SET_USER_INFO', admin.data)
|
|
} catch (adminError) {
|
|
// 记录错误但不清空认证信息
|
|
console.error('获取用户信息出错:', adminError)
|
|
return Promise.resolve('登录成功,但获取用户信息失败')
|
|
}
|
|
|
|
// 抛出 消息
|
|
return Promise.resolve('登录成功')
|
|
} catch (error) {
|
|
// 清空 状态
|
|
commit('CLEAR_AUTH')
|
|
// 抛出 错误
|
|
return Promise.reject(error)
|
|
}
|
|
},
|
|
logout({commit}) {
|
|
// 清空 状态
|
|
commit('CLEAR_AUTH')
|
|
}
|
|
},
|
|
getters: {
|
|
// 定义 认证属性
|
|
isAuthenticated: state => !!state.accessToken
|
|
}
|
|
})
|