Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Hooke
/
mlaj
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
hookehuyr
2026-01-18 22:57:35 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
28c27d1f39ee29254fa4410b1d079538a70e611a
28c27d1f
1 parent
8e77f3fb
refactor(auth): 将用户信息构建逻辑提取到单独的可组合函数中
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
52 additions
and
93 deletions
src/composables/useUserInfo.js
src/contexts/auth.js
src/composables/useUserInfo.js
View file @
28c27d1
...
...
@@ -10,24 +10,20 @@ 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
)
/**
* 从数据中提取未读消息数量
* 构建当前用户对象
* @param {Object} data - 包含用户信息的响应数据
* @returns {number|null} 未读消息数量,或 null 如果无法提取
* @returns {Object|null} 合并后的当前用户对象,或 null 如果无法构建
*/
const
get_unread_msg_count
=
(
data
)
=>
{
const
candidates
=
[
export
const
build_current_user
=
(
data
)
=>
{
if
(
!
data
||
typeof
data
!==
'object'
)
return
null
const
merged_user
=
{
...(
data
.
user
&&
typeof
data
.
user
===
'object'
?
data
.
user
:
{}),
...(
data
.
checkin
&&
typeof
data
.
checkin
===
'object'
?
data
.
checkin
:
{}),
}
const
unread_candidates
=
[
data
?.
unread_msg_count
,
data
?.
user
?.
unread_msg_count
,
data
?.
user
?.
unread
,
...
...
@@ -35,32 +31,51 @@ export function useUserInfo() {
data
?.
unread
,
]
for
(
const
value
of
candidates
)
{
for
(
const
value
of
unread_
candidates
)
{
const
num
=
Number
(
value
)
if
(
Number
.
isFinite
(
num
))
return
num
if
(
Number
.
isFinite
(
num
))
{
merged_user
.
unread_msg_count
=
num
break
}
return
null
}
const
get_is_teacher
=
(
data
)
=>
{
const
candidates
=
[
const
teacher_candidates
=
[
data
?.
is_teacher
,
data
?.
user
?.
is_teacher
,
data
?.
user
?.
teacher
,
]
for
(
const
value
of
candidates
)
{
for
(
const
value
of
teacher_
candidates
)
{
if
(
value
===
null
||
value
===
undefined
)
continue
if
(
value
===
true
||
value
===
'true'
)
return
1
if
(
value
===
false
||
value
===
'false'
)
return
0
if
(
value
===
true
||
value
===
'true'
)
{
merged_user
.
is_teacher
=
1
break
}
if
(
value
===
false
||
value
===
'false'
)
{
merged_user
.
is_teacher
=
0
break
}
const
num
=
Number
(
value
)
if
(
Number
.
isFinite
(
num
))
return
num
?
1
:
0
if
(
Number
.
isFinite
(
num
))
{
merged_user
.
is_teacher
=
num
?
1
:
0
break
}
return
null
}
return
merged_user
}
/**
* @function useUserInfo
* @description 提供用户信息获取功能
* @returns {Object} 包含用户信息状态和方法的对象
*/
export
function
useUserInfo
()
{
// 用户信息状态
const
userInfo
=
ref
(
null
)
const
loading
=
ref
(
false
)
const
error
=
ref
(
null
)
/**
* 刷新用户信息
* @returns {Promise<Object>} 用户信息对象
...
...
@@ -75,24 +90,12 @@ export function useUserInfo() {
if
(
code
===
1
)
{
userInfo
.
value
=
data
// 合并用户和打卡数据
const
mergedUser
=
{
...
data
.
user
,
...
data
.
checkin
}
const
unread
=
get_unread_msg_count
(
data
)
if
(
unread
!==
null
)
{
mergedUser
.
unread_msg_count
=
unread
}
const
is_teacher
=
get_is_teacher
(
data
)
if
(
is_teacher
!==
null
)
{
mergedUser
.
is_teacher
=
is_teacher
}
const
mergedUser
=
build_current_user
(
data
)
// 更新本地存储
if
(
mergedUser
)
{
localStorage
.
setItem
(
'currentUser'
,
JSON
.
stringify
(
mergedUser
))
}
loading
.
value
=
false
return
mergedUser
...
...
src/contexts/auth.js
View file @
28c27d1
...
...
@@ -12,6 +12,7 @@ import { logoutAPI, getUserInfoAPI } from '@/api/users'
import
{
getAuthInfoAPI
}
from
'@/api/auth'
import
{
clearAuthHeaders
,
setAuthHeaders
}
from
'@/utils/axios'
import
{
applyUserInfoAuth
,
getUserInfoFromStorage
,
removeUserInfoFromStorage
}
from
'@/utils/auth_user_info'
import
{
build_current_user
}
from
'@/composables/useUserInfo'
// 创建认证上下文的Symbol key,用于provide/inject依赖注入
// 使用Symbol确保key的唯一性,避免命名冲突
...
...
@@ -31,41 +32,6 @@ export function provideAuth() {
// 加载状态标志,用于控制加载动画等UI展示
const
loading
=
ref
(
true
)
const
get_unread_msg_count
=
(
data
)
=>
{
const
candidates
=
[
data
?.
unread_msg_count
,
data
?.
user
?.
unread_msg_count
,
data
?.
user
?.
unread
,
data
?.
unread_msg
,
data
?.
unread
,
]
for
(
const
value
of
candidates
)
{
const
num
=
Number
(
value
)
if
(
Number
.
isFinite
(
num
))
return
num
}
return
null
}
const
get_is_teacher
=
(
data
)
=>
{
const
candidates
=
[
data
?.
is_teacher
,
data
?.
user
?.
is_teacher
,
data
?.
user
?.
teacher
,
]
for
(
const
value
of
candidates
)
{
if
(
value
===
null
||
value
===
undefined
)
continue
if
(
value
===
true
||
value
===
'true'
)
return
1
if
(
value
===
false
||
value
===
'false'
)
return
0
const
num
=
Number
(
value
)
if
(
Number
.
isFinite
(
num
))
return
num
?
1
:
0
}
return
null
}
/**
* 检查登录token是否过期
* @returns {boolean} true表示token有效,false表示token已过期
...
...
@@ -101,15 +67,10 @@ export function provideAuth() {
// 从服务器获取用户信息并更新本地存储
const
{
code
,
data
}
=
await
getUserInfoAPI
();
if
(
code
===
1
)
{
const
unread
=
get_unread_msg_count
(
data
)
const
is_teacher
=
get_is_teacher
(
data
)
currentUser
.
value
=
{
...
data
.
user
,
...
data
.
checkin
,
...(
unread
!==
null
?
{
unread_msg_count
:
unread
}
:
{}),
...(
is_teacher
!==
null
?
{
is_teacher
}
:
{}),
}
currentUser
.
value
=
build_current_user
(
data
)
if
(
currentUser
.
value
)
{
localStorage
.
setItem
(
'currentUser'
,
JSON
.
stringify
(
currentUser
.
value
))
}
// 重新设置认证头
const
userInfo
=
getUserInfoFromStorage
()
if
(
userInfo
&&
userInfo
.
user_id
&&
userInfo
.
HTTP_USER_TOKEN
)
{
...
...
@@ -138,14 +99,7 @@ export function provideAuth() {
try
{
const
userRes
=
await
getUserInfoAPI
();
if
(
userRes
.
code
===
1
)
{
const
unread
=
get_unread_msg_count
(
userRes
.
data
)
const
is_teacher
=
get_is_teacher
(
userRes
.
data
)
currentUser
.
value
=
{
...
userRes
.
data
.
user
,
...
userRes
.
data
.
checkin
,
...(
unread
!==
null
?
{
unread_msg_count
:
unread
}
:
{}),
...(
is_teacher
!==
null
?
{
is_teacher
}
:
{}),
}
currentUser
.
value
=
build_current_user
(
userRes
.
data
)
}
else
{
currentUser
.
value
=
{
...
data
.
user
,
...
data
.
checkin
}
}
...
...
@@ -154,10 +108,12 @@ export function provideAuth() {
currentUser
.
value
=
{
...
data
.
user
,
...
data
.
checkin
}
}
if
(
currentUser
.
value
)
{
localStorage
.
setItem
(
'currentUser'
,
JSON
.
stringify
(
currentUser
.
value
))
}
}
}
}
// 初始化完成,关闭加载状态
loading
.
value
=
false
})
...
...
Please
register
or
login
to post a comment