103 lines
5.2 KiB
TypeScript
103 lines
5.2 KiB
TypeScript
import type { Metadata } from "next";
|
|
import Link from "next/link";
|
|
import { PublicShell, StatusPill } from "../components/Shells";
|
|
import { getPublicCommercialSnapshot } from "@/db/repository";
|
|
import { getPublicBetaPresentation } from "@/db/domain";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "免费公测政策",
|
|
description: "NekoNest Cloud 前几个月免费公测,不绑定支付方式,也不创建报价或订单。",
|
|
};
|
|
|
|
export default async function PricingPage() {
|
|
const commercial = await getPublicCommercialSnapshot();
|
|
const betaActive = Boolean(commercial.beta);
|
|
const publicBetaOpen = betaActive && commercial.blockedP0 === 0;
|
|
const betaCopy = getPublicBetaPresentation(betaActive);
|
|
|
|
return (
|
|
<PublicShell>
|
|
<section className="subpage-hero pricing-hero">
|
|
<div className="subpage-hero-inner">
|
|
<span className="eyebrow">PUBLIC BETA / 免费公测</span>
|
|
<h1>先把连接体验做稳,再讨论收费。</h1>
|
|
<p>
|
|
{publicBetaOpen
|
|
? "当前面向国内个人用户免费测试,不绑定支付方式、不生成报价或订单,也不会在公测结束时自动扣款。"
|
|
: betaActive
|
|
? "免费测试政策已经预设,但公开接入仍被冻结;当前仅向管理员明确邀请的闭测账户免费开放。"
|
|
: "当前免费公测政策已经结束,但收费功能仍未开放。后续方案确定前不会自动创建订单或扣款。"}
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section className="section pricing-catalog-section">
|
|
<div className="pricing-catalog">
|
|
<article className="pricing-card beta-card featured-card">
|
|
<div className="pricing-card-top">
|
|
<StatusPill tone={publicBetaOpen ? "good" : betaActive ? "warn" : "neutral"}>{publicBetaOpen ? betaCopy.cardStatus : betaActive ? "邀请闭测" : betaCopy.cardStatus}</StatusPill>
|
|
<span>{betaCopy.cardTitle}</span>
|
|
</div>
|
|
<h2>{betaCopy.priceValue}</h2>
|
|
<p>{betaCopy.cardDescription}</p>
|
|
<ul className="plain-list">
|
|
<li>无需绑定支付方式</li>
|
|
<li>不创建报价、订单或余额</li>
|
|
<li>公测结束不会自动扣款</li>
|
|
<li>容量与反滥用限制提前明示</li>
|
|
</ul>
|
|
<Link className="button button-light" href="/dashboard">{betaCopy.cta}</Link>
|
|
</article>
|
|
|
|
<article className="pricing-card">
|
|
<div className="pricing-card-top">
|
|
<StatusPill tone="info">以后再定</StatusPill>
|
|
<span>未来收费</span>
|
|
</div>
|
|
<h2>尚未确定</h2>
|
|
<p>什么时候收费、怎样收费以及具体价格,等真实用户量、资源成本和支持工作量有数据后再决定。</p>
|
|
<ul className="plain-list">
|
|
<li>不会把公测用户静默转成付费</li>
|
|
<li>启用收费前会单独通知</li>
|
|
<li>用户需要主动确认</li>
|
|
<li>自托管路径继续免费</li>
|
|
</ul>
|
|
<button className="button button-secondary" type="button" disabled>收费功能未开放</button>
|
|
</article>
|
|
</div>
|
|
</section>
|
|
|
|
<section className="section policy-section">
|
|
<div className="policy-grid">
|
|
<div>
|
|
<span className="eyebrow">BETA RULES</span>
|
|
<h2>免费不等于规则不透明。</h2>
|
|
</div>
|
|
<dl className="rules-list">
|
|
<div><dt>接入主机</dt><dd>后台可按公测容量调整允许接入的主机槽位;变更会在连接前明确显示。</dd></div>
|
|
<div><dt>手机与浏览器</dt><dd>不消耗主机槽位,但仍受正常的安全、连接和反滥用限制。</dd></div>
|
|
<div><dt>公测结束</dt><dd>只改变免费资格,不会生成订单、绑定支付方式或自动扣款。</dd></div>
|
|
<div><dt>数据与退出</dt><dd>停用主机、撤销设备和必要的数据退出能力不应被未来收费状态锁住。</dd></div>
|
|
</dl>
|
|
</div>
|
|
</section>
|
|
|
|
<section className="section comparison-section">
|
|
<div className="section-heading split-heading">
|
|
<div><span className="eyebrow">SELF-HOST OR CLOUD</span><h2>自己部署,或参加免费公测。</h2></div>
|
|
<p>Cloud 现阶段的目标是验证官方托管能否真正省掉部署与维护成本,而不是急着做支付系统。</p>
|
|
</div>
|
|
<div className="comparison-table" role="table" aria-label="自托管与 Cloud 比较">
|
|
<div role="row" className="comparison-head"><span>项目</span><strong>自托管</strong><strong>NekoNest Cloud</strong></div>
|
|
<div role="row"><span>当前费用</span><b>免费 / 开源</b><b>{betaCopy.comparison}</b></div>
|
|
<div role="row"><span>VPS、DNS、TLS</span><b>自己维护</b><b>公测平台负责</b></div>
|
|
<div role="row"><span>项目与模型凭据</span><b>留在主机</b><b>仍留在主机</b></div>
|
|
<div role="row"><span>未来收费承诺</span><b>无</b><b>目前未确定</b></div>
|
|
</div>
|
|
</section>
|
|
</PublicShell>
|
|
);
|
|
}
|