2026-04-24 16:16:54 +08:00
|
|
|
import axios from 'axios'
|
|
|
|
|
|
|
|
|
|
const imClient = axios.create({
|
|
|
|
|
baseURL: 'https://sentry.xuqinmin.com',
|
|
|
|
|
timeout: 15000,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
imClient.interceptors.request.use((config) => {
|
|
|
|
|
const token = localStorage.getItem('token')
|
|
|
|
|
if (token) config.headers.Authorization = `Bearer ${token}`
|
|
|
|
|
return config
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
export interface ImUser {
|
|
|
|
|
id: string
|
|
|
|
|
appId: string
|
|
|
|
|
userId: string
|
|
|
|
|
nickname: string
|
|
|
|
|
avatar?: string
|
|
|
|
|
status: 'ACTIVE' | 'BANNED'
|
|
|
|
|
gender: 'UNKNOWN' | 'MALE' | 'FEMALE'
|
|
|
|
|
createdAt: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface ImGroup {
|
|
|
|
|
id: string
|
|
|
|
|
appId: string
|
|
|
|
|
name: string
|
|
|
|
|
creatorId: string
|
|
|
|
|
memberIds: string[]
|
|
|
|
|
adminIds: string[]
|
|
|
|
|
createdAt: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface ImStats {
|
|
|
|
|
totalMessages: number
|
|
|
|
|
totalUsers: number
|
|
|
|
|
totalGroups: number
|
|
|
|
|
todayMessages: number
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const imAdminApi = {
|
|
|
|
|
listUsers(appId: string, page = 0, size = 20) {
|
|
|
|
|
return imClient.get<{ data: { content: ImUser[]; totalElements: number; totalPages: number } }>(
|
|
|
|
|
'/api/im/admin/users', { params: { appId, page, size } },
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
updateUserStatus(appId: string, userId: string, status: 'ACTIVE' | 'BANNED') {
|
|
|
|
|
return imClient.put(`/api/im/admin/users/${userId}/status`, { status }, { params: { appId } })
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
listGroups(appId: string) {
|
|
|
|
|
return imClient.get<{ data: ImGroup[] }>('/api/im/admin/groups', { params: { appId } })
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getStats(appId: string) {
|
|
|
|
|
return imClient.get<{ data: ImStats }>('/api/im/admin/stats', { params: { appId } })
|
|
|
|
|
},
|
2026-04-24 20:54:03 +08:00
|
|
|
|
|
|
|
|
registerUser(appId: string, userId: string, nickname?: string, avatar?: string) {
|
|
|
|
|
return imClient.post<{ data: ImUser }>(
|
|
|
|
|
'/api/im/admin/users',
|
|
|
|
|
{ userId, nickname, avatar },
|
|
|
|
|
{ params: { appId } },
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
createGroup(appId: string, name: string, creatorId: string, memberIds: string[]) {
|
|
|
|
|
return imClient.post<{ data: ImGroup }>(
|
|
|
|
|
'/api/im/admin/groups',
|
|
|
|
|
{ name, creatorId, memberIds },
|
|
|
|
|
{ params: { appId } },
|
|
|
|
|
)
|
|
|
|
|
},
|
2026-04-25 16:41:55 +08:00
|
|
|
|
|
|
|
|
searchUsers(appId: string, keyword: string, size = 20) {
|
|
|
|
|
return imClient.get<{ data: ImUser[] }>(
|
|
|
|
|
'/api/im/admin/users/search',
|
|
|
|
|
{ params: { appId, keyword, size } },
|
|
|
|
|
)
|
|
|
|
|
},
|
2026-04-24 16:16:54 +08:00
|
|
|
}
|