直播间需要添加签到功能
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
import { getToken, removeToken } from './storage'
|
||||
import { useUserStore } from '../stores/user'
|
||||
import { getToken } from './storage'
|
||||
|
||||
const BASE_URL = import.meta.env.VITE_SYSTEM_URL
|
||||
|
||||
// 防止多个 401 同时触发登出和跳转
|
||||
let isHandling401 = false
|
||||
|
||||
/**
|
||||
* 网络请求封装
|
||||
* @param {Object} options 请求参数
|
||||
@@ -50,12 +54,17 @@ const request = options => {
|
||||
if (response.data.code === 200) {
|
||||
resolve(response.data)
|
||||
} else {
|
||||
handleError(response.data.code, response.data)
|
||||
// 注意:这里也要 reject,否则调用方无法感知失败
|
||||
const err = handleError(response.data.code, response.data)
|
||||
reject(err || response.data)
|
||||
// handleError(response.data.code, response.data)
|
||||
}
|
||||
} else {
|
||||
// 状态码错误处理
|
||||
handleError(response.statusCode, response.data)
|
||||
reject(response)
|
||||
// handleError(response.statusCode, response.data)
|
||||
// reject(response)
|
||||
const err = handleError(response.statusCode, response.data)
|
||||
reject(err || response)
|
||||
}
|
||||
},
|
||||
fail: error => {
|
||||
@@ -84,21 +93,46 @@ const request = options => {
|
||||
* @param {Object} data 响应数据
|
||||
*/
|
||||
const handleError = (statusCode, data) => {
|
||||
// 如果是 401 且正在处理中,直接返回(避免重复处理)
|
||||
if (statusCode === 401) {
|
||||
if (isHandling401) {
|
||||
return new Error('Unauthorized')
|
||||
}
|
||||
isHandling401 = true
|
||||
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '登录已过期,请重新登录',
|
||||
showCancel: false,
|
||||
success: async () => {
|
||||
await useUserStore().logout()
|
||||
// 可选:跳转登录页
|
||||
uni.redirectTo({ url: '/pages/login/index' })
|
||||
console.log('登录已过期,====')
|
||||
},
|
||||
complete: () => {
|
||||
// 重置标志,允许下次 401 处理(比如用户重新登录后再次过期)
|
||||
isHandling401 = false
|
||||
}
|
||||
})
|
||||
return new Error('Unauthorized')
|
||||
}
|
||||
|
||||
switch (statusCode) {
|
||||
case 401:
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '登录已过期,请重新登录',
|
||||
showCancel: false,
|
||||
success: () => {
|
||||
// 清除本地存储的token并跳转到登录页
|
||||
removeToken()
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/index'
|
||||
})
|
||||
}
|
||||
})
|
||||
break
|
||||
// case 401:
|
||||
// console.log('登录已过期,====')
|
||||
// uni.showModal({
|
||||
// title: '提示',
|
||||
// content: '登录已过期,请重新登录',
|
||||
// showCancel: false,
|
||||
// success: () => {
|
||||
// useUserStore().logout()
|
||||
// // uni.navigateTo({
|
||||
// // url: '/pages/login/index'
|
||||
// // })
|
||||
// }
|
||||
// })
|
||||
// break
|
||||
case 403:
|
||||
uni.showToast({
|
||||
title: '没有权限访问',
|
||||
@@ -131,6 +165,8 @@ const handleError = (statusCode, data) => {
|
||||
mask: true
|
||||
})
|
||||
}
|
||||
|
||||
return new Error(`Request failed with code: ${statusCode}`)
|
||||
}
|
||||
|
||||
export default request
|
||||
|
||||
Reference in New Issue
Block a user