直播间需要添加签到功能

This commit is contained in:
cbb
2026-01-13 17:56:19 +08:00
parent 06e026c8b8
commit c139fcf501
16 changed files with 313 additions and 171 deletions

View File

@@ -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