fix(types): 同步 DashboardOverview/AdRevenueReport 类型, 修数据大盘页编译失败
新版数据大盘页(dashboard/page.tsx, #24)引用的后端字段在 types.ts 未同步, next build 类型检查失败致 admin-web main 无法构建/部署(0.2.6 发车 deploy 卡在此步): - DashboardOverview 补 period 嵌套结构(date_from/to + users/comparison/coins/cash/trend), 对齐已部署后端 app/admin/schemas/dashboard.py 的 DashboardPeriod - AdRevenueReport 补可选 by_ad_type(按广告类型富小计含金币明细);后端当前不下发, 页面用 ?. 探测、缺失时按 items 现算兜底, 此处仅补类型声明让其编译通过 均为类型声明同步, 不改任何运行逻辑;本地 next build 已通过。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+65
-2
@@ -441,6 +441,12 @@ export interface AdRevenueReport {
|
||||
daily: AdRevenueDaily[]; // 按日期汇总序列(全量,供按天趋势图)
|
||||
hourly: AdRevenueHourly[]; // 按小时汇总序列(全量,供按小时趋势图;按天查询时为空)
|
||||
type_stats: Record<string, AdRevenueTypeStat>; // 按广告类型小计;前端取 draw / reward_video
|
||||
// 可选:后端预聚合的「按广告类型」富小计(含发放金币明细)。当前后端未下发 → 数据大盘页
|
||||
// (dashboard adTypeSummary)用 `?.` 探测、缺失时按 items 现算兜底;后端补上即自动启用。
|
||||
by_ad_type?: Record<
|
||||
string,
|
||||
{ ad_type: string; impressions: number; revenue_yuan: number; expected_coin: number; actual_coin: number }
|
||||
>;
|
||||
dau: number | null; // 今日活跃(复用大盘 last_login_at);仅查询=今日时有值,否则 null
|
||||
total: number; // 当前筛选下的分页总条数(全量,不受分页影响)
|
||||
truncated: boolean; // 当前页之后是否还有更多事件(分页后前端不再据此报警)
|
||||
@@ -464,7 +470,17 @@ export interface DashboardOverview {
|
||||
new_today: number;
|
||||
dau: number;
|
||||
};
|
||||
coins: { granted_total: number };
|
||||
coins: {
|
||||
reward_video_coin_total: number;
|
||||
reward_video_watch_count: number;
|
||||
feed_ad_coin_total: number;
|
||||
feed_ad_watch_count: number;
|
||||
signin_coin_total: number;
|
||||
signin_count: number;
|
||||
signin_boost_coin_total: number;
|
||||
signin_boost_watch_count: number;
|
||||
granted_total: number;
|
||||
};
|
||||
cash: {
|
||||
withdraw_success_cents: number;
|
||||
withdraw_pending_count: number;
|
||||
@@ -472,8 +488,55 @@ export interface DashboardOverview {
|
||||
withdraw_failed_count: number;
|
||||
};
|
||||
comparison: { total: number; success: number; success_rate: number };
|
||||
// 时段大盘(对应后端 app/admin/schemas/dashboard.py DashboardPeriod);新版数据大盘页用
|
||||
period: {
|
||||
date_from: string;
|
||||
date_to: string;
|
||||
users: {
|
||||
new: number;
|
||||
active: number;
|
||||
retained_new_users: number;
|
||||
retention_rate: number | null;
|
||||
retention_note: string;
|
||||
};
|
||||
comparison: {
|
||||
total: number;
|
||||
success: number;
|
||||
success_rate: number;
|
||||
ordered: number;
|
||||
average_duration_ms: number | null;
|
||||
average_saved_cents: number | null;
|
||||
};
|
||||
coins: {
|
||||
granted_total: number;
|
||||
reward_video_coin_total: number;
|
||||
feed_ad_coin_total: number;
|
||||
signin_coin_total: number;
|
||||
signin_boost_coin_total: number;
|
||||
task_coin_total: number;
|
||||
coupon_reward_coin_total: number;
|
||||
comparison_reward_coin_total: number;
|
||||
regular_task_coin_total: number;
|
||||
};
|
||||
cash: { withdraw_success_cents: number };
|
||||
trend: {
|
||||
date: string;
|
||||
active_users: number;
|
||||
new_users: number;
|
||||
comparisons: number;
|
||||
}[];
|
||||
};
|
||||
feedback: { new: number };
|
||||
cps: { available: boolean; note: string };
|
||||
cps: {
|
||||
available: boolean;
|
||||
note: string;
|
||||
meituan_order_count: number;
|
||||
meituan_commission_cents: number;
|
||||
meituan_hit_count: number;
|
||||
meituan_miss_count: number;
|
||||
meituan_unknown_rate_count: number;
|
||||
meituan_hit_rate: number | null;
|
||||
};
|
||||
}
|
||||
|
||||
export interface PriceReport {
|
||||
|
||||
Reference in New Issue
Block a user