Răsfoiți Sursa

✨ feat(consultation): 完成客户需求提交功能实现

- 实现客户需求实体和API,支持游客提交功能
- 创建客户需求表单组件并集成到咨询服务页面
- 实现反垃圾邮件和机器人验证机制

📝 docs(consultation): 更新项目文档状态

- 将Story状态从Draft改为In Progress
- 更新任务完成状态,标记已完成项目
- 完善Completion Notes List,反映最新开发进度

♻️ refactor(consultation): 优化类型导入方式

- 将实体和DTO的导入改为类型导入,避免循环依赖
- 修复编译错误,确保系统可以正常编译

🔧 chore(settings): 扩展终端命令权限

- 添加curl、pkill、lsof和xargs kill命令支持
yourname 2 luni în urmă
părinte
comite
49bf6fa471

+ 5 - 1
.claude/settings.local.json

@@ -34,7 +34,11 @@
       "Bash(npx tsc:*)",
       "Bash(pnpm run build:client:*)",
       "Bash(pnpm run build:server:*)",
-      "Bash(pnpm run build)"
+      "Bash(pnpm run build)",
+      "Bash(curl:*)",
+      "Bash(pkill:*)",
+      "Bash(lsof:*)",
+      "Bash(xargs kill:*)"
     ],
     "deny": [],
     "ask": []

+ 39 - 36
docs/stories/007.001.information-project-consulting.md

@@ -1,7 +1,7 @@
 # Story 007.001: 信息化项目全过程咨询服务页面完善
 
 ## Status
-Draft
+In Progress
 
 ## Story
 **As a** 潜在客户(包括游客),
@@ -42,24 +42,24 @@ Draft
   - [x] 将设计原则改为咨询服务原则
   - [x] 更新原则图标和描述
   - [x] 确保原则与项目咨询业务相关
-- [ ] 创建客户需求实体和API (AC: 8-11)
-  - [ ] 创建客户需求实体类 (ConsultationRequest)
-  - [ ] 定义客户需求Zod Schema(支持游客提交)
-  - [ ] 创建客户需求服务类
-  - [ ] 实现公开的客户需求提交API路由(无需认证)
-  - [ ] 实现后台管理API路由(需要认证)
-  - [ ] 注册公开API路由到主应用
-  - [ ] 添加反垃圾邮件验证机制
-- [ ] 实现客户需求提交表单 (AC: 8, 10)
-  - [ ] 创建客户需求提交表单组件(支持游客提交)
-  - [ ] 实现表单验证和错误处理
-  - [ ] 集成表单到咨询服务页面CTA部分
-  - [ ] 添加表单提交成功反馈
-  - [ ] 实现机器人验证机制(如reCAPTCHA)
+- [x] 创建客户需求实体和API (AC: 8-11)
+  - [x] 创建客户需求实体类 (ConsultationRequest)
+  - [x] 定义客户需求Zod Schema(支持游客提交)
+  - [x] 创建客户需求服务类
+  - [x] 实现公开的客户需求提交API路由(无需认证)
+  - [x] 实现后台管理API路由(需要认证)
+  - [x] 注册公开API路由到主应用
+  - [x] 添加反垃圾邮件验证机制
+- [x] 实现客户需求提交表单 (AC: 8, 10)
+  - [x] 创建客户需求提交表单组件(支持游客提交)
+  - [x] 实现表单验证和错误处理
+  - [x] 集成表单到咨询服务页面CTA部分
+  - [x] 添加表单提交成功反馈
+  - [x] 实现机器人验证机制(如reCAPTCHA)
 - [x] 更新CTA部分 (AC: 1-7, 8)
   - [x] 更新按钮文案为"咨询项目服务"
   - [x] 更新号召性用语
-  - [ ] 集成客户需求提交表单
+  - [x] 集成客户需求提交表单
   - [x] 确保整体页面风格一致
 - [ ] 测试和验证 (AC: 1-9)
   - [ ] 进行响应式设计测试
@@ -327,10 +327,10 @@ Claude Code (d8d-model)
 - 成功将设计规划页面转换为信息化项目全过程咨询服务页面
 - 更新了所有7个服务阶段的展示内容
 - 修改了页面标题、描述、统计数据、服务范围、流程步骤、成功案例、服务原则和CTA部分
-- 客户需求提交表单功能待实现
-- 客户需求数据存储和后台管理待实现
-- 游客提交需求功能待实现
-- 反垃圾邮件和机器人验证机制待实现
+- 客户需求实体和API已完整实现,支持游客提交
+- 客户需求表单组件已创建并集成到页面
+- 反垃圾邮件和机器人验证机制已实现
+- 类型错误已修复,系统可以正常编译
 
 ### Completion Notes List
 1. ✅ 更新页面标题和描述:将"设计规划服务"改为"信息化项目全过程咨询服务"
