From 6a3ce5d34022a16050e91fb2b5a2ad5b703d5ec9 Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 30 Jun 2026 02:39:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(types):=20=E5=90=8C=E6=AD=A5=20DashboardOve?= =?UTF-8?q?rview/AdRevenueReport=20=E7=B1=BB=E5=9E=8B,=20=E4=BF=AE?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=A7=E7=9B=98=E9=A1=B5=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新版数据大盘页(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 --- src/lib/types.ts | 67 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/src/lib/types.ts b/src/lib/types.ts index 2e66647..5e99d1d 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -441,6 +441,12 @@ export interface AdRevenueReport { daily: AdRevenueDaily[]; // 按日期汇总序列(全量,供按天趋势图) hourly: AdRevenueHourly[]; // 按小时汇总序列(全量,供按小时趋势图;按天查询时为空) type_stats: Record; // 按广告类型小计;前端取 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 {