Просмотр исходного кода

📝 docs(story): 更新故事010.004 - 修复订单状态更新问题

基于实际代码分析更新故事:
1. 修复表单验证错误显示问题(错误只打印到console)
2. 分离创建和编辑订单的表单逻辑
3. 修复编辑订单提交逻辑(移除不必要的人员验证)
4. 遵循UI包开发规范

具体问题:
- OrderForm.tsx:358 - form.handleSubmit错误处理只打印到console
- OrderForm.tsx:70 - orderPersons.min(1)验证在编辑模式下不必要
- OrderForm.tsx:219-220 - 编辑订单传递了包含orderPersons的数据

🤖 Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 неделя назад
Родитель
Сommit
02e7a83548
1 измененных файлов с 74 добавлено и 56 удалено
  1. 74 56
      docs/stories/010.004.story.md

+ 74 - 56
docs/stories/010.004.story.md

@@ -11,42 +11,34 @@ Draft
 ## Acceptance Criteria
 1. 编辑订单信息后状态能够正常更新
 2. 状态变更后页面显示正确的状态信息
-3. 状态更新历史记录完整
-4. 状态变更权限控制正确
+3. 表单验证错误能够在界面上正确显示
+4. 编辑订单对话框不包含人员相关验证逻辑(人员在查看详情中编辑)
 
 ## Tasks / Subtasks
-- [ ] 分析当前订单管理UI组件的状态更新逻辑 (AC: 1-4)
-  - [ ] 检查 `allin-packages/order-management-ui/src/components/OrderManagement.tsx` 中的状态更新相关代码
-  - [ ] 分析 `OrderForm` 组件的状态更新逻辑
-  - [ ] 检查订单更新API调用是否正确
-- [ ] 检查订单模块后端更新路由 (AC: 1)
-  - [ ] 检查 `allin-packages/order-module/src/routes/order-crud.routes.ts` 中的更新路由
-  - [ ] 验证更新路由路径映射:`update[':id']['$put']`
-  - [ ] 检查更新请求和响应的类型定义
-- [ ] 修复订单更新mutation逻辑 (AC: 1)
-  - [ ] 在 `OrderManagement` 组件中添加 `updateMutation`
-  - [ ] 实现订单更新API调用
-  - [ ] 处理更新成功后的状态同步
-- [ ] 修复订单表单的状态更新逻辑 (AC: 1-2)
-  - [ ] 检查 `OrderForm` 组件的表单提交逻辑
-  - [ ] 确保编辑表单正确调用更新API
-  - [ ] 验证状态更新后的页面刷新
-- [ ] 添加状态更新历史记录功能 (AC: 3)
-  - [ ] 检查订单实体是否有状态变更历史字段
-  - [ ] 如果需要,添加状态变更历史记录逻辑
-  - [ ] 在订单详情中显示状态变更历史
-- [ ] 验证状态变更权限控制 (AC: 4)
-  - [ ] 检查后端路由的权限控制中间件
-  - [ ] 验证前端权限控制逻辑
-  - [ ] 确保只有授权用户可以更新订单状态
-- [ ] 更新测试用例,验证状态更新功能 (AC: 1-4)
-  - [ ] 更新现有集成测试,包含状态更新测试
-  - [ ] 添加权限控制测试用例
-  - [ ] 验证状态变更历史记录功能
-- [ ] 进行功能测试和验证 (AC: 1-4)
-  - [ ] 手动测试订单状态更新功能
-  - [ ] 验证状态变更后的页面显示
-  - [ ] 检查权限控制功能
+- [ ] 修复表单验证错误显示问题 (AC: 3)
+  - [ ] 修改 `OrderForm.tsx:358` 的 `form.handleSubmit` 错误处理
+  - [ ] 确保验证错误在界面上显示,而不是只打印到console
+  - [ ] 添加适当的错误消息显示组件
+- [ ] 分离创建和编辑订单的表单逻辑 (AC: 4)
+  - [ ] 分析当前schema:`orderFormSchema` 包含 `orderPersons.min(1)` 验证
+  - [ ] 创建独立的编辑订单schema,使 `orderPersons` 为可选
+  - [ ] 或者修改现有schema,根据模式动态调整验证规则
+- [ ] 修复编辑订单提交逻辑 (AC: 1)
+  - [ ] 修改 `OrderForm.tsx:219-220` 的编辑订单逻辑
+  - [ ] 编辑订单时只传递基本信息,不包含 `orderPersons`
+  - [ ] 确保更新API接收正确的数据格式
+- [ ] 遵循UI包开发规范 (AC: 1-4)
+  - [ ] 根据 `ui-package-standards.md`,考虑使用条件渲染两个独立的Form组件
+  - [ ] 或者为创建和编辑模式使用独立的schema和默认值
+  - [ ] 确保表单组件模式符合规范要求
+- [ ] 更新测试用例 (AC: 1-4)
+  - [ ] 更新集成测试,验证编辑订单功能
+  - [ ] 添加表单验证错误显示测试
+  - [ ] 验证编辑订单不要求人员信息
+- [ ] 进行功能测试 (AC: 1-4)
+  - [ ] 手动测试编辑订单状态更新
+  - [ ] 验证表单验证错误现在正确显示
+  - [ ] 确认编辑订单不再要求人员信息
 
 ## Dev Notes
 
@@ -67,15 +59,29 @@ Draft
 - **API客户端位置**: `allin-packages/order-management-ui/src/api/orderClient.ts`
 - **订单表单组件**: `allin-packages/order-management-ui/src/components/OrderForm.tsx`
 
-### 当前订单管理组件分析
-根据代码分析,当前订单管理组件有以下功能:
-1. **订单列表查询**: 使用 `useQuery` 获取订单列表
-2. **订单详情获取**: 使用 `getOrderDetailMutation` 获取单个订单详情
-3. **订单激活/关闭**: 使用 `activateMutation` 和 `closeMutation`
-4. **订单删除**: 使用 `deleteMutation`
-5. **订单编辑**: 通过 `handleEditOrder` 函数打开编辑表单
+### 当前订单状态更新问题分析(基于代码分析)
+根据代码分析,发现以下具体问题:
 
-**发现问题**: 当前组件缺少 `updateMutation` 用于更新订单信息,编辑表单可能没有正确调用更新API。
+1. **表单验证错误不显示**:
+   - 文件: `allin-packages/order-management-ui/src/components/OrderForm.tsx:358`
+   - 问题: `form.handleSubmit(onSubmit, (errors) => console.debug('表单验证错误:', errors))`
+   - 验证错误只打印到console,没有在界面上显示给用户
+
+2. **不必要的人员验证**:
+   - 文件: `OrderForm.tsx:70`
+   - 问题: `orderPersons: z.array(personInfoSchema).min(1, '至少选择一名人员')`
+   - 编辑订单时schema仍然要求至少一名人员,但编辑订单不应该包含人员验证
+
+3. **编辑订单逻辑问题**:
+   - 文件: `OrderForm.tsx:219-220`
+   - 问题: 编辑订单时传递完整的`data`(包含`orderPersons`)给更新API
+   - 应该只传递订单基本信息,不包含人员数据
+
+4. **创建和编辑模式混淆**:
+   - 创建订单需要人员信息(第223-247行)
+   - 编辑订单不应该要求人员信息,但使用了相同的schema
+
+**核心问题**: 编辑订单和创建订单使用了相同的表单schema和验证逻辑,但业务需求不同。
 
 ### 订单模块API信息 [Source: 代码分析]
 - **订单路由结构**: 根据 `orderClient.ts` 分析,更新路由为 `update[':id']['$put']`
@@ -139,11 +145,22 @@ import type { UpdateOrderSchema } from '@d8d/allin-order-module/schemas';
 - `data-testid="order-status-select"`
 - `data-testid="order-work-status-select"`
 
-### 需要修复的具体问题
-1. **缺少updateMutation**: `OrderManagement` 组件中没有定义 `updateMutation`
-2. **编辑表单逻辑**: `OrderForm` 组件可能没有正确处理编辑模式
-3. **状态同步**: 更新成功后需要刷新订单列表和更新本地状态
-4. **权限控制**: 需要验证状态变更的权限控制逻辑
+### 需要修复的具体问题(基于代码分析)
+1. **修复表单验证错误显示**:
+   - 修改 `OrderForm.tsx:358` 的 `form.handleSubmit` 错误处理
+   - 确保验证错误在界面上显示给用户,而不是只打印到console
+
+2. **分离创建和编辑表单schema**:
+   - 创建独立的编辑订单schema,不包含 `orderPersons` 验证
+   - 或者修改现有schema,使 `orderPersons` 在编辑模式下为可选
+
+3. **修复编辑订单提交逻辑**:
+   - 编辑订单时只传递订单基本信息给更新API
+   - 不传递 `orderPersons` 字段给更新请求
+
+4. **遵循UI包开发规范**:
+   - 根据规范,应该使用条件渲染两个独立的Form组件
+   - 或者至少使用独立的schema和默认值
 
 ### 文件位置
 - **主要修改文件**: `allin-packages/order-management-ui/src/components/OrderManagement.tsx`
@@ -158,27 +175,28 @@ import type { UpdateOrderSchema } from '@d8d/allin-order-module/schemas';
 - **测试框架**: Vitest + Testing Library
 - **测试位置**: `tests/integration/` 文件夹
 - **测试类型**: 集成测试验证组件与API交互
-- **覆盖率要求**: 核心状态更新功能 > 80%
+- **覆盖率要求**: 核心编辑订单功能 > 80%
 
 #### 具体测试要求
-1. **单元测试**: 测试新的更新mutation逻辑
-2. **集成测试**: 测试组件与更新API的完整交互
-3. **表单测试**: 验证编辑表单的提交功能
-4. **状态同步测试**: 验证更新后的状态同步
-5. **权限测试**: 验证状态变更的权限控制
+1. **表单验证测试**: 测试编辑订单表单的验证错误显示
+2. **更新功能测试**: 测试订单状态更新功能
+3. **错误处理测试**: 测试表单提交错误处理
+4. **功能分离测试**: 验证编辑订单不包含人员验证逻辑
 
 #### 测试选择器要求
-必须为新的更新相关控件添加 `data-testid` 属性:
-- `data-testid="order-update-form"`
-- `data-testid="order-update-submit-button"`
+必须为相关控件添加 `data-testid` 属性:
+- `data-testid="order-edit-form"`
+- `data-testid="order-edit-submit-button"`
 - `data-testid="order-status-select"`
 - `data-testid="order-work-status-select"`
 - `data-testid="order-edit-button-{id}"`
+- `data-testid="form-error-message"`
 
 ## Change Log
 | Date | Version | Description | Author |
 |------|---------|-------------|--------|
 | 2025-12-12 | 1.0 | 故事创建,基于史诗010-04需求 | Scrum Master Bob |
+| 2025-12-12 | 1.1 | 简化故事,专注于修复表单验证错误显示和移除不必要的人员验证 | Scrum Master Bob |
 
 ## Dev Agent Record
 *此部分由开发代理在实施过程中填写*