|
|
@@ -44,75 +44,99 @@ import { onMounted } from 'vue'
|
|
|
import PageTitle from '@/components/PageTitle.vue'
|
|
|
import CustomNav from '@/components/CustomNav.vue'
|
|
|
|
|
|
+// 页面标题,用于导航栏显示
|
|
|
const title = ref('登录')
|
|
|
|
|
|
+// 默认头像URL,用于未选择头像时的显示
|
|
|
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
|
|
|
const avatarUrl = ref(defaultAvatarUrl)
|
|
|
-// 防止重复触发 chooseAvatar 的并发锁
|
|
|
+// 防止重复触发 chooseAvatar 的并发锁,避免多次调用导致错误
|
|
|
const isChoosing = ref(false)
|
|
|
const nickname = ref('')
|
|
|
|
|
|
// 处理chooseAvatar事件回调(微信小程序)
|
|
|
+// 此函数在用户选择头像后被调用,用于更新头像URL和可能的昵称
|
|
|
function onChooseAvatar(e: any) {
|
|
|
+ console.log('onChooseAvatar called with event:', e) // 调试输出:记录事件对象
|
|
|
// 在微信小程序中,e.detail 可能包含 avatarUrl(字符串)或更复杂结构
|
|
|
try {
|
|
|
const detail = e?.detail
|
|
|
+ console.log('Event detail:', detail) // 调试输出:检查detail内容
|
|
|
let url = ''
|
|
|
if (!detail) {
|
|
|
// 兼容某些平台直接传回字符串
|
|
|
url = typeof e === 'string' ? e : ''
|
|
|
+ console.log('No detail, using event as string:', url) // 调试输出:无detail时的处理
|
|
|
} else if (typeof detail === 'string') {
|
|
|
url = detail
|
|
|
+ console.log('Detail is string:', url) // 调试输出:detail为字符串
|
|
|
} else if (detail.avatarUrl) {
|
|
|
url = detail.avatarUrl
|
|
|
+ console.log('Using detail.avatarUrl:', url) // 调试输出:使用avatarUrl字段
|
|
|
} else if (Array.isArray(detail) && detail[0]) {
|
|
|
url = detail[0]
|
|
|
+ console.log('Using first element of array:', url) // 调试输出:数组第一个元素
|
|
|
}
|
|
|
if (url) {
|
|
|
avatarUrl.value = url
|
|
|
+ console.log('Avatar URL updated to:', avatarUrl.value) // 调试输出:头像URL更新
|
|
|
}
|
|
|
// 如果 detail 中包含昵称(某些平台可能提供),尝试填充
|
|
|
if (detail && detail.nickName && !nickname.value) {
|
|
|
nickname.value = detail.nickName
|
|
|
+ console.log('Nickname updated from detail:', nickname.value) // 调试输出:昵称更新
|
|
|
}
|
|
|
} catch (err) {
|
|
|
+ console.error('Error in onChooseAvatar:', err) // 调试输出:捕获错误
|
|
|
// ignore
|
|
|
} finally {
|
|
|
// 无论成功或失败,都在回调后清理并发锁
|
|
|
isChoosing.value = false
|
|
|
+ console.log('isChoosing reset to false') // 调试输出:重置锁
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 在点击(tap)打开 chooseAvatar 之前设置锁,防止重复打开
|
|
|
function startChooseAvatar() {
|
|
|
+ console.log('startChooseAvatar called, current isChoosing:', isChoosing.value) // 调试输出:检查锁状态
|
|
|
if (isChoosing.value) {
|
|
|
// 如果已经在打开中,直接忽略后续点击
|
|
|
+ console.log('Already choosing, ignoring') // 调试输出:忽略重复点击
|
|
|
return
|
|
|
}
|
|
|
isChoosing.value = true
|
|
|
+ console.log('isChoosing set to true') // 调试输出:设置锁
|
|
|
// 为了避免因回调丢失导致一直锁住,设置一个安全超时(3s)作为兜底
|
|
|
setTimeout(() => {
|
|
|
isChoosing.value = false
|
|
|
+ console.log('Timeout: isChoosing reset to false') // 调试输出:超时重置锁
|
|
|
}, 3000)
|
|
|
}
|
|
|
|
|
|
+// 处理昵称输入框失去焦点事件
|
|
|
function onNicknameBlur() {
|
|
|
+ console.log('onNicknameBlur called, current nickname:', nickname.value) // 调试输出:昵称输入
|
|
|
// 微信会在 onBlur 时进行安全检测,若不通过会清空输入,这里仅作默认处理
|
|
|
}
|
|
|
|
|
|
+// 处理表单提交事件
|
|
|
function onSubmit() {
|
|
|
+ console.log('onSubmit called with avatarUrl:', avatarUrl.value, 'nickname:', nickname.value) // 调试输出:提交数据
|
|
|
// 保存用户信息到本地存储(可以改为调用后端或 uni.login + 后端换取 session)
|
|
|
const user = {
|
|
|
avatar: avatarUrl.value,
|
|
|
nickname: nickname.value || '微信用户'
|
|
|
}
|
|
|
+ console.log('User object to save:', user) // 调试输出:用户对象
|
|
|
uni.setStorageSync('user_info', user)
|
|
|
|
|
|
// 如果是在小程序端,使用 navigateBack 或 switchTab 返回个人中心
|
|
|
// 直接尝试使用 switchTab 返回个人中心(若失败则 navigateTo)
|
|
|
try {
|
|
|
+ console.log('Attempting switchTab to profile') // 调试输出:尝试切换标签页
|
|
|
uni.switchTab({ url: '/pages/profile/profile' })
|
|
|
} catch (e) {
|
|
|
+ console.log('switchTab failed, using navigateTo:', e) // 调试输出:切换失败,使用导航
|
|
|
uni.navigateTo({ url: '/pages/profile/profile' })
|
|
|
}
|
|
|
}
|