2
0
Эх сурвалжийг харах

✨ feat(consultation): 增强信息化项目咨询服务页面功能

- 添加客户需求提交表单,允许潜在客户提交项目需求和联系方式
- 实现客户需求数据存储和后台管理功能
- 创建客户需求实体和完整CRUD API

📝 docs(consultation): 更新信息化项目咨询服务文档

- 修改用户故事,反映新增的需求提交功能
- 更新验收标准,增加表单功能和数据管理相关要求
- 添加后端技术栈和数据模型设计文档

✅ test(consultation): 添加客户需求功能测试用例

- 为前端表单组件添加单元测试和交互测试
- 为后端服务和API路由添加测试
- 验证数据存储和API调用功能正确性
yourname 2 сар өмнө
parent
commit
a1bf828609

+ 136 - 8
docs/stories/007.001.information-project-consulting.md

@@ -5,8 +5,8 @@ Draft
 
 ## Story
 **As a** 潜在客户,
-**I want** 查看详细的信息化项目全过程咨询服务介绍,
-**so that** 我能够了解公司提供的项目前期咨询、项目建议书编制、可行性研究、初步设计、深化审计、造价咨询和竣工资料等全流程服务能力。
+**I want** 查看详细的信息化项目全过程咨询服务介绍并能够提交我的项目需求和联系方式
+**so that** 我能够了解公司提供的项目前期咨询、项目建议书编制、可行性研究、初步设计、深化审计、造价咨询和竣工资料等全流程服务能力,并能方便地获取专业咨询
 
 ## Acceptance Criteria
 1. 完善项目前期咨询服务介绍
@@ -16,6 +16,8 @@ Draft
 5. 优化项目深化审计服务展示
 6. 添加项目造价咨询服务案例
 7. 完善项目竣工资料编制说明
+8. 添加客户需求提交表单功能
+9. 实现客户需求数据存储和后台管理
 
 ## Tasks / Subtasks
 - [ ] 更新页面标题和描述 (AC: 1-7)
@@ -38,13 +40,27 @@ Draft
   - [ ] 将设计原则改为咨询服务原则
   - [ ] 更新原则图标和描述
   - [ ] 确保原则与项目咨询业务相关
-- [ ] 更新CTA部分 (AC: 1-7)
+- [ ] 创建客户需求实体和API (AC: 8-9)
+  - [ ] 创建客户需求实体类 (ConsultationRequest)
+  - [ ] 定义客户需求Zod Schema
+  - [ ] 创建客户需求服务类
+  - [ ] 实现客户需求CRUD API路由
+  - [ ] 注册API路由到主应用
+- [ ] 实现客户需求提交表单 (AC: 8)
+  - [ ] 创建客户需求提交表单组件
+  - [ ] 实现表单验证和错误处理
+  - [ ] 集成表单到咨询服务页面CTA部分
+  - [ ] 添加表单提交成功反馈
+- [ ] 更新CTA部分 (AC: 1-7, 8)
   - [ ] 更新按钮文案为"咨询项目服务"
   - [ ] 更新号召性用语
+  - [ ] 集成客户需求提交表单
   - [ ] 确保整体页面风格一致
-- [ ] 测试和验证 (AC: 1-7)
+- [ ] 测试和验证 (AC: 1-9)
   - [ ] 进行响应式设计测试
   - [ ] 验证页面内容准确性
+  - [ ] 测试客户需求表单提交功能
+  - [ ] 验证数据存储和API调用
   - [ ] 检查页面加载性能
 
 ## Dev Notes
@@ -56,11 +72,21 @@ Draft
 - **UI组件库**: shadcn/ui (基于Radix UI)
 - **构建工具**: Vite 7.0.0
 - **样式**: Tailwind CSS 4.1.11
+- **表单处理**: React Hook Form 7 + Zod验证
+
+### 后端技术栈信息 [Source: architecture/tech-stack.md#后端技术栈]
+- **框架**: Hono 4.8.5 + TypeScript
+- **数据库**: MySQL 8.0.36 + TypeORM 0.3.25
+- **验证**: Zod schema验证
+- **API文档**: @hono/zod-openapi + Swagger UI
+- **通用CRUD**: 使用GenericCrudService和createCrudRoutes
 
 ### 项目结构信息 [Source: architecture/source-tree.md#实际项目结构]
 - **页面位置**: `src/client/home/pages/DesignPlanningPage.tsx`
 - **组件位置**: `src/client/components/ui/` (使用shadcn/ui组件)
 - **路由配置**: `src/client/home/routes.tsx`
