feat(admin): 数据总览按客迹视觉V1重做(周期卡/趋势双线/渠道条形/最近访问)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -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 })
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user