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