1
This commit is contained in:
239
utils/userManager.js
Normal file
239
utils/userManager.js
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user