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