feat(cms): integrate global layout with CMS and document decision

- Move site-config and navigation to CMS-backed SiteConfigProvider
- Keep static constants as fallback for dev and degraded modes
- Add ADR-0005 recording the global layout CMS strategy

Refs ADR-0005
This commit is contained in:
张翔
2026-07-08 14:46:14 +08:00
parent 38be4a19ef
commit f4b98fb730
6 changed files with 282 additions and 39 deletions
+35 -21
View File
@@ -233,17 +233,19 @@ const solutionFields: FieldDefinition[] = [
const heroBannerFields: FieldDefinition[] = [
{
name: 'heading',
name: 'headingTop',
type: 'text',
label: '主标题',
label: '顶部小标题',
required: true,
description: '显示在主标题上方的引导语',
ui: { width: 'full' },
},
{
name: 'subheading',
type: 'textarea',
label: '副标题',
name: 'headingBottom',
type: 'text',
label: '主标题',
required: true,
description: 'Hero 区核心大标题',
ui: { width: 'full' },
},
{
@@ -252,36 +254,48 @@ const heroBannerFields: FieldDefinition[] = [
label: '描述文本',
},
{
name: 'primaryCtaText',
name: 'ctaLabel',
type: 'text',
label: '主按钮文案',
defaultValue: '了解更多',
defaultValue: '预约咨询',
},
{
name: 'primaryCtaLink',
name: 'ctaHref',
type: 'text',
label: '主按钮链接',
defaultValue: '/solutions',
},
{
name: 'secondaryCtaText',
type: 'text',
label: '副按钮文案',
defaultValue: '联系我们',
},
{
name: 'secondaryCtaLink',
type: 'text',
label: '副按钮链接',
defaultValue: '/contact',
},
{
name: 'statValue',
type: 'text',
label: '统计数值',
description: 'Hero 区右侧可选数据指标,如「500+」',
},
{
name: 'statSubtext',
type: 'text',
label: '统计说明',
description: '与统计数值配套的说明文字',
},
{
name: 'ctaTitleLine1',
type: 'text',
label: 'CTA 标题第一行',
description: '底部 CTA 区域第一行标题',
},
{
name: 'ctaTitleLine2',
type: 'text',
label: 'CTA 标题第二行',
description: '底部 CTA 区域第二行标题(通常使用品牌红色)',
},
{
name: 'theme',
type: 'text',
label: '主题风格',
defaultValue: 'brand',
options: [
{ label: '品牌绿', value: 'brand' },
{ label: '品牌红', value: 'brand' },
{ label: '蓝', value: 'blue' },
{ label: '青', value: 'teal' },
{ label: '琥珀', value: 'amber' },
+5
View File
@@ -14,6 +14,11 @@ export interface CaseStudyData {
testimonial?: CaseTestimonial;
color: 'brand' | 'blue' | 'teal' | 'amber' | 'purple';
featured?: boolean;
projectDuration?: string;
departments?: string[];
dataScale?: string;
businessProblem?: string;
verified?: boolean;
}
export type FieldType =