史诗006:父子商品多规格支持 - 棕地增强
史诗状态
进度: 1/6 故事完成 (17%)
最近更新: 2025-12-09 (更新故事2设计,明确API聚合方案)
当前状态: 故事1已完成,故事2-6待实现
完成概览
- ✅ 故事1: 管理后台父子商品配置功能 (已完成)
- ⏳ 故事2: 父子商品管理UI体验优化 (待实现)
- ⏳ 故事3: 商品API父子商品支持优化 (待实现)
- ⏳ 故事4: 父子商品多规格选择组件开发 (待实现)
- ⏳ 故事5: 商品详情页规格选择集成 (待实现)
- ⏳ 故事6: 购物车和订单规格支持 (待实现)
史诗目标
新增父子商品多规格支持功能,在商品添加购物车或立即购买时,能同时支持单规格和多规格选择,以子商品作为多规格选项,并支持手动指定子商品。
史诗描述
现有系统上下文
- 数据库支持:商品表已有父子商品关系字段(spuId/spuName)
- Schema支持:所有商品Schema(Admin/User/Public)都包含spuId/spuName字段
- UI缺失:商品管理UI表单缺少spu相关字段和父子商品配置功能
- 前端组件:已有
GoodsSpecSelector组件但被注释,购物车支持spec字段但无规格选择逻辑
- 技术栈:TypeORM + Hono + React + Taro小程序 + 多租户架构
- API路由:
- 小程序:使用
publicGoodsRoutesMt(公共商品路由)
- 管理后台:使用
adminGoodsRoutes(管理员路由)
- 多租户特性:商品实体有tenantId字段,API路由支持租户隔离和数据权限
增强详情
- 管理后台:新增父子商品配置界面,支持手动关联已有商品和批量创建子商品
- 前端:父子商品的多规格选择界面和逻辑,支持多租户环境
- API调整:优化商品列表和详情API对父子商品的支持
- 集成点:多租户商品模块、商品管理UI、商品详情页、购物车系统、订单提交流程
- 成功标准:
- 管理员能配置父子商品关系
- 用户能在商品详情页选择子商品作为规格
- 购物车和订单正确记录规格信息
- 商品列表页保持整洁(只显示父商品)
- 多租户隔离机制保持完整
设计决策
1. 规格概念澄清
- 规格 = 子商品的名称:子商品的
name字段作为规格名称
- 规格选择 = 选择子商品:选择规格时实际选择对应的子商品
- 购物车逻辑简化:
- 如果选择规格:使用子商品的
id、name、price、stock
- 如果不选择规格:使用父商品的
id、name、price、stock
- 关键洞察:
name字段已经包含完整的规格信息,spec字段可能暂时不需要
- 核心优势:购物车和订单系统几乎不需要修改
2. 商品列表展示策略
- 商品列表页(首页、分类页、搜索页):只显示父商品(spuId=0)
- 商品详情页:显示父商品详情 + 规格选择器(子商品作为选项)
- 单规格商品:保持现有行为不变(spuId=0且无子商品)
3. API设计
- 公共商品列表API(
/api/v1/goods):默认只返回父商品(spuId=0)
- 商品详情API(
/api/v1/goods/:id):
- 父商品:返回商品详情 + 子商品列表(作为规格选项)
- 子商品:返回子商品详情 + 父商品基本信息
- 新增API:
GET /api/v1/goods/:id/children 获取指定父商品的子商品列表
- 管理员商品API:显示完整的父子商品关系树
4. 父子商品配置方式
- 手动关联:在创建/编辑父商品时,选择已有商品作为子商品
- 批量创建:创建父商品时,同时创建多个子商品规格(如不同颜色、尺寸等)
故事
故事1:管理后台父子商品配置功能 ✅ 已完成 (2025-12-07)
- 在商品管理UI中添加spuId/spuName字段表单控件
- 新增子商品关联选择器,支持选择已有商品作为子商品
- 新增批量子商品创建功能,支持统一创建多个子商品规格
- 父子商品关系展示和编辑界面
- 验收标准:管理员能成功配置父子商品关系
- 完成状态:
- ✅ 功能实现完成
- ✅ 单元测试通过(31个测试用例)
- ✅ 集成测试通过(后端6个 + 前端5个)
- ✅ 代码已提交并推送到远程仓库
故事2:父子商品管理UI体验优化 ⏳ 待实现
- 在商品创建和编辑页面都添加统一的父子商品管理面板
- 面板智能支持创建模式和编辑模式的不同行为
- 创建模式:支持设为父商品、选择父商品、批量创建子商品规格模板
- 编辑模式:支持父子关系树展示、子商品管理、关系解除
- 将批量创建子商品功能整合到面板中,支持创建时批量创建
- 面板与表单数据实时同步,确保提交数据一致性
- API实现:在现有
adminGoodsRoutesMt中聚合父子商品管理API(获取子商品列表、设为父商品、解除关系、批量创建)
- 验收标准:管理员能在创建和编辑时一次性完成商品和规格配置,提高工作效率;前端代码无需修改即可使用新API
故事3:商品API父子商品支持优化 ⏳ 待实现
- 公共商品列表API:默认只返回父商品(spuId=0),支持过滤参数显示子商品
- 商品详情API:根据商品类型返回相应数据(父商品+子商品列表或子商品+父商品信息)
- 管理员商品API:增强父子商品关系展示和查询优化
- API分工:管理员父子商品管理API已在故事2实现,本故事专注于公共API和查询优化
- 验收标准:API变更保持向后兼容,公共商品列表正确过滤父子商品关系
故事4:父子商品多规格选择组件开发 ⏳ 待实现
- 激活并增强现有的
GoodsSpecSelector组件
- 支持父子商品关系,以子商品名称作为规格选项显示
- 规格选择实际选择对应的子商品ID
- 适配多租户商品数据查询
- 验收标准:规格选择器能正确显示子商品名称作为规格,并能选择对应的子商品
故事5:商品详情页规格选择集成 ⏳ 待实现
- 在商品详情页集成规格选择组件
- "立即购买"和"加入购物车"支持规格选择
- 规格选择后使用子商品的价格和库存信息
- 多租户环境下的商品规格数据获取
- 验收标准:用户能在商品详情页成功选择规格,系统使用正确的子商品价格和库存
故事6:购物车和订单规格支持 ⏳ 待实现
- 购物车最小化修改:适配
addToCart逻辑,支持添加子商品(使用子商品信息填充CartItem)
- 规格信息显示:购物车和订单中通过
name字段显示完整规格信息
- 订单系统兼容:订单创建使用商品ID(可能是子商品ID),保持现有逻辑
- 多租户兼容性:确保父子商品在同一租户下
- 验收标准:购物车能正确添加子商品,订单显示完整商品名称,现有单规格商品不受影响
兼容性要求
风险缓解
- 主要风险:API变更影响现有客户端,规格选择逻辑影响购物车功能
- 缓解措施:逐步集成,保持向后兼容,现有无规格商品继续正常工作
- 回滚计划:移除新增API端点,恢复原有逻辑,保持多租户完整性
完成定义
技术要点
数据库层面
- 利用现有
spuId字段:0表示父商品或单规格商品,>0表示子商品
spuName字段存储父商品名称,便于展示
多租户支持
- 所有操作必须包含tenantId过滤
- 父子商品必须在同一租户下
- 数据权限机制保持完整
性能考虑
- 商品列表查询添加
spuId=0条件
- 子商品列表查询使用分页
- 规格选择器数据懒加载
前端适配
- 规格选择器:显示子商品名称作为规格选项,选择时使用子商品信息
- 购物车逻辑极致简化:
- 如果选择规格:
CartItem使用子商品的id、name、price、stock
- 如果不选择规格:
CartItem使用父商品的id、name、price、stock
- 关键:
name字段已经包含完整规格信息,spec字段可暂时忽略或设置为相同值
- 商品详情页:父商品信息展示,规格选择后使用选中商品的信息
- 最大优势:购物车和订单逻辑几乎不需要修改,只需正确选择商品
史诗创建时间:2025-12-06
创建人:John (Product Manager)
技术栈:TypeORM + Hono + React + Taro小程序 + 多租户架构
优先级:高(支持电商核心功能)