diff --git a/apps/web/app/xiaobao-warning/page.tsx b/apps/web/app/xiaobao-warning/page.tsx index bee87f3..38354a2 100644 --- a/apps/web/app/xiaobao-warning/page.tsx +++ b/apps/web/app/xiaobao-warning/page.tsx @@ -233,6 +233,7 @@ function XiaobaoWarningContent() { } function XiaobaoWarningDetailPanel({ risk, onNavigate }: { risk: XiaobaoVersionRisk; onNavigate: () => void }) { + const [detailTab, setDetailTab] = useState<'reasons' | 'silent' | 'evidence'>('reasons'); const evidence = risk.dailyEvidence; const evidenceItems = [ ...(evidence?.todayDeliveries ?? []), @@ -293,51 +294,73 @@ function XiaobaoWarningDetailPanel({ risk, onNavigate }: { risk: XiaobaoVersionR )} -
-
-
+
+
+

期望发版:{formatDateTime(risk.expectedReleaseDate)}

-

预测可发:{formatDateTime(risk.forecastReleaseDate)}

-

{risk.trend.summary}

+

预测可发:{formatDateTime(risk.forecastReleaseDate)}

+

预计延期:{risk.delayDays > 0 ? `${risk.delayDays}天` : '0天'}

-
+

{risk.trend.summary}

+
+
-
- {risk.reasons.length === 0 ? : risk.reasons.map((reason) => ( -
-
-

{reason.title}

- {reason.severity} +
+
+
+ setDetailTab('reasons')}> + 风险原因 {risk.reasons.length} + + setDetailTab('silent')}> + 静默风险 {risk.silentRisks.length} + + setDetailTab('evidence')}> + 日报与活动证据 {evidenceItems.length} + +
+
+ {detailTab === 'reasons' && ( +
+ {risk.reasons.length === 0 ? : risk.reasons.map((reason) => ( +
+
+

{reason.title}

+ {reason.severity} +
+

{reason.detail}

+
+ ))}
-

{reason.detail}

-
- ))} -
-
+ )} -
-
- {evidenceItems.length === 0 ? : evidenceItems.map((item) => ( -
-

{item.title}

-

{item.summary}

-

{formatDateTime(item.occurredAt)}

-
- ))} -
+ {detailTab === 'silent' && ( +
+ {risk.silentRisks.length === 0 ? : risk.silentRisks.map((item, index) => ( +
+

{item.title}

+

{item.detail}

+
+ ))} +
+ )} -
- {risk.silentRisks.length === 0 ? : risk.silentRisks.map((item, index) => ( -
-

{item.title}

-

{item.detail}

-
- ))} -
-
+ {detailTab === 'evidence' && ( +
+ {evidenceItems.length === 0 ? : evidenceItems.map((item) => ( +
+

{item.title}

+

{item.summary}

+

{formatDateTime(item.occurredAt)}

+
+ ))} +
+ )} +
+
+ ); } @@ -406,6 +429,22 @@ function FilterButton({ active, onClick, children }: { active: boolean; onClick: ); } +function TabButton({ active, onClick, children }: { active: boolean; onClick: () => void; children: React.ReactNode }) { + return ( + + ); +} + function Section({ title, children }: { title: string; children: React.ReactNode }) { return (