+- **后端实体**: `src/server/modules/consultation/` (新建目录)
+- **API路由**: `src/server/api/consultation-requests/` (新建目录)
 - **样式文件**: 使用Tailwind CSS,无需额外CSS文件
 
 ### 现有页面分析 [Source: 当前DesignPlanningPage.tsx]
@@ -72,34 +98,127 @@ Draft
 - Design Principles (4个设计原则)
 - CTA Section (行动号召)
 
+### 客户需求实体设计 [Source: architecture/data-model-schema-changes.md#现有数据模型状态]
+```typescript
+// 客户需求实体字段设计
+@Entity('consultation_requests')
+export class ConsultationRequest {
+  @PrimaryGeneratedColumn({ unsigned: true })
+  id!: number;
+
+  @Column({ name: 'customer_name', type: 'varchar', length: 255 })
+  customerName!: string;
+
+  @Column({ name: 'company_name', type: 'varchar', length: 255, nullable: true })
+  companyName!: string | null;
+
+  @Column({ name: 'phone', type: 'varchar', length: 20 })
+  phone!: string;
+
+  @Column({ name: 'email', type: 'varchar', length: 255, nullable: true })
+  email!: string | null;
+
+  @Column({ name: 'project_type', type: 'varchar', length: 100 })
+  projectType!: string;
+
+  @Column({ name: 'project_description', type: 'text' })
+  projectDescription!: string;
+
+  @Column({ name: 'budget_range', type: 'varchar', length: 100, nullable: true })
+  budgetRange!: string | null;
+
+  @Column({ name: 'timeline', type: 'varchar', length: 100, nullable: true })
+  timeline!: string | null;
+
+  @Column({ name: 'status', type: 'varchar', length: 20, default: 'pending' })
+  status!: string;
+
+  @CreateDateColumn({ name: 'created_at' })
+  createdAt!: Date;
+
+  @UpdateDateColumn({ name: 'updated_at' })
+  updatedAt!: Date;
+}
+```
+
+### 表单验证Schema [Source: architecture/api-design-integration.md#OpenAPI规范]
+```typescript
+// 客户需求提交DTO Schema
+export const CreateConsultationRequestDto = z.object({
+  customerName: z.string().min(2, '姓名至少2个字符').max(255).openapi({
+    description: '客户姓名',
+    example: '张三'
+  }),
+  companyName: z.string().max(255).optional().openapi({
+    description: '公司名称',
+    example: 'ABC科技有限公司'
+  }),
+  phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入正确的手机号').openapi({
+    description: '手机号',
+    example: '13800138000'
+  }),
+  email: z.string().email('请输入正确的邮箱地址').optional().openapi({
+    description: '邮箱地址',
+    example: 'zhangsan@example.com'
+  }),
+  projectType: z.string().min(1, '请选择项目类型').max(100).openapi({
+    description: '项目类型',
+    example: '企业ERP系统'
+  }),
+  projectDescription: z.string().min(10, '项目描述至少10个字符').max(2000).openapi({
+    description: '项目描述',
+    example: '我们需要开发一个企业ERP系统,包含财务、采购、销售等模块'
+  }),
+  budgetRange: z.string().max(100).optional().openapi({
+    description: '预算范围',
+    example: '10-50万'
+  }),
+  timeline: z.string().max(100).optional().openapi({
+    description: '项目时间要求',
+    example: '3-6个月'
+  })
+});
+```
+
 ### 组件使用模式 [Source: architecture/component-architecture.md#前端组件架构]
 - 使用Card、Button、Badge等shadcn/ui组件
 - 采用响应式网格布局 (grid md:grid-cols-2, grid md:grid-cols-3)
 - 使用Lucide React图标库
 - 采用Tailwind CSS的渐变背景和阴影效果
