This commit is contained in:
ChuXun
2025-10-19 20:28:31 +08:00
parent c81f8a8b03
commit eaab9a762a
100 changed files with 23416 additions and 0 deletions

239
utils/userManager.js Normal file
View File

@@ -0,0 +1,239 @@
/**
* 用户信息管理工具
* 统一处理用户信息的存储和读取,确保数据一致性
*/
/**
* 保存用户信息
* @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
}