gaoluyang
2026-06-29 27cd042df9aca0383a49f3514bc21958dd890912
src/api/im/manager/statistics/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
import { requestClient } from '#/api/request';
export namespace ImManagerStatisticsApi {
  /** ç»Ÿè®¡æ¦‚览 */
  export interface Overview {
    totalUser: number;
    newUserToday: number;
    totalGroup: number;
    newGroupToday: number;
    activeUserDaily: number;
    activeUserWeekly: number;
    activeUserMonthly: number;
    privateMessageToday: number;
    groupMessageToday: number;
    privateMessageYesterday: number;
    groupMessageYesterday: number;
  }
  /** è¶‹åŠ¿æ•°æ® */
  export interface Trend {
    dates: string[];
    series: Record<string, number[]>;
  }
  /** æ¶ˆæ¯ç±»åž‹åˆ†å¸ƒ */
  export interface MessageType {
    type: number; // å‚见 ImContentTypeEnum æžšä¸¾ç±»ï¼Œç”±å‰ç«¯æŒ‰ DICT_TYPE.IM_CONTENT_TYPE ç¿»è¯‘
    value: number;
  }
  /** ç¾¤è§„模分布 */
  export interface GroupSize {
    range: string;
    count: number;
  }
  /** æ¶ˆæ¯å‘送排行 */
  export interface TopSender {
    userId: number;
    nickname: string;
    messageCount: number;
  }
}
/** èŽ·å¾— KPI æ¦‚览 */
export function getStatisticsOverview() {
  return requestClient.get<ImManagerStatisticsApi.Overview>(
    '/im/manager/statistics/overview',
  );
}
/** èŽ·å¾—æ¶ˆæ¯è¶‹åŠ¿ï¼ˆç§èŠ + ç¾¤èŠåŒçº¿ï¼‰ */
export function getMessageTrend(days: number) {
  return requestClient.get<ImManagerStatisticsApi.Trend>(
    '/im/manager/statistics/message-trend',
    { params: { days } },
  );
}
/** èŽ·å¾—ç”¨æˆ·è¶‹åŠ¿ï¼ˆæ–°å¢žæ³¨å†Œ + æ—¥æ´»åŒçº¿ï¼‰ */
export function getUserTrend(days: number) {
  return requestClient.get<ImManagerStatisticsApi.Trend>(
    '/im/manager/statistics/user-trend',
    { params: { days } },
  );
}
/** èŽ·å¾—å†…å®¹ç±»åž‹åˆ†å¸ƒï¼ˆæœ€è¿‘ 30 å¤©ï¼‰ */
export function getMessageTypeDistribution() {
  return requestClient.get<ImManagerStatisticsApi.MessageType[]>(
    '/im/manager/statistics/message-type-distribution',
  );
}
/** èŽ·å¾—ç¾¤è§„æ¨¡åˆ†å¸ƒ */
export function getGroupSizeDistribution() {
  return requestClient.get<ImManagerStatisticsApi.GroupSize[]>(
    '/im/manager/statistics/group-size-distribution',
  );
}
/** èŽ·å¾—æ¶ˆæ¯ TOP å‘送者(最近 30 å¤©ï¼‰ */
export function getTopSenders() {
  return requestClient.get<ImManagerStatisticsApi.TopSender[]>(
    '/im/manager/statistics/top-senders',
  );
}