u
This commit is contained in:
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`)
|
||||
}
|
||||
@@ -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
@@ -17,8 +17,8 @@ declare global {
|
||||
}
|
||||
|
||||
interface UserSpace {
|
||||
space_id: number
|
||||
space_name: string
|
||||
id: number
|
||||
name: string
|
||||
invite_code: string
|
||||
role: number
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
export interface UserSpace {
|
||||
id: number
|
||||
name: string
|
||||
invite_code: string
|
||||
role: number
|
||||
}
|
||||
|
||||
export interface ListUserSpacesResult {
|
||||
spaces: UserSpace[]
|
||||
}
|
||||
Reference in new issue
Block a user