Files
AIPortPilot/frontend/src/app/founder/operations/page.tsx
T
selfrelease 44cbdc9d62 feat(frontend): P3+P4 创始人端增强 + 企业战情室集成
P3 创始人端:
- 经营驾驶舱: 6 KPI 卡片 + 风险提示
- 投资人沟通准备中心: 会议列表 + 准备清单 + AI 建议
- 里程碑自填: 进度滑块 + 新增表单
- OKR 对齐视图: 投资人期望对齐度 + KR 进度
- BML 认知追踪: 信念/心智模型/学习追踪
- 通知页面 + 个人中心页面

P4 企业战情室集成:
- HighlightsPanel: 顶部 KPI 摘要栏
- WorkModeSwitcher: 4 种工作模式切换
- InsightRail: 右侧 AI 面板(默认风险预警 Agent)

Admin:
- 商业秘密保护配置: 密级/留痕/导出管控/审计日志
2026-07-19 19:06:43 +08:00

57 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** 经营驾驶舱页面 — 创始人端核心经营指标可视化。 */
"use client";
import { Gauge, TrendingUp, TrendingDown, Wallet, Users, Target, Cpu, AlertTriangle } from "lucide-react";
/** 经营驾驶舱页面。 */
export default function OperationsPage() {
const kpis = [
{ label: "月营收", value: "800万", trend: "up", trendValue: "+15%", icon: Wallet, color: "text-emerald-600" },
{ label: "毛利率", value: "42%", trend: "up", trendValue: "+3%", icon: TrendingUp, color: "text-emerald-600" },
{ label: "客户数", value: "156", trend: "up", trendValue: "+12", icon: Users, color: "text-emerald-600" },
{ label: "Runway", value: "18 月", trend: "stable", trendValue: "持平", icon: Gauge, color: "text-blue-600" },
{ label: "OKR 进度", value: "68%", trend: "up", trendValue: "+8%", icon: Target, color: "text-indigo-600" },
{ label: "AI PoC", value: "3 个", trend: "up", trendValue: "+1", icon: Cpu, color: "text-indigo-600" },
];
return (
<div className="space-y-6">
<div className="flex items-center gap-2">
<Gauge className="text-[var(--founder-primary)]" size={24} />
<h1 className="text-2xl font-bold"></h1>
</div>
{/* KPI 卡片网格 */}
<div className="grid grid-cols-2 gap-4 md:grid-cols-3">
{kpis.map((kpi) => (
<div key={kpi.label} className="rounded-xl border bg-white p-4 shadow-sm">
<div className="mb-2 flex items-center justify-between">
<kpi.icon className={kpi.color} size={20} aria-hidden="true" />
<span className={`text-xs ${kpi.trend === "up" ? "text-emerald-500" : kpi.trend === "down" ? "text-rose-500" : "text-gray-400"}`}>
{kpi.trend === "up" && <TrendingUp size={10} className="inline" aria-hidden="true" />}
{kpi.trend === "down" && <TrendingDown size={10} className="inline" aria-hidden="true" />}
{kpi.trendValue}
</span>
</div>
<div className="text-2xl font-bold">{kpi.value}</div>
<div className="text-xs text-muted-foreground">{kpi.label}</div>
</div>
))}
</div>
{/* 风险提示 */}
<div className="rounded-xl border border-amber-200 bg-amber-50 p-4">
<div className="mb-2 flex items-center gap-2">
<AlertTriangle className="text-amber-500" size={18} aria-hidden="true" />
<h2 className="font-medium text-amber-700"></h2>
</div>
<ul className="space-y-1.5 text-sm text-amber-800">
<li> 2 访</li>
<li> 线</li>
</ul>
</div>
</div>
);
}