Files
ZhiQiXiaoYuan/utils/userManager.js
ChuXun eaab9a762a 1
2025-10-19 20:28:31 +08:00

240 lines
5.7 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.
/**
* 用户信息管理工具
* 统一处理用户信息的存储和读取,确保数据一致性
*/
/**
* 保存用户信息
* @param {Object} userInfo - 用户信息对象
*/
function saveUserInfo(userInfo) {
if (!userInfo) {
console.error('保存用户信息失败userInfo为空')
return false
}
try {
// 标准化用户信息格式
const standardizedUserInfo = {
// 统一使用 nickname 和 avatar 作为主字段
nickname: userInfo.nickname || userInfo.nickName || '同学',
avatar: userInfo.avatar || userInfo.avatarUrl || '/images/avatar-default.png',
// 保留原始字段以兼容旧代码
nickName: userInfo.nickname || userInfo.nickName || '同学',
avatarUrl: userInfo.avatar || userInfo.avatarUrl || '/images/avatar-default.png',
// 其他字段
gender: userInfo.gender || 0,
country: userInfo.country || '',
province: userInfo.province || '',
city: userInfo.city || '',
isLogin: userInfo.isLogin || false,
loginTime: userInfo.loginTime || new Date().getTime(),
// 保留其他可能的自定义字段
...userInfo
}
// 保存到本地存储
wx.setStorageSync('userInfo', standardizedUserInfo)
console.log('用户信息保存成功:', standardizedUserInfo)
return true
} catch (error) {
console.error('保存用户信息失败:', error)
return false
}
}
/**
* 获取用户信息
* @returns {Object|null} 用户信息对象如果不存在则返回null
*/
function getUserInfo() {
try {
let userInfo = wx.getStorageSync('userInfo')
if (userInfo) {
// 标准化数据结构
const standardizedUserInfo = {
nickname: userInfo.nickname || userInfo.nickName || '同学',
avatar: userInfo.avatar || userInfo.avatarUrl || '/images/avatar-default.png',
nickName: userInfo.nickname || userInfo.nickName || '同学',
avatarUrl: userInfo.avatar || userInfo.avatarUrl || '/images/avatar-default.png',
gender: userInfo.gender || 0,
country: userInfo.country || '',
province: userInfo.province || '',
city: userInfo.city || '',
isLogin: userInfo.isLogin || false,
loginTime: userInfo.loginTime || 0,
...userInfo
}
// 如果发现数据结构不一致,自动更新
if (!userInfo.nickname || !userInfo.avatar) {
saveUserInfo(standardizedUserInfo)
}
return standardizedUserInfo
}
return null
} catch (error) {
console.error('获取用户信息失败:', error)
return null
}
}
/**
* 更新用户信息(部分更新)
* @param {Object} updates - 要更新的字段
*/
function updateUserInfo(updates) {
if (!updates) {
console.error('更新用户信息失败updates为空')
return false
}
try {
const currentUserInfo = getUserInfo() || {}
const updatedUserInfo = {
...currentUserInfo,
...updates
}
// 确保统一字段
if (updates.nickname) {
updatedUserInfo.nickName = updates.nickname
}
if (updates.avatar) {
updatedUserInfo.avatarUrl = updates.avatar
}
if (updates.nickName) {
updatedUserInfo.nickname = updates.nickName
}
if (updates.avatarUrl) {
updatedUserInfo.avatar = updates.avatarUrl
}
return saveUserInfo(updatedUserInfo)
} catch (error) {
console.error('更新用户信息失败:', error)
return false
}
}
/**
* 更新用户昵称
* @param {String} nickname - 新昵称
*/
function updateNickname(nickname) {
if (!nickname || !nickname.trim()) {
console.error('昵称不能为空')
return false
}
return updateUserInfo({
nickname: nickname.trim(),
nickName: nickname.trim()
})
}
/**
* 更新用户头像
* @param {String} avatar - 新头像路径
*/
function updateAvatar(avatar) {
if (!avatar) {
console.error('头像路径不能为空')
return false
}
return updateUserInfo({
avatar: avatar,
avatarUrl: avatar
})
}
/**
* 清除用户信息(退出登录)
*/
function clearUserInfo() {
try {
// 保留昵称和头像,仅标记为未登录
const currentUserInfo = getUserInfo()
if (currentUserInfo) {
const logoutUserInfo = {
nickname: currentUserInfo.nickname,
avatar: currentUserInfo.avatar,
isLogin: false
}
saveUserInfo(logoutUserInfo)
} else {
wx.removeStorageSync('userInfo')
}
console.log('用户信息已清除')
return true
} catch (error) {
console.error('清除用户信息失败:', error)
return false
}
}
/**
* 检查用户是否已登录
* @returns {Boolean} 是否已登录
*/
function isUserLogin() {
const userInfo = getUserInfo()
return userInfo && userInfo.isLogin === true
}
/**
* 获取用户昵称
* @returns {String} 用户昵称
*/
function getNickname() {
const userInfo = getUserInfo()
return userInfo ? userInfo.nickname : '同学'
}
/**
* 获取用户头像
* @returns {String} 用户头像路径
*/
function getAvatar() {
const userInfo = getUserInfo()
return userInfo ? userInfo.avatar : '/images/avatar-default.png'
}
/**
* 初始化默认用户信息
*/
function initDefaultUserInfo() {
const userInfo = getUserInfo()
if (!userInfo) {
const defaultUser = {
nickname: '同学',
avatar: '/images/avatar-default.png',
isLogin: false
}
saveUserInfo(defaultUser)
console.log('初始化默认用户信息')
}
}
module.exports = {
saveUserInfo,
getUserInfo,
updateUserInfo,
updateNickname,
updateAvatar,
clearUserInfo,
isUserLogin,
getNickname,
getAvatar,
initDefaultUserInfo
}