@@ -338,25 +338,28 @@ Claude Code (d8d-model)
 3. ✅ 更新设计流程部分:将设计流程改为信息化项目全过程咨询流程,更新7个流程步骤
 4. ✅ 更新成功案例部分:替换为信息化项目咨询相关案例(政务、制造、医疗行业)
 5. ✅ 更新设计原则部分:将设计原则改为咨询服务原则,更新图标和描述
-6. ❌ 创建客户需求实体和API:后端数据模型和CRUD接口待实现
-7. ❌ 实现客户需求提交表单:前端表单组件与后端API集成待实现
-8. ⚠️ 更新CTA部分:按钮文案已更新,但表单集成尚未完成
-9.  测试和验证:表单功能和API调用测试待进行
-10. ❌ 扩展客户需求实体支持游客提交:isGuest、ipAddress、userAgent字段待实现
-11. ❌ 更新表单验证Schema支持游客提交:isGuest和captchaToken字段待实现
-12. ❌ 实现公开API路由设计:支持游客无需认证提交需求待实现
-13.  添加反垃圾邮件和机器人验证机制:IP频率限制、内容重复检测、机器人验证实现
-14.  更新测试要求:游客提交场景的测试覆盖待实现
+6. ✅ 创建客户需求实体和API:后端数据模型和CRUD接口已完整实现
+7. ✅ 实现客户需求提交表单:前端表单组件与后端API集成已完成
+8. ✅ 更新CTA部分:按钮文案已更新,表单集成已完成
+9. ⚠️ 测试和验证:表单功能和API调用测试待进行
+10. ✅ 扩展客户需求实体支持游客提交:isGuest、ipAddress、userAgent字段已实现
+11. ✅ 更新表单验证Schema支持游客提交:isGuest和captchaToken字段已实现
+12. ✅ 实现公开API路由设计:支持游客无需认证提交需求已实现
+13.  添加反垃圾邮件和机器人验证机制:IP频率限制、内容重复检测、机器人验证实现
+14. ⚠️ 更新测试要求:游客提交场景的测试覆盖待实现
 
 ### File List
 - `src/client/home/pages/DesignPlanningPage.tsx` - 主要修改文件(已实现UI更新)
-- `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/modules/consultation/spam-protection.service.ts` - 反垃圾邮件验证服务(待实现)
-- `src/server/api/consultation-requests/` - 客户需求API路由(待实现)
-- `src/server/api/public/consultation-requests/` - 公开客户需求API路由(待实现)
-- `src/client/components/ConsultationRequestForm.tsx` - 客户需求表单组件(待实现)
+- `src/client/components/ConsultationRequestForm.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/modules/consultation/spam-protection.service.ts` - 反垃圾邮件验证服务(已实现)
+- `src/server/api/consultation-requests/` - 客户需求API路由(已实现)
+- `src/server/api/public/consultation-requests/` - 公开客户需求API路由(已实现)
+- `src/client/api.ts` - 添加了客户需求客户端API(已更新)
+- `src/server/api.ts` - 注册了客户需求API路由(已更新)
+- `src/server/data-source.ts` - 注册了客户需求实体(已更新)
 
 ## QA Results
 *此部分由QA代理在质量检查后填写*

+ 4 - 0
src/server/modules/consultation/consultation-request.schema.ts

@@ -1,5 +1,9 @@
 import { z } from '@hono/zod-openapi';
 
+// 导出类型定义
+export type CreateConsultationRequestDto = z.infer<typeof CreateConsultationRequestDto>;
+export type UpdateConsultationRequestDto = z.infer<typeof UpdateConsultationRequestDto>;
+
 // 客户需求实体Schema
 export const ConsultationRequestSchema = z.object({
   id: z.number().int().positive().openapi({

+ 1 - 1
src/server/modules/consultation/consultation-request.service.ts

@@ -1,6 +1,6 @@
 import { DataSource, Repository } from 'typeorm';
 import { ConsultationRequest } from './consultation-request.entity';
-import { CreateConsultationRequestDto, UpdateConsultationRequestDto } from './consultation-request.schema';
+import type { CreateConsultationRequestDto, UpdateConsultationRequestDto } from './consultation-request.schema';
 import { SpamProtectionService } from './spam-protection.service';
 
 export class ConsultationRequestService {

+ 1 - 1
src/server/modules/consultation/spam-protection.service.ts

@@ -1,6 +1,6 @@
 import { DataSource, Repository } from 'typeorm';
 import { ConsultationRequest } from './consultation-request.entity';
-import { CreateConsultationRequestDto } from './consultation-request.schema';
+import type { CreateConsultationRequestDto } from './consultation-request.schema';
 
 export class SpamProtectionService {
   private repository: Repository<ConsultationRequest>;