feat(admin): 数据总览按客迹视觉V1重做(周期卡/趋势双线/渠道条形/最近访问)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-17 12:18:37 +08:00
parent 132e2feb75
commit 8f20d8d9a2
8 changed files with 955 additions and 300 deletions
+33 -33
View File
@@ -1,59 +1,59 @@
import request from '@/utils/http'
/**
* 总览 API(server/tracker/api/dashboard.py)
* 总览 API(server/tracker/api/dashboard.py,客迹视觉 V1 形状)
*
* 今日四指标与 refresh_daily 共享口径(daily_counts:排除爬虫,上海自然日);
* site 参数传 site_id,不传 = 聚合全部站点(站点不存在返回 404 site_not_found)。
* 周期口径全排除爬虫;site 参数传 site_id,不传 = 聚合全部站点
* (站点不存在返回 404 site_not_found);range 非法值后端回落 7d。
*/
/** 今日四指标 + 当前在线(5 分钟内有行为的非爬虫访客数) */
export interface TodayCounts {
pv: number
uv: number
sessions: number
new_visitors: number
/** 周期枚举:today=上海自然日;7d/30d=近 N 天窗口 */
export type OverviewRange = 'today' | '7d' | '30d'
/** 页头在线信息(active_now 是 online 的兼容别名,二者恒相等) */
export interface OverviewHeader {
online: number
active_now: number
}
/** 近 30 天趋势点(缺日补零,今天一位用实时值覆盖;每日含全部四指标) */
/** 周期卡指标;delta_pct = 与上一个等长周期比较的百分比(today 比昨天),
* 上期值为 0 时为 null(前端显示 —) */
export interface CardMetric {
value: number
delta_pct: number | null
}
/** 四张周期卡:访客数 / 访问次数 / 平均有效停留(ms) / 回访访客 */
export interface OverviewCards {
visitors: CardMetric
visits: CardMetric
avg_stay_ms: CardMetric
returning: CardMetric
}
/** 趋势点(日粒度:历史位为 DailyStat 聚合、缺日补零,今天一位为实时值) */
export interface TrendPoint {
date: string
pv: number
uv: number
sessions: number
new_visitors: number
}
/** 今日来源 TOP8(referrer_domain 为空归并为"直接访问") */
export interface SourceItem {
source: string
sessions: number
}
/** 今日渠道构成 TOP8(session_entry 分类聚合,sessions 去重计数;
* channel 为 CHANNELS 枚举,无分类行不计入——未重算的历史会话不在此口径内) */
/** 渠道聚合行:channel 为 CHANNELS 枚举(含 direct/unknown);
* pct = 占已分类会话比(4 位小数,列表内总和 ≈ 1;无分类行的历史会话不计入) */
export interface ChannelItem {
channel: string
sessions: number
}
/** 今日热门页面 TOP8(page_view 按 path 聚合) */
export interface PageItem {
path: string
pv: number
pct: number
}
/** 总览响应 */
export interface OverviewResp {
today: TodayCounts
header: OverviewHeader
cards: OverviewCards
trend: TrendPoint[]
sources: SourceItem[]
/** 来源渠道聚合(sources 的归因升级版,原始域名口径保留在 sources) */
channels: ChannelItem[]
top_pages: PageItem[]
}
/** 总览数据(site 可选,传 site_id) */
export const getOverview = (site?: string) =>
request.get<OverviewResp>({ url: '/admin/dashboard/overview', params: site ? { site } : {} })
/** 总览数据(site 传 site_id 可选;range 默认 7d) */
export const getOverview = (params: { site?: string; range?: OverviewRange } = {}) =>
request.get<OverviewResp>({ url: '/admin/dashboard/overview', params })
+2
View File
@@ -34,6 +34,8 @@ export interface VisitorRow {
last_source: string
/** 首次访问落地页(空串=未采集,如直达首页;列表 tooltip / 详情识别卡用) */
first_landing_path: string
/** 最近一条事件的 path(总览「浏览页面」列;无事件访客为空串) */
last_path: string
/** 首触来源归因(first_touch 分类;无分类行/未重算的历史访客为 '',前端回落 first_source 展示) */
channel: string
platform: string