useUserInfo.js
2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
* 用户信息获取 composable
* 提供统一的用户信息获取逻辑
*
* @Date: 2026-01-18
* @Description: 统一获取用户信息,处理缓存和错误
*/
import { ref } from 'vue'
import { getUserInfoAPI } from '@/api/users'
/**
* @function useUserInfo
* @description 提供用户信息获取功能
* @returns {Object} 包含用户信息状态和方法的对象
*/
export function useUserInfo() {
// 用户信息状态
const userInfo = ref(null)
const loading = ref(false)
const error = ref(null)
/**
* 刷新用户信息
* @returns {Promise<Object>} 用户信息对象
* @throws {Error} 获取失败时抛出错误
*/
const refreshUserInfo = async () => {
loading.value = true
error.value = null
try {
const { code, data, msg } = await getUserInfoAPI()
if (code === 1) {
userInfo.value = data
// 合并用户和打卡数据
const mergedUser = {
...data.user,
...data.checkin
}
// 更新本地存储
localStorage.setItem('currentUser', JSON.stringify(mergedUser))
loading.value = false
return mergedUser
} else {
throw new Error(msg || '获取用户信息失败')
}
} catch (err) {
error.value = err.message || '获取用户信息失败'
loading.value = false
throw err
}
}
/**
* 从本地存储获取用户信息(不发起网络请求)
* @returns {Object|null} 用户信息对象,如果不存在则返回 null
*/
const getUserInfoFromLocal = () => {
try {
const savedUser = localStorage.getItem('currentUser')
return savedUser ? JSON.parse(savedUser) : null
} catch (err) {
console.error('解析本地用户信息失败:', err)
return null
}
}
/**
* 清除本地用户信息
*/
const clearUserInfo = () => {
userInfo.value = null
localStorage.removeItem('currentUser')
}
/**
* 初始化用户信息(优先从本地存储,必要时刷新)
* @param {boolean} [forceRefresh=false] - 是否强制刷新,忽略本地缓存
* @returns {Promise<Object|null>} 用户信息对象
*/
const initUserInfo = async (forceRefresh = false) => {
if (!forceRefresh) {
const localUser = getUserInfoFromLocal()
if (localUser) {
userInfo.value = localUser
return localUser
}
}
return await refreshUserInfo()
}
return {
userInfo,
loading,
error,
refreshUserInfo,
getUserInfoFromLocal,
clearUserInfo,
initUserInfo
}
}