/** * 用户信息管理工具类 * 基于Vue2语法,用于管理用户登录信息、个人信息等 */ import { config } from './config.js' /** * 用户信息管理类 */ class UserUtil { constructor() { // 用户信息存储键名 this.USER_INFO_KEY = 'userInfo' this.LOGIN_INFO_KEY = config.storageKeys.LOGIN_INFO this.DICT_INFO_KEY = 'dictInfo' this.USERNAME_KEY = 'RHBUSER' this.PASSWORD_KEY = 'RHBPWD' } /** * 保存用户登录信息 * @param {Object} loginData - 登录返回的数据 * @param {string} loginData.accessToken - 访问令牌 * @param {string} loginData.refreshToken - 刷新令牌 * @param {string} loginData.userId - 用户ID * @param {string} loginData.username - 用户名 * @param {Object} loginData.userInfo - 用户详细信息 */ setLoginInfo(loginData) { try { const loginInfo = { accessToken: loginData.accessToken, refreshToken: loginData.refreshToken, userId: loginData.userId, username: loginData.username, loginTime: new Date().toISOString() } // 保存登录信息 uni.setStorageSync(this.LOGIN_INFO_KEY, loginInfo) // 如果有用户详细信息,也保存 if (loginData.userInfo) { this.setUserInfo(loginData.userInfo) } return true } catch (error) { return false } } /** * 获取用户登录信息 * @returns {Object|null} 登录信息对象或null */ getLoginInfo() { try { const loginInfo = uni.getStorageSync(this.LOGIN_INFO_KEY) return loginInfo || null } catch (error) { return null } } /** * 保存用户详细信息 * @param {Object} userInfo - 用户详细信息 */ setUserInfo(userInfo) { try { this.clearUserInfo(); uni.setStorageSync(this.USER_INFO_KEY, userInfo) return true } catch (error) { return false } } /** * 获取用户详细信息 * @returns {Object|null} 用户详细信息或null */ getUserInfo() { try { const userInfo = uni.getStorageSync(this.USER_INFO_KEY) return userInfo || null } catch (error) { return null } } /** * 保存字典信息 * @param {Array} dictInfo - 字典信息数组 */ setDictInfo(dictInfo) { try { uni.setStorageSync(this.DICT_INFO_KEY, dictInfo) return true } catch (error) { return false } } /** * 获取字典信息 * @returns {Array} 字典信息数组 */ getDictInfo() { try { const dictInfo = uni.getStorageSync(this.DICT_INFO_KEY) return dictInfo || [] } catch (error) { console.error('获取字典信息失败:', error) return [] } } /** * 保存用户名和密码(可选,用于自动登录) * @param {string} username - 用户名 * @param {string} password - 密码 */ setCredentials(username, password) { try { uni.setStorageSync(this.USERNAME_KEY, username) uni.setStorageSync(this.PASSWORD_KEY, password) return true } catch (error) { return false } } /** * 获取保存的用户名和密码 * @returns {Object} 包含username和password的对象 */ getCredentials() { try { const username = uni.getStorageSync(this.USERNAME_KEY) const password = uni.getStorageSync(this.PASSWORD_KEY) return { username, password } } catch (error) { console.error('获取用户凭据失败:', error) return { username: null, password: null } } } /** * 检查用户是否已登录 * @returns {boolean} 是否已登录 */ isLoggedIn() { const loginInfo = this.getLoginInfo() if (!loginInfo || !loginInfo.accessToken) { return false } // 检查token是否过期(可选) if (loginInfo.loginTime) { const loginTime = new Date(loginInfo.loginTime) const now = new Date() const diffHours = (now - loginTime) / (1000 * 60 * 60) // 如果超过24小时,认为token过期 if (diffHours > 24) { this.clearAll() return false } } return true } /** * 获取访问令牌 * @returns {string|null} 访问令牌 */ getAccessToken() { const loginInfo = this.getLoginInfo() return loginInfo ? loginInfo.accessToken : null } /** * 获取用户ID * @returns {string|null} 用户ID */ getUserId() { const loginInfo = this.getLoginInfo() return loginInfo ? loginInfo.userId : null } /** * 获取用户名 * @returns {string|null} 用户名 */ getUsername() { const loginInfo = this.getLoginInfo() return loginInfo ? loginInfo.username : null } /** * 清除所有用户信息 */ clearAll() { try { uni.removeStorageSync(this.LOGIN_INFO_KEY) uni.removeStorageSync(this.USER_INFO_KEY) uni.removeStorageSync(this.DICT_INFO_KEY) uni.removeStorageSync(this.USERNAME_KEY) uni.removeStorageSync(this.PASSWORD_KEY) return true } catch (error) { return false } } /** * 清除登录信息(保留用户名密码) */ clearUserInfo() { try { uni.removeStorageSync(this.USER_INFO_KEY) return true } catch (error) { return false } } clearLoginInfo() { try { uni.removeStorageSync(this.LOGIN_INFO_KEY) uni.removeStorageSync(this.USER_INFO_KEY) uni.removeStorageSync(this.DICT_INFO_KEY) return true } catch (error) { return false } } /** * 清除用户凭据 */ clearCredentials() { try { uni.removeStorageSync(this.USERNAME_KEY) uni.removeStorageSync(this.PASSWORD_KEY) return true } catch (error) { return false } } /** * 更新用户信息 * @param {Object} newUserInfo - 新的用户信息 */ updateUserInfo(newUserInfo) { try { const currentUserInfo = this.getUserInfo() || {} const updatedUserInfo = { ...currentUserInfo, ...newUserInfo } this.setUserInfo(updatedUserInfo) return true } catch (error) { return false } } /** * 获取完整的用户信息(登录信息 + 详细信息) * @returns {Object} 完整的用户信息 */ getFullUserInfo() { const loginInfo = this.getLoginInfo() const userInfo = this.getUserInfo() return { ...loginInfo, ...userInfo } } } // 创建单例实例 const userUtil = new UserUtil() // 导出实例和类 export default userUtil export { UserUtil }