This commit is contained in:
oneao committed 2026-01-27 22:47:55 +08:00
1 parent 83cbf18572
commit 5ca04f85ca
32 files changed
+1308 -1804

No files matched your search

+25 -12
View File
@@ -1,5 +1,6 @@
import type { Method } from 'alova'
import type { AxiosError } from 'axios'
import type { ListUserSpacesResult } from '@/types/user'
import { axiosRequestAdapter } from '@alova/adapter-axios'
import { createAlova } from 'alova'
import { useNavStore } from '@/store/navigation'
@@ -11,12 +12,13 @@ enum HttpCode {
Success = 200,
Unauthorized = 401,
Fail = 500,
ErrSpaceRequired = 501,
ErrSpaceNoPermission = 502,
}
// 仅保留「无需登录」接口
const WhiteList = [
'/auth/login/**',
'/auth/register/**',
]
function isWhiteListed(url: string) {
@@ -30,14 +32,14 @@ function isWhiteListed(url: string) {
}
const alovaInstance = createAlova({
// baseURL: 'http://192.168.5.6:8086/app',
baseURL: 'http://192.168.1.137:8086/app',
baseURL: 'http://192.168.5.6:8086/app',
// baseURL: 'http://192.168.1.137:8086/app',
requestAdapter: axiosRequestAdapter(),
timeout: 5000,
cacheFor: null,
responded: {
onSuccess: async (response, _method: Method) => {
onSuccess: async (response, method: Method) => {
const resData = response.data as ResponseData<any>
const result = {
@@ -45,17 +47,28 @@ const alovaInstance = createAlova({
isSuccess: resData.code === HttpCode.Success,
}
/**
* 登录态失效:
* - 清空本地状态
* - 跳转登录页
* - 不做 token 刷新、不重试请求
*/
if (resData.code === HttpCode.Unauthorized) {
useUserStore.getState().clear()
useNavStore.getState().navigateToAuth()
return Promise.reject(new Error('登录已失效'))
}
else if (resData.code === HttpCode.ErrSpaceRequired || resData.code === HttpCode.ErrSpaceNoPermission) {
if (method.meta?.spaceRetried)
return Promise.reject(new Error('space retry failed'))
method.meta = { ...method.meta, spaceRetried: true }
const res = await alovaInstance.Post<ResponseData<ListUserSpacesResult>>('/user/spaces').send()
if (!res.isSuccess || res.data.spaces.length === 0)
return Promise.reject(new Error('没有可用空间,请刷新后再试'))
const defaultSpace = res.data.spaces[0]
useSpaceStore.getState().setUserSpace(defaultSpace)
method.config.headers['X-Space-Id'] = defaultSpace.id
return method.send()
}
return result
},
@@ -111,12 +124,12 @@ const alovaInstance = createAlova({
}
// 注入 JWT
method.config.headers.token = userStore.userInfo!.token
method.config.headers.Token = userStore.userInfo!.token
// 注入 space 信息(如果存在)
const userSpace = useSpaceStore.getState().userSpace
if (userSpace) {
method.config.headers['x-space-id'] = userSpace.space_id
method.config.headers['X-Space-Id'] = userSpace.id
}
},
})