feat(cms): 品牌叙事与结构性文案全站 CMS 化并补齐信任证据阶段 0

- 品牌叙事内核(价值主张/定位/承诺/三支柱/语气)下沉 site-config,经 SiteConfigProvider 注入全站
- 新增 page-copy 内容模型承载结构性文案(章节标题/眉标/描述/CTA/空状态),覆盖首页+服务/方案/产品/案例/新闻列表页,「CMS 优先 + 硬编码兜底」不白屏
- 首页「首批客户共创计划」板块(earlyAccessTitle/CtaLabel/Status 驱动)替代单行标签,如实呈现共创/内测/授权公开三档状态
- 关于页资质区数据空时如实展示「建设中」空态
- 零编造:不虚构客户/数据/资质
This commit is contained in:
2026-08-20 09:25:12 +08:00
parent 56be17b0ba
commit 337e1e60c0
34 changed files with 848 additions and 152 deletions
+115 -1
View File
@@ -11,7 +11,8 @@ import { PRODUCTS } from './seeds/products';
import { STANDALONE_PRODUCTS } from './seeds/standalone-products';
import { SOLUTIONS } from './seeds/solutions';
import { STATS } from '../src/lib/constants/stats';
import { COMPANY_INFO } from '../src/lib/constants/company';
import { COMPANY_INFO, TRUST_SIGNALS, EARLY_ACCESS } from '../src/lib/constants/company';
import { BRAND_NARRATIVE } from '../src/lib/constants/company';
import { METHODOLOGY } from '../src/lib/constants/methodology';
import { NAVIGATION_V2, MEGA_DROPDOWN_DATA } from '../src/lib/constants/navigation';
@@ -233,6 +234,7 @@ async function main() {
'standalone-product',
'media',
'methodology',
'page-copy',
];
// 为 super_admin 之外的角色创建权限
@@ -471,6 +473,16 @@ async function main() {
{ name: 'displayName', type: 'text', label: '展示名称', required: true },
{ name: 'slogan', type: 'text', label: '品牌标语', required: true },
{ name: 'description', type: 'textarea', label: '公司简介', required: true },
{ name: 'valueProposition', type: 'textarea', label: '一句话价值主张(L0', description: '品牌叙事核心,用于首页 Hero / 品牌触点' },
{ name: 'positioningStatement', type: 'textarea', label: '品牌定位声明', description: '品牌叙事核心 — 为谁、解决什么、凭什么' },
{ name: 'brandPromise', type: 'textarea', label: '品牌承诺', description: '品牌叙事核心 — 我们承诺什么' },
{ name: 'toneOfVoice', type: 'textarea', label: '语气语调(写作规范)', description: '内部文案写作参考,不在页面直接展示' },
{ name: 'pillars', type: 'array', label: '信息层级三支柱(L1', description: '战略同行 / 落地同行 / 陪跑同行,对应产品、方案、服务', fields: [
{ name: 'key', type: 'text', label: '标识(如 strategy' },
{ name: 'title', type: 'text', label: '标题' },
{ name: 'tagline', type: 'text', label: '一句话副标' },
{ name: 'description', type: 'textarea', label: '描述' },
]},
{ name: 'founded', type: 'text', label: '成立年份' },
{ name: 'location', type: 'text', label: '所在地' },
{ name: 'email', type: 'text', label: '联系邮箱', required: true },
@@ -885,6 +897,11 @@ async function main() {
displayName: COMPANY_INFO.displayName,
slogan: COMPANY_INFO.slogan,
description: COMPANY_INFO.description,
valueProposition: BRAND_NARRATIVE.valueProposition,
positioningStatement: BRAND_NARRATIVE.positioningStatement,
brandPromise: BRAND_NARRATIVE.brandPromise,
toneOfVoice: BRAND_NARRATIVE.toneOfVoice,
pillars: BRAND_NARRATIVE.pillars,
founded: COMPANY_INFO.founded,
location: COMPANY_INFO.location,
email: COMPANY_INFO.email,
@@ -906,6 +923,103 @@ async function main() {
]);
console.log(' ✅ 导航菜单');
console.log('📝 导入首页文案配置...');
await seedItems('page-copy', [
{
slug: 'home',
title: '首页文案配置',
trustEyebrow: '值得信赖',
trustTitle: '以可衡量的成果\n赢得长期信任',
trustSignals: TRUST_SIGNALS.map((s) => ({ value: s.value, label: s.label, desc: s.desc, source: s.source })),
earlyAccessLabel: EARLY_ACCESS.label,
earlyAccessDesc: EARLY_ACCESS.desc,
earlyAccessTitle: '首批客户共创计划',
earlyAccessCtaLabel: '成为共创客户',
earlyAccessStatus: [
{ label: '共创进行中', desc: '我们正与首批客户共同打磨产品与方案,以真实运营数据验证业务改善。' },
{ label: '产品内测中', desc: '自研产品(如睿视 NovaVis)处于内测阶段,成熟后正式发布。' },
{ label: '成果授权公开', desc: '案例与可量化成果在获得客户授权后公示——经得起衡量。' },
],
narrativeTitle: '从问题到结果,\n一条可量化的路径',
narrativeActs: [
{ number: '01', title: '诊断现状', desc: '从业务目标出发,梳理流程断点、数据孤岛与瓶颈环节,形成可量化的诊断结论。', href: '/services/consulting', cta: '了解诊断方法' },
{ number: '02', title: '设计路径', desc: '基于诊断结论设计系统架构与实施路线图,明确每一阶段的交付物与衡量指标。', href: '/services/solutions', cta: '查看方案设计' },
{ number: '03', title: '交付成果', desc: '以自研产品组合与专业实施团队完成交付,用真实运营数据验证业务改善,持续迭代。', href: '/products', cta: '浏览产品矩阵' },
],
servicesTitle: '从战略到落地,\n可量化的一站式服务',
casesEyebrow: '共创进行时',
casesTitle: '每一个项目,\n都以业务改善为衡量标准',
casesDescription: '我们正与首批客户共同打磨产品与方案,以真实运营数据验证业务改善。公开案例将在验证后发布——合作成果,经得起衡量。',
ctaTitleLine1: '准备好开始了吗?',
ctaTitleLine2: '让数据真正转化为业务增长',
ctaLabel: '预约咨询',
},
]);
console.log(' ✅ 首页文案配置');
console.log('📝 导入列表页文案配置...');
await seedItems('page-copy', [
{
slug: 'services',
title: '服务页文案配置',
servicesHeroTitle1: '从规划到运维',
servicesHeroTitle2: '全程陪伴',
servicesHeroDescription: '不只是技术供应商,更是您数字化转型的同行者。\n从第一次沟通到系统稳定运行,我们始终在您身边。',
servicesCtaPrimary: '聊聊您的需求',
servicesCtaSecondary: '查看产品矩阵',
servicesGridTitle: '四大核心服务,覆盖数字化全链路',
servicesEmptyState: '暂无服务数据',
servicesCtaTitle: '准备好开始了吗?',
servicesCtaDescription: '无论是一个明确的项目,还是一个模糊的想法,我们都愿意坐下来和您一起理清楚。\n首次咨询免费,没有任何销售压力。',
},
{
slug: 'solutions',
title: '方案页文案配置',
solutionsHeroTitle1: '专注行业场景的',
solutionsHeroTitle2: '解决方案',
solutionsHeroDescription: '端到端交付可量化的业务成果。\n基于自研产品矩阵,为制造、零售、教育、医疗、金融、物流六大行业沉淀最佳实践。',
solutionsCtaPrimary: '立即咨询',
solutionsCtaSecondary: '浏览产品',
solutionsGridTitle: '行业解决方案',
solutionsGridDescription: '每个方案都明确推荐产品组合和服务包,确保落地效果',
solutionsCtaTitle: '告诉我们您的行业场景',
solutionsCtaDescription: '无论您处于哪个行业、哪个数字化阶段,我们都能为您推荐最合适的产品组合和服务包。',
},
{
slug: 'products',
title: '产品页文案配置',
productsHeroTitle1: '自研产品矩阵',
productsHeroTitle2: '支撑企业',
productsHeroTitle3: '数字化核心系统',
productsHeroDescription: '从业务系统到数据智能,深度自研、互为补充。\n6 大企业套装与专业产品线,覆盖企业数字化核心场景。',
productsCtaPrimary: '了解我们的服务',
productsCtaSecondary: '查看行业方案',
productsBundleTitle: '两套产品体系\n覆盖不同场景',
productsBundleDescription: '企业套装以组合形式解决核心管理问题,专业产品聚焦独立场景深度赋能。',
productsCtaTitle: '以自研产品\n支撑数字化落地',
productsCtaDescription: '从企业套装到专业产品,以自研能力与专业服务,陪伴企业完成数字化升级。',
},
{
slug: 'cases',
title: '案例页文案配置',
casePageHeroTitle1: '每一个项目,',
casePageHeroTitle2: '都以成果为目标',
casePageHeroDescription: '我们正在与首批客户共同创造价值故事。\n从挑战到方案,从过程到成果——用数据说话,用结果证明。',
casePageFilterTitle: '全部案例',
casePageFilterDescription: '按行业筛选,找到与您业务最相关的成功故事',
},
{
slug: 'news',
title: '新闻页文案配置',
newsPageHeroEyebrow: 'News & Insights',
newsPageHeroTitle: '新闻与\n洞察',
newsPageHeroDescription: '最新动态、产品更新与行业洞察。了解数字化趋势,把握技术脉搏。',
newsPageEmptyTitle: '没有找到相关新闻',
newsPageEmptyDescription: '试试其他关键词或分类',
},
]);
console.log(' ✅ 列表页文案配置');
// ============ 5. 创建默认内容区域 ============
console.log('📝 创建默认内容区域...');
await seedHomeZones();