|
|
@@ -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
|
|
|
*此部分由开发代理在实施过程中填写*
|