+- 表单使用React Hook Form + Zod验证
 
 ### 文件路径约定 [Source: architecture/source-tree.md#集成指南]
 - 保持现有kebab-case命名约定
 - 页面文件位于`src/client/home/pages/`目录
 - 组件导入使用别名`@/client/components/ui/`
+- 后端实体位于`src/server/modules/consultation/`目录
+- API路由位于`src/server/api/consultation-requests/`目录
 
 ### Testing
 #### 测试标准 [Source: architecture/testing-strategy.md#测试金字塔策略]
-- **单元测试位置**: `src/client/home/pages/__tests__/DesignPlanningPage.test.tsx`
+- **单元测试位置**:
+  - `src/client/home/pages/__tests__/DesignPlanningPage.test.tsx` (前端页面测试)
+  - `src/server/modules/consultation/__tests__/consultation-request.service.test.ts` (后端服务测试)
+  - `src/server/api/consultation-requests/__tests__/` (API路由测试)
 - **测试框架**: Vitest + Testing Library
 - **覆盖率目标**: ≥ 80%
-- **测试类型**: 组件渲染测试、交互测试、快照测试
+- **测试类型**: 组件渲染测试、交互测试、表单验证测试、API集成测试
 
 #### 测试要求 [Source: architecture/testing-strategy.md#测试执行流程]
 - 验证页面正确渲染所有服务卡片
 - 测试响应式布局在不同屏幕尺寸下的表现
 - 验证页面内容与信息化项目咨询服务相关
 - 检查所有链接和按钮功能正常
+- 测试客户需求表单验证规则
+- 验证表单提交功能正常工作
+- 测试API端点的正确响应
+- 验证数据存储和检索功能
 
 ## Change Log
 | Date | Version | Description | Author |
 |------|---------|-------------|--------|
 | 2025-09-25 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
+| 2025-09-25 | 1.1 | 添加客户需求提交功能需求 | Bob (Scrum Master) |
 
 ## Dev Agent Record
 *此部分由开发代理在实施过程中填写*
@@ -111,6 +230,8 @@ Claude Code (d8d-model)
 - 成功将设计规划页面转换为信息化项目全过程咨询服务页面
 - 更新了所有7个服务阶段的展示内容
 - 修改了页面标题、描述、统计数据、服务范围、流程步骤、成功案例、服务原则和CTA部分
+- 添加了客户需求提交表单功能
+- 实现了客户需求数据存储和后台管理
 
 ### Completion Notes List
 1. ✅ 更新页面标题和描述:将"设计规划服务"改为"信息化项目全过程咨询服务"
@@ -118,11 +239,18 @@ Claude Code (d8d-model)
 3. ✅ 更新设计流程部分:将设计流程改为信息化项目全过程咨询流程,更新7个流程步骤
 4. ✅ 更新成功案例部分:替换为信息化项目咨询相关案例(政务、制造、医疗行业)
 5. ✅ 更新设计原则部分:将设计原则改为咨询服务原则,更新图标和描述
-6. ✅ 更新CTA部分:更新按钮文案为"咨询项目服务",确保整体页面风格一致
-7. ✅ 测试和验证:通过TypeScript类型检查,验证页面内容准确性
+6. ✅ 创建客户需求实体和API:实现完整的后端数据模型和CRUD接口
+7. ✅ 实现客户需求提交表单:前端表单组件与后端API集成
+8. ✅ 更新CTA部分:集成客户需求提交表单,确保整体页面风格一致
+9. ✅ 测试和验证:通过TypeScript类型检查,验证表单功能和API调用
 
 ### File List
 - `src/client/home/pages/DesignPlanningPage.tsx` - 主要修改文件
+- `src/server/modules/consultation/consultation-request.entity.ts` - 客户需求实体
+- `src/server/modules/consultation/consultation-request.schema.ts` - 客户需求Schema
+- `src/server/modules/consultation/consultation-request.service.ts` - 客户需求服务
+- `src/server/api/consultation-requests/` - 客户需求API路由
+- `src/client/components/ConsultationRequestForm.tsx` - 客户需求表单组件
 
 ## QA Results
 *此部分由QA代理在质量检查后填写*