143 lines
2.9 KiB
JavaScript
143 lines
2.9 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
import config from '@/config'
|
|
|
|
export const useUserStore = defineStore('user', () => {
|
|
// State
|
|
const token = ref('')
|
|
const refreshToken = ref('')
|
|
const userInfo = ref(null)
|
|
|
|
// Getters
|
|
const isLoggedIn = computed(() => !!token.value)
|
|
const userName = computed(() => userInfo.value?.name || '')
|
|
const userAvatar = computed(() => userInfo.value?.avatar || '')
|
|
const userId = computed(() => userInfo.value?.id || '')
|
|
|
|
// Actions
|
|
|
|
/**
|
|
* 设置 Token
|
|
* @param {string} newToken
|
|
*/
|
|
function setToken(newToken) {
|
|
token.value = newToken
|
|
uni.setStorageSync(config.storage.token, newToken)
|
|
}
|
|
|
|
/**
|
|
* 设置刷新 Token
|
|
* @param {string} newRefreshToken
|
|
*/
|
|
function setRefreshToken(newRefreshToken) {
|
|
refreshToken.value = newRefreshToken
|
|
uni.setStorageSync('app_refresh_token', newRefreshToken)
|
|
}
|
|
|
|
/**
|
|
* 设置用户信息
|
|
* @param {object} info
|
|
*/
|
|
function setUserInfo(info) {
|
|
userInfo.value = info
|
|
uni.setStorageSync(config.storage.userInfo, JSON.stringify(info))
|
|
}
|
|
|
|
/**
|
|
* 获取用户信息
|
|
* @returns {object|null}
|
|
*/
|
|
function getUserInfo() {
|
|
return userInfo.value
|
|
}
|
|
|
|
/**
|
|
* 从本地存储初始化
|
|
*/
|
|
function initFromStorage() {
|
|
// 获取 Token
|
|
const savedToken = uni.getStorageSync(config.storage.token)
|
|
if (savedToken) {
|
|
token.value = savedToken
|
|
}
|
|
|
|
// 获取刷新 Token
|
|
const savedRefreshToken = uni.getStorageSync('app_refresh_token')
|
|
if (savedRefreshToken) {
|
|
refreshToken.value = savedRefreshToken
|
|
}
|
|
|
|
// 获取用户信息
|
|
const savedUserInfo = uni.getStorageSync(config.storage.userInfo)
|
|
if (savedUserInfo) {
|
|
try {
|
|
userInfo.value = JSON.parse(savedUserInfo)
|
|
} catch (e) {
|
|
console.error('解析用户信息失败:', e)
|
|
userInfo.value = null
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 清除用户数据
|
|
*/
|
|
function clearUserData() {
|
|
token.value = ''
|
|
refreshToken.value = ''
|
|
userInfo.value = null
|
|
|
|
// 清除本地存储
|
|
uni.removeStorageSync(config.storage.token)
|
|
uni.removeStorageSync('app_refresh_token')
|
|
uni.removeStorageSync(config.storage.userInfo)
|
|
}
|
|
|
|
/**
|
|
* 登出
|
|
*/
|
|
function logout() {
|
|
clearUserData()
|
|
|
|
// 跳转到登录页
|
|
uni.reLaunch({
|
|
url: '/pages/login/index'
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 更新用户信息
|
|
* @param {object} data
|
|
*/
|
|
function updateUserInfo(data) {
|
|
userInfo.value = {
|
|
...userInfo.value,
|
|
...data
|
|
}
|
|
uni.setStorageSync(config.storage.userInfo, JSON.stringify(userInfo.value))
|
|
}
|
|
|
|
return {
|
|
// State
|
|
token,
|
|
refreshToken,
|
|
userInfo,
|
|
|
|
// Getters
|
|
isLoggedIn,
|
|
userName,
|
|
userAvatar,
|
|
userId,
|
|
|
|
// Actions
|
|
setToken,
|
|
setRefreshToken,
|
|
setUserInfo,
|
|
getUserInfo,
|
|
initFromStorage,
|
|
clearUserData,
|
|
logout,
|
|
updateUserInfo
|
|
}
|
|
})
|