- 品牌叙事内核(价值主张/定位/承诺/三支柱/语气)下沉 site-config,经 SiteConfigProvider 注入全站 - 新增 page-copy 内容模型承载结构性文案(章节标题/眉标/描述/CTA/空状态),覆盖首页+服务/方案/产品/案例/新闻列表页,「CMS 优先 + 硬编码兜底」不白屏 - 首页「首批客户共创计划」板块(earlyAccessTitle/CtaLabel/Status 驱动)替代单行标签,如实呈现共创/内测/授权公开三档状态 - 关于页资质区数据空时如实展示「建设中」空态 - 零编造:不虚构客户/数据/资质
21 lines
1.2 KiB
TypeScript
21 lines
1.2 KiB
TypeScript
import { Metadata } from 'next';
|
|
import { COMPANY_INFO } from '@/lib/constants';
|
|
import { getPublishedItems, getPageCopy } from '@/lib/cms/data-server';
|
|
import type { Service } from '@/lib/constants/services';
|
|
import ServicesContentV3 from './services-content-v3';
|
|
|
|
export const metadata: Metadata = {
|
|
title: `服务 - ${COMPANY_INFO.displayName}`,
|
|
description: `专业技术团队,为您提供全方位的数字化解决方案。${COMPANY_INFO.displayName}涵盖软件开发、数据分析、咨询服务等核心业务。`,
|
|
};
|
|
|
|
// ISR:生产环境每 1 小时自动重新验证,CMS 发布/更新时通过 /api/cms/revalidate 主动刷新
|
|
export const revalidate = 3600;
|
|
|
|
export default async function ServicesPage() {
|
|
const items = await getPublishedItems('service');
|
|
const services = items.map((item) => ({ ...item.data, id: item.data.id || item.id, slug: item.data.slug || item.slug, title: item.data.title || item.title } as unknown as Service));
|
|
// 服务页结构性文案(Hero/区块标题/CTA/空状态),CMS 未配置时组件内部兜底
|
|
const pageCopy = await getPageCopy('services').catch(() => null);
|
|
return <ServicesContentV3 services={services} pageCopy={pageCopy?.data ?? null} />;
|
|
} |