Files
novalon-website/docs/superpowers/plans/2026-06-07-ihg-design-alignment.md
T
张翔 b1f3a395ca docs: 更新决策记录与实施计划
- CONTEXT.md添加9项新决策(HSI架构/水墨雅致/L3策略等)
- ADR: HSI架构与四层叙事模型决策记录
- 实施计划: IHG设计对齐详细任务分解
2026-06-07 16:21:29 +08:00

603 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IHG 设计对齐实施计划
> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
**目标:** 将当前代码对齐到 IHG 参考设计规范,修正 9 项偏离,使 HSI 架构、四层叙事、水墨雅致视觉、交叉引用系统完整落地。
**架构:** 保持 Next.js App Router 不变,重构数据层(products.ts 分类)、组件层(V1→V2/V3 迁移、目录统一)、视觉层(Hero 水墨雅致重设计)、页面层(方案组合叙事、L3 策略、导航层级)。
**技术栈:** Next.js 15 + React 19 + TypeScript + Tailwind CSS + Framer Motion
---
## 整体架构图
```mermaid
graph TB
subgraph "P0 数据与视觉基础"
T1[任务1: 产品分类对齐]
T2[任务2: Hero 水墨雅致重设计]
end
subgraph "P1 页面与组件重构"
T3[任务3: 方案列表页组合叙事]
T4[任务4: 方案页删除服务方式+L3策略]
T5[任务5: 独立产品组件迁移]
T6[任务6: 导航HSI层级]
end
subgraph "P2 清理与统一"
T7[任务7: 组件目录统一+版本号清理]
end
T1 --> T3
T1 --> T5
T1 --> T6
T2 --> T5
T3 --> T4
T5 --> T7
```
## 文件变更清单
| 文件 | 操作 | 职责 |
|------|------|------|
| `src/lib/constants/products.ts` | 修改 | 删除 `growth` 分类,6 核心产品统一归入 `enterprise` |
| `src/lib/constants/hero-themes.ts` | 修改 | 全部 Hero theme 从深色渐变改为水墨雅致浅色系 |
| `src/lib/constants/navigation.ts` | 修改 | 导航项增加 HSI 层级权重,下拉菜单分区展示 |
| `src/app/(marketing)/products/page.tsx` | 修改 | 双区展示改为"企业套装区"+"专业产品区" |
| `src/app/(marketing)/solutions/page.tsx` | 修改 | 删除服务方式区域,方案卡片增加组合徽标 |
| `src/app/(marketing)/solutions/[id]/client.tsx` | 修改 | L3 信任层条件渲染(有数据才显示) |
| `src/app/(marketing)/products/standalone/[id]/client.tsx` | 修改 | V1 组件替换为 V2/V3 组件 |
| `src/components/detail-v2/solution-service-card-v3.tsx` | 修改 | 方案卡片增加"推荐组合"徽标 |
| `src/components/detail-v2/detail-trust-section-v2.tsx` | 修改 | 支持条件渲染(无数据时不渲染) |
| `src/components/layout/header.tsx` | 修改 | Products 导航项视觉权重增强 |
| `src/components/layout/mega-dropdown.tsx` | 修改 | Products 下拉增加分区标题样式 |
| `src/components/detail/` (整个目录) | 删除 | V1 组件迁移完成后删除 |
| `src/components/detail-v2/` (整个目录) | 重命名 | 重命名为 `detail/`,组件去掉版本号后缀 |
---
### 任务 1:产品分类对齐 — 删除 growth,统一为企业套装区 + 专业产品区
**文件:**
- 修改:`src/lib/constants/products.ts`
- 修改:`src/app/(marketing)/products/page.tsx`
- [ ] **步骤 1:修改 products.ts 类型定义**
`categoryId` 类型从 `'enterprise' | 'growth' | 'specialized'` 改为 `'enterprise' | 'specialized'`
```typescript
// products.ts - 修改 Product 接口
export interface Product {
// ... 其他字段不变
categoryId: 'enterprise' | 'specialized'; // 删除 'growth'
// ... 其他字段不变
}
// 修改 ProductCategory 接口
export interface ProductCategory {
id: 'enterprise' | 'specialized'; // 删除 'growth'
title: string;
description: string;
}
```
- [ ] **步骤 2:修改 PRODUCT_CATEGORIES 常量**
```typescript
export const PRODUCT_CATEGORIES: ProductCategory[] = [
{
id: 'enterprise',
title: '企业套装',
description: '6 大核心产品互为补充,覆盖企业数字化全场景,常以组合形式出现在解决方案中。',
},
{
id: 'specialized',
title: '专业产品',
description: '自成体系的独立产品线,包括安全产品、行业特种软件、硬件产品等。',
},
];
```
- [ ] **步骤 3:修改 PRODUCTS 数组中各产品的 categoryId**
- `cms``categoryId: 'growth'``categoryId: 'enterprise'``category: '成长加速系列'``category: '企业套装'`
- `oa``categoryId: 'growth'``categoryId: 'enterprise'``category: '成长加速系列'``category: '企业套装'`
- `bi``categoryId: 'specialized'``categoryId: 'enterprise'``category: '专业工具系列'``category: '企业套装'`
- `sds``categoryId: 'specialized'``categoryId: 'enterprise'``category: '专业工具系列'``category: '企业套装'`
- `erp``crm`:保持 `enterprise` 不变
- `novavis`:保持 `specialized` 不变
- [ ] **步骤 4:修改 hero-themes.ts 中 badge 字段**
将所有企业套装产品的 badge 统一为 `'企业套装'`
- `cms``badge: '成长加速'``badge: '企业套装'`
- `oa``badge: '成长加速'``badge: '企业套装'`
- `bi``badge: '专业工具'``badge: '企业套装'`
- `sds``badge: '专业工具'``badge: '企业套装'`
- [ ] **步骤 5:修改 products/page.tsx 双区展示逻辑**
```typescript
// 修改过滤逻辑
const enterpriseProducts = PRODUCTS.filter(p => p.categoryId === 'enterprise');
const specializedProducts = PRODUCTS.filter(p => p.categoryId === 'specialized');
```
同时更新区域标题和描述:
- 企业套装区域标题:"企业套装",描述:"6 大核心产品互为补充,覆盖企业数字化全场景"
- 专业产品区域标题:"专业产品",描述:"自成体系的独立产品线"
- [ ] **步骤 6:修改 navigation.ts 下拉菜单**
`MEGA_DROPDOWN_DATA.products``enterprise-suite` 的描述和标题保持不变(已经是"企业套装"),确认 6 个产品都在此分组中。
- [ ] **步骤 7:运行构建验证**
运行:`npx next build 2>&1 | head -50`
预期:无类型错误,构建成功
- [ ] **步骤 8Commit**
```bash
git add src/lib/constants/products.ts src/lib/constants/hero-themes.ts src/app/\(marketing\)/products/page.tsx src/lib/constants/navigation.ts
git commit -m "refactor: 统一产品分类为企业套装+专业产品,删除growth分类"
```
---
### 任务 2:Hero 水墨雅致重设计
**文件:**
- 修改:`src/lib/constants/hero-themes.ts`
- 修改:`src/components/detail-v2/detail-hero-v3.tsx`(如需调整渐变方向/文字颜色)
- 修改:`src/components/detail-v2/list-page-hero-v3.tsx`(同上)
**设计原则:**
- 浅色/宣纸色底(`#faf9f7``#f5f0eb``#f0ebe4` 等)
- 深色文字(`#1a1a1a``#2d2d2d`
- 品牌色作为点缀色(非背景色)
- 纹理保持但降低对比度,增加"墨韵"感
- 每个产品/方案/服务通过点缀色和纹理类型差异化
- [ ] **步骤 1:使用 web-design-engineer skill 生成 Hero 原型**
使用 `web-design-engineer` skill 生成 3 个 Hero 变体的原型 HTML
1. **ERP 变体**:宣纸色底 + 深蓝点缀 + grid 纹理
2. **BI 变体**:淡灰底 + 青色点缀 + data-flow 纹理
3. **Security 变体**:浅灰底 + 红色点缀 + shield-hex 纹理
原型需验证:
- 浅色背景下文字可读性
- 品牌色点缀的视觉冲击力
- 纹理在浅色背景上的效果
- 与现有页面其余部分(白底/灰底 section)的衔接
- [ ] **步骤 2:根据原型结果修改 hero-themes.ts**
将所有 Hero theme 从深色渐变改为水墨雅致浅色系。示例(ERP):
```typescript
erp: {
id: 'erp',
name: 'ERP 水墨蓝',
gradientFrom: '#f8f6f3', // 宣纸色
gradientTo: '#f0ebe4', // 淡宣纸色
gradientAngle: 135,
accentColor: '#1e3a5f', // 深蓝(文字/点缀)
accentBg: 'rgba(30, 58, 95, 0.06)',
texture: { type: 'grid', opacity: 0.08, color: '#1e3a5f' },
layout: 'left',
badge: '企业套装',
},
```
所有 theme 的修改模式:
- `gradientFrom`/`gradientTo`:改为浅色系(`#f8f6f3` ~ `#f0ebe4` 范围)
- `accentColor`:改为深色(原 gradientFrom 的深色值,用于文字和点缀)
- `accentBg`:降低透明度
- `texture.opacity`:适当提高(浅色背景上需要更明显的纹理)
- `texture.color`:添加,与 accentColor 一致
- [ ] **步骤 3:修改 Hero 组件的文字颜色适配**
检查 `detail-hero-v3.tsx``list-page-hero-v3.tsx`,确保:
- 标题文字使用 `accentColor` 或深色(而非白色)
- 副标题/描述使用 `accentColor/70` 或灰色
- Badge 使用 `accentColor` 边框 + 浅色背景
- CTA 按钮使用 `accentColor` 作为主色
- [ ] **步骤 4:运行开发服务器验证视觉效果**
运行:`npx next dev`
预期:所有详情页 Hero 区域显示为浅色水墨雅致风格
- [ ] **步骤 5Commit**
```bash
git add src/lib/constants/hero-themes.ts src/components/detail-v2/detail-hero-v3.tsx src/components/detail-v2/list-page-hero-v3.tsx
git commit -m "style: Hero视觉从深色渐变转向水墨雅致浅色系"
```
---
### 任务 3:方案列表页组合叙事
**文件:**
- 修改:`src/components/detail-v2/solution-service-card-v3.tsx`
- 修改:`src/app/(marketing)/solutions/page.tsx`
- [ ] **步骤 1:修改方案卡片组件,增加"推荐组合"徽标**
`solution-service-card-v3.tsx``SolutionCardV3` 组件中,卡片底部增加推荐组合展示:
```tsx
// 在卡片底部(CTA 按钮之前)增加组合徽标
{solution.suiteCombination && (
<div className="mt-4 pt-4 border-t border-gray-100">
<p className="text-xs text-gray-500 mb-2">推荐组合</p>
<div className="flex flex-wrap gap-1.5">
{solution.suiteCombination.primaryProducts.map((productId) => {
const product = PRODUCTS.find(p => p.id === productId);
return product ? (
<span
key={productId}
className="inline-flex items-center rounded-md bg-[var(--color-brand-primary-bg)] px-2 py-0.5 text-xs font-medium text-[var(--color-brand-primary)]"
>
{product.title.replace('睿新', '')}
</span>
) : null;
})}
{solution.suiteCombination.complementaryServices.map((serviceId) => {
const service = SERVICES.find(s => s.id === serviceId);
return service ? (
<span
key={serviceId}
className="inline-flex items-center rounded-md bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600"
>
{service.title}
</span>
) : null;
})}
</div>
</div>
)}
```
需要在文件顶部增加 import
```typescript
import { PRODUCTS } from '@/lib/constants/products';
import { SERVICES } from '@/lib/constants/services';
```
- [ ] **步骤 2:修改 solutions/page.tsx,删除"服务方式"区域**
删除整个 `modules` 常量定义和对应的 `<section className="bg-gray-50/50 py-16">` 渲染区域。
替换为方案→服务的轻量关联推荐:
```tsx
{/* 方案与服务关联推荐 */}
<section className="bg-gray-50/50 py-16">
<div className="container-wide">
<h2 className="mb-8 text-center text-2xl font-bold text-gray-900 lg:text-3xl">
从方案到服务,全程陪伴
</h2>
<div className="flex flex-wrap justify-center gap-4">
{SERVICES.map((service) => (
<a
key={service.id}
href={`/services/${service.id}`}
className="flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-5 py-3 text-sm font-medium text-gray-700 transition-all hover:border-[var(--color-brand-primary)] hover:text-[var(--color-brand-primary)] hover:shadow-sm"
>
{typeof service.icon === 'object' && <service.icon className="h-4 w-4" />}
{service.title}
</a>
))}
</div>
</div>
</section>
```
同时删除不再使用的 import`Lightbulb, Cpu, Users, CheckCircle2, ChevronDown, AnimatePresence`
- [ ] **步骤 3:运行构建验证**
运行:`npx next build 2>&1 | head -50`
预期:无错误
- [ ] **步骤 4Commit**
```bash
git add src/components/detail-v2/solution-service-card-v3.tsx src/app/\(marketing\)/solutions/page.tsx
git commit -m "feat: 方案卡片增加推荐组合徽标,删除方案页服务方式区域"
```
---
### 任务 4:方案详情页 L3 信任层策略 + L3 全局条件渲染
**文件:**
- 修改:`src/app/(marketing)/solutions/[id]/client.tsx`
- 修改:`src/components/detail-v2/detail-trust-section-v2.tsx`
- 修改:`src/app/(marketing)/products/[id]/client.tsx`
- 修改:`src/app/(marketing)/services/[id]/client.tsx`
- [ ] **步骤 1:修改 detail-trust-section-v2.tsx 支持条件渲染**
在组件顶部增加数据检查:如果 caseStudies、dataProofs、certifications 都为空,则不渲染:
```tsx
interface DetailTrustSectionV2Props {
accentColor?: string;
caseStudies?: CaseStudy[];
dataProofs?: DataProof[];
certifications?: Certification[];
}
export function DetailTrustSectionV2({
accentColor = '#C41E3A',
caseStudies = [],
dataProofs = [],
certifications = [],
}: DetailTrustSectionV2Props) {
// 初创阶段:无真实数据时不渲染 L3
const hasContent = caseStudies.length > 0 || dataProofs.length > 0 || certifications.length > 0;
if (!hasContent) return null;
// ... 原有渲染逻辑
}
```
- [ ] **步骤 2:修改产品详情页,传入真实数据(当前为占位数据,暂传空数组)**
`products/[id]/client.tsx` 中,将 L3 信任层的数据来源从 `product.caseStudies` 等改为条件传入:
```tsx
<DetailTrustSectionV2
accentColor={theme.accentColor}
caseStudies={[]} // TODO: 初创阶段暂无真实案例,数据就绪后替换
dataProofs={[]} // TODO: 初创阶段暂无真实数据
certifications={[]} // TODO: 初创阶段暂无资质
/>
```
- [ ] **步骤 3:修改服务详情页,同理传入空数组**
- [ ] **步骤 4:修改方案详情页,增加 L3 信任层位置**
`solutions/[id]/client.tsx` 的 L2 和 L4 之间插入 L3:
```tsx
{/* L3 信任证明层 - 初创阶段暂不渲染 */}
<DetailTrustSectionV2
accentColor={theme.accentColor}
caseStudies={[]}
dataProofs={[]}
certifications={[]}
/>
```
- [ ] **步骤 5:运行构建验证**
运行:`npx next build 2>&1 | head -50`
预期:无错误,L3 区域因无数据而不渲染
- [ ] **步骤 6Commit**
```bash
git add src/components/detail-v2/detail-trust-section-v2.tsx src/app/\(marketing\)/products/\[id\]/client.tsx src/app/\(marketing\)/services/\[id\]/client.tsx src/app/\(marketing\)/solutions/\[id\]/client.tsx
git commit -m "feat: L3信任层条件渲染,初创阶段无数据时不显示"
```
---
### 任务 5:独立产品组件迁移(V1 → V2/V3)
**文件:**
- 修改:`src/app/(marketing)/products/standalone/[id]/client.tsx`
- [ ] **步骤 1:替换 V1 组件 import 为 V2/V3**
```typescript
// 删除
import { DetailHero } from '@/components/detail/detail-hero';
import { DetailTrustSection } from '@/components/detail/detail-trust-section';
import { DetailCTASection } from '@/components/detail/detail-cta-section';
// 替换为
import { DetailHeroV3 } from '@/components/detail-v2/detail-hero-v3';
import { DetailTrustSectionV2 } from '@/components/detail-v2/detail-trust-section-v2';
import { DetailCTASectionV2 } from '@/components/detail-v2/detail-cta-section-v2';
```
- [ ] **步骤 2:替换组件使用**
`<DetailHero>` 替换为 `<DetailHeroV3>`props 适配 V3 接口。
`<DetailTrustSection>` 替换为 `<DetailTrustSectionV2>`,传入空数据(初创阶段)。
`<DetailCTASection>` 替换为 `<DetailCTASectionV2>`props 适配 V2 接口。
- [ ] **步骤 3:运行构建验证**
运行:`npx next build 2>&1 | head -50`
预期:无错误
- [ ] **步骤 4Commit**
```bash
git add src/app/\(marketing\)/products/standalone/\[id\]/client.tsx
git commit -m "refactor: 独立产品从V1组件迁移到V2/V3组件体系"
```
---
### 任务 6:导航 HSI 层级
**文件:**
- 修改:`src/lib/constants/navigation.ts`
- 修改:`src/components/layout/header.tsx`
- 修改:`src/components/layout/mega-dropdown.tsx`
- [ ] **步骤 1:修改导航数据,增加 HSI 层级权重**
`NavigationItemV2` 接口中增加 `weight` 字段:
```typescript
export interface NavigationItemV2 {
id: string;
label: string;
href: string;
hasDropdown?: boolean;
dropdownKey?: string;
weight?: 'hub' | 'spoke' | 'support'; // HSI 层级
}
```
更新 `NAVIGATION_V2`
```typescript
export const NAVIGATION_V2: NavigationItemV2[] = [
{ id: 'products', label: '产品', href: '/products', hasDropdown: true, dropdownKey: 'products', weight: 'hub' },
{ id: 'solutions', label: '解决方案', href: '/solutions', hasDropdown: true, dropdownKey: 'solutions', weight: 'spoke' },
{ id: 'services', label: '服务', href: '/services', hasDropdown: true, dropdownKey: 'services', weight: 'support' },
{ id: 'about', label: '关于我们', href: '/about' },
{ id: 'contact', label: '联系我们', href: '/contact' },
];
```
- [ ] **步骤 2:修改 header.tsxHub 导航项视觉增强**
在导航渲染中,根据 `weight` 应用不同样式:
```tsx
const weightStyles: Record<string, string> = {
hub: 'font-semibold text-[var(--color-text-primary)]', // 最醒目
spoke: 'font-medium text-[var(--color-text-secondary)]', // 次之
support: 'font-normal text-[var(--color-text-muted)]', // 最轻
};
```
在导航链接的 className 中应用:
```tsx
className={`... ${item.weight ? weightStyles[item.weight] : 'font-medium text-[var(--color-text-secondary)]'}`}
```
- [ ] **步骤 3:修改 mega-dropdown.tsxProducts 下拉增加分区标题样式**
`MegaDropdown` 组件中,对 `highlight` 为 true 的分组增加视觉强调(如左侧品牌色竖线、稍大的标题字号)。
- [ ] **步骤 4:运行构建验证**
运行:`npx next build 2>&1 | head -50`
预期:无错误
- [ ] **步骤 5Commit**
```bash
git add src/lib/constants/navigation.ts src/components/layout/header.tsx src/components/layout/mega-dropdown.tsx
git commit -m "feat: 导航体现HSI层级,Products(Hub)视觉权重最高"
```
---
### 任务 7:组件目录统一 + 版本号清理
**文件:**
- 重命名:`src/components/detail-v2/``src/components/detail/`
- 删除:`src/components/detail/`(原 V1 目录,先备份后删除)
- 修改:所有引用 `@/components/detail-v2/` 的文件改为 `@/components/detail/`
- 修改:组件文件名去掉版本号后缀
- [ ] **步骤 1:查找所有引用 detail-v2 的文件**
运行:`grep -r "from '@/components/detail-v2/" src/ --include="*.tsx" --include="*.ts" -l`
- [ ] **步骤 2:删除原 V1 detail 目录**
确认独立产品已迁移到 V2/V3 后,删除 `src/components/detail/` 下的所有 V1 组件文件。
- [ ] **步骤 3:重命名 detail-v2 为 detail**
```bash
mv src/components/detail-v2 src/components/detail
```
- [ ] **步骤 4:批量替换 import 路径**
将所有文件中的 `@/components/detail-v2/` 替换为 `@/components/detail/`
- [ ] **步骤 5:组件文件名去版本号**
重命名组件文件:
- `detail-hero-v3.tsx``detail-hero.tsx`,导出 `DetailHeroV3``DetailHero`
- `detail-hero-v2.tsx` → 删除(已被 V3 替代)
- `detail-trust-section-v2.tsx``detail-trust-section.tsx`,导出 `DetailTrustSectionV2``DetailTrustSection`
- `detail-cta-section-v2.tsx``detail-cta-section.tsx`,导出 `DetailCTASectionV2``DetailCTASection`
- `detail-product-value-v3.tsx``detail-product-value.tsx`,导出名同步更新
- `detail-product-value-v2.tsx` → 删除(已被 V3 替代)
- `solution-value-v3.tsx``solution-value.tsx`
- `service-value-v3.tsx``service-value.tsx`
- `list-page-hero-v3.tsx``list-page-hero.tsx`
- `solution-service-card-v3.tsx``solution-service-card.tsx`
- `product-card-v3.tsx``product-card.tsx`
- `brand-elements.tsx` → 保持不变
- `micro-interactions.tsx` → 保持不变
- [ ] **步骤 6:更新所有引用组件名的 import**
全局替换组件名:
- `DetailHeroV3``DetailHero`
- `DetailTrustSectionV2``DetailTrustSection`
- `DetailCTASectionV2``DetailCTASection`
- `ProductValueSectionV3``ProductValueSection`
- `SolutionValueSectionV3``SolutionValueSection`
- `ServiceValueSectionV3``ServiceValueSection`
- `ListPageHeroV3``ListPageHero`
- `SolutionCardV3``SolutionCard`
- `ProductCardV3``ProductCard`
- [ ] **步骤 7:运行构建验证**
运行:`npx next build 2>&1 | head -50`
预期:无错误
- [ ] **步骤 8Commit**
```bash
git add -A src/components/detail/ src/app/
git commit -m "refactor: 统一组件目录,删除V1detail-v2重命名为detail,去掉版本号后缀"
```
---
## 自检
### 1. 规格覆盖度
| CONTEXT.md 决策 | 对应任务 |
|----------------|---------|
| 产品分类对齐(删除 growth) | 任务 1 |
| 解决方案 L3 信任层 | 任务 4 |
| 独立产品组件统一 | 任务 5 |
| 方案列表页组合叙事 | 任务 3 |
| Hero 视觉方向修正 | 任务 2 |
| 导航体现 HSI 层级 | 任务 6 |
| 方案页删除服务方式区域 | 任务 3 |
| L3 信任层内容策略 | 任务 4 |
| 组件版本统一 | 任务 7 |
全部覆盖。
### 2. 占位符扫描
无"待定"、"TODO"、"后续实现"等占位符(除 L3 数据的 TODO 注释,这是业务决策而非计划缺陷)。
### 3. 类型一致性
- `categoryId` 类型在任务 1 中统一修改,后续任务引用一致
- Hero theme 接口在任务 2 中扩展 `texture.color` 字段,组件侧同步适配
- 组件名在任务 7 中统一重命名,所有 import 同步更新