rhb-server/mes-ui/rhb-app/utils/UserUtil.js

289 lines
6.4 KiB
JavaScript
Raw Normal View History

2025-10-20 11:14:41 +08:00
/**
* 用户信息管理工具类
* 基于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 }