ソースを参照

feat: 优化头像选择逻辑,增加详细调试信息和错误处理

mcbaiyun 3 ヶ月 前
コミット
2a3ee76dc1
1 ファイル変更25 行追加1 行削除
  1. 25 1
      src/pages/login/login.vue

+ 25 - 1
src/pages/login/login.vue

@@ -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' })
   }
 }