This commit is contained in:
oneao committed 2026-01-13 22:18:01 +08:00
1 parent 6277fb2f9e
commit 8ecac0d7dd
270 files changed
+40438 -529

No files matched your search

@@ -0,0 +1,12 @@
import type { LoginDefaultParams, LoginDefaultResult, RegisterDefaultParams } from '@/types/auth'
import alovaInstance from '../index'
const API_PREFIX = '/auth'
export function registerDefaultApi(params: RegisterDefaultParams) {
return alovaInstance.Post<ResponseData<any>>(`${API_PREFIX}/register/default`, params)
}
export function loginDefaultApi(params: LoginDefaultParams) {
return alovaInstance.Post<ResponseData<LoginDefaultResult>>(`${API_PREFIX}/login/default`, params)
}
@@ -0,0 +1,16 @@
import type { DeleteMoneyCategoryParams, QueryMoneyCategoryResult, UpdateMoneyCategorySortParams } from '@/types/money/category'
import alovaInstance from '../../index'
const API_PREFIX = '/money/category'
export function queryMoneyCategoryApi() {
return alovaInstance.Get<ResponseData<QueryMoneyCategoryResult>>(`${API_PREFIX}`)
}
export function deleteMoneyCategoryApi(params: DeleteMoneyCategoryParams) {
return alovaInstance.Post<ResponseData<void>>(`${API_PREFIX}/delete`, params)
}
export function updateMoneyCategorySortApi(params: UpdateMoneyCategorySortParams) {
return alovaInstance.Post<ResponseData<void>>(`${API_PREFIX}/updateSort`, params)
}
@@ -0,0 +1,28 @@
import type {
DeleteMoneyRecordParams,
InsertMoneyRecordParams,
InsertMoneyRecordResult,
QueryMoneyRecordsParams,
QueryMoneyRecordsResult,
UpdateMoneyRecordParams,
} from '@/types/money/record'
import alovaInstance from '../../index'
const API_PREFIX = '/money/record'
export function queryMoneyRecordsApi(params: QueryMoneyRecordsParams) {
return alovaInstance.Post<ResponseData<QueryMoneyRecordsResult>>(`${API_PREFIX}/query`, params)
}
export function insertMoneyRecordApi(params: InsertMoneyRecordParams) {
return alovaInstance.Post<ResponseData<InsertMoneyRecordResult>>(`${API_PREFIX}/insert`, params)
}
export function updateMoneyRecordApi(params: UpdateMoneyRecordParams) {
return alovaInstance.Post<ResponseData<any>>(`${API_PREFIX}/update`, params)
}
export function deleteMoneyRecordApi(params: DeleteMoneyRecordParams) {
return alovaInstance.Post<ResponseData<any>>(`${API_PREFIX}/delete`, params)
}
@@ -0,0 +1,12 @@
import type { CreateSpaceParams, CreateSpaceResult, DissolveSpaceParams, DissolveSpaceResult } from '@/types/space/space'
import alovaInstance from '../../index'
const API_PREFIX = '/space'
export function createSpaceApi(params: CreateSpaceParams) {
return alovaInstance.Post<ResponseData<CreateSpaceResult>>(`${API_PREFIX}/create`, params)
}
export function dissolveSpaceApi(params: DissolveSpaceParams) {
return alovaInstance.Post<ResponseData<DissolveSpaceResult>>(`${API_PREFIX}/dissolve`, params)
}
@@ -0,0 +1,35 @@
import type {
ExitSpaceParams,
ExitSpaceResult,
GetUserSpaceParams,
GetUserSpaceResult,
JoinSpaceParams,
JoinSpaceResult,
ListSpaceUsersParams,
ListSpaceUsersResult,
RemoveSpaceUserParams,
RemoveSpaceUserResult,
} from '@/types/space/spaceUser'
import alovaInstance from '../../index'
const API_PREFIX = '/space/user'
export function getUserSpaceApi(params: GetUserSpaceParams) {
return alovaInstance.Get<ResponseData<GetUserSpaceResult | null>>(`${API_PREFIX}/get`, params)
}
export function exitSpaceApi(params: ExitSpaceParams) {
return alovaInstance.Post<ResponseData<ExitSpaceResult>>(`${API_PREFIX}/exit`, params)
}
export function joinSpaceApi(params: JoinSpaceParams) {
return alovaInstance.Post<ResponseData<JoinSpaceResult>>(`${API_PREFIX}/join`, params)
}
export function listSpaceUsersApi(params: ListSpaceUsersParams) {
return alovaInstance.Post<ResponseData<ListSpaceUsersResult>>(`${API_PREFIX}/list`, params)
}
export function removeSpaceUserApi(params: RemoveSpaceUserParams) {
return alovaInstance.Post<ResponseData<RemoveSpaceUserResult>>(`${API_PREFIX}/remove`, params)
}
+163
View File
@@ -0,0 +1,163 @@
import type { Method } from 'alova'
import type { AxiosError } from 'axios'
import type { RefreshTokenResult } from '@/types/auth'
import { axiosRequestAdapter } from '@alova/adapter-axios'
import { createAlova } from 'alova'
import { useNavStore } from '@/store/navigation'
import { useSpaceStore } from '@/store/space'
import { useUserStore } from '@/store/user'
import { toast } from '@/utils/toast'
enum HttpCode {
Success = 200,
Unauthorized = 401,
RefreshToken = 402,
Fail = 500,
}
const WhiteList = [
'/auth/login/**',
'/auth/register/**',
'/auth/refresh/token',
]
function isWhiteListed(url: string) {
return WhiteList.some((pattern) => {
if (pattern.endsWith('/**')) {
const base = pattern.slice(0, -3)
return url.startsWith(base)
}
return url === pattern
})
}
const alovaInstance = createAlova({
// 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) => {
const resData = response.data as ResponseData<any>
const result = {
...resData,
isSuccess: resData.code === HttpCode.Success,
}
// Access Token 失效 → 重新登录
if (resData.code === HttpCode.Unauthorized) {
useNavStore.getState().navigateToAuth()
return
}
// Access Token 过期但 Refresh Token 有效 → 刷新 token 并重试
if (resData.code === HttpCode.RefreshToken) {
try {
const refreshToken = useUserStore.getState().userInfo?.refreshToken
if (!refreshToken) {
useNavStore.getState().navigateToAuth()
return
}
// 调用刷新接口
const res = await alovaInstance.Get<ResponseData<RefreshTokenResult>>('/auth/refresh/token', {
headers: { refreshToken },
}).send()
const newToken = res.data.refreshToken
// 更新 store
useUserStore.getState().setUserInfo({
...useUserStore.getState().userInfo!,
token: newToken,
})
// 重试原请求
method.config.headers.token = newToken
const retryResult = await method.send()
return retryResult
}
catch (err) {
return Promise.reject(err)
}
}
return result
},
onError: (error: AxiosError, _method) => {
console.log(error.status)
switch (error.status) {
case 400:
toast.show({
title: '请求错误,请检查输入参数',
})
break
case 401:
toast.show({
title: '未授权,请重新登录',
})
break
case 403:
toast.show({
title: '没有权限访问该资源',
})
break
case 404:
toast.show({
title: '请求丢失啦,请稍后再试!',
})
break
case 500:
toast.show({
title: '服务器出错啦,请稍后重试',
})
break
case 502:
toast.show({
title: '网关错误,请稍后重试',
})
break
case 503:
toast.show({
title: '服务暂不可用,请稍后再试',
})
break
case 504:
toast.show({
title: '网关超时,请稍后再试',
})
break
default:
toast.show({
title: `服务器出错啦,请稍后重试`,
})
break
}
return Promise.reject(error)
},
},
beforeRequest(method) {
if (isWhiteListed(method.url))
return
if (!useUserStore.getState().isLoggedIn()) {
useNavStore.getState().navigateToAuth()
return Promise.reject(new Error('未登录'))
}
method.config.headers.token = useUserStore.getState().userInfo?.token ?? ''
const userSpace = useSpaceStore.getState().userSpace
if (userSpace !== null) {
const spaceID = userSpace.space_id
method.config.headers['x-space-id'] = spaceID
}
},
})
export default alovaInstance