|
@@ -1,9 +1,9 @@
|
|
|
# 史诗006:父子商品多规格支持 - 棕地增强
|
|
# 史诗006:父子商品多规格支持 - 棕地增强
|
|
|
|
|
|
|
|
## 史诗状态
|
|
## 史诗状态
|
|
|
-**进度**: 12/14 故事完成 (85.7%)
|
|
|
|
|
-**最近更新**: 2025-12-15 (故事11:子商品删除功能实现完成)
|
|
|
|
|
-**当前状态**: 故事1-12已完成,故事13-14待开始
|
|
|
|
|
|
|
+**进度**: 13/15 故事完成 (87%)
|
|
|
|
|
+**最近更新**: 2025-12-15 (故事14:订单提交快照商品名称优化完成)
|
|
|
|
|
+**当前状态**: 故事1-14已完成,故事15待开始
|
|
|
|
|
|
|
|
### 完成概览
|
|
### 完成概览
|
|
|
- ✅ **故事1**: 管理后台父子商品配置功能 (已完成)
|
|
- ✅ **故事1**: 管理后台父子商品配置功能 (已完成)
|
|
@@ -19,7 +19,8 @@
|
|
|
- ✅ **故事11**: 子商品删除功能实现 (已完成)
|
|
- ✅ **故事11**: 子商品删除功能实现 (已完成)
|
|
|
- ✅ **故事12**: 商品详情页规格选择流程优化 (已完成)
|
|
- ✅ **故事12**: 商品详情页规格选择流程优化 (已完成)
|
|
|
- ⏳ **故事13**: 父子商品列表缓存自动刷新优化 (待开始)
|
|
- ⏳ **故事13**: 父子商品列表缓存自动刷新优化 (待开始)
|
|
|
-- ⏳ **故事14**: 订单提交快照商品名称优化 (待开始)
|
|
|
|
|
|
|
+- ✅ **故事14**: 订单提交快照商品名称优化 (已完成)
|
|
|
|
|
+- ⏳ **故事15**: 商品管理列表父子商品筛选优化 (待开始)
|
|
|
|
|
|
|
|
## 史诗目标
|
|
## 史诗目标
|
|
|
新增父子商品多规格支持功能,在商品添加购物车或立即购买时,能同时支持单规格和多规格选择,以子商品作为多规格选项,并支持手动指定子商品。
|
|
新增父子商品多规格支持功能,在商品添加购物车或立即购买时,能同时支持单规格和多规格选择,以子商品作为多规格选项,并支持手动指定子商品。
|
|
@@ -65,7 +66,8 @@
|
|
|
9. ✅ 购物车中父子商品显示完整的组合名称(父商品名称 + 子商品规格名称)(故事10已实现)
|
|
9. ✅ 购物车中父子商品显示完整的组合名称(父商品名称 + 子商品规格名称)(故事10已实现)
|
|
|
10. ✅ 管理员能删除不需要的子商品规格(故事11已实现)
|
|
10. ✅ 管理员能删除不需要的子商品规格(故事11已实现)
|
|
|
11. ✅ 用户在商品详情页能一键完成规格选择和购物车/购买操作(故事12已实现)
|
|
11. ✅ 用户在商品详情页能一键完成规格选择和购物车/购买操作(故事12已实现)
|
|
|
- 12. ⏳ 订单提交快照商品名称包含完整的商品和规格信息(故事14待实现)
|
|
|
|
|
|
|
+ 12. ✅ 订单提交快照商品名称包含完整的商品和规格信息(故事14已实现)
|
|
|
|
|
+ 13. ⏳ 管理员能在商品管理列表方便筛选父子商品,默认视图整洁(故事15待实现)
|
|
|
|
|
|
|
|
## 设计决策
|
|
## 设计决策
|
|
|
|
|
|
|
@@ -493,7 +495,7 @@
|
|
|
- `packages/goods-management-ui-mt/tests/unit/GoodsParentChildPanel.test.tsx` - 添加缓存刷新测试
|
|
- `packages/goods-management-ui-mt/tests/unit/GoodsParentChildPanel.test.tsx` - 添加缓存刷新测试
|
|
|
- `packages/goods-management-ui-mt/tests/unit/ChildGoodsList.test.tsx` - 更新测试验证缓存刷新
|
|
- `packages/goods-management-ui-mt/tests/unit/ChildGoodsList.test.tsx` - 更新测试验证缓存刷新
|
|
|
|
|
|
|
|
-14. **故事14:订单提交快照商品名称优化** ⏳ **待开始**
|
|
|
|
|
|
|
+14. **故事14:订单提交快照商品名称优化** ✅ **已完成**
|
|
|
- **问题背景**:当前提交订单时,订单商品快照中的商品名称(`goodsName`)直接使用商品实体的`name`字段。对于子商品,这会导致快照中存储的是子商品的规格名称,而不是父商品名称。然而购物车中的显示逻辑已经优化:商品名称显示父商品名称,规格名称显示子商品规格名称。订单快照与购物车显示逻辑不一致,导致订单页面显示的商品名称不正确。
|
|
- **问题背景**:当前提交订单时,订单商品快照中的商品名称(`goodsName`)直接使用商品实体的`name`字段。对于子商品,这会导致快照中存储的是子商品的规格名称,而不是父商品名称。然而购物车中的显示逻辑已经优化:商品名称显示父商品名称,规格名称显示子商品规格名称。订单快照与购物车显示逻辑不一致,导致订单页面显示的商品名称不正确。
|
|
|
- **解决方案**:在订单服务的`createOrder`方法中,当写入订单商品快照时,对于子商品(`spuId > 0`),将父商品名称和子商品名称拼接后存储在`goodsName`字段中(例如:"连衣裙 红色 大码")。这样既包含了商品名称又包含了规格信息,后续所有订单页面都不需要修改,直接使用快照数据,也无需修改数据库实体。
|
|
- **解决方案**:在订单服务的`createOrder`方法中,当写入订单商品快照时,对于子商品(`spuId > 0`),将父商品名称和子商品名称拼接后存储在`goodsName`字段中(例如:"连衣裙 红色 大码")。这样既包含了商品名称又包含了规格信息,后续所有订单页面都不需要修改,直接使用快照数据,也无需修改数据库实体。
|
|
|
- **功能需求**:
|
|
- **功能需求**:
|
|
@@ -513,16 +515,43 @@
|
|
|
- 单规格商品的快照商品名称保持不变
|
|
- 单规格商品的快照商品名称保持不变
|
|
|
- 订单详情页面正确显示完整的商品信息
|
|
- 订单详情页面正确显示完整的商品信息
|
|
|
- 现有功能不受影响,无回归问题
|
|
- 现有功能不受影响,无回归问题
|
|
|
|
|
+ - **完成状态**:
|
|
|
|
|
+ - ✅ 功能已实现:修改`createOrder`方法,添加父商品批量查询和商品名称拼接逻辑
|
|
|
|
|
+ - ✅ 技术方案已实现:使用`Set<number>`收集父商品ID,通过`In([...parentGoodsIds])`批量查询避免N+1问题
|
|
|
|
|
+ - ✅ 测试已通过:在集成测试文件中新增两个测试用例,验证子商品和单规格商品的订单快照名称,所有测试通过
|
|
|
|
|
+ - **文件变更**:
|
|
|
|
|
+ - **已修改的文件**:
|
|
|
|
|
+ - `packages/orders-module-mt/src/services/order.mt.service.ts` - 修改`createOrder`方法,添加父商品批量查询和商品名称拼接逻辑
|
|
|
|
|
+ - `packages/orders-module-mt/tests/integration/user-orders-routes.integration.test.ts` - 新增两个集成测试用例,验证子商品和单规格商品的订单快照商品名称
|
|
|
|
|
+ - `docs/stories/006.014.order-submit-goods-name-optimization.story.md` - 更新任务状态和开发记录
|
|
|
|
|
+
|
|
|
|
|
+15. **故事15:商品管理列表父子商品筛选优化** ⏳ **待开始**
|
|
|
|
|
+ - **问题背景**:当前商品管理列表默认显示所有商品(包括父商品和子商品)。由于子商品只有规格信息,没有完整商品信息,导致列表混乱,管理员难以快速找到和管理父商品。
|
|
|
|
|
+ - **解决方案**:在商品管理UI中添加父子商品筛选功能,默认只显示父商品(spuId=0),同时提供筛选器让管理员可以切换查看所有商品。
|
|
|
|
|
+ - **功能需求**:
|
|
|
|
|
+ - 商品列表默认加载时只显示父商品(spuId=0)
|
|
|
|
|
+ - 在商品列表搜索区域添加筛选器选项:"显示所有商品"和"只显示父商品"
|
|
|
|
|
+ - 筛选器默认选中"只显示父商品"
|
|
|
|
|
+ - 切换筛选器时实时刷新商品列表
|
|
|
|
|
+ - **技术实现**:
|
|
|
|
|
+ - 修改`GoodsManagement`组件,扩展`searchParams`状态包含filter字段
|
|
|
|
|
+ - 根据filter值决定是否传递`filters: '{"spuId": 0}'`参数到API调用(filter为'parent'时传递,filter为'all'时不传递)
|
|
|
|
|
+ - 使用RadioGroup实现筛选器UI,提供"显示所有商品"和"只显示父商品"两个选项
|
|
|
|
|
+ - 添加父子关系标识到商品列表,提升可读性
|
|
|
|
|
+ - **验收标准**:
|
|
|
|
|
+ - 管理员进入商品管理列表时默认只看到父商品,列表整洁
|
|
|
|
|
+ - 管理员可以通过筛选器方便切换查看所有商品
|
|
|
|
|
+ - 商品列表显示父子关系信息,便于识别
|
|
|
- **完成状态**:
|
|
- **完成状态**:
|
|
|
- ⏳ 功能待实现
|
|
- ⏳ 功能待实现
|
|
|
- ⏳ 技术方案待设计
|
|
- ⏳ 技术方案待设计
|
|
|
- ⏳ 测试待编写
|
|
- ⏳ 测试待编写
|
|
|
- **文件变更**:
|
|
- **文件变更**:
|
|
|
- **待修改的文件**:
|
|
- **待修改的文件**:
|
|
|
- - `packages/orders-module-mt/src/services/order.mt.service.ts` - 修改`createOrder`方法,为子商品拼接父商品名称和规格名称
|
|
|
|
|
|
|
+ - `packages/goods-management-ui-mt/src/components/GoodsManagement.tsx` - 添加筛选器组件,修改查询逻辑
|
|
|
- **测试文件**:
|
|
- **测试文件**:
|
|
|
- - `packages/orders-module-mt/tests/integration/create-order.integration.test.ts` - 添加订单快照商品名称拼接测试
|
|
|
|
|
- - `packages/orders-module-mt/tests/integration/user-orders-routes.integration.test.ts` - 验证订单详情显示
|
|
|
|
|
|
|
+ - `packages/goods-management-ui-mt/tests/unit/GoodsManagement.test.tsx` - 添加筛选器功能测试
|
|
|
|
|
+ - `packages/goods-management-ui-mt/tests/integration/goods-management.integration.test.tsx` - 添加筛选器集成测试
|
|
|
|
|
|
|
|
## 兼容性要求
|
|
## 兼容性要求
|
|
|
- [x] 现有API保持向后兼容,新增端点不影响现有功能(故事2、4、7已确保)
|
|
- [x] 现有API保持向后兼容,新增端点不影响现有功能(故事2、4、7已确保)
|
|
@@ -537,7 +566,7 @@
|
|
|
- **回滚计划**:移除新增API端点,恢复原有逻辑,保持多租户完整性
|
|
- **回滚计划**:移除新增API端点,恢复原有逻辑,保持多租户完整性
|
|
|
|
|
|
|
|
## 完成定义
|
|
## 完成定义
|
|
|
-- [x] 所有故事完成,验收标准满足(10/14完成,故事11-14待实现)
|
|
|
|
|
|
|
+- [x] 所有故事完成,验收标准满足(12/15完成,故事13-15待实现)
|
|
|
- [x] 现有功能通过测试验证(故事1-9测试通过)
|
|
- [x] 现有功能通过测试验证(故事1-9测试通过)
|
|
|
- [x] API变更经过兼容性测试(故事2-9 API测试通过)
|
|
- [x] API变更经过兼容性测试(故事2-9 API测试通过)
|
|
|
- [x] 多租户隔离机制保持完整(故事1-9已实现)
|
|
- [x] 多租户隔离机制保持完整(故事1-9已实现)
|