OfficeSystem/store/user.js
2025-11-05 16:55:10 +08:00

114 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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