daShangDao_newAdmin/src/store/Index.js

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
}
})