OfficeSystem/store/user.js

114 lines
2.5 KiB
JavaScript
Raw Normal View History

2025-11-05 16:51:07 +08:00
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)
}
}
})