feat(user): 登录后获取用户信息、App启动刷新、我的页面下拉刷新
- 用户store新增fetchUserInfo action,调用/userInfo接口获取完整用户信息 - 登录页修复:LoginResponse只有token和userId,登录成功后调用fetchUserInfo获取资料 - App.vue启动时若已登录自动刷新用户信息 - 我的页面onShow时刷新用户信息,新增下拉刷新支持 - pages.json为我的页面启用enablePullDownRefresh
This commit is contained in:
parent
d35fbe319a
commit
ddf1a092b1
|
|
@ -12,6 +12,11 @@
|
|||
// 恢复用户状态
|
||||
const userStore = useUserStore()
|
||||
userStore.restoreFromStorage()
|
||||
|
||||
// 已登录时从服务器刷新用户信息
|
||||
if (userStore.isLoggedIn) {
|
||||
userStore.fetchUserInfo()
|
||||
}
|
||||
},
|
||||
onShow: function() {
|
||||
console.log('App Show')
|
||||
|
|
|
|||
|
|
@ -4,6 +4,14 @@
|
|||
|
||||
import { get, post } from './request'
|
||||
|
||||
/**
|
||||
* 获取当前登录用户信息
|
||||
* @returns {Promise<Object>} 用户信息
|
||||
*/
|
||||
export function getUserInfo() {
|
||||
return get('/userInfo')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户详情
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
"path": "pages/mine/index",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "我的"
|
||||
"navigationBarTitleText": "我的",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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' })
|
||||
|
||||
// 延迟返回
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
})
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 从存储恢复用户状态
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user