feat(report): distinguish release evidence tiers

This commit is contained in:
phamnazage-jpg
2026-05-14 09:04:16 +08:00
parent f2f68b85c1
commit f3daf2959b
2 changed files with 160 additions and 23 deletions

View File

@@ -1482,13 +1482,14 @@ func headlineItemFromModelEvent(event ModelEvent) HeadlineItem {
switch event.EventType {
case "official_release":
item.Label = "官方发布"
item.Label = "一级官方发布"
item.Title = fmt.Sprintf("%s 官方发布", event.ModelName)
if event.SourceKindLabel == "权威佐证发布" {
item.Label = "权威佐证"
item.Tone = "official-primary"
if event.SourceKindLabel == "二级权威佐证发布" {
item.Label = "二级权威佐证"
item.Title = fmt.Sprintf("%s 进入权威佐证发布时间线", event.ModelName)
item.Tone = "secondary-evidence"
}
item.Tone = "info"
case "new_model":
item.Label = "新模型"
item.Title = fmt.Sprintf("%s 进入今日情报池", event.ModelName)
@@ -1547,15 +1548,15 @@ func buildPriceEvidenceDetail(changePct, oldPrice, newPrice float64, currency st
func buildReleaseSourceKindLabel(dateSourceKind, dateConfidence string) string {
switch {
case dateSourceKind == "secondary_authoritative_report" || dateConfidence == "secondary_authoritative":
return "权威佐证发布"
return "二级权威佐证发布"
case dateSourceKind == "official_announcement" && dateConfidence == "official_primary":
return "官方发布"
return "一级官方发布"
case dateSourceKind == "official_product_page":
return "官方产品页"
case dateSourceKind == "catalog_backfill":
return "目录回填"
default:
return "官方发布"
return "一级官方发布"
}
}
@@ -2241,6 +2242,42 @@ body {
color: var(--ink-soft);
margin-bottom: 8px;
}
.headline-badge {
display: inline-flex;
align-items: center;
padding: 6px 10px;
border-radius: 999px;
font-weight: 800;
letter-spacing: 0.01em;
}
.badge-official-primary {
background: rgba(18,60,99,0.12);
color: var(--blue);
}
.badge-secondary-evidence {
background: rgba(173,107,17,0.14);
color: var(--amber);
}
.badge-info {
background: rgba(18,60,99,0.10);
color: var(--blue);
}
.badge-success {
background: rgba(31,122,76,0.12);
color: var(--green);
}
.badge-warning {
background: rgba(173,107,17,0.12);
color: var(--amber);
}
.badge-caution {
background: rgba(165,59,42,0.12);
color: var(--red);
}
.badge-neutral {
background: rgba(81,101,121,0.12);
color: var(--ink-soft);
}
.card-title {
font-size: 1.18rem;
font-weight: 800;
@@ -2388,6 +2425,14 @@ th {
.tone-info { border-color: rgba(18,60,99,0.18); }
.tone-caution { border-color: rgba(165,59,42,0.18); }
.tone-neutral { border-color: rgba(81,101,121,0.16); }
.tone-official-primary {
border-color: rgba(18,60,99,0.26);
background: linear-gradient(180deg, rgba(18,60,99,0.05), rgba(255,255,255,0.94));
}
.tone-secondary-evidence {
border-color: rgba(173,107,17,0.24);
background: linear-gradient(180deg, rgba(173,107,17,0.06), rgba(255,255,255,0.94));
}
.footer {
text-align: center;
}
@@ -2455,7 +2500,7 @@ th {
<div class="headline-grid">
{{range .HeadlineItems}}
<article class="headline-card tone-{{.Tone}}">
<div class="card-kicker">{{.Label}}</div>
<div class="card-kicker headline-badge badge-{{.Tone}}">{{.Label}}</div>
<div class="card-title">{{.Title}}</div>
<div class="card-summary">{{.Summary}}</div>
{{if .SourceKindLabel}}<div class="source-line">事件来源:{{.SourceKindLabel}}</div>{{end}}