feat(frontend): P2 页面开发 — 今日行动中心 + 对比 + 决策线程 + OODA + 助推追踪 + 密级标签

- 今日行动中心: 6 区块结构(AI早报/必须处理/建议关注/增长机会/等待他人/已完成)
- 多企业对比: 集成 CompareMode 组件 + 企业选择器
- 决策线程列表/详情: 集成 ThreadList/ThreadDetail 组件
- OODA 决策循环: 四阶段可视化 + 决策延迟追踪
- 助推效果追踪: 采纳率/行动率/疲劳度指标面板
- 信息分级标识: 4 级密级标签组件(公开/内部/机密/绝密)
This commit is contained in:
selfrelease
2026-07-19 19:02:32 +08:00
parent 129210405d
commit a4044baa31
8 changed files with 442 additions and 185 deletions
@@ -1,52 +1,34 @@
/** 决策线程详情页 — 状态机时间线 + 关联事件 + AAR 链接。 */
import { GitBranch, ArrowLeft } from "lucide-react";
import Link from "next/link";
"use client";
import { ThreadDetail } from "@/components/threads/ThreadDetail";
import type { TimelineNode } from "@/components/threads/ThreadDetail";
import type { RelatedEvent } from "@/components/threads/ThreadDetail";
/** 决策线程详情页面。 */
export default function ThreadDetailPage({ params }: { params: { id: string } }) {
const timeline: TimelineNode[] = [
{ status: "identified", label: "已识别", date: "2026-07-09", description: "Runway 不足 7 月,弱信号触发", active: true },
{ status: "analyzing", label: "分析中", date: "2026-07-12", description: "对比天使+ vs Pre-A 方案", active: true },
{ status: "acted", label: "已行动", date: "—", active: false },
{ status: "closed", label: "已关闭", date: "—", active: false },
];
const relatedEvents: RelatedEvent[] = [
{ type: "risk", title: "现金 Runway 不足 7 月", href: "/risks" },
{ type: "report", title: "2026 年 6 月月报", href: "/reports" },
{ type: "task", title: "准备天使+轮 BP", href: "/tasks" },
];
return (
<div className="space-y-6">
<Link href="/threads" className="flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground">
<ArrowLeft size={16} />
线
</Link>
<div className="flex items-center gap-2">
<GitBranch className="text-[var(--investor-primary)]" size={24} />
<h1 className="text-2xl font-bold">线</h1>
</div>
<div className="rounded-lg border bg-white p-4 shadow-sm">
<div className="mb-4 flex items-center justify-between">
<h2 className="text-lg font-medium">线 #{params.id}</h2>
<span className="rounded-full bg-indigo-50 px-3 py-1 text-xs text-indigo-600"></span>
</div>
<p className="text-sm text-muted-foreground">
线 AAR P1 #17
</p>
</div>
{/* 时间线占位 */}
<div className="rounded-lg border bg-white p-4 shadow-sm">
<h3 className="mb-4 font-medium">线</h3>
<div className="space-y-4">
{[
{ label: "已识别", date: "2026-07-09", active: true },
{ label: "分析中", date: "2026-07-12", active: true },
{ label: "已行动", date: "—", active: false },
{ label: "已关闭", date: "—", active: false },
].map((step, i) => (
<div key={i} className="flex items-center gap-3">
<div className={`h-3 w-3 rounded-full ${step.active ? "bg-indigo-500" : "bg-gray-300"}`} />
<span className={`text-sm ${step.active ? "font-medium" : "text-muted-foreground"}`}>
{step.label}
</span>
<span className="text-xs text-muted-foreground">{step.date}</span>
</div>
))}
</div>
</div>
</div>
<ThreadDetail
threadId={params.id}
title="量子芯微 融资策略:天使+ vs Pre-A"
company="量子芯微"
status="analyzing"
timeline={timeline}
relatedEvents={relatedEvents}
/>
);
}