Files

74 lines
4.1 KiB
TypeScript

import type { Metadata } from "next";
import { PublicShell, StatusPill } from "../components/Shells";
import { getPublicCommercialSnapshot } from "@/db/repository";
export const dynamic = "force-dynamic";
export const metadata: Metadata = {
title: "免费公测上线门禁",
description: "免费公测开放前必须完成的安全、主机接入、主体路径、隐私与运维证据。",
};
const categoryName: Record<string, string> = {
security: "安全",
entitlement: "权益",
infrastructure: "基础设施",
billing: "账单与支付",
compliance: "经营与合规",
privacy: "隐私与数据",
operations: "运维",
product: "产品规则",
};
export default async function ReadinessPage() {
const commercial = await getPublicCommercialSnapshot();
return (
<PublicShell>
<section className="subpage-hero readiness-hero">
<div className="subpage-hero-inner">
<StatusPill tone={commercial.blockedP0 ? "danger" : "good"}>{commercial.blockedP0 ? "PUBLIC BETA BLOCKED" : "P0 GATES PASSED"}</StatusPill>
<h1>{commercial.blockedP0 ? "先把免费公测跑稳。" : "免费公测基础门禁已经通过。"}</h1>
<p>{commercial.blockedP0 ? `控制台可以演示数据和管理流程;真实主机接入、生产租户开通和强隐私承诺仍由 ${commercial.blockedP0} 项 P0 证据门禁阻止。` : "P0 证据已经齐全;接下来按邀请范围、支持能力和运营容量逐步开放。"}</p>
</div>
</section>
<section className="section gates-section">
<div className="gates-heading">
<div><span className="eyebrow">P0 BETA GATES</span><h2>一项没过,就不向公众开放。</h2></div>
<p>门禁状态来自控制平面数据库。管理员可以补负责人、证据与审计,但不能用一个“公测免费”开关绕过安全与运行条件。</p>
</div>
<div className="gates-grid">
{commercial.gates.map((gate) => (
<article className="gate-card" key={gate.key}>
<div className="gate-card-top">
<span>{categoryName[gate.category] ?? gate.category}</span>
<StatusPill tone={gate.status === "passed" ? "good" : gate.status === "in_progress" ? "warn" : "danger"}>
{gate.status === "passed" ? "已通过" : gate.status === "in_progress" ? "进行中" : "阻止"}
</StatusPill>
</div>
<h3>{gate.title}</h3>
<dl>
<div><dt>负责人</dt><dd>{gate.owner || "待指定"}</dd></div>
<div><dt>证据</dt><dd>{gate.evidence_url ? <a href={gate.evidence_url}>打开证据</a> : "尚未提交"}</dd></div>
</dl>
</article>
))}
</div>
</section>
<section className="section legal-section">
<div className="section-heading split-heading">
<div><span className="eyebrow">DOMESTIC BETA BASICS</span><h2>国内个人用户公测,先确认这些基础项。</h2></div>
<p>当前不收款,因此支付、发票和付费条款不阻塞免费测试;主体/域名路径、隐私告知和真实运维能力仍要在开放前讲清楚。</p>
</div>
<div className="legal-ledger">
<article><span>01</span><h3>主体、域名与接入路径</h3><p>确认以什么身份提供免费测试、域名和部署位置,以及当前服务形态对应的备案路径。</p></article>
<article><span>02</span><h3>隐私告知与数据退出</h3><p>当前数据清单与退出入口已公开;仍需确定保存期、受托方、跨境事实和卷/备份擦除证据。</p><a href="/privacy">查看公测数据说明 </a></article>
<article><span>03</span><h3>真实主机接入安全</h3><p>配对码认领、来源限速、设备撤销、凭据恢复和异常告警必须在真实 daemon 链路上验证。</p></article>
<article><span>04</span><h3>故障与反馈渠道</h3><p>准备最小可用的状态通知、问题反馈、回滚和数据恢复路径,让测试用户知道出问题该怎么办。</p></article>
</div>
</section>
</PublicShell>
);
}