feat: 埋点统计系统 — 数据库存储 + 管理后台查询
后端: - track_events 表存储埋点数据(事件类型、页面、数据、用户) - track 路由改为写入数据库 - logs 路由新增 /track/stats 和 /track/list 查询接口 前端: - 新增埋点统计页面(今日事件、7天趋势、热门事件) - 支持按事件类型筛选 - 管理后台添加「埋点统计」入口
This commit is contained in:
@@ -24,6 +24,24 @@ export interface LogStats {
|
||||
}>
|
||||
}
|
||||
|
||||
/** 埋点统计 */
|
||||
export interface TrackStats {
|
||||
today: Array<{ event: string; count: number }>
|
||||
daily: Array<{ date: string; count: number }>
|
||||
events: Array<{ event: string; count: number }>
|
||||
}
|
||||
|
||||
/** 埋点事件 */
|
||||
export interface TrackEvent {
|
||||
id: number
|
||||
event: string
|
||||
page: string
|
||||
data: any
|
||||
user_id: number | null
|
||||
nickname: string | null
|
||||
created_at: string
|
||||
}
|
||||
|
||||
/** 获取日志文件列表 */
|
||||
export function getLogFiles(): Promise<LogFileInfo[]> {
|
||||
return request({ url: '/logs/files' })
|
||||
@@ -44,3 +62,17 @@ export function queryLogs(params: {
|
||||
}): Promise<{ lines: string[]; total: number; page: number; pageSize: number }> {
|
||||
return request({ url: `/logs/${params.date}`, data: { ...params, date: undefined } })
|
||||
}
|
||||
|
||||
/** 获取埋点统计 */
|
||||
export function getTrackStats(): Promise<TrackStats> {
|
||||
return request({ url: '/logs/track/stats' })
|
||||
}
|
||||
|
||||
/** 查询埋点事件 */
|
||||
export function queryTrackEvents(params?: {
|
||||
event?: string
|
||||
page?: number
|
||||
pageSize?: number
|
||||
}): Promise<{ list: TrackEvent[]; total: number; page: number; pageSize: number }> {
|
||||
return request({ url: '/logs/track/list', data: params })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user