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 (