|
@@ -1,9 +1,9 @@
|
|
|
# 史诗006:父子商品多规格支持 - 棕地增强
|
|
# 史诗006:父子商品多规格支持 - 棕地增强
|
|
|
|
|
|
|
|
## 史诗状态
|
|
## 史诗状态
|
|
|
-**进度**: 7/7 故事完成 (100%)
|
|
|
|
|
-**最近更新**: 2025-12-13 (故事7:购物车和订单规格支持已完成)
|
|
|
|
|
-**当前状态**: 故事1-7已完成
|
|
|
|
|
|
|
+**进度**: 7/8 故事完成 (87.5%)
|
|
|
|
|
+**最近更新**: 2025-12-13 (故事8:购物车页面规格切换功能已添加)
|
|
|
|
|
+**当前状态**: 故事1-7已完成,故事8待开始
|
|
|
|
|
|
|
|
### 完成概览
|
|
### 完成概览
|
|
|
- ✅ **故事1**: 管理后台父子商品配置功能 (已完成)
|
|
- ✅ **故事1**: 管理后台父子商品配置功能 (已完成)
|
|
@@ -13,6 +13,7 @@
|
|
|
- ✅ **故事5**: 父子商品多规格选择组件开发 (已完成)
|
|
- ✅ **故事5**: 父子商品多规格选择组件开发 (已完成)
|
|
|
- ✅ **故事6**: 商品详情页规格选择集成 (已完成)
|
|
- ✅ **故事6**: 商品详情页规格选择集成 (已完成)
|
|
|
- ✅ **故事7**: 购物车和订单规格支持 (已完成)
|
|
- ✅ **故事7**: 购物车和订单规格支持 (已完成)
|
|
|
|
|
+- ⏳ **故事8**: 购物车页面规格切换功能 (待开始)
|
|
|
|
|
|
|
|
## 史诗目标
|
|
## 史诗目标
|
|
|
新增父子商品多规格支持功能,在商品添加购物车或立即购买时,能同时支持单规格和多规格选择,以子商品作为多规格选项,并支持手动指定子商品。
|
|
新增父子商品多规格支持功能,在商品添加购物车或立即购买时,能同时支持单规格和多规格选择,以子商品作为多规格选项,并支持手动指定子商品。
|
|
@@ -53,6 +54,7 @@
|
|
|
4. ✅ 购物车和订单正确记录规格信息(故事7已完成)
|
|
4. ✅ 购物车和订单正确记录规格信息(故事7已完成)
|
|
|
5. ✅ 商品列表页保持整洁(只显示父商品)(故事4已完成)
|
|
5. ✅ 商品列表页保持整洁(只显示父商品)(故事4已完成)
|
|
|
6. ✅ 多租户隔离机制保持完整(故事1-7已实现)
|
|
6. ✅ 多租户隔离机制保持完整(故事1-7已实现)
|
|
|
|
|
+ 7. ⏳ 用户能在购物车页面切换规格(故事8待实现)
|
|
|
|
|
|
|
|
## 设计决策
|
|
## 设计决策
|
|
|
|
|
|
|
@@ -257,6 +259,39 @@
|
|
|
- **创建的文件**:
|
|
- **创建的文件**:
|
|
|
- `mini/tests/unit/contexts/CartContext.test.tsx` - 购物车规格支持测试文件
|
|
- `mini/tests/unit/contexts/CartContext.test.tsx` - 购物车规格支持测试文件
|
|
|
|
|
|
|
|
|
|
+8. **故事8:购物车页面规格切换功能** ⏳ **待开始**
|
|
|
|
|
+ - **问题背景**:当前购物车页面显示已添加的商品,但如果用户想切换同一父商品下的不同规格(子商品),需要删除现有商品,重新到商品详情页选择规格再添加,用户体验不够流畅。
|
|
|
|
|
+ - **解决方案**:在购物车页面增加规格切换功能,允许用户直接切换同一父商品下的不同子商品规格。
|
|
|
|
|
+ - **功能需求**:
|
|
|
|
|
+ - 购物车项显示规格选择器(类似商品详情页的`GoodsSpecSelector`组件)
|
|
|
|
|
+ - 切换规格时自动更新购物车项的商品ID、名称、价格、库存等信息
|
|
|
|
|
+ - 保持购物车项数量不变,只切换规格
|
|
|
|
|
+ - 规格切换后重新计算小计和总计
|
|
|
|
|
+ - 支持库存验证:切换到的规格必须有足够库存
|
|
|
|
|
+ - **技术实现**:
|
|
|
|
|
+ - 扩展`CartContext`或购物车组件,支持规格切换逻辑
|
|
|
|
|
+ - 在购物车项组件中集成`GoodsSpecSelector`组件
|
|
|
|
|
+ - 复用故事5中已开发的规格选择器组件
|
|
|
|
|
+ - 添加规格切换API调用或本地状态更新
|
|
|
|
|
+ - 确保多租户兼容性:父子商品在同一租户下
|
|
|
|
|
+ - **验收标准**:
|
|
|
|
|
+ - 用户能在购物车页面成功切换商品规格
|
|
|
|
|
+ - 切换后商品名称、价格、库存信息正确更新
|
|
|
|
|
+ - 购物车总价正确重新计算
|
|
|
|
|
+ - 库存不足的规格无法选择或给出提示
|
|
|
|
|
+ - 现有单规格商品购物车体验不受影响
|
|
|
|
|
+ - **完成状态**:
|
|
|
|
|
+ - ⏳ 功能待实现
|
|
|
|
|
+ - ⏳ 技术方案待设计
|
|
|
|
|
+ - ⏳ 测试待编写
|
|
|
|
|
+ - **文件变更**:
|
|
|
|
|
+ - **待修改的文件**:
|
|
|
|
|
+ - `mini/src/contexts/CartContext.tsx` - 扩展规格切换功能
|
|
|
|
|
+ - `mini/src/components/CartItem.tsx`(或类似组件)- 集成规格选择器
|
|
|
|
|
+ - `mini/tests/unit/contexts/CartContext.test.tsx` - 添加规格切换测试
|
|
|
|
|
+ - **可能新建的文件**:
|
|
|
|
|
+ - 购物车规格切换组件(如果需要)
|
|
|
|
|
+
|
|
|
## 兼容性要求
|
|
## 兼容性要求
|
|
|
- [x] 现有API保持向后兼容,新增端点不影响现有功能(故事2、4、7已确保)
|
|
- [x] 现有API保持向后兼容,新增端点不影响现有功能(故事2、4、7已确保)
|
|
|
- [x] 数据库schema向后兼容,利用现有spuId字段(故事1-4已实现)
|
|
- [x] 数据库schema向后兼容,利用现有spuId字段(故事1-4已实现)
|
|
@@ -270,7 +305,7 @@
|
|
|
- **回滚计划**:移除新增API端点,恢复原有逻辑,保持多租户完整性
|
|
- **回滚计划**:移除新增API端点,恢复原有逻辑,保持多租户完整性
|
|
|
|
|
|
|
|
## 完成定义
|
|
## 完成定义
|
|
|
-- [x] 所有故事完成,验收标准满足(7/7完成)
|
|
|
|
|
|
|
+- [x] 所有故事完成,验收标准满足(7/8完成,故事8待实现)
|
|
|
- [x] 现有功能通过测试验证(故事1-7测试通过)
|
|
- [x] 现有功能通过测试验证(故事1-7测试通过)
|
|
|
- [x] API变更经过兼容性测试(故事2-7 API测试通过)
|
|
- [x] API变更经过兼容性测试(故事2-7 API测试通过)
|
|
|
- [x] 多租户隔离机制保持完整(故事1-7已实现)
|
|
- [x] 多租户隔离机制保持完整(故事1-7已实现)
|
|
@@ -302,6 +337,7 @@
|
|
|
- **关键**:`name`字段已经包含完整规格信息,`spec`字段可暂时忽略或设置为相同值
|
|
- **关键**:`name`字段已经包含完整规格信息,`spec`字段可暂时忽略或设置为相同值
|
|
|
- **商品详情页**:父商品信息展示,规格选择后使用选中商品的信息
|
|
- **商品详情页**:父商品信息展示,规格选择后使用选中商品的信息
|
|
|
- **最大优势**:购物车和订单逻辑几乎不需要修改,只需正确选择商品
|
|
- **最大优势**:购物车和订单逻辑几乎不需要修改,只需正确选择商品
|
|
|
|
|
+- **购物车页面规格切换**(故事8):用户可在购物车页面直接切换同一父商品下的不同规格,无需删除重选,提升用户体验
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
**史诗创建时间**:2025-12-06
|
|
**史诗创建时间**:2025-12-06
|