1
This commit is contained in:
+27
-32
@@ -62,7 +62,7 @@
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
import { updatePhoneNumber } from '@/http/api/auth.js'
|
||||
import { wxPhoneLogin } from '@/http/api/auth.js'
|
||||
import {
|
||||
savePhoneAuthData,
|
||||
markPhoneSkipped,
|
||||
@@ -164,53 +164,48 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
// 调用后端API验证手机号
|
||||
// 调用后端API进行手机号登录
|
||||
const phoneData = {
|
||||
code: loginCode,
|
||||
encryptedData: e.detail.encryptedData,
|
||||
iv: e.detail.iv
|
||||
}
|
||||
|
||||
console.log(phoneData)
|
||||
|
||||
console.log('准备调用手机号更新API:', {
|
||||
hasEncryptedData: !!phoneData.encryptedData,
|
||||
hasIv: !!phoneData.iv,
|
||||
apiUrl: '/user/wechat/mini/phone-update'
|
||||
})
|
||||
|
||||
// 调用手机号更新API(需要用户已登录)
|
||||
const phoneNumber = await updatePhoneNumber({
|
||||
encryptedData: phoneData.encryptedData,
|
||||
iv: phoneData.iv
|
||||
}, {
|
||||
// 调用手机号登录API
|
||||
const result = await wxPhoneLogin(phoneData, {
|
||||
custom: {
|
||||
loading: false, // 使用页面自己的loading状态
|
||||
catch: true // 确保错误能被catch到
|
||||
}
|
||||
})
|
||||
|
||||
console.log('手机号更新成功:', phoneNumber)
|
||||
// 处理登录结果
|
||||
if (result && result.token) {
|
||||
// 保存手机号登录数据
|
||||
savePhoneAuthData({
|
||||
token: result.token,
|
||||
refreshToken: result.refreshToken,
|
||||
userInfo: result.userInfo || result
|
||||
})
|
||||
|
||||
// 更新本地用户信息
|
||||
const userInfo = authStore.userInfo
|
||||
if (userInfo) {
|
||||
userInfo.phone = phoneNumber
|
||||
authStore.setUserInfo(userInfo)
|
||||
uni.showToast({
|
||||
title: '手机号授权成功',
|
||||
icon: 'success',
|
||||
duration: 1500
|
||||
})
|
||||
|
||||
// 跳转到用户信息设置页面
|
||||
setTimeout(() => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/profile/user-info?mode=setup'
|
||||
})
|
||||
}, 1500)
|
||||
} else {
|
||||
throw new Error('手机号登录失败')
|
||||
}
|
||||
|
||||
uni.showToast({
|
||||
title: '手机号更新成功',
|
||||
icon: 'success'
|
||||
})
|
||||
|
||||
// 返回上一页
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 1500)
|
||||
|
||||
} catch (error) {
|
||||
console.error('手机号更新失败:', error)
|
||||
console.error('手机号授权失败:', error)
|
||||
handleError(error)
|
||||
} finally {
|
||||
authorizing.value = false
|
||||
|
||||
+96
-16
@@ -2,7 +2,7 @@
|
||||
<view class="profile-container page-container-unified">
|
||||
<!-- 用户信息卡片 -->
|
||||
<view class="user-info-card">
|
||||
<view class="user-avatar-section" :class="{ 'logged-in': userInfo.nickName }" @click="handleUserAction">
|
||||
<view class="user-avatar-section" :class="{ 'logged-in': isLoggedIn }" @click="handleUserAction">
|
||||
<view class="avatar-wrapper">
|
||||
<u-avatar
|
||||
:src="userInfo.avatarUrl || ''"
|
||||
@@ -13,19 +13,19 @@
|
||||
color="white"
|
||||
font-size="40"
|
||||
></u-avatar>
|
||||
<view class="online-status" v-if="userInfo.nickName">
|
||||
<view class="online-status" v-if="isLoggedIn">
|
||||
<view class="status-dot"></view>
|
||||
</view>
|
||||
<!-- 登录提示图标,仅在未登录时显示 -->
|
||||
<view class="login-hint" v-if="!userInfo.nickName">
|
||||
<view class="login-hint" v-if="!isLoggedIn">
|
||||
<text class="hint-icon">👋</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="user-info-section">
|
||||
<view class="user-name">{{ userInfo.nickName || '点击头像登录' }}</view>
|
||||
<view class="user-status">{{ userInfo.nickName ? '已登录' : '未登录' }}</view>
|
||||
<view class="login-days" v-if="userInfo.nickName">已使用 {{ loginDays }} 天</view>
|
||||
<view class="user-name">{{ isLoggedIn ? (userInfo.nickName || '用户') : '点击头像登录' }}</view>
|
||||
<view class="user-status">{{ isLoggedIn ? '已登录' : '未登录' }}</view>
|
||||
<view class="login-days" v-if="isLoggedIn">已使用 {{ loginDays }} 天</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
@@ -143,7 +143,7 @@
|
||||
<script>
|
||||
import { reactive, ref, onMounted, computed } from 'vue'
|
||||
import { uploadImage } from '@/http/api/common.js'
|
||||
import { updateUserInfo } from '@/http/api/profile.js'
|
||||
import { getUserInfo, getWxUserInfo, updateUserInfo } from '@/http/api/profile.js'
|
||||
|
||||
export default {
|
||||
name: 'ProfilePage',
|
||||
@@ -156,6 +156,11 @@ export default {
|
||||
|
||||
const loginDays = ref(0)
|
||||
|
||||
// 计算属性
|
||||
const isLoggedIn = computed(() => {
|
||||
return !!uni.getStorageSync('token')
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -182,12 +187,69 @@ export default {
|
||||
|
||||
// 方法定义
|
||||
const initPage = () => {
|
||||
loadUserInfo()
|
||||
loadUserStats()
|
||||
const token = uni.getStorageSync('token')
|
||||
if (token) {
|
||||
// 有token时加载用户信息和统计数据
|
||||
loadUserInfo()
|
||||
loadUserStats()
|
||||
} else {
|
||||
// 没有token时只加载本地缓存的用户信息(如果有)
|
||||
const savedUserInfo = uni.getStorageSync('userInfo')
|
||||
if (savedUserInfo) {
|
||||
userInfo.value = savedUserInfo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const loadUserInfo = () => {
|
||||
// 尝试从本地存储加载用户信息
|
||||
const loadUserInfo = async () => {
|
||||
const token = uni.getStorageSync('token')
|
||||
|
||||
if (!token) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
// 优先获取微信用户信息
|
||||
const wxUserInfo = await getWxUserInfo({
|
||||
custom: {
|
||||
loading: false,
|
||||
toast: false
|
||||
}
|
||||
})
|
||||
|
||||
if (wxUserInfo) {
|
||||
userInfo.value = wxUserInfo
|
||||
// 同步到本地存储
|
||||
uni.setStorageSync('userInfo', wxUserInfo)
|
||||
uni.setStorageSync('wxUserInfo', wxUserInfo)
|
||||
calculateLoginDays()
|
||||
return
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('获取微信用户信息失败,尝试获取基本用户信息:', error)
|
||||
|
||||
// 微信用户信息获取失败,尝试获取基本用户信息
|
||||
try {
|
||||
const apiUserInfo = await getUserInfo({
|
||||
custom: {
|
||||
loading: false,
|
||||
toast: false
|
||||
}
|
||||
})
|
||||
|
||||
if (apiUserInfo) {
|
||||
userInfo.value = apiUserInfo
|
||||
// 同步到本地存储
|
||||
uni.setStorageSync('userInfo', apiUserInfo)
|
||||
calculateLoginDays()
|
||||
return
|
||||
}
|
||||
} catch (basicError) {
|
||||
console.log('获取基本用户信息也失败,使用本地缓存:', basicError)
|
||||
}
|
||||
}
|
||||
|
||||
// API获取失败时,尝试从本地存储加载用户信息
|
||||
const savedUserInfo = uni.getStorageSync('userInfo')
|
||||
if (savedUserInfo) {
|
||||
userInfo.value = savedUserInfo
|
||||
@@ -267,9 +329,16 @@ export default {
|
||||
})
|
||||
}
|
||||
|
||||
const handleUserAction = () => {
|
||||
// 直接跳转到个人信息设置,如果需要登录会在API调用时自动处理
|
||||
navigateTo('/pages/profile/user-info')
|
||||
const handleUserAction = async () => {
|
||||
const token = uni.getStorageSync('token')
|
||||
|
||||
if (token) {
|
||||
// 有token,直接跳转到个人信息设置
|
||||
navigateTo('/pages/profile/user-info')
|
||||
} else {
|
||||
// 没有token,跳转到登录页面
|
||||
navigateTo('/pages/login/login')
|
||||
}
|
||||
}
|
||||
|
||||
// 统一的页面导航方法
|
||||
@@ -323,11 +392,13 @@ export default {
|
||||
|
||||
// 刷新页面数据
|
||||
const refreshData = () => {
|
||||
// 只刷新统计数据,用户信息在initPage时已加载
|
||||
loadUserStats()
|
||||
}
|
||||
|
||||
// 页面显示时刷新数据
|
||||
const onShow = () => {
|
||||
// 只刷新数据,不重复调用loadUserInfo
|
||||
refreshData()
|
||||
}
|
||||
|
||||
@@ -365,6 +436,7 @@ export default {
|
||||
return {
|
||||
userInfo,
|
||||
loginDays,
|
||||
isLoggedIn,
|
||||
petStats,
|
||||
familyStats,
|
||||
adoptionStats,
|
||||
@@ -384,11 +456,19 @@ export default {
|
||||
|
||||
// 页面生命周期
|
||||
onShow() {
|
||||
this.onShow()
|
||||
// 重新检查登录状态并刷新数据
|
||||
const token = uni.getStorageSync('token')
|
||||
|
||||
if (token) {
|
||||
// 有token时总是重新获取最新用户信息
|
||||
this.loadUserInfo()
|
||||
}
|
||||
this.refreshData()
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.onPullDownRefresh()
|
||||
this.refreshData()
|
||||
uni.stopPullDownRefresh()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user