rhb-server/mes-ui/rhb-app/utils/UserUtil.js
2025-10-20 11:14:41 +08:00

289 lines
6.4 KiB
JavaScript
Raw Permalink 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.

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