Ready for Review
As a 商品购买用户 I want 在商品详情页选择子商品作为规格选项 so that 我能够购买特定规格(如颜色、尺寸、配置等)的商品
GoodsSpecSelector组件,移除模拟数据mini/ - 小程序项目 (Taro + React)mini/src/components/goods-spec-selector/index.tsx - 现有规格选择器组件mini/src/pages/goods-detail/index.tsx - 商品详情页面(当前组件被注释)mini/src/api.ts - API客户端配置mini/tests/ - 小程序测试文件id: number - 商品IDspuId: number - 主商品ID,0表示父商品或单规格商品,>0表示子商品spuName: string | null - 主商品名称tenantId: number - 租户ID,用于多租户数据隔离state: number - 状态(1可用,2不可用)name: string - 商品名称(子商品名称作为规格名称)price: number - 商品价格stock: number - 商品库存GET /api/v1/goods/{id}/children - 已实现,返回指定父商品的子商品列表packages/goods-module-mt/src/routes/public-goods-children.mt.tsGoodsSpecSelector当前状态 [Source: mini/src/components/goods-spec-selector/index.tsx]:
GoodsDetailPage当前状态 [Source: mini/src/pages/goods-detail/index.tsx:11]:
// import { GoodsSpecSelector } from '@/components/goods-spec-selector')clientManager.get().api.$method调用APImini/src/components/goods-spec-selector/index.tsxmini/src/components/goods-spec-selector/index.css(如果存在)mini/src/pages/goods-detail/index.tsxmini/src/api.tsmini/tests/components/goods-spec-selector.test.tsx(需要创建)mini/tests/pages/goods-detail.test.tsx(需要更新)tests文件夹与源码并列(例如:mini/tests/components/)mini/tests/components/goods-spec-selector.test.tsxmini/tests/pages/goods-detail.test.tsxvi.mock() mock API客户端render函数渲染组件fireEvent模拟用户交互| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-12 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)
分析现有GoodsSpecSelector组件实现 (2025-12-12)
mini/src/components/goods-spec-selector/index.tsxSpecOption 包含 id、name、price、stock、image 字段修改GoodsSpecSelector组件并集成到商品详情页 (2025-12-12)
goodsClient[':id'].children.$get()获取子商品列表添加单元测试 (2025-12-12)
mini/tests/components/goods-spec-selector.test.tsx单元测试文件修复多租户商品包路由暴露问题 (2025-12-12)
publicGoodsChildrenRoutesMt子商品路由未正确聚合到主API路由public-goods-aggregated.mt.ts聚合路由,合并基础CRUD路由和子商品列表路由routes/index.mt.ts重新导出聚合路由,确保publicGoodsRoutesMt包含子路由publicGoodsRoutesMt(已包含子路由)GET /api/v1/goods/{id}/children移除类型断言并添加类型安全 (2025-12-12)
(goodsClient[':id'] as any).children.$get(),使用类型安全调用data.data.map((goods: any)中的any类型,添加GoodsFromApi接口确保类型安全修改的文件:
mini/src/components/goods-spec-selector/index.tsx - 主要组件修改,添加API调用和状态管理mini/src/pages/goods-detail/index.tsx - 商品详情页集成,添加规格选择状态和UI依赖的文件:
packages/goods-module-mt/src/routes/public-goods-children.mt.ts - 子商品列表API路由(已存在)mini/src/api.ts - API客户端配置(已存在)新增的测试文件:
mini/tests/components/goods-spec-selector.test.tsx - 组件单元测试文件故事文件:
docs/stories/006.005.parent-child-goods-multi-spec-selector.story.md - 当前故事文件新增的路由聚合文件:
packages/goods-module-mt/src/routes/public-goods-aggregated.mt.ts - 新增的公开商品路由聚合文件packages/goods-module-mt/src/routes/index.mt.ts - 更新路由导出,重新导出聚合路由修改的服务器路由文件:
packages/server/src/index.ts - 更新商品API路由,同时挂载子商品路由packages/goods-module-mt/src/index.mt.ts - 更新路由导入,使用索引导出