289 lines
6.4 KiB
JavaScript
289 lines
6.4 KiB
JavaScript
/**
|
||
* 用户信息管理工具类
|
||
* 基于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 }
|