|
|
@@ -0,0 +1,231 @@
|
|
|
+# Story 016-02: 添加人员后显示数量不准确修复
|
|
|
+
|
|
|
+Status: todo
|
|
|
+
|
|
|
+<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
|
+
|
|
|
+## Story
|
|
|
+
|
|
|
+As a 管理后台用户,
|
|
|
+I want 在添加人员到订单后看到准确的添加人数提示,
|
|
|
+so that 我可以确认操作是否成功,了解实际添加了多少人。
|
|
|
+
|
|
|
+## 问题描述
|
|
|
+
|
|
|
+在订单详情弹窗中添加人员到订单时,选择多个残疾人并确认添加后,toast 提示"已添加 1 人",但实际添加了 2 人。提示信息不准确,用户无法确认操作结果。
|
|
|
+
|
|
|
+**问题位置:**
|
|
|
+- 文件: `allin-packages/order-management-ui/src/components/OrderDetailModal.tsx`
|
|
|
+- 组件: `OrderDetailModal`
|
|
|
+- 相关方法: 批量添加人员的 onSuccess 回调
|
|
|
+
|
|
|
+**当前状态:**
|
|
|
+- 添加 2 人后提示"已添加 1 人"
|
|
|
+- 用户无法确认实际添加了多少人
|
|
|
+- toast 提示信息不准确
|
|
|
+
|
|
|
+**问题时间:** 2026/01/27 09:33 ~ 10:43
|
|
|
+**会话 ID:** 4ca84397-8671-4783-9c25-b02cac08ca5e
|
|
|
+
|
|
|
+## 技术解决方案
|
|
|
+
|
|
|
+### 根因分析
|
|
|
+
|
|
|
+前后端都有去重逻辑:
|
|
|
+- 后端返回 `addedCount` 字段,表示实际添加的人数
|
|
|
+- 前端 toast 没有使用 `addedCount`,显示固定文本
|
|
|
+
|
|
|
+### 修复方案
|
|
|
+
|
|
|
+修改前端 toast 使用后端返回的 `addedCount`,显示实际添加的人数。
|
|
|
+
|
|
|
+**修改前:**
|
|
|
+```typescript
|
|
|
+onSuccess: (data) => {
|
|
|
+ toast.success(`批量添加人员成功`);
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**修改后:**
|
|
|
+```typescript
|
|
|
+onSuccess: (data) => {
|
|
|
+ toast.success(`批量添加人员成功,实际添加 ${data.addedCount} 人`);
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 去重逻辑说明
|
|
|
+
|
|
|
+后端在添加人员时会检查重复:
|
|
|
+- 如果人员已在订单中,跳过添加
|
|
|
+- 返回 `addedCount` 表示实际添加的人数
|
|
|
+- 返回 `skippedCount` 表示跳过的人数(如有)
|
|
|
+
|
|
|
+Toast 应该显示 `addedCount`,让用户了解实际添加结果。
|
|
|
+
|
|
|
+## Acceptance Criteria
|
|
|
+
|
|
|
+1. **Toast 显示实际添加人数**
|
|
|
+ - [ ] 添加 2 个新人员,toast 显示"实际添加 2 人"
|
|
|
+ - [ ] 添加 1 个新人员,toast 显示"实际添加 1 人"
|
|
|
+ - [ ] 添加多个人员,toast 显示正确的数量
|
|
|
+
|
|
|
+2. **去重逻辑正确处理**
|
|
|
+ - [ ] 添加重复人员时,toast 显示正确的添加数量(去重后)
|
|
|
+ - [ ] 如果有重复人员被跳过,提示信息清晰
|
|
|
+ - [ ] 用户可以理解有多少人被成功添加
|
|
|
+
|
|
|
+3. **数据验证**
|
|
|
+ - [ ] 关闭并重新打开订单详情,人员列表正确更新
|
|
|
+ - [ ] 添加的人员正确显示在列表中
|
|
|
+ - [ ] 人员数量统计正确
|
|
|
+
|
|
|
+4. **代码质量**
|
|
|
+ - [ ] 代码符合项目规范
|
|
|
+ - [ ] 类型检查通过 (`pnpm typecheck`)
|
|
|
+ - [ ] 功能验证通过
|
|
|
+
|
|
|
+## Tasks / Subtasks
|
|
|
+
|
|
|
+- [ ] Task 1: 修改 toast 显示逻辑 (AC: #1, #2)
|
|
|
+ - [ ] 1.1 找到批量添加人员的 onSuccess 回调
|
|
|
+ - [ ] 1.2 修改 toast 使用 `data.addedCount`
|
|
|
+ - [ ] 1.3 验证 toast 显示正确的添加人数
|
|
|
+
|
|
|
+- [ ] Task 2: 处理去重场景 (AC: #2)
|
|
|
+ - [ ] 2.1 确认后端返回的数据结构
|
|
|
+ - [ ] 2.2 添加去重提示信息(如有需要)
|
|
|
+ - [ ] 2.3 验证重复人员场景
|
|
|
+
|
|
|
+- [ ] Task 3: 验证和测试 (AC: #3, #4)
|
|
|
+ - [ ] 3.1 测试添加多个人员
|
|
|
+ - [ ] 3.2 测试添加重复人员
|
|
|
+ - [ ] 3.3 验证人员列表更新
|
|
|
+ - [ ] 3.4 运行类型检查
|
|
|
+
|
|
|
+## Dev Notes
|
|
|
+
|
|
|
+### 问题背景
|
|
|
+
|
|
|
+在会话 4 中,用户反馈添加人员后显示数量不准确的问题。通过分析,发现问题在于前端 toast 没有使用后端返回的实际添加人数,而是显示固定文本。
|
|
|
+
|
|
|
+### 相关文件路径
|
|
|
+
|
|
|
+**需要修改的文件:**
|
|
|
+- `allin-packages/order-management-ui/src/components/OrderDetailModal.tsx`
|
|
|
+
|
|
|
+**后端 API:**
|
|
|
+- 订单服务: `allin-packages/order-module/src/services/order.service.ts`
|
|
|
+- 方法: 批量添加人员到订单(约在第 334-400 行)
|
|
|
+
|
|
|
+### 技术细节
|
|
|
+
|
|
|
+**后端返回数据结构:**
|
|
|
+```typescript
|
|
|
+{
|
|
|
+ addedCount: number, // 实际添加的人数
|
|
|
+ skippedCount?: number, // 跳过的人数(重复)
|
|
|
+ totalCount?: number // 总尝试人数
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**前端修改点:**
|
|
|
+找到批量添加人员的 API 调用,修改 onSuccess 回调中的 toast 提示。
|
|
|
+
|
|
|
+### 相关代码
|
|
|
+
|
|
|
+**OrderDetailModal.tsx 中需要修改的部分(大约在第 254-288 行):**
|
|
|
+
|
|
|
+需要找到类似这样的代码:
|
|
|
+```typescript
|
|
|
+const handleAddPersons = async (selectedPersons: DisabledPerson[]) => {
|
|
|
+ // API 调用
|
|
|
+ await addPersonsToOrder.mutateAsync(
|
|
|
+ { orderId, personIds: selectedPersons.map(p => p.id) },
|
|
|
+ {
|
|
|
+ onSuccess: (data) => {
|
|
|
+ // 修改这里的 toast 提示
|
|
|
+ toast.success(`批量添加人员成功,实际添加 ${data.addedCount} 人`);
|
|
|
+ // ...
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+};
|
|
|
+```
|
|
|
+
|
|
|
+### 测试场景
|
|
|
+
|
|
|
+1. **添加 2 个新人员**
|
|
|
+ - 选择 2 个残疾人
|
|
|
+ - 点击"确认添加"
|
|
|
+ - 验证 toast 显示"实际添加 2 人"
|
|
|
+
|
|
|
+2. **添加重复人员**
|
|
|
+ - 先添加人员 A
|
|
|
+ - 再次尝试添加人员 A
|
|
|
+ - 验证 toast 显示正确的去重信息
|
|
|
+
|
|
|
+3. **混合场景**
|
|
|
+ - 添加人员 A(新)和人员 B(已有)
|
|
|
+ - 验证 toast 显示"实际添加 1 人"或包含去重信息
|
|
|
+
|
|
|
+### 依赖关系
|
|
|
+
|
|
|
+- 依赖 Epic 10 (订单管理 E2E 测试) 已完成
|
|
|
+- 会话 4 中的问题分析
|
|
|
+
|
|
|
+## Architecture Compliance
|
|
|
+
|
|
|
+### 技术栈
|
|
|
+- **前端框架**: React
|
|
|
+- **状态管理**: useState
|
|
|
+- **数据获取**: TanStack Query (useMutation)
|
|
|
+- **UI 组件**: Radix UI (@d8d/shared-ui-components)
|
|
|
+
|
|
|
+### 代码规范
|
|
|
+- 使用 TypeScript 严格类型检查
|
|
|
+- 遵循 React Hooks 规范
|
|
|
+- API 响应数据需要正确类型定义
|
|
|
+
|
|
|
+## References
|
|
|
+
|
|
|
+- [Source: allin-packages/order-management-ui/src/components/OrderDetailModal.tsx](订单详情弹窗组件)
|
|
|
+- [Source: allin-packages/order-module/src/services/order.service.ts](订单服务 - 后端 API)
|
|
|
+- [Source: /tmp/session-4-conversation.md](会话 4 对话记录)
|
|
|
+- [Source: _bmad-output/planning-artifacts/epics.md](Epic 016 详细信息)
|
|
|
+
|
|
|
+## Dev Agent Record
|
|
|
+
|
|
|
+### Agent Model Used
|
|
|
+
|
|
|
+待定
|
|
|
+
|
|
|
+### Debug Log References
|
|
|
+
|
|
|
+None
|
|
|
+
|
|
|
+### Completion Notes List
|
|
|
+
|
|
|
+**Story 016-02 待实现**
|
|
|
+
|
|
|
+**当前状态:**
|
|
|
+- Story 已创建,等待实现
|
|
|
+- 问题根因已定位
|
|
|
+- 修复方案已确定
|
|
|
+
|
|
|
+**待实现内容:**
|
|
|
+修改 `OrderDetailModal.tsx` 中批量添加人员的 toast 提示,使用后端返回的 `addedCount`。
|
|
|
+
|
|
|
+**预计工作量:** 5 分钟
|
|
|
+
|
|
|
+**优先级:** 中等
|
|
|
+
|
|
|
+### File List
|
|
|
+
|
|
|
+**需要修改的文件:**
|
|
|
+- `allin-packages/order-management-ui/src/components/OrderDetailModal.tsx`
|
|
|
+
|
|
|
+### Change Log
|
|
|
+- 2026-01-27: 发现并分析问题(会话 4)
|
|
|
+- 2026-01-28: 创建 Story 文档,等待实现
|