feat(app): 全局样式重构与核心应用层更新

- 重构 globals.css 设计令牌系统,对齐咨询风品牌色与排版
- 更新根布局,集成 SEO schema 与黑暗模式防闪烁脚本
- 添加 robots.ts 与 sitemap.ts 动态生成
- 添加 middleware.ts 中间件层
- 更新隐私政策与服务条款页面
This commit is contained in:
张翔
2026-07-07 06:52:19 +08:00
parent cf99e7556c
commit 9053f69123
12 changed files with 1444 additions and 975 deletions
+183 -157
View File
@@ -1,4 +1,5 @@
import { Metadata } from 'next';
import { getPublishedItems } from '@/lib/cms/data-server';
import { COMPANY_INFO } from '@/lib/constants';
export const metadata: Metadata = {
@@ -6,10 +7,182 @@ export const metadata: Metadata = {
description: `${COMPANY_INFO.name}服务条款`,
};
export default function TermsOfServicePage() {
function TermsContent() {
return (
<div className="prose prose-lg max-w-none">
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使&ldquo;&rdquo;&ldquo;&rdquo;使使
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
ERPCRMBI等
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">2.1 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">2.2 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2 mb-4">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<p className="text-[var(--color-text-muted)] leading-relaxed">
使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
使使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">5.1 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">5.2 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">5.3 退</h3>
<p className="text-[var(--color-text-muted)] leading-relaxed">
退使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
&ldquo;&rdquo;&ldquo;&rdquo;
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2">
<li></li>
<li></li>
<li></li>
<li>使使</li>
</ul>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2">
<li></li>
<li></li>
<li>使</li>
<li></li>
</ul>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2">
<li>使</li>
<li>使</li>
<li>使使</li>
<li>便</li>
</ul>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<ul className="list-none text-[var(--color-text-muted)] space-y-2">
<li></li>
<li>contact@novalon.cn</li>
<li>驿12</li>
</ul>
</section>
<section className="bg-[var(--color-warning-bg)] p-6 rounded-lg">
<div className="flex items-center gap-2 mb-2">
<div className="w-2 h-2 bg-[var(--color-brand)] rounded-full" />
<p className="text-[var(--color-text-primary)] font-medium"></p>
</div>
<p className="text-[var(--color-text-muted)] pl-4">2026226</p>
</section>
</div>
);
}
export default async function TermsOfServicePage() {
let cmsContent: string | null = null;
try {
const items = await getPublishedItems('legal-page');
const termsItem = items.find((item) => item.data.pageType === 'terms');
if (termsItem && typeof termsItem.data.content === 'string' && termsItem.data.content.length > 0) {
cmsContent = termsItem.data.content as string;
}
} catch {
// CMS not available, fall back to inline content
}
return (
<div className="min-h-screen bg-[var(--color-bg-primary)]">
<div className="bg-gradient-to-br from-[var(--color-brand-primary)] via-[var(--color-brand-primary)]/80 to-[var(--color-hero-dark-end)] py-20">
<div className="bg-gradient-to-br from-[var(--color-brand)] via-[var(--color-brand)]/80 to-[var(--color-hero-dark-end)] py-20">
<div className="container-wide">
<h1 className="text-4xl md:text-5xl font-bold text-white mb-4">
@@ -22,161 +195,14 @@ export default function TermsOfServicePage() {
<div className="container-wide py-16">
<div className="max-w-4xl">
<div className="prose prose-lg max-w-none">
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使&ldquo;&rdquo;&ldquo;&rdquo;使使
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
ERPCRMBI等
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">2.1 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">2.2 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2 mb-4">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<p className="text-[var(--color-text-muted)] leading-relaxed">
使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed">
使使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">5.1 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">5.2 </h3>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<h3 className="text-xl font-semibold text-[var(--color-text-primary)] mb-3">5.3 退</h3>
<p className="text-[var(--color-text-muted)] leading-relaxed">
退使
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
&ldquo;&rdquo;&ldquo;&rdquo;
</p>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2">
<li></li>
<li></li>
<li></li>
<li>使使</li>
</ul>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
使
</p>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2">
<li></li>
<li></li>
<li>使</li>
<li></li>
</ul>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<ul className="list-disc pl-6 text-[var(--color-text-muted)] space-y-2">
<li>使</li>
<li>使</li>
<li>使使</li>
<li>便</li>
</ul>
</section>
<section className="mb-12">
<h2 className="text-2xl font-bold text-[var(--color-text-primary)] mb-4"></h2>
<p className="text-[var(--color-text-muted)] leading-relaxed mb-4">
</p>
<ul className="list-none text-[var(--color-text-muted)] space-y-2">
<li></li>
<li>contact@novalon.cn</li>
<li>驿12</li>
</ul>
</section>
<section className="bg-[var(--color-warning-bg)] p-6 rounded-lg">
<div className="flex items-center gap-2 mb-2">
<div className="w-2 h-2 bg-[var(--color-brand-primary)] rounded-full" />
<p className="text-[var(--color-text-primary)] font-medium"></p>
</div>
<p className="text-[var(--color-text-muted)] pl-4">2026226</p>
</section>
</div>
{cmsContent ? (
<div
className="prose prose-lg max-w-none"
dangerouslySetInnerHTML={{ __html: cmsContent }}
/>
) : (
<TermsContent />
)}
</div>
</div>
</div>