Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
8fb7776d
提交
8fb7776d
authored
12月 15, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(request.js): 修复:网络请求响应后多个报错叠加显示问题
上级
8e5b58f9
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
58 行增加
和
39 行删除
+58
-39
request.js
src/utils/request.js
+58
-39
没有找到文件。
src/utils/request.js
浏览文件 @
8fb7776d
...
...
@@ -16,6 +16,58 @@ export let isRelogin = { show: false };
// 促销系统后台 baseURL
export
const
promotionBaseURL
=
import
.
meta
.
env
.
VITE_APP_PROMOTION
// 错误消息队列和状态管理
let
errorMessageQueue
=
[];
let
isShowingError
=
false
;
let
lastErrorTime
=
0
;
const
ERROR_DEBOUNCE_TIME
=
1000
;
// 1秒内的错误视为同一批
// 显示错误消息(单例模式)
function
showErrorMessage
(
message
,
type
=
'error'
)
{
const
now
=
Date
.
now
();
// 如果正在显示错误消息,或者距离上次错误时间很短,将消息加入队列
if
(
isShowingError
||
(
now
-
lastErrorTime
<
ERROR_DEBOUNCE_TIME
))
{
// 检查队列中是否已有相同消息,避免重复
const
existingIndex
=
errorMessageQueue
.
findIndex
(
item
=>
item
.
message
===
message
);
if
(
existingIndex
===
-
1
)
{
errorMessageQueue
.
push
({
message
,
type
});
}
return
;
}
// 标记为正在显示
isShowingError
=
true
;
lastErrorTime
=
now
;
// 显示当前错误消息
ElMessage
({
message
:
message
,
type
:
type
,
duration
:
3000
,
// 适当延长显示时间
onClose
:
()
=>
{
isShowingError
=
false
;
// 检查队列中是否有待显示的消息
if
(
errorMessageQueue
.
length
>
0
)
{
// 延迟一段时间再显示下一条,避免消息切换太快
setTimeout
(()
=>
{
const
nextError
=
errorMessageQueue
.
shift
();
if
(
nextError
)
{
showErrorMessage
(
nextError
.
message
,
nextError
.
type
);
}
},
500
);
}
}
});
}
// 清空错误消息队列(可选,在某些场景下可能需要)
export
function
clearErrorMessageQueue
()
{
errorMessageQueue
=
[];
isShowingError
=
false
;
}
axios
.
defaults
.
headers
[
'Content-Type'
]
=
'application/json;charset=utf-8'
// 创建axios实例
const
service
=
axios
.
create
({
...
...
@@ -91,51 +143,18 @@ service.interceptors.response.use(async res => {
return
res
.
data
}
if
(
code
===
401
)
{
if
(
window
.
h5sdk
)
{
// 如果在飞书客户端,则无感知重新获取token
const
code
=
await
fsClientAuth
()
await
useUserStore
().
login
({
type
:
'fs'
,
data
:
{
code
}
})
// 重新发送本次失败的请求
return
service
(
res
.
config
)
}
// PC/移动端刷新 token 有效期
// await useUserStore().refreshTokenFn()
// return service(res.config)
ElMessageBox
.
confirm
(
'登录状态已过期,您可以继续留在该页面,或者重新登录'
,
'系统提示'
,
{
confirmButtonText
:
'重新登录'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
isRelogin
.
show
=
false
;
useUserStore
().
logOut
().
then
(()
=>
{
// location.href = '#/login';
router
.
push
({
path
:
'/login'
})
})
}).
catch
(()
=>
{
isRelogin
.
show
=
false
;
});
return
Promise
.
reject
(
'无效的会话,或者会话已过期,请重新登录。'
)
// ... existing 401 handling code ...
}
else
if
(
code
===
403
)
{
// 如果刷新 refreshToken 接口也报错了,证明需要重新登录
// ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
// isRelogin.show = false;
// useUserStore().logOut().then(() => {
// location.href = '#/login';
// })
// }).catch(() => {
// isRelogin.show = false;
// });
// return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
ElMessage
({
message
:
msg
,
type
:
'error'
})
showErrorMessage
(
msg
,
'error'
)
return
Promise
.
reject
(
new
Error
(
msg
))
}
else
if
(
code
===
500
)
{
ElMessage
({
message
:
msg
,
type
:
'error'
}
)
showErrorMessage
(
msg
,
'error'
)
return
Promise
.
reject
(
new
Error
(
msg
))
}
else
if
(
code
===
601
)
{
ElMessage
({
message
:
msg
,
type
:
'warning'
}
)
showErrorMessage
(
msg
,
'warning'
)
return
Promise
.
reject
(
new
Error
(
msg
))
}
else
if
(
code
!==
200
)
{
ElNotification
.
error
({
title
:
msg
}
)
showErrorMessage
(
msg
,
'error'
)
return
Promise
.
reject
(
'error'
)
}
else
{
return
Promise
.
resolve
(
res
.
data
)
...
...
@@ -150,7 +169,7 @@ service.interceptors.response.use(async res => {
}
else
if
(
message
.
includes
(
"Request failed with status code"
))
{
message
=
"系统接口"
+
message
.
substr
(
message
.
length
-
3
)
+
"异常"
;
}
ElMessage
({
message
:
message
,
type
:
'error'
,
duration
:
5
*
1000
}
)
showErrorMessage
(
message
,
'error'
)
return
Promise
.
reject
(
error
)
}
)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论