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

1122 lines
36 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.
# V3设计系统全量应用实施计划
> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
**目标:** 将ERP V3深度精细化设计系统(L1-L5全层次)应用到网站所有17个详情页和列表页,实现统一的现代东方美学视觉体验。
**架构:** 基于已完成的ERP V3原型,采用组件化升级策略:
- **V3核心组件库**DetailHeroV3、ProductValueSectionV3、DetailTrustSectionV2、DetailCTASectionV2
- **微交互系统**TiltCard、PressableButton、InkGlowCard
- **品牌印记系统**BrandSeal、CalligraphyText、InkDivider
- **分阶段推进**:先建通用组件 → 再批量升级页面 → 最后统一验证
**技术栈:** Next.js 14 App Router + TypeScript + Framer Motion + Tailwind CSS + Lucide Icons
---
## 📋 页面清单与优先级
### ✅ 已完成(标杆页面)
- [x] ERP产品页 V3原型 (`/products/erp-upgrade-v3`)
### 📦 待升级页面(17个)
#### **产品详情页(5个)**
| 产品ID | 标题 | 当前路径 | HeroTheme |
|--------|------|----------|-----------|
| crm | 睿新客户关系管理系统 | `/products/crm` | crm |
| cms | 睿新内容管理系统 | `/products/cms` | cms |
| bi | 睿新商业智能平台 | `/products/bi` | bi |
| sds | 睿新供应链决策支持系统 | `/products/sds` | sds |
| oa | 睿新协同办公系统 | `/products/oa` | oa |
#### **解决方案详情页(4个)**
| 方案ID | 标题 | 当前路径 |
|--------|------|----------|
| manufacturing | 智能制造解决方案 | `/solutions/manufacturing` |
| retail | 零售数字化解决方案 | `/solutions/retail` |
| finance | 金融科技解决方案 | `/solutions/finance` |
| government | 政务数字化转型 | `/solutions/government` |
#### **服务详情页(4个)**
| 服务ID | 标题 | 当前路径 |
|--------|------|----------|
| software | 软件开发 | `/services/software` |
| consulting | 数字化转型咨询 | `/services/consulting` |
| data-intelligence | 数据智能服务 | `/services/data-intelligence` |
| technical-support | 技术支持服务 | `/services/technical-support` |
#### **列表页(3个)**
| 页面 | 路径 | 说明 |
|------|------|------|
| 产品列表页 | `/products` | 展示6个产品卡片 |
| 解决方案列表页 | `/solutions` | 展示4个方案卡片 |
| 服务列表页 | `/services` | 展示4个服务卡片 |
---
## 📁 文件结构总览
### 新增文件
```
src/components/detail-v2/
├── solution-value-v3.tsx # 解决方案价值支撑V3组件
├── service-value-v3.tsx # 服务价值支撑V3组件
├── list-page-hero-v3.tsx # 列表页Hero V3组件
├── product-card-v3.tsx # 产品卡片V3组件
├── solution-card-v3.tsx # 方案卡片V3组件
└── service-card-v3.tsx # 服务卡片V3组件
src/app/(marketing)/
├── products/[id]/page.tsx # 修改:产品详情页主文件
├── solutions/[id]/client.tsx # 修改:解决方案详情客户端组件
├── services/[id]/client.tsx # 修改:服务详情客户端组件
├── products/page.tsx # 修改:产品列表页
├── solutions/page.tsx # 修改:解决方案列表页
└── services/page.tsx # 修改:服务列表页
```
### 已有V3组件(复用)
```
src/components/detail-v2/
├── detail-hero-v3.tsx # Hero区域V3L2+L3+L5
├── detail-product-value-v3.tsx # 产品价值V3L4
├── detail-trust-section-v2.tsx # 信任证明V2(可复用)
├── detail-cta-section-v2.tsx # CTA转化V2(可复用)
├── micro-interactions.tsx # 微交互组件库(L1)
└── brand-elements.tsx # 品牌印记组件(L5)
```
---
## 🚀 Phase 0: 基础设施准备(已完成)
### ✅ 已完成的V3核心资产
- [x] `detail-hero-v3.tsx` - Hero V3组件(视差滚动 + 浮动粒子 + 序列动画)
- [x] `detail-product-value-v3.tsx` - 产品价值V3(标签化 + 数据可视化)
- [x] `micro-interactions.tsx` - 微交互组件(TiltCard/PressableButton/InkGlowCard
- [x] `brand-elements.tsx` - 品牌印记(BrandSeal/CalligraphyText/InkDivider
- [x] `design-system.ts` - 设计系统变量
- [x] TypeScript编译通过(0错误)
---
## 🚀 Phase 1: 创建解决方案V3组件
### 任务 1.1: 创建 SolutionValueSectionV3 组件
**文件:**
- 创建:`src/components/detail-v2/solution-value-v3.tsx`
**目标:** 为解决方案详情页创建符合V3标准的的价值支撑区域组件
- [ ] **步骤 1: 创建基础组件结构**
```tsx
'use client';
import { motion, useInView } from 'framer-motion';
import { useRef } from 'react';
import {
CheckCircle2,
ArrowRight,
Lightbulb,
Target,
TrendingUp,
type LucideIcon,
} from 'lucide-react';
import { TiltCard, InkGlowCard } from './micro-interactions';
import { SectionHeader, InkDivider } from './brand-elements';
import type { Solution } from '@/lib/constants/solutions';
interface SolutionValueSectionV3Props {
solution: Solution;
}
export function SolutionValueSectionV3({ solution }: SolutionValueSectionV3Props) {
return (
<section className="relative bg-white py-24 lg:py-32 overflow-hidden">
<div className="absolute inset-0 bg-gradient-to-b from-slate-50/80 via-transparent to-slate-50/50" />
<div className="container mx-auto px-4 relative max-w-7xl">
{/* 内容将在后续步骤中填充 */}
</div>
</section>
);
}
```
- [ ] **步骤 2: 添加章节标题区域**
`<div className="container mx-auto px-4 relative max-w-7xl">` 内部添加:
```tsx
<SectionHeader
badge="解决方案"
title={
<>
<span className="text-[#C41E3A]">{solution.industry}</span>量身定制
</>
}
subtitle={solution.description}
icon={Lightbulb}
/>
```
- [ ] **步骤 3: 添加挑战-解决方案对比区块**
```tsx
<div className="grid grid-cols-1 lg:grid-cols-2 gap-10 mt-16">
{/* 左侧:行业挑战 */}
<motion.div
initial={{ opacity: 0, x: -30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.7, ease: [0.22, 1, 0.36, 1] as const }}
>
<div className="bg-gradient-to-br from-red-50 to-orange-50/30 rounded-2xl p-8 border border-red-100">
<h3 className="text-xl font-bold text-gray-900 mb-6 flex items-center gap-3">
<span className="w-10 h-10 rounded-xl bg-[#C41E3A] flex items-center justify-center">
<Target className="w-5 h-5 text-white" />
</span>
行业痛点挑战
</h3>
<ul className="space-y-4">
{solution.challenges.map((challenge, index) => (
<motion.li
key={index}
initial={{ opacity: 0, y: 15 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{
delay: index * 0.08,
duration: 0.45,
ease: [0.22, 1, 0.36, 1] as const,
}}
className="flex items-start gap-3 text-gray-700"
>
<span className="w-1.5 h-1.5 rounded-full bg-[#C41E3A] mt-2 shrink-0" />
<span className="text-sm leading-relaxed">{challenge}</span>
</motion.li>
))}
</ul>
</div>
</motion.div>
{/* 右侧:我们的解决方案 */}
<motion.div
initial={{ opacity: 0, x: 30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.7, delay: 0.15, ease: [0.22, 1, 0.36, 1] as const }}
>
<div className="bg-gradient-to-br from-blue-50 to-indigo-50/30 rounded-2xl p-8 border border-blue-100">
<h3 className="text-xl font-bold text-gray-900 mb-6 flex items-center gap-3">
<span className="w-10 h-10 rounded-xl bg-blue-600 flex items-center justify-center">
<Lightbulb className="w-5 h-5 text-white" />
</span>
Novalon解决方案
</h3>
<ul className="space-y-4">
{solution.solutions.map((solutionItem, index) => (
<motion.li
key={index}
initial={{ opacity: 0, y: 15 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{
delay: 0.25 + index * 0.08,
duration: 0.45,
ease: [0.22, 1, 0.36, 1] as const,
}}
className="flex items-start gap-3 text-gray-700"
>
<CheckCircle2 className="w-4.5 h-4.5 text-blue-600 mt-0.5 shrink-0" />
<span className="text-sm leading-relaxed">{solutionItem}</span>
</motion.li>
))}
</ul>
</div>
</motion.div>
</div>
```
- [ ] **步骤 4: 添加价值主张区块**
```tsx
{solution.valueProposition && (
<motion.div
initial={{ opacity: 0, y: 32 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.75, delay: 0.3 }}
className="mt-20"
>
<InkDivider variant="decorative" />
<div className="text-center mb-12">
<h3 className="text-2xl md:text-3xl font-bold tracking-tight text-gray-900">
{solution.valueProposition.headline}
</h3>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-7">
{solution.valueProposition.points.map((point, index) => (
<TiltCard key={index} tiltAmount={6} className="p-7 rounded-2xl bg-white border border-gray-100 hover:border-blue-200 shadow-sm hover:shadow-lg transition-shadow">
<div className="w-14 h-14 rounded-2xl bg-gradient-to-br from-blue-500 to-indigo-600 flex items-center justify-center mb-5 shadow-lg shadow-blue-500/20">
<TrendingUp className="w-7 h-7 text-white" />
</div>
<h4 className="text-lg font-bold text-gray-900 mb-2">{point.title}</h4>
<p className="text-sm text-gray-600 leading-relaxed">{point.description}</p>
</TiltCard>
))}
</div>
</motion.div>
)}
```
- [ ] **步骤 5: 添加套装组合展示区块**
```tsx
{solution.suiteCombination && (
<motion.div
initial={{ opacity: 0, y: 32 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.75, delay: 0.4 }}
className="mt-20"
>
<InkDivider variant="subtle" />
<div className="bg-gradient-to-br from-slate-50 to-gray-100/50 rounded-2xl p-10 border border-gray-200/80">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-10">
{/* 主要产品组合 */}
<div>
<h4 className="text-lg font-bold text-gray-900 mb-5 flex items-center gap-2.5">
<span className="w-8 h-8 rounded-lg bg-[#C41E3A] flex items-center justify-center">
<span className="text-white text-xs font-bold"></span>
</span>
核心产品组合
</h4>
<div className="flex flex-wrap gap-3">
{solution.suiteCombination.primaryProducts.map((product, index) => (
<motion.span
key={product}
initial={{ opacity: 0, scale: 0.9 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
transition={{ delay: 0.5 + index * 0.06, duration: 0.35 }}
className="px-5 py-2.5 bg-gradient-to-r from-red-50 to-red-100/60 text-[#C41E3A] text-sm font-semibold rounded-xl border border-red-200"
>
{product}
</motion.span>
))}
</div>
</div>
{/* 配套服务 */}
<div>
<h4 className="text-lg font-bold text-gray-900 mb-5 flex items-center gap-2.5">
<span className="w-8 h-8 rounded-lg bg-blue-600 flex items-center justify-center">
<span className="text-white text-xs font-bold"></span>
</span>
配套专业服务
</h4>
<div className="flex flex-wrap gap-3">
{solution.suiteCombination.complementaryServices.map((service, index) => (
<motion.span
key={service}
initial={{ opacity: 0, scale: 0.9 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
transition={{ delay: 0.65 + index * 0.06, duration: 0.35 }}
className="px-5 py-2.5 bg-gradient-to-r from-blue-50 to-blue-100/60 text-blue-700 text-sm font-semibold rounded-xl border border-blue-200"
>
{service}
</motion.span>
))}
</div>
</div>
</div>
{/* 组合理由 */}
<motion.p
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
viewport={{ once: true }}
transition={{ delay: 0.85, duration: 0.55 }}
className="mt-8 p-5 bg-white/70 rounded-xl text-sm text-gray-600 leading-relaxed border border-gray-100"
>
💡 <strong className="text-gray-800">组合逻辑:</strong>{solution.suiteCombination.rationale}
</motion.p>
</div>
</motion.div>
)}
```
- [ ] **步骤 6: 运行TypeScript编译检查**
运行命令:
```bash
npx tsc --noEmit 2>&1 | grep -E "error TS" | wc -l
```
预期输出:`0`(无错误)
- [ ] **步骤 7: 在浏览器中预览**
访问:[http://localhost:3002/products/erp-upgrade-v3](http://localhost:3002/products/erp-upgrade-v3)
预期:组件编译成功,可在其他页面中使用
---
## 🚀 Phase 2: 创建服务V3组件
### 任务 2.1: 创建 ServiceValueSectionV3 组件
**文件:**
- 创建:`src/components/detail-v2/service-value-v3.tsx`
**目标:** 为服务详情页创建符合V3标准的价值支撑区域组件
- [ ] **步骤 1: 创建基础组件结构**
```tsx
'use client';
import { motion, useInView } from 'framer-motion';
import { useRef, useState } from 'react';
import {
CheckCircle2,
ArrowRight,
Zap,
Clock,
Users,
Award,
TrendingUp,
type LucideIcon,
} from 'lucide-react';
import { TiltCard, InkGlowCard } from './micro-interactions';
import { SectionHeader, InkDivider } from './brand-elements';
import type { Service } from '@/lib/constants/services';
interface ServiceValueSectionV3Props {
service: Service;
}
export function ServiceValueSectionV3({ service }: ServiceValueSectionV3Props) {
return (
<section className="relative bg-white py-24 lg:py-32 overflow-hidden">
<div className="absolute inset-0 bg-gradient-to-b from-slate-50/80 via-transparent to-slate-50/50" />
<div className="container mx-auto px-4 relative max-w-7xl">
{/* 内容将在后续步骤中填充 */}
</div>
</section>
);
}
```
- [ ] **步骤 2: 添加章节标题和服务概述**
在容器内部添加:
```tsx
<SectionHeader
badge="专业服务"
title={`为什么选择我们的${service.title}`}
subtitle={service.overview}
icon={Zap}
/>
```
- [ ] **步骤 3: 添加功能特性网格(带图标动画)**
```tsx
<div className="mt-16">
<div className="flex items-center gap-4 mb-8">
<div className="w-12 h-12 rounded-2xl bg-gradient-to-br from-[#C41E3A] to-[#99182d] flex items-center justify-center shadow-xl shadow-red-500/20">
<Zap className="w-6 h-6 text-white" />
</div>
<div>
<h3 className="text-2xl font-bold text-gray-900">核心能力</h3>
<p className="text-sm text-gray-500 mt-0.5">我们提供的服务特色</p>
</div>
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
{service.features.map((feature, index) => {
const icons: LucideIcon[] = [Zap, Clock, Users, Award, TrendingUp];
const Icon = icons[index % icons.length]!;
return (
<InkGlowCard
key={feature}
active={index === 0}
className="group p-6 hover:border-purple-100"
>
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{
delay: index * 0.08,
duration: 0.5,
ease: [0.22, 1, 0.36, 1] as const,
}}
>
<div className="flex items-start gap-4">
<div
className={`shrink-0 w-11 h-11 rounded-xl flex items-center justify-center transition-all duration-300 shadow-md ${
index === 0
? 'bg-gradient-to-br from-[#C41E3A] to-[#99182d] text-white'
: 'bg-gradient-to-br from-gray-100 to-gray-200 text-gray-600 group-hover:from-[#C41E3A] group-hover:to-[#99182d] group-hover:text-white'
}`}
>
<Icon className="w-5.5 h-5.5" />
</div>
<p className="text-sm font-medium text-gray-800 leading-relaxed pt-2">
{feature.split('')[1] || feature}
</p>
</div>
</motion.div>
</InkGlowCard>
);
})}
</div>
</div>
```
- [ ] **步骤 4: 添加服务优势区块**
```tsx
<motion.div
initial={{ opacity: 0, y: 32 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.75, delay: 0.3 }}
className="mt-16"
>
<InkDivider variant="subtle" />
<div className="flex items-center gap-4 mb-8">
<div className="w-12 h-12 rounded-2xl bg-gradient-to-br from-green-500 to-emerald-600 flex items-center justify-center shadow-xl shadow-green-500/20">
<Award className="w-6 h-6 text-white" />
</div>
<div>
<h3 className="text-2xl font-bold text-gray-900">服务优势</h3>
<p className="text-sm text-gray-500 mt-0.5">选择我们的理由</p>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-5">
{service.benefits.map((benefit, index) => (
<motion.div
key={index}
initial={{ opacity: 0, x: index % 2 === 0 ? -20 : 20 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{
delay: 0.4 + index * 0.06,
duration: 0.5,
ease: [0.22, 1, 0.36, 1] as const,
}}
className="group p-6 rounded-2xl bg-gradient-to-br from-green-50/80 via-emerald-50/30 to-teal-50/20 border border-green-100/60 hover:border-green-200 hover:shadow-lg hover:-translate-y-1 transition-all duration-300"
>
<div className="flex items-start gap-3">
<CheckCircle2 className="w-5 h-5 text-green-600 mt-0.5 shrink-0 group-hover:scale-110 transition-transform" />
<p className="text-sm font-medium text-gray-800 leading-relaxed">{benefit}</p>
</div>
</motion.div>
))}
</div>
</motion.div>
```
- [ ] **步骤 5: 添加服务流程时间线**
```tsx
{service.process && service.process.length > 0 && (
<motion.div
initial={{ opacity: 0, y: 32 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.75, delay: 0.45 }}
className="mt-20"
>
<InkDivider variant="decorative" />
<div className="text-center mb-12">
<h3 className="text-2xl md:text-3xl font-bold tracking-tight text-gray-900">
服务流程
</h3>
<p className="text-gray-600 mt-3">标准化流程保障服务质量</p>
</div>
<div className="relative">
{/* 时间线背景线 */}
<div className="absolute left-8 top-0 bottom-0 w-0.5 bg-gradient-to-b from-[#C41E3A] via-blue-400 to-green-400 hidden md:block" />
<div className="space-y-6">
{service.process.map((step, index) => (
<motion.div
key={step}
initial={{ opacity: 0, x: -30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{
delay: 0.5 + index * 0.1,
duration: 0.55,
ease: [0.22, 1, 0.36, 1] as const,
}}
className="relative flex gap-6 group"
>
{/* 步骤编号圆圈 */}
<div className="relative z-10 shrink-0">
<div className="w-16 h-16 rounded-full bg-white border-4 border-[#C41E3A] flex items-center justify-center shadow-lg group-hover:scale-110 transition-transform duration-300">
<span className="text-lg font-bold text-[#C41E3A]">{String(index + 1).padStart(2, '0')}</span>
</div>
</div>
{/* 步骤内容卡片 */}
<TiltCard
tiltAmount={5}
glareEnable={false}
className="flex-1 p-6 rounded-2xl bg-white border border-gray-100 hover:border-[#C41E3A]/30 hover:shadow-lg transition-all"
>
<h4 className="font-bold text-gray-900 mb-2">
{step.split('')[0]}
</h4>
<p className="text-sm text-gray-600 leading-relaxed">
{step.split('')[1] || step}
</p>
</TiltCard>
</motion.div>
))}
</div>
</div>
</motion.div>
)}
```
- [ ] **步骤 6: 运行TypeScript编译检查**
运行命令:
```bash
npx tsc --noEmit 2>&1 | grep -E "error TS" | wc -l
```
预期输出:`0`(无错误)
---
## 🚀 Phase 3: 升级6个产品详情页为V3
### 任务 3.1: 升级产品详情页模板
**文件:**
- 修改:`src/app/(marketing)/products/[id]/page.tsx`
- [ ] **步骤 1: 替换导入语句**
将现有导入:
```typescript
import { DetailHero } from '@/components/detail/detail-hero';
import { ProductValueSection } from '@/components/detail/detail-product-value';
```
替换为:
```typescript
import { DetailHeroV3 } from '@/components/detail-v2/detail-hero-v3';
import { ProductValueSectionV3 } from '@/components/detail-v2/detail-product-value-v3';
```
保留不变的导入:
```typescript
import { DetailTrustSectionV2 } from '@/components/detail-v2/detail-trust-section-v2';
import { DetailCTASectionV2 } from '@/components/detail-v2/detail-cta-section-v2';
```
- [ ] **步骤 2: 替换组件调用**
将 JSX 中的组件替换为 V3 版本:
```tsx
{/* L1 - Hero 情感入口 (V3) */}
<DetailHeroV3
theme={theme}
badge={product.category}
title={product.title}
subtitle={product.description}
description={product.overview}
primaryAction={{ label: '预约体验', href: '/contact' }}
secondaryAction={{ label: '查看方案', href: '/solutions' }}
/>
{/* L2 - 价值理性支撑 (V3) */}
<ProductValueSectionV3 product={product} />
{/* L3 - 信任证明 (V2,保持不变) */}
<DetailTrustSectionV2
caseStudies={product.caseStudies}
dataProofs={product.dataProofs}
certifications={product.certifications}
accentColor={theme.accentColor}
/>
{/* L4 - CTA + 交叉推荐 (V2,保持不变) */}
<DetailCTASectionV2
theme={theme}
title={`探索 ${product.title} 的无限可能`}
description="立即联系我们,获取专属方案和报价"
primaryAction={{ label: '预约体验', href: '/contact' }}
secondaryAction={{ label: '下载产品手册', href: '#' }}
/>
<CrossRecommendGrid items={crossRefs} title={`与 ${product.title} 相关的推荐`} />
```
- [ ] **步骤 3: 更新metadata标题**
添加 V3 标识:
```typescript
export async function generateMetadata({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params;
const product = PRODUCTS.find((p) => p.id === id);
if (!product) {
return { title: '产品未找到' };
}
return {
title: `${product.title} - ${COMPANY_INFO.displayName}`,
description: `${product.description} | 现代东方美学设计`,
};
}
```
- [ ] **步骤 4: 验证TypeScript编译**
运行命令:
```bash
npx tsc --noEmit 2>&1 | grep -E "error TS" | head -10
```
预期输出:无错误信息
- [ ] **步骤 5: 批量测试所有产品页面**
在浏览器中依次访问以下URL并确认显示正常:
- http://localhost:3002/products/erp
- http://localhost:3002/products/crm
- http://localhost:3002/products/cms
- http://localhost:3002/products/bi
- http://localhost:3002/products/sds
- http://localhost:3002/products/oa
预期:所有页面均显示V3风格的Hero和价值支撑区域
---
## 🚀 Phase 4: 升级4个解决方案详情页为V3
### 任务 4.1: 升级解决方案详情客户端组件
**文件:**
- 修改:`src/app/(marketing)/solutions/[id]/client.tsx`
- [ ] **步骤 1: 替换导入语句**
将现有导入:
```typescript
import { DetailHero } from '@/components/detail/detail-hero';
import { SolutionDetailClient } from './client'; // 如果有旧的SolutionValueSection
```
替换为:
```typescript
import { DetailHeroV3 } from '@/components/detail-v2/detail-hero-v3';
import { SolutionValueSectionV3 } from '@/components/detail-v2/solution-value-v3';
import { DetailTrustSectionV2 } from '@/components/detail-v2/detail-trust-section-v2';
import { DetailCTASectionV2 } from '@/components/detail-v2/detail-cta-section-v2';
```
- [ ] **步骤 2: 重构组件函数体**
完整替换函数体:
```tsx
export function SolutionDetailClient({ solution }: SolutionDetailClientProps) {
const theme = getHeroTheme(solution.heroThemeId || 'default');
const crossRefs = getSolutionCrossRefs(solution.id);
return (
<div className="min-h-screen bg-[var(--color-bg-primary)]">
<DetailSwipeNav type="solution" currentId={solution.id} />
{/* L1 - Hero 情感入口 (V3) */}
<DetailHeroV3
theme={theme}
badge={`${solution.industry}解决方案`}
title={solution.title}
subtitle={solution.subtitle || solution.description}
description={solution.description}
primaryAction={{ label: '立即咨询', href: '/contact' }}
secondaryAction={{ label: '查看案例', href: '/cases' }}
/>
{/* L2 - 价值理性支撑 (V3) */}
<SolutionValueSectionV3 solution={solution} />
{/* L3 - CTA转化 (V2) */}
<DetailCTASectionV2
theme={theme}
title={`探索 ${solution.title} 的无限可能`}
description="联系我们,获取专属方案和报价"
primaryAction={{ label: '立即咨询', href: '/contact' }}
secondaryAction={{ label: '下载方案白皮书', href: '#' }}
/>
<CrossRecommendGrid items={crossRefs} title="相关产品与服务" />
</div>
);
}
```
- [ ] **步骤 3: 验证TypeScript编译**
运行命令:
```bash
npx tsc --noEmit 2>&1 | grep -E "error TS" | head -10
```
预期输出:无错误信息
- [ ] **步骤 4: 测试所有解决方案页面**
在浏览器中依次访问:
- http://localhost:3002/solutions/manufacturing
- http://localhost:3002/solutions/retail
- http://localhost:3002/solutions/finance
- http://localhost:3002/solutions/government
预期:所有页面均显示V3风格,包含挑战-解决方案对比、价值主张、套装组合展示
---
## 🚀 Phase 5: 升级4个服务详情页为V3
### 任务 5.1: 升级服务详情客户端组件
**文件:**
- 修改:`src/app/(marketing)/services/[id]/client.tsx`
- [ ] **步骤 1: 替换导入语句**
将现有导入:
```typescript
import { DetailHero } from '@/components/detail/detail-hero';
import { ServiceValueSection } from '@/components/detail/detail-service-value';
```
替换为:
```typescript
import { DetailHeroV3 } from '@/components/detail-v2/detail-hero-v3';
import { ServiceValueSectionV3 } from '@/components/detail-v2/service-value-v3';
import { DetailTrustSectionV2 } from '@/components/detail-v2/detail-trust-section-v2';
import { DetailCTASectionV2 } from '@/components/detail-v2/detail-cta-section-v2';
```
- [ ] **步骤 2: 重构组件函数体**
完整替换函数体:
```tsx
export function ServiceDetailClient({ service }: ServiceDetailClientProps) {
const theme = getHeroTheme(service.heroThemeId);
const crossRefs = getServiceCrossRefs(service.id);
return (
<div className="min-h-screen bg-[var(--color-bg-primary)]">
<DetailSwipeNav type="service" currentId={service.id} />
{/* L1 - Hero 情感入口 (V3) */}
<DetailHeroV3
theme={theme}
badge="专业服务"
title={service.title}
subtitle={service.description}
primaryAction={{ label: '立即咨询', href: '/contact' }}
secondaryAction={{ label: '查看案例', href: '/cases' }}
/>
{/* L2 - 价值理性支撑 (V3) */}
<ServiceValueSectionV3 service={service} />
{/* L3 - 信任证明 (V2) */}
<DetailTrustSectionV2
caseStudies={service.caseStudies}
dataProofs={service.dataProofs}
accentColor={theme.accentColor}
/>
{/* L4 - CTA转化 (V2) */}
<DetailCTASectionV2
theme={theme}
title={`准备好开始${service.title}了吗?`}
description="联系我们,获取专属方案和报价"
primaryAction={{ label: '预约咨询', href: '/contact' }}
secondaryAction={{ label: '了解更多服务', href: '/services' }}
/>
<CrossRecommendGrid items={crossRefs} title="相关解决方案" />
</div>
);
}
```
- [ ] **步骤 3: 验证TypeScript编译**
运行命令:
```bash
npx tsc --noEmit 2>&1 | grep -E "error TS" | head -10
```
预期输出:无错误信息
- [ ] **步骤 4: 测试所有服务页面**
在浏览器中依次访问:
- http://localhost:3002/services/software
- http://localhost:3002/services/consulting
- http://localhost:3002/services/data-intelligence
- http://localhost:3002/services/technical-support
预期:所有页面均显示V3风格,包含功能网格、优势展示、服务流程时间线
---
## 🚀 Phase 6: 升级3个列表页为V3风格
### 任务 6.1: 升级产品列表页
**文件:**
- 修改:`src/app/(marketing)/products/page.tsx`
**目标:** 为产品列表页添加V3风格的Hero区域和卡片样式
- [ ] **步骤 1: 添加V3 Hero区域导入**
在文件顶部添加:
```typescript
import { ListPageHeroV3 } from '@/components/detail-v2/list-page-hero-v3';
import { ProductCardV3 } from '@/components/detail-v2/product-card-v3';
```
- [ ] **步骤 2: 替换页面Hero区域**
将现有的静态Hero替换为:
```tsx
<ListPageHeroV3
title="企业软件产品矩阵"
subtitle="从ERP到BI,覆盖企业数字化全场景"
description="六大核心产品互为补充,可根据业务需求灵活组合"
stats={[
{ value: '6', label: '核心产品' },
{ value: '3', label: '产品系列' },
{ value: '99%', label: '自主可控' },
]}
/>
```
- [ ] **步骤 3: 替换产品卡片渲染**
将现有的 `.map()` 渲染替换为:
```tsx
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{PRODUCTS.map((product) => (
<ProductCardV3 key={product.id} product={product} />
))}
</div>
```
### 任务 6.2 & 6.3: 升级解决方案和服务列表页
按照相同的模式升级:
- `src/app/(marketing)/solutions/page.tsx` - 使用 `SolutionCardV3`
- `src/app/(marketing)/services/page.tsx` - 使用 `ServiceCardV3`
---
## 🚀 Phase 7: 全量验证与收尾
### 任务 7.1: 最终TypeScript编译检查
- [ ] **步骤 1: 运行完整编译检查**
```bash
npx tsc --noEmit
```
预期输出:`✓ 编译成功,0错误`
- [ ] **步骤 2: 运行Next.js构建测试**
```bash
npm run build
```
预期输出:`✓ Build successful`
### 任务 7.2: 全页面冒烟测试
- [ ] **步骤 1: 创建测试清单**
逐个访问以下URL并确认:
- [ ] 所有Hero区域显示正常(视差滚动、浮动粒子)
- [ ] 所有价值支撑区域显示正常(标签化、数据可视化)
- [ ] 所有CTA按钮可点击
- [ ] 移动端响应式布局正常
- [ ] 动画流畅不卡顿
**完整URL清单(17个页面):**
**产品详情页(6个):**
1. /products/erp
2. /products/crm
3. /products/cms
4. /products/bi
5. /products/sds
6. /products/oa
**解决方案详情页(4个):**
7. /solutions/manufacturing
8. /solutions/retail
9. /solutions/finance
10. /solutions/government
**服务详情页(4个):**
11. /services/software
12. /services/consulting
13. /services/data-intelligence
14. /services/technical-support
**列表页(3个):**
15. /products
16. /solutions
17. /services
- [ ] **步骤 2: 性能基准测试**
使用Chrome DevTools Performance面板检查:
- [ ] First Contentful Paint < 1.5s
- [ ] Time to Interactive < 3.0s
- [ ] Cumulative Layout Shift < 0.1
- [ ] 动画帧率稳定在60fps
### 任务 7.3: 文档更新与提交
- [ ] **步骤 1: 更新CONTEXT.md**
在CONTEXT.md中添加V3设计系统的说明:
```markdown
## V3设计系统(2026-01-26上线)
### 核心特征
- **L1微交互层**TiltCard 3D倾斜、PressableButton按压反馈、InkGlowCard流光效果
- **L2动效节奏层**:差异化时长(0.6-0.9s)、弹性缓动([0.34,1.56,0.64,1])、序列编排(stagger 0.08-0.12s)
- **L3视觉层次层**:多层阴影、渐变边框、玻璃态(backdrop-blur)
- **L4内容密度层**FeatureTags标签化、CircularProgress环形图、AnimatedCounter计数器
- **L5品牌印记层**BrandSeal印章、CalligraphyText书法字体、InkDivider墨韵分隔线
### 组件映射关系
| V1组件 | V3组件 | 变更内容 |
|--------|--------|----------|
| DetailHero | DetailHeroV3 | 视差滚动+浮动粒子+序列动画 |
| ProductValueSection | ProductValueSectionV3 | 标签化功能+数据可视化 |
| ServiceValueSection | ServiceValueSectionV3 | 时间线流程+优势网格 |
| (新增) | SolutionValueSectionV3 | 挑战-解决方案对比+套装组合 |
```
- [ ] **步骤 2: Git提交**
```bash
git add .
git commit -m "feat: apply V3 design system to all 17 pages
- Upgrade all product detail pages (6) to V3 with L1-L5 refinements
- Create SolutionValueSectionV3 for solution pages (4)
- Create ServiceValueSectionV3 for service pages (4)
- Upgrade list pages (3) with V3 hero and card components
- Add micro-interaction library (TiltCard, PressableButton, InkGlowCard)
- Add brand elements (BrandSeal, CalligraphyText, InkDivider)
- Implement data visualization (CircularProgress, AnimatedCounter, FeatureTags)
- Apply parallax scrolling and floating particles to hero sections
- Ensure TypeScript compilation passes with 0 errors
- Validate responsive design and performance metrics"
```
---
## ⚠️ 注意事项
### 关键依赖
1. **Framer Motion版本兼容性**:确保所有动画参数类型正确(duration为数字,ease使用as const断言)
2. **Tailwind CSS类名**:使用完整的类名链式写法,避免动态拼接
3. **Lucide Icons**:确保所有图标导入路径正确,使用type import避免打包问题
### 性能优化要点
1. **懒加载非首屏组件**:使用React.lazy()加载次要组件
2. **动画性能**:只对transform和opacity属性做动画,避免触发layout reflow
3. **图片优化**:使用next/image组件,设置适当的sizes属性
4. **字体加载**:使用font-display: swap避免FOIT/FOUT
### 移动端适配
1. **Hero区域**:移动端减少paddingpy-28 vs py-40),字体缩小(text-4xl vs text-5xl
2. **卡片网格**:移动端单列(grid-cols-1),平板双列(md:grid-cols-2
3. **触摸优化**:按钮最小点击区域44x44px,移除hover依赖的微交互
### 回滚方案
如果某个页面出现严重问题:
1. 立即回退到V1/V2组件(保留旧组件不删除)
2. 记录问题页面和错误信息
3. 单独修复后再重新应用V3
---
## 📊 成功标准
### 功能完整性
- [x] 所有17个页面成功应用V3设计系统
- [x] TypeScript编译0错误
- [x] Next.js构建成功
- [x] 所有链接可正常跳转
### 视觉一致性
- [x] 所有页面遵循四层叙事模型(Hero→价值→信任→CTA)
- [x] 品牌色彩统一(主色#C41E3A,辅色蓝色系)
- [x] 动效节奏一致(stagger 0.08-0.12sduration 0.6-0.9s
- [x] 移动端响应式布局正常
### 性能指标
- [x] LCP < 2.5s
- [x] FID < 100ms
- [x] CLS < 0.1
- [x] 动画帧率 ≥ 55fps
---
## 🎯 执行选项
**计划已完成。两种执行方式:**
**1. 子代理驱动(推荐)** - 使用 subagent-driven-development
- 每个Phase一个子代理
- 两阶段审查(规格合规性 + 代码质量)
- 快速迭代,并行执行独立任务
**2. 内联执行** - 使用 executing-plans
- 在当前会话中按Phase顺序执行
- 每个Phase完成后设置检查点
- 适合需要实时反馈的场景
**请选择执行方式?**