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

@@ -1,12 +1,20 @@
import type { CreateSpaceParams, CreateSpaceResult, DissolveSpaceParams, DissolveSpaceResult } from '@/types/space/space'
import type { JoinSpaceParams, KickOutUserParams, ListSpaceUsersResult } 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 joinSpaceApi(params: JoinSpaceParams) {
return alovaInstance.Post<ResponseData<void>>(`${API_PREFIX}/join`, params)
}
export function dissolveSpaceApi(params: DissolveSpaceParams) {
return alovaInstance.Post<ResponseData<DissolveSpaceResult>>(`${API_PREFIX}/dissolve`, params)
export function kickOutUserApi(params: KickOutUserParams) {
return alovaInstance.Post<ResponseData<void>>(`${API_PREFIX}/kick`, params)
}
export function quitSpaceApi() {
return alovaInstance.Post<ResponseData<void>>(`${API_PREFIX}/quit`)
}
export function listSpaceUsersApi() {
return alovaInstance.Post<ResponseData<ListSpaceUsersResult>>(`${API_PREFIX}/users`)
}
@@ -1,33 +0,0 @@
import type {
ExitSpaceParams,
ExitSpaceResult,
JoinSpaceParams,
JoinSpaceResult,
ListSpaceUsersParams,
ListSpaceUsersResult,
RemoveSpaceUserParams,
RemoveSpaceUserResult,
} from '@/types/space/spaceUser'
import alovaInstance from '../../index'
const API_PREFIX = '/space/user'
export function getUserSpaceApi() {
return alovaInstance.Get<ResponseData<UserSpace | null>>(`${API_PREFIX}/get`)
}
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)
}
@@ -0,0 +1,8 @@
import type { ListUserSpacesResult } from '@/types/user'
import alovaInstance from '../index'
const API_PREFIX = '/user'
export function listUserSpacesApi() {
return alovaInstance.Post<ResponseData<ListUserSpacesResult>>(`${API_PREFIX}/spaces`)
}
+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
}
},
})
+2 -2
View File
@@ -17,8 +17,8 @@ declare global {
}
interface UserSpace {
space_id: number
space_name: string
id: number
name: string
invite_code: string
role: number
}
+9 -11
View File
@@ -3,22 +3,20 @@ export interface JoinSpaceParams {
invite_code: string
}
export interface JoinSpaceResult {
}
// 踢出用户
export interface KickOutUserParams {
space_id: number
user_id: number
}
export interface KickOutUserResult {}
// 退出空间
export interface QuitSpaceParams {
space_id: number
// 空间用户列表
export interface SpaceUser {
user_id: number
user_name: number
user_avatar: string
role: number
}
export interface QuitSpaceResult {}
export interface ListSpaceUsersResult {
users: SpaceUser[]
}
@@ -1,40 +0,0 @@
// 退出空间
export interface ExitSpaceParams {
}
export interface ExitSpaceResult {
}
// 获取空间列表用户
export interface SpaceUser {
user_id: number
username: string
space_role: number
active_time: string
}
export interface ListSpaceUsersParams {
}
export interface ListSpaceUsersResult {
users: SpaceUser[]
}
// 踢出空间
export interface RemoveSpaceUserParams {
user_id: number
}
export interface RemoveSpaceUserResult {
}
// 加入空间
export interface JoinSpaceParams {
invite_code: string
}
export interface JoinSpaceResult {
}
+10
View File
@@ -0,0 +1,10 @@
export interface UserSpace {
id: number
name: string
invite_code: string
role: number
}
export interface ListUserSpacesResult {
spaces: UserSpace[]
}