114 lines
2.5 KiB
JavaScript
114 lines
2.5 KiB
JavaScript
import { defineStore } from 'pinia'
|
||
|
||
/**
|
||
* 用户信息 Store
|
||
* 用于管理用户登录状态、token等信息
|
||
*/
|
||
export const useUserStore = defineStore('user', {
|
||
state: () => {
|
||
return {
|
||
// 用户 token
|
||
token: uni.getStorageSync('token') || '',
|
||
// 用户信息
|
||
userInfo: uni.getStorageSync('userInfo') || null,
|
||
// token 过期时间(可选)
|
||
tokenExpireTime: uni.getStorageSync('tokenExpireTime') || null
|
||
}
|
||
},
|
||
|
||
getters: {
|
||
/**
|
||
* 判断是否已登录
|
||
*/
|
||
isLogin: (state) => {
|
||
return !!state.token
|
||
},
|
||
|
||
/**
|
||
* 获取用户 token
|
||
*/
|
||
getToken: (state) => {
|
||
return state.token
|
||
},
|
||
|
||
/**
|
||
* 获取用户信息
|
||
*/
|
||
getUserInfo: (state) => {
|
||
return state.userInfo
|
||
},
|
||
|
||
/**
|
||
* 判断 token 是否过期(如果设置了过期时间)
|
||
*/
|
||
isTokenExpired: (state) => {
|
||
if (!state.tokenExpireTime) return false
|
||
return Date.now() > state.tokenExpireTime
|
||
}
|
||
},
|
||
|
||
actions: {
|
||
/**
|
||
* 设置 token
|
||
* @param {string} token - 用户 token
|
||
* @param {number} expireTime - 过期时间(可选,时间戳)
|
||
*/
|
||
setToken(token, expireTime = null) {
|
||
this.token = token
|
||
this.tokenExpireTime = expireTime
|
||
|
||
// 同步到本地存储
|
||
uni.setStorageSync('token', token)
|
||
if (expireTime) {
|
||
uni.setStorageSync('tokenExpireTime', expireTime)
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 设置用户信息
|
||
* @param {object} userInfo - 用户信息对象
|
||
*/
|
||
setUserInfo(userInfo) {
|
||
this.userInfo = userInfo
|
||
uni.setStorageSync('userInfo', userInfo)
|
||
},
|
||
|
||
/**
|
||
* 登录
|
||
* @param {string} token - 用户 token
|
||
* @param {object} userInfo - 用户信息(可选)
|
||
* @param {number} expireTime - 过期时间(可选)
|
||
*/
|
||
login(token, userInfo = null, expireTime = null) {
|
||
this.setToken(token, expireTime)
|
||
if (userInfo) {
|
||
this.setUserInfo(userInfo)
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 退出登录
|
||
*/
|
||
logout() {
|
||
this.token = ''
|
||
this.userInfo = null
|
||
this.tokenExpireTime = null
|
||
|
||
// 清除本地存储
|
||
uni.removeStorageSync('token')
|
||
uni.removeStorageSync('userInfo')
|
||
uni.removeStorageSync('tokenExpireTime')
|
||
},
|
||
|
||
/**
|
||
* 更新 token(用于 token 刷新)
|
||
* @param {string} token - 新的 token
|
||
* @param {number} expireTime - 过期时间(可选)
|
||
*/
|
||
updateToken(token, expireTime = null) {
|
||
this.setToken(token, expireTime)
|
||
}
|
||
}
|
||
})
|
||
|