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 } }) }, }