From ddf1a092b1e7683ebf94be9a910c72b359e9ba21 Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 20 Feb 2026 22:56:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E7=99=BB=E5=BD=95=E5=90=8E?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E3=80=81?= =?UTF-8?q?App=E5=90=AF=E5=8A=A8=E5=88=B7=E6=96=B0=E3=80=81=E6=88=91?= =?UTF-8?q?=E7=9A=84=E9=A1=B5=E9=9D=A2=E4=B8=8B=E6=8B=89=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 用户store新增fetchUserInfo action,调用/userInfo接口获取完整用户信息 - 登录页修复:LoginResponse只有token和userId,登录成功后调用fetchUserInfo获取资料 - App.vue启动时若已登录自动刷新用户信息 - 我的页面onShow时刷新用户信息,新增下拉刷新支持 - pages.json为我的页面启用enablePullDownRefresh --- uniapp/App.vue | 5 +++++ uniapp/api/user.js | 8 ++++++++ uniapp/pages.json | 3 ++- uniapp/pages/login/index.vue | 27 ++++++++++----------------- uniapp/pages/mine/index.vue | 18 +++++++++++++++--- uniapp/store/user.js | 24 ++++++++++++++++++++++++ 6 files changed, 64 insertions(+), 21 deletions(-) diff --git a/uniapp/App.vue b/uniapp/App.vue index d309a94..0557d78 100644 --- a/uniapp/App.vue +++ b/uniapp/App.vue @@ -12,6 +12,11 @@ // 恢复用户状态 const userStore = useUserStore() userStore.restoreFromStorage() + + // 已登录时从服务器刷新用户信息 + if (userStore.isLoggedIn) { + userStore.fetchUserInfo() + } }, onShow: function() { console.log('App Show') diff --git a/uniapp/api/user.js b/uniapp/api/user.js index 5631587..de027dc 100644 --- a/uniapp/api/user.js +++ b/uniapp/api/user.js @@ -4,6 +4,14 @@ import { get, post } from './request' +/** + * 获取当前登录用户信息 + * @returns {Promise} 用户信息 + */ +export function getUserInfo() { + return get('/userInfo') +} + /** * 获取用户详情 */ diff --git a/uniapp/pages.json b/uniapp/pages.json index 8b8eef5..ceb1d91 100644 --- a/uniapp/pages.json +++ b/uniapp/pages.json @@ -19,7 +19,8 @@ "path": "pages/mine/index", "style": { "navigationStyle": "custom", - "navigationBarTitleText": "我的" + "navigationBarTitleText": "我的", + "enablePullDownRefresh": true } }, { diff --git a/uniapp/pages/login/index.vue b/uniapp/pages/login/index.vue index fcd06b4..28fbc5a 100644 --- a/uniapp/pages/login/index.vue +++ b/uniapp/pages/login/index.vue @@ -129,30 +129,26 @@ async function handleGetPhoneNumber(e) { uni.hideLoading() if (res && res.code === 0 && res.data) { - // 保存登录信息(包含 refreshToken) + // 保存登录信息(LoginResponse 只有 token 和 userId) userStore.login({ token: res.data.token, refreshToken: res.data.refreshToken, userInfo: { - userId: res.data.userId, - uid: res.data.uid, - nickname: res.data.nickname, - avatar: res.data.avatar, - phone: res.data.phone, - userLevel: res.data.userLevel || 1 + userId: res.data.userId } }) + // 登录成功后获取完整用户信息 + await userStore.fetchUserInfo() + uni.showToast({ title: '登录成功', icon: 'success' }) // 延迟返回 setTimeout(() => { if (redirectUrl.value) { - // 如果有重定向地址,跳转到指定页面 uni.redirectTo({ url: redirectUrl.value, fail: () => { - // 如果是 tabBar 页面,使用 switchTab uni.switchTab({ url: redirectUrl.value, fail: () => { @@ -162,7 +158,6 @@ async function handleGetPhoneNumber(e) { } }) } else { - // 否则返回上一页 uni.navigateBack() } }, 1000) @@ -216,20 +211,18 @@ async function handleLogin() { uni.hideLoading() if (res && res.code === 0 && res.data) { - // 保存登录信息(包含 refreshToken) + // 保存登录信息(LoginResponse 只有 token 和 userId) userStore.login({ token: res.data.token, refreshToken: res.data.refreshToken, userInfo: { - userId: res.data.userId, - uid: res.data.uid, - nickname: res.data.nickname, - avatar: res.data.avatar, - phone: res.data.phone, - userLevel: res.data.userLevel || 1 + userId: res.data.userId } }) + // 登录成功后获取完整用户信息 + await userStore.fetchUserInfo() + uni.showToast({ title: '登录成功', icon: 'success' }) // 延迟返回 diff --git a/uniapp/pages/mine/index.vue b/uniapp/pages/mine/index.vue index e1913ee..a771434 100644 --- a/uniapp/pages/mine/index.vue +++ b/uniapp/pages/mine/index.vue @@ -106,7 +106,7 @@ * 展示用户信息和功能入口 */ import { ref, computed, onMounted } from 'vue' -import { onShow } from '@dcloudio/uni-app' +import { onShow, onPullDownRefresh } from '@dcloudio/uni-app' import { useUserStore } from '@/store/user.js' import { useNavbar } from '@/composables/useNavbar.js' @@ -249,10 +249,22 @@ function handleLogout() { } /** - * 页面显示时恢复用户状态 + * 页面显示时刷新用户信息 */ onShow(() => { - userStore.restoreFromStorage() + if (userStore.isLoggedIn) { + userStore.fetchUserInfo() + } +}) + +/** + * 下拉刷新 + */ +onPullDownRefresh(async () => { + if (userStore.isLoggedIn) { + await userStore.fetchUserInfo() + } + uni.stopPullDownRefresh() }) /** diff --git a/uniapp/store/user.js b/uniapp/store/user.js index ed0fd51..86ff5e3 100644 --- a/uniapp/store/user.js +++ b/uniapp/store/user.js @@ -8,6 +8,7 @@ import { getRefreshToken, setRefreshToken, removeRefreshToken, getUserInfo, setUserInfo, removeUserInfo } from '../utils/storage.js' +import { getUserInfo as fetchUserInfoApi } from '../api/user.js' /** 用户等级常量 */ export const USER_LEVEL = { @@ -111,6 +112,29 @@ export const useUserStore = defineStore('user', { }) }, + /** + * 从服务器获取用户信息 + * 登录后、App启动时、下拉刷新时调用 + */ + async fetchUserInfo() { + try { + const res = await fetchUserInfoApi() + if (res && res.code === 0 && res.data) { + const d = res.data + this.updateUserInfo({ + userId: d.Id ?? d.id, + uid: d.Uid ?? d.uid, + nickname: d.Nickname ?? d.nickname, + avatar: d.Headimg ?? d.headimg, + phone: d.Mobile ?? d.mobile, + userLevel: d.Vip ?? d.vip ?? USER_LEVEL.NORMAL + }) + } + } catch (e) { + console.warn('获取用户信息失败:', e) + } + }, + /** * 从存储恢复用户状态 */