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