|
|
@ -47,7 +47,7 @@ Page({ |
|
|
console.log('加载用户信息 - userId:', userId, 'openid:', openid ? '已获取' : '未获取') |
|
|
console.log('加载用户信息 - userId:', userId, 'openid:', openid ? '已获取' : '未获取') |
|
|
|
|
|
|
|
|
if (userId && openid) { |
|
|
if (userId && openid) { |
|
|
// 从服务器获取最新的用户信息,确保手机号是最新的
|
|
|
// 从服务器获取最新的用户信息,确保身份由数据库决定
|
|
|
this.refreshUserInfoFromServer(openid, userId) |
|
|
this.refreshUserInfoFromServer(openid, userId) |
|
|
|
|
|
|
|
|
// 确保users存储结构存在
|
|
|
// 确保users存储结构存在
|
|
|
@ -62,11 +62,19 @@ Page({ |
|
|
wx.setStorageSync('users', users) |
|
|
wx.setStorageSync('users', users) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 先显示本地存储的用户类型,但会被服务器返回的最新值覆盖
|
|
|
const user = users[userId] |
|
|
const user = users[userId] |
|
|
const currentType = this.formatUserType(user.type) |
|
|
const currentType = this.formatUserType(user.type) |
|
|
this.setData({ userType: currentType }) |
|
|
this.setData({ userType: currentType }) |
|
|
console.log('加载用户信息 - 当前用户类型:', currentType) |
|
|
console.log('加载用户信息 - 当前本地存储的用户类型:', currentType) |
|
|
|
|
|
|
|
|
|
|
|
// 先使用本地存储的用户类型更新标签,后续会被服务器返回的最新值覆盖
|
|
|
|
|
|
this.updateUserTags(userId, user.type) |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 更新用户标签
|
|
|
|
|
|
updateUserTags(userId, userType) { |
|
|
// 确保tags存储结构存在
|
|
|
// 确保tags存储结构存在
|
|
|
let tags = wx.getStorageSync('tags') |
|
|
let tags = wx.getStorageSync('tags') |
|
|
if (!tags) { |
|
|
if (!tags) { |
|
|
@ -84,7 +92,6 @@ Page({ |
|
|
|
|
|
|
|
|
// 使用indexOf替代includes以解决Babel兼容性问题
|
|
|
// 使用indexOf替代includes以解决Babel兼容性问题
|
|
|
let firstCategoryTag = [] |
|
|
let firstCategoryTag = [] |
|
|
let identityTags = [] |
|
|
|
|
|
|
|
|
|
|
|
// 查找第一个偏好品类标签
|
|
|
// 查找第一个偏好品类标签
|
|
|
for (let i = 0; i < userTags.length; i++) { |
|
|
for (let i = 0; i < userTags.length; i++) { |
|
|
@ -97,33 +104,23 @@ Page({ |
|
|
// 合并保留的标签
|
|
|
// 合并保留的标签
|
|
|
let filteredTags = [...firstCategoryTag] |
|
|
let filteredTags = [...firstCategoryTag] |
|
|
|
|
|
|
|
|
// 始终根据当前用户类型显示对应的身份标签,而不是使用存储的标签
|
|
|
// 始终根据当前用户类型显示对应的身份标签
|
|
|
if (user.type && user.type !== '') { |
|
|
if (userType && userType !== '') { |
|
|
let identityLabel = '身份:not_set' |
|
|
let identityLabel = 'identity:not_set' |
|
|
switch (user.type) { |
|
|
switch (userType) { |
|
|
case 'buyer': identityLabel = '身份:buyer'; break |
|
|
case 'buyer': identityLabel = 'identity:buyer'; break |
|
|
case 'seller': identityLabel = '身份:seller'; break |
|
|
case 'seller': identityLabel = 'identity:seller'; break |
|
|
case 'both': identityLabel = '身份:buyer+seller'; break |
|
|
case 'both': identityLabel = 'identity:buyer+seller'; break |
|
|
} |
|
|
} |
|
|
filteredTags.push(identityLabel) |
|
|
filteredTags.push(identityLabel) |
|
|
console.log('加载用户信息 - 根据当前用户类型显示身份标签:', identityLabel) |
|
|
console.log('加载用户信息 - 根据当前用户类型显示身份标签:', identityLabel) |
|
|
} else { |
|
|
|
|
|
// 如果没有用户类型,但有存储的身份标签,显示第一个
|
|
|
|
|
|
for (let i = 0; i < userTags.length; i++) { |
|
|
|
|
|
if (userTags[i].indexOf('身份') !== -1) { |
|
|
|
|
|
filteredTags.push(userTags[i]) |
|
|
|
|
|
console.log('加载用户信息 - 显示存储的身份标签:', userTags[i]) |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
console.log('加载用户信息 - 过滤后的标签:', filteredTags) |
|
|
console.log('加载用户信息 - 过滤后的标签:', filteredTags) |
|
|
this.setData({ userTags: filteredTags }) |
|
|
this.setData({ userTags: filteredTags }) |
|
|
} |
|
|
|
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 从服务器刷新用户信息
|
|
|
// 从服务器刷新用户信息并同步身份数据
|
|
|
refreshUserInfoFromServer(openid, userId) { |
|
|
refreshUserInfoFromServer(openid, userId) { |
|
|
const API = require('../../utils/api.js') |
|
|
const API = require('../../utils/api.js') |
|
|
|
|
|
|
|
|
@ -144,7 +141,12 @@ Page({ |
|
|
wx.setStorageSync('userInfo', updatedUserInfo) |
|
|
wx.setStorageSync('userInfo', updatedUserInfo) |
|
|
this.setData({ userInfo: updatedUserInfo }) |
|
|
this.setData({ userInfo: updatedUserInfo }) |
|
|
|
|
|
|
|
|
console.log('用户信息已更新,昵称:', updatedUserInfo.nickName, '手机号:', updatedUserInfo.phoneNumber) |
|
|
// 同步更新用户身份信息(当前身份由数据库决定)
|
|
|
|
|
|
if (serverUserInfo.type) { |
|
|
|
|
|
this.syncUserTypeFromServer(userId, serverUserInfo.type) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
console.log('用户信息已更新,昵称:', updatedUserInfo.nickName, '手机号:', updatedUserInfo.phoneNumber, '身份:', serverUserInfo.type) |
|
|
} |
|
|
} |
|
|
}).catch(err => { |
|
|
}).catch(err => { |
|
|
console.error('从服务器获取用户信息失败:', err) |
|
|
console.error('从服务器获取用户信息失败:', err) |
|
|
@ -166,6 +168,11 @@ Page({ |
|
|
wx.setStorageSync('userInfo', updatedUserInfo) |
|
|
wx.setStorageSync('userInfo', updatedUserInfo) |
|
|
this.setData({ userInfo: updatedUserInfo }) |
|
|
this.setData({ userInfo: updatedUserInfo }) |
|
|
|
|
|
|
|
|
|
|
|
// 同步更新用户身份信息(当前身份由数据库决定)
|
|
|
|
|
|
if (serverUserInfo.type) { |
|
|
|
|
|
this.syncUserTypeFromServer(userId, serverUserInfo.type) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
console.log('用户信息已更新(备选方案):', updatedUserInfo) |
|
|
console.log('用户信息已更新(备选方案):', updatedUserInfo) |
|
|
} |
|
|
} |
|
|
}).catch(validateErr => { |
|
|
}).catch(validateErr => { |
|
|
@ -175,62 +182,103 @@ Page({ |
|
|
}) |
|
|
}) |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 格式化用户类型显示
|
|
|
// 从服务器同步用户身份信息
|
|
|
formatUserType(type) { |
|
|
syncUserTypeFromServer(userId, serverType) { |
|
|
switch (type) { |
|
|
if (!userId || !serverType) { |
|
|
case 'buyer': return '买家' |
|
|
console.error('同步用户身份信息失败: 参数不完整') |
|
|
case 'seller': return '卖家' |
|
|
return |
|
|
case 'both': return '买家+卖家' |
|
|
} |
|
|
default: return '未设置' |
|
|
|
|
|
|
|
|
console.log('从服务器同步用户身份信息:', { userId, serverType }) |
|
|
|
|
|
|
|
|
|
|
|
// 更新本地存储的用户身份
|
|
|
|
|
|
let users = wx.getStorageSync('users') || {} |
|
|
|
|
|
if (!users[userId]) { |
|
|
|
|
|
users[userId] = {} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 只有当服务器返回的身份与本地不同时才更新
|
|
|
|
|
|
if (users[userId].type !== serverType) { |
|
|
|
|
|
users[userId].type = serverType |
|
|
|
|
|
wx.setStorageSync('users', users) |
|
|
|
|
|
|
|
|
|
|
|
// 更新全局用户类型
|
|
|
|
|
|
const app = getApp() |
|
|
|
|
|
app.globalData.userType = serverType |
|
|
|
|
|
|
|
|
|
|
|
// 更新页面显示的用户类型
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
userType: this.formatUserType(serverType) |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
console.log('用户身份已从服务器同步:', serverType) |
|
|
|
|
|
} else { |
|
|
|
|
|
console.log('用户身份与服务器一致,无需更新:', serverType) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 更新用户标签
|
|
|
|
|
|
this.updateUserTags(userId, serverType) |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 格式化用户类型显示 - 直接返回数据库中的type字段值
|
|
|
|
|
|
formatUserType(type) { |
|
|
|
|
|
return type || 'not_set' |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 设置为买家
|
|
|
// 设置为买家
|
|
|
setAsBuyer() { |
|
|
setAsBuyer() { |
|
|
this.switchUserType('buyer', '买家') |
|
|
this.switchUserType('buyer', 'buyer') |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 设置为卖家
|
|
|
// 设置为卖家
|
|
|
setAsSeller() { |
|
|
setAsSeller() { |
|
|
this.switchUserType('seller', '卖家') |
|
|
this.switchUserType('seller', 'seller') |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 切换用户类型的通用方法
|
|
|
// 切换用户类型的通用方法
|
|
|
switchUserType(newType, typeName) { |
|
|
switchUserType(newType, typeName) { |
|
|
const userId = wx.getStorageSync('userId') |
|
|
const userId = wx.getStorageSync('userId') |
|
|
const openid = wx.getStorageSync('openid') |
|
|
const openid = wx.getStorageSync('openid') |
|
|
const userInfo = wx.getStorageSync('userInfo') |
|
|
|
|
|
|
|
|
|
|
|
if (!userId || !openid) { |
|
|
if (!userId || !openid) { |
|
|
wx.navigateTo({ url: '/pages/index/index' }) |
|
|
wx.navigateTo({ url: '/pages/index/index' }) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 更新本地存储中的用户类型
|
|
|
// 显示操作中的提示
|
|
|
let users = wx.getStorageSync('users') || {} |
|
|
wx.showLoading({ title: 'Switching...' }) |
|
|
if (!users[userId]) { |
|
|
|
|
|
users[userId] = {} |
|
|
|
|
|
} |
|
|
|
|
|
users[userId].type = newType |
|
|
|
|
|
wx.setStorageSync('users', users) |
|
|
|
|
|
|
|
|
|
|
|
// 更新全局数据
|
|
|
// 引入API服务
|
|
|
const app = getApp() |
|
|
const API = require('../../utils/api.js') |
|
|
app.globalData.userType = newType |
|
|
|
|
|
|
|
|
|
|
|
// 上传更新后的用户信息到服务器
|
|
|
// 使用API更新用户类型,确保与服务器同步
|
|
|
this.uploadUserTypeToServer(openid, userId, userInfo, newType) |
|
|
API.updateUserType(newType).then(res => { |
|
|
|
|
|
console.log('用户类型更新成功:', res) |
|
|
|
|
|
|
|
|
// 更新页面显示
|
|
|
// 更新页面显示
|
|
|
|
|
|
const app = getApp() |
|
|
this.setData({ |
|
|
this.setData({ |
|
|
userType: this.formatUserType(newType) |
|
|
userType: this.formatUserType(app.globalData.userType) |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
// 更新用户标签
|
|
|
|
|
|
this.updateUserTags(userId, app.globalData.userType) |
|
|
|
|
|
|
|
|
wx.showToast({ |
|
|
wx.showToast({ |
|
|
title: `已切换为${typeName}`, |
|
|
title: `Switched to ${typeName}`, |
|
|
icon: 'success', |
|
|
icon: 'success', |
|
|
duration: 2000 |
|
|
duration: 2000 |
|
|
}) |
|
|
}) |
|
|
|
|
|
}).catch(err => { |
|
|
|
|
|
console.error('用户类型更新失败:', err) |
|
|
|
|
|
wx.showToast({ |
|
|
|
|
|
title: 'Failed to switch, please retry', |
|
|
|
|
|
icon: 'none', |
|
|
|
|
|
duration: 2000 |
|
|
|
|
|
}) |
|
|
|
|
|
}).finally(() => { |
|
|
|
|
|
wx.hideLoading() |
|
|
|
|
|
}) |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 上传用户类型到服务器
|
|
|
// 上传用户类型到服务器
|
|
|
|