feat(admin-web): 领券数据/比价记录看板新增「广告收益」列 (#45)
## 背景 后端两个看板接口新增逐行 `ad_revenue_yuan`(元),前端补上展示列。 ## 改动 - `src/lib/types.ts`:`ComparisonRecordListItem` 增 `ad_revenue_yuan: number` (`ComparisonRecordDetail` 自动继承)。 - `comparison-records/page.tsx`:「省」列后新增「广告收益」列(>0 显示绿色 ¥x.xxxx, 否则 `-`);表格 `scroll.x` 1820 → 1920。 - `coupon-data/page.tsx`:`CouponDataRow` 增字段;新增 `fmtYuan` 格式化(¥ 保留 4 位、 空/≤0 显示 `-`);主表「耗时」列后新增「广告收益」列(不动用户抽屉 RECORD_COLUMNS); `scroll.x` 1450 → 1560。 ## 说明 - 后端未更新时该字段为 undefined → 显示 `-`,无害。 - 单次广告收益很小(如 ¥0.0034),故 4 位小数。 - 领券看板默认按会话 app_env=`prod` 筛;真机测试数据在 `dev`,需切换环境才可见。 --------- Co-authored-by: guke <guke@autohome.com.cn> Reviewed-on: #45
This commit was merged in pull request #45.
This commit is contained in:
@@ -184,6 +184,18 @@ export default function ComparisonRecordsPage() {
|
||||
<b style={{ color: r.saved_amount_cents > 0 ? '#3f8600' : '#999' }}>{yuan(r.saved_amount_cents)}</b>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '广告收益',
|
||||
key: 'ad_revenue',
|
||||
width: 96,
|
||||
align: 'right',
|
||||
render: (_, r) =>
|
||||
r.ad_revenue_yuan > 0 ? (
|
||||
<span style={{ color: '#3f8600' }}>¥{r.ad_revenue_yuan.toFixed(4)}</span>
|
||||
) : (
|
||||
<span style={{ color: '#ccc' }}>-</span>
|
||||
),
|
||||
},
|
||||
{ title: '耗时', dataIndex: 'total_ms', width: 64, render: fmtMs },
|
||||
{ title: '步', dataIndex: 'step_count', width: 48, render: (v) => v ?? '-' },
|
||||
{ title: 'LLM', dataIndex: 'llm_call_count', width: 56, render: (v) => v ?? '-' },
|
||||
@@ -297,7 +309,7 @@ export default function ComparisonRecordsPage() {
|
||||
showTotal: (t) => `共 ${t} 条`,
|
||||
onChange,
|
||||
}}
|
||||
scroll={{ x: 1820 }}
|
||||
scroll={{ x: 1920 }}
|
||||
onRow={(r) => ({ onClick: () => openDetail(r.id), style: { cursor: 'pointer' } })}
|
||||
/>
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ interface CouponDataRow {
|
||||
started_at: string;
|
||||
claimed_count: number | null;
|
||||
trace_url: string | null;
|
||||
ad_revenue_yuan: number; // 本次领券看的信息流广告预估收益(元)
|
||||
}
|
||||
interface CouponDataReport {
|
||||
date_from: string;
|
||||
@@ -123,6 +124,10 @@ const fmtSec = (ms: number | null | undefined): string =>
|
||||
const fmtPct = (v: number | null | undefined): string =>
|
||||
v == null ? '-' : `${(v * 100).toFixed(1)}%`;
|
||||
|
||||
// 元(小数)→ "¥0.0050"(空/≤0 显示 -)。单次广告收益很小,保留 4 位。
|
||||
const fmtYuan = (v: number | null | undefined): string =>
|
||||
v == null || v <= 0 ? '-' : `¥${v.toFixed(4)}`;
|
||||
|
||||
// 汇总卡成功率口径 tooltip 文案
|
||||
const FULL_RATE_HINT =
|
||||
'整单成功率:一次领券勾选的平台全部至少领到一张的场次 ÷ 领券发起数;基数含未完成/失败/中途退出。';
|
||||
@@ -469,6 +474,13 @@ export default function CouponDataPage() {
|
||||
align: 'right',
|
||||
render: (v: number | null) => fmtSec(v),
|
||||
},
|
||||
{
|
||||
title: '广告收益',
|
||||
dataIndex: 'ad_revenue_yuan',
|
||||
width: 100,
|
||||
align: 'right',
|
||||
render: (v: number) => fmtYuan(v),
|
||||
},
|
||||
{
|
||||
title: '美团耗时',
|
||||
key: 'mt_elapsed',
|
||||
@@ -863,7 +875,7 @@ export default function CouponDataPage() {
|
||||
onChange: (p) => load(p, queriedLimit),
|
||||
}}
|
||||
size="small"
|
||||
scroll={{ x: 1450 }}
|
||||
scroll={{ x: 1560 }}
|
||||
/>
|
||||
|
||||
<UserRecordsDrawer<CouponDataRow>
|
||||
|
||||
@@ -359,6 +359,7 @@ export interface ComparisonRecordListItem {
|
||||
rom_name: string | null;
|
||||
android_version: string | null;
|
||||
app_version: string | null;
|
||||
ad_revenue_yuan: number; // 本次比价看的信息流广告预估收益(元)
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user