Ready for Review
As a 购物车用户, I want 父子商品在购物车中分开显示商品名称和规格名称, so that 我能清晰了解商品全貌,父子商品信息显示完整准确
mini/src/pages/cart/index.tsx:253)goodsName 计算逻辑:判断是否为子商品(通过 parentGoodsId !== 0 或 spuId > 0)latestGoods?.parent?.name 获取父商品名称latestGoods?.name || '选择规格' 显示子商品规格名称parentGoodsId === 0),保持现有显示方式不变item.spec 字段的依赖(子商品的 name 字段已包含规格信息)mini/src/pages/order-submit/index.tsx:277)CartItem 接口中的 spec 字段 (mini/src/contexts/CartContext.tsx)spec 字段定义(子商品的 name 字段已包含规格信息)switchSpec 函数,移除对 spec 字段的依赖spec 字段的地方并更新spec 字段的逻辑 (mini/src/pages/goods-detail/index.tsx)spec 字段的代码(不再需要,使用子商品 name 字段)spec 字段后的兼容性parent 对象包含完整信息parent 对象,包含父商品基本信息(id、name、price、costPrice、stock、imageFileId、goodsType、spuId)CartContext,CartItem 接口包含 parentGoodsId 字段,购物车页面已集成规格选择器id、name、price、stock)GoodsServiceMt.getById 方法已返回完整的 parent 对象,购物车页面可通过 latestGoods?.parent?.name 获取父商品名称商品实体 (GoodsMt):
spuId 字段:0表示父商品或单规格商品,>0表示子商品spuName 字段:父商品名称(冗余字段,已从API响应中移除,保留在实体中保持向后兼容性)tenantId 字段:租户ID,父子商品必须在同一租户下name 字段:商品名称,对于子商品就是规格名称商品Schema:
PublicGoodsSchema:包含 parent: ParentGoodsSchema.nullable().optional() 和 children: z.array(PublicGoodsSchema).nullable().optional() 字段,无 spuName 字段ParentGoodsSchema:父商品精简Schema,包含 id、name、price、costPrice、stock、imageFileId、goodsType、spuId 字段购物车数据模型:
CartItem 接口:包含 parentGoodsId 字段,spec 字段待移除id、name、price、stock 信息商品详情API (GET /api/v1/goods/:id):
children 数组(子商品列表)parent 对象(父商品基本信息)parent 对象字段:id、name、price、costPrice、stock、imageFileId、goodsType、spuIdspuName 字段,前端使用 parent.name 获取父商品名称购物车数据获取:
goodsMap 存储从商品详情API获取的最新商品信息latestGoods?.parent?.name 获取父商品名称购物车页面 (cart/index.tsx):
goodsName = latestGoods?.name || item.name(第253行)parentGoodsId 字段parent.name,规格名称使用子商品 name订单提交页面 (order-submit/index.tsx):
item.name(第277行)购物车上下文 (CartContext):
CartItem 接口包含 parentGoodsId 字段,spec 字段待移除switchSpec 函数支持规格切换,需要更新以移除 spec 字段依赖商品详情页面 (goods-detail/index.tsx):
spec 字段,需要移除相关代码主要修改文件:
mini/src/pages/cart/index.tsx - 修改商品名称显示逻辑(第253行 goodsName 计算)mini/src/pages/order-submit/index.tsx - 修改商品名称显示逻辑(第277行 item.name 显示)mini/src/pages/goods-detail/index.tsx - 移除添加购物车时设置 spec 字段的逻辑mini/src/contexts/CartContext.tsx - 移除 CartItem 接口中的 spec 字段,更新 switchSpec 函数测试文件:
mini/tests/unit/pages/cart/index.test.tsx - 更新购物车页面测试mini/tests/unit/pages/order-submit/index.test.tsx - 添加订单提交页面测试(如不存在则创建)mini/tests/unit/contexts/CartContext.test.tsx - 更新购物车上下文测试tenantId 过滤,父子商品必须在同一租户下spuName 字段,仅从API响应中移除spuName 字段同步问题,确保父子商品名称显示准确tests 文件夹与源码并列(例如:mini/tests/unit/pages/cart/index.test.tsx)mini/tests/unit/ 目录下对应页面和组件的测试文件mini/tests/integration/ 目录(如适用)| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-14 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
| 2025-12-14 | 1.1 | 实施故事006.010,完成父子商品名称显示优化 | James (Developer) |
此部分由开发代理在实施过程中填写
mini/src/pages/cart/index.tsx - 修改商品名称和规格名称显示逻辑mini/src/pages/order-submit/index.tsx - 修改商品名称和规格名称显示逻辑,添加商品查询mini/src/contexts/CartContext.tsx - 移除CartItem接口中的spec字段,更新switchSpec函数mini/src/pages/goods-detail/index.tsx - 移除添加购物车时设置spec字段的代码mini/tests/unit/pages/cart/index.test.tsx - 更新测试数据,移除spec字段引用此部分由QA代理在审查完成后填写