主题
商品管理 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - 商品管理 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-21 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
一、功能概述
1.1 功能定位
商品管理是 PMForge 商城模块的"地基"——就像线下超市需要先搭好货架、贴好标签、摆好商品,顾客才能找到并购买。本模块承担商品全生命周期管理能力,涵盖分类体系搭建 → 品牌库维护 → 属性/规格定义 → 商品录入(SPU+SKU) → 上下架管理 → 运费模板 → 评价管理完整链路。
通俗理解:如果把商城比作一家超市,商品管理就是"货架+商品标签+价签"的集合。分类是货架的分区(食品区、日用品区),品牌是厂商标签,SPU 是一个商品(如"可口可乐"),SKU 是具体规格(如"330ml 罐装")。
本模块为交易管理、营销管理、统计分析等上层业务提供标准化商品数据支撑,是商城运转的核心基础设施。
1.2 目标用户
| 用户类型 | 核心诉求 | 使用频率 |
|---|---|---|
| 平台运营人员 | 快速搭建分类/品牌/属性体系,为商品上架做好"基础设施"准备 | 初期高频,日常中频 |
| 商品管理员 | 高效录入商品、灵活配置 SKU 组合、批量操作提升效率 | 每日高频 |
| 店铺运营 | 快速上下架、设置推荐位、调整排序,配合营销活动 | 每日高频 |
| 客服/售后人员 | 查看商品信息解答用户疑问、处理评价回复 | 每日中频 |
| C 端消费者 | 快速找到目标商品、清晰了解商品信息、顺畅地下单购买 | 每日高频 |
1.3 业务价值
| 价值维度 | 具体收益 | 衡量指标 |
|---|---|---|
| 降低录入成本 | 属性模板 + SKU 矩阵自动生成,减少重复劳动 | 单品录入时间 < 3 分钟 |
| 提升选购效率 | 清晰的分类导航 + 精准搜索 + 多维筛选 | 用户找到目标商品 < 30 秒 |
| 保障数据一致 | SPU/SKU 标准化管理,避免信息混乱 | 商品信息完整度 > 95% |
| 提升转化率 | 推荐标签 + 评价展示 + 划线价对比 | 商品详情页转化率提升 15%+ |
| 支撑营销玩法 | 商品数据为优惠券、秒杀、拼团等提供基础 | 活动商品配置 < 5 分钟 |
1.4 功能范围
| 功能分类 | 后台管理端 | 前台用户端 |
|---|---|---|
| 商品分类管理 | ✅ | ❌ |
| 商品品牌管理 | ✅ | ❌ |
| 商品属性/规格管理 | ✅ | ❌ |
| 商品列表管理 | ✅ | ❌ |
| 商品详情编辑 | ✅ | ❌ |
| 商品状态管理(上下架/售罄/推荐) | ✅ | ❌ |
| 运费模板管理 | ✅ | ❌ |
| 商品评价管理 | ✅ | ❌ |
| 分类导航 | ❌ | ✅ |
| 商品列表浏览/搜索 | ❌ | ✅ |
| 商品详情/规格选择 | ❌ | ✅ |
| 评价展示 | ❌ | ✅ |
二、用户场景
2.1 用户角色
| 角色 | 描述 | 核心诉求 |
|---|---|---|
| 平台运营(李姐) | 负责商品体系顶层设计 | 快速搭好分类/品牌/属性框架,让商品管理员能顺利录入 |
| 商品管理员(小王) | 负责商品数据录入与维护 | 高效录入商品、灵活配 SKU、批量操作省时间 |
| 店铺运营(小张) | 负责商品日常运营 | 快速上下架、设推荐位、配合活动调价格 |
| 客服(小陈) | 处理用户评价与售后 | 查看评价、回复评价、管控不当内容 |
| C 端消费者(小赵) | 浏览和购买商品 | 快速找到商品、看清信息、顺畅下单 |
2.2 使用场景
场景1:运营李姐搭建商品分类体系
- 背景:商城上线初期,需要搭建"项目管理书籍"品类的全部分类框架
- 操作步骤:
- 李姐登录后台 → 进入"商品管理 > 分类管理"
- 点击"新增分类" → 填写"项目管理书籍" → 保存为一级分类
- 选中"项目管理书籍" → 新增子分类"PMP认证"、"PRINCE2"、"敏捷开发"
- 在"敏捷开发"下再新增"Scrum"、"看板"两个三级分类
- 拖拽调整排序 → 上传分类图标 → 启用所有分类
- 期望:分类层级清晰、支持拖拽排序、图标可灵活配置
- 验收标准:
| AC编号 | 验收条件 |
|---|---|
| AC-01 | 最多创建到三级分类,尝试创建四级时系统提示"最多支持三级分类" |
| AC-02 | 同一父级下创建同名分类时,提示"分类名称已存在" |
| AC-03 | 隐藏分类后,前台分类导航和列表均不展示该分类及其子分类 |
| AC-04 | 拖拽排序后前台展示顺序与后台设置一致 |
场景2:商品管理员小王批量创建多规格商品
- 背景:新到一批 T 恤商品,需要录入"颜色(红/蓝/黑)× 尺码(S/M/L)"共 9 个 SKU
- 操作步骤:
- 小王进入"商品列表" → 点击"新增商品"
- 选择分类"服装>T恤" → 系统自动加载该分类的属性模板
- 填写商品名称、副标题、品牌等基本信息
- 在"销售规格"区域:勾选颜色(红/蓝/黑)和尺码(S/M/L)
- 系统自动生成 3×3=9 个 SKU 矩阵 → 逐一填写价格、库存、SKU 图片
- 上传商品主图 → 编辑商品详情(富文本) → 关联运费模板
- 点击"保存为草稿" → 检查无误后点击"上架"
- 期望:SKU 矩阵自动生成、批量填充高效、支持模板复用
- 验收标准:
| AC编号 | 验收条件 |
|---|---|
| AC-01 | 选择 3 个颜色 + 3 个尺码后,自动生成 9 行 SKU 矩阵 |
| AC-02 | SKU 价格必须 > 0,输入 0 或负数时提示"售价必须大于 0" |
| AC-03 | 库存输入非整数时提示"库存必须为整数" |
| AC-04 | 市场价(划线价)低于售价时提示"市场价不能低于售价" |
| AC-05 | 保存草稿后商品不出现在前台,上架后前台立即可见 |
场景3:店铺运营小张配合促销活动
- 背景:618 大促前,需要将 50 个商品设置"热卖"标签并批量调价
- 操作步骤:
- 小张进入"商品列表" → 按分类筛选出目标商品
- 勾选 50 个商品 → 点击"批量操作 > 设置推荐" → 选择"热卖"
- 再次勾选 → "批量操作 > 修改价格" → 统一打 8 折
- 活动期间监控库存 → 某商品售罄后系统自动标记"售罄"
- 补货后小张将该商品恢复为"上架"状态
- 期望:批量操作高效、状态变更即时生效、售罄自动处理
- 验收标准:
| AC编号 | 验收条件 |
|---|---|
| AC-01 | 批量操作 50 条商品在 5 秒内完成 |
| AC-02 | 所有 SKU 库存为 0 时,商品状态自动变为"售罄" |
| AC-03 | 售罄商品在前台列表不展示,直接访问 URL 显示"商品已下架" |
| AC-04 | 补货后手动上架,前台立即恢复展示和购买 |
场景4:消费者小赵搜索并购买商品
- 背景:小赵想买一本 Scrum 相关的书
- 操作步骤:
- 小赵进入商城 → 在搜索框输入"Scrum"
- 搜索结果列表展示相关商品 → 按"销量"排序
- 点击目标商品 → 进入详情页 → 看到主图、价格、划线价、销量、好评率
- 选择规格"精装版" → 价格和库存实时联动
- 查看评价区域 → 好评率 96%,翻看几条带图评价
- 点击"加入购物车" → 去购物车结算
- 期望:搜索精准、加载快速、规格选择直观、评价真实可信
- 验收标准:
| AC编号 | 验收条件 |
|---|---|
| AC-01 | 搜索"Scrum"在 800ms 内返回结果 |
| AC-02 | 选择规格后价格变化延迟 < 100ms |
| AC-03 | 库存为 0 的规格选项置灰不可选 |
| AC-04 | 未选完所有规格时,"加入购物车"按钮不可点击 |
| AC-05 | 未登录用户点击"加入购物车"跳转登录页 |
场景5:客服小陈处理商品评价
- 背景:有用户给某商品打了 1 星差评并附带了图片
- 操作步骤:
- 小陈收到"新差评待处理"通知 → 进入"评价管理"
- 筛选"差评" → 找到该条评价 → 查看评价内容和图片
- 点击"回复" → 输入回复内容 → 保存
- 如果评价包含不当内容(如广告/辱骂),点击"隐藏"
- 期望:评价实时展示、回复便捷、可对不当评价进行管控
- 验收标准:
| AC编号 | 验收条件 |
|---|---|
| AC-01 | 用户提交评价后,后台评价列表 1 秒内可见 |
| AC-02 | 每条评价只能回复一次,已回复后"回复"按钮置灰 |
| AC-03 | 隐藏评价后前台不展示,但后台仍可查看 |
| AC-04 | 好评率 = 好评数 / 总评价数 × 100%,实时更新 |
三、功能需求
3.1 后台管理端
3.1.1 功能清单
| 功能 | 优先级 | 说明 |
|---|---|---|
| 商品分类管理 | P0 | 三级分类树维护,含增删改查、排序、状态管理 |
| 商品品牌管理 | P0 | 品牌增删改查、排序、状态管理 |
| 商品属性管理 | P0 | 属性/规格/属性模板管理 |
| 商品列表管理 | P0 | 商品分页查询、多维度筛选、搜索 |
| 商品创建/编辑 | P0 | 商品基本信息、SKU、详情、SEO 设置 |
| 商品状态管理 | P0 | 上下架、售罄处理、推荐设置 |
| 批量操作 | P1 | 批量上下架、批量修改分类、批量删除 |
| 商品导出 | P1 | 导出商品数据为 Excel |
| 运费模板管理 | P1 | 运费模板增删改查、配送区域设置 |
| 商品评价管理 | P1 | 评价列表、回复、显示/隐藏、统计 |
3.1.2 商品分类管理
页面描述:

操作流程:
- 点击"新增分类"按钮
- 选择父级分类(新增一级分类时不选择)
- 填写分类名称、图标、排序值
- 设置是否显示
- 保存
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 最多支持三级分类,不允许创建四级分类 | 过深的分类层级会增加用户浏览成本,三级已满足绝大多数电商品类需求 |
| R-02 | 分类名称在同一父级下唯一 | 避免前台导航出现同名分类造成用户困惑 |
| R-03 | 删除分类时,若该分类下存在子分类则不允许删除 | 防止误删导致子分类成为"孤儿"数据 |
| R-04 | 删除分类时,若该分类下关联了商品则不允许删除 | 商品必须有分类归属,强制先迁移商品 |
| R-05 | 隐藏分类后,前台不展示该分类及其子分类,但后台仍可见 | 支持临时隐藏(如季节性分类),不丢失配置数据 |
| R-06 | 分类排序值越小越靠前,默认值为 0 | 提供灵活的排序能力,支持在任意两个分类之间插入 |
| R-07 | 分类图标支持 PNG/JPG 格式,建议尺寸 64×64 | 统一前台分类导航的视觉规范 |
| R-08 | 一级分类支持配置首页展示大图 | 用于首页分类入口的视觉展示 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取分类树 | GET | /admin-api/product/category/list | 获取完整分类树结构 |
| 获取分类详情 | GET | /admin-api/product/category/get | 获取单个分类详情 |
| 创建分类 | POST | /admin-api/product/category/create | 创建新分类 |
| 更新分类 | PUT | /admin-api/product/category/update | 更新分类信息 |
| 删除分类 | DELETE | /admin-api/product/category/delete | 删除分类 |
| 更新分类排序 | PUT | /admin-api/product/category/update-sort | 批量更新排序值 |
| 获取分类下拉列表 | GET | /admin-api/product/category/simple-list | 用于下拉选择(仅返回 id/name/parentId) |
创建分类请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| parentId | Long | 是 | 父分类ID,一级分类传 0 |
| name | String | 是 | 分类名称,最多 20 字符 |
| icon | String | 否 | 分类图标 URL |
| picUrl | String | 否 | 分类大图 URL |
| description | String | 否 | 分类描述,最多 200 字符 |
| sort | Integer | 否 | 排序值,默认 0 |
| status | Integer | 是 | 状态(0-显示 1-隐藏) |
3.1.3 商品品牌管理
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 品牌名称同一租户内唯一 | 避免商品关联品牌时出现歧义 |
| R-02 | 删除品牌时,若该品牌下关联了商品则不允许删除 | 已上架商品的品牌信息不能丢失 |
| R-03 | 隐藏品牌后,前台不展示该品牌,但不影响已关联商品的上架状态 | 品牌和商品的上架状态独立管理 |
| R-04 | Logo 支持 PNG/JPG 格式,建议尺寸 200×100 | 统一前台品牌展示的视觉规范 |
| R-05 | 排序值越小越靠前 | 常用品牌可排在前面 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取品牌分页 | GET | /admin-api/product/brand/page | 获取品牌分页列表 |
| 获取品牌详情 | GET | /admin-api/product/brand/get | 获取单个品牌详情 |
| 创建品牌 | POST | /admin-api/product/brand/create | 创建新品牌 |
| 更新品牌 | PUT | /admin-api/product/brand/update | 更新品牌信息 |
| 删除品牌 | DELETE | /admin-api/product/brand/delete | 删除品牌 |
| 获取品牌下拉列表 | GET | /admin-api/product/brand/simple-list | 用于下拉选择 |
3.1.4 商品属性管理
页面描述:

关键概念:属性分为"普通属性"和"销售属性"两类——
- 普通属性(也叫商品参数):描述商品特性,如作者、ISBN、出版社。用户看到商品详情时,这些信息以"规格参数表"形式展示。
- 销售属性(也叫规格):用于区分不同 SKU 的维度,如颜色、尺码。用户选择销售属性后,系统定位到具体的 SKU(价格、库存随之变化)。
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 属性分为普通属性和销售属性两种类型 | 两种属性用途不同:普通属性展示参数,销售属性生成 SKU 矩阵 |
| R-02 | 普通属性关联分类后,该分类下的商品需填写对应属性值 | 确保同类商品信息完整度一致 |
| R-03 | 销售属性用于生成 SKU 组合矩阵 | 如"颜色3个×尺码4个=12个SKU",系统自动生成 |
| R-04 | 同一分类下属性名称唯一 | 避免商品编辑时出现重复属性 |
| R-05 | 删除属性时,若已关联商品则不允许删除 | 已录入的商品属性数据不能丢失 |
| R-06 | 属性模板关联分类,定义该分类下商品的默认属性组合 | 同类商品属性大体相同,模板减少重复配置 |
| R-07 | 创建商品时选择属性模板可自动填充属性 | 新品录入效率提升 50%+ |
| R-08 | 销售属性最多支持 3 个维度组合 | 超过 3 维的 SKU 组合过于复杂,用户体验差 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取属性分页 | GET | /admin-api/product/property/page | 获取属性分页列表 |
| 获取属性详情 | GET | /admin-api/product/property/get | 获取属性详情(含属性值列表) |
| 创建属性 | POST | /admin-api/product/property/create | 创建新属性 |
| 更新属性 | PUT | /admin-api/product/property/update | 更新属性信息 |
| 删除属性 | DELETE | /admin-api/product/property/delete | 删除属性 |
| 创建属性值 | POST | /admin-api/product/property-value/create | 创建属性值 |
| 更新属性值 | PUT | /admin-api/product/property-value/update | 更新属性值 |
| 删除属性值 | DELETE | /admin-api/product/property-value/delete | 删除属性值 |
| 获取分类下的属性列表 | GET | /admin-api/product/property/list-by-category | 根据分类 ID 获取属性列表 |
| 获取属性模板分页 | GET | /admin-api/product/attr-template/page | 获取属性模板分页列表 |
| 创建属性模板 | POST | /admin-api/product/attr-template/create | 创建属性模板 |
| 更新属性模板 | PUT | /admin-api/product/attr-template/update | 更新属性模板 |
| 删除属性模板 | DELETE | /admin-api/product/attr-template/delete | 删除属性模板 |
3.1.5 商品列表管理
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 默认按创建时间倒序排列 | 最新录入的商品优先展示,方便管理员确认 |
| R-02 | 商品售价取所有 SKU 中最低价格展示 | 列表展示"起步价"吸引用户点击 |
| R-03 | 库存取所有 SKU 库存之和展示 | 反映商品总可售数量 |
| R-04 | 销量取所有 SKU 销量之和展示 | 反映商品总销售表现 |
| R-05 | 逻辑删除,商品删除后不物理删除 | 保留历史数据,关联的订单/评价数据不断裂 |
| R-06 | 已参与进行中活动的商品不允许直接删除 | 防止活动页面出现"商品不存在"的异常 |
| R-07 | 批量操作单次最多 100 条 | 防止大批量操作导致数据库压力过大 |
| R-08 | 导出单次最多 10000 条,超过则异步导出 | 大数据量导出改为异步任务,不阻塞用户操作 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取商品分页 | GET | /admin-api/product/spu/page | 获取商品分页列表 |
| 获取商品详情 | GET | /admin-api/product/spu/get-detail | 获取商品完整详情 |
| 创建商品 | POST | /admin-api/product/spu/create | 创建新商品 |
| 更新商品 | PUT | /admin-api/product/spu/update | 更新商品信息 |
| 删除商品 | DELETE | /admin-api/product/spu/delete | 删除商品 |
| 商品上架/下架 | PUT | /admin-api/product/spu/update-status | 更新商品状态 |
| 批量上架/下架 | PUT | /admin-api/product/spu/batch-update-status | 批量更新状态 |
| 批量删除 | DELETE | /admin-api/product/spu/batch-delete | 批量删除 |
| 批量修改分类 | PUT | /admin-api/product/spu/batch-update-category | 批量修改分类 |
| 导出商品 | GET | /admin-api/product/spu/export | 导出商品 Excel |
| 获取商品统计 | GET | /admin-api/product/spu/get-count | 获取各状态商品数量 |
3.1.6 商品详情编辑
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 商品名称必填,最多 120 字符 | 过长的标题影响前台展示和搜索体验 |
| R-02 | 分类必选,支持选择到最末级分类 | 商品必须有明确的分类归属 |
| R-03 | 商品主图至少 1 张,最多 10 张,第 1 张为默认主图 | 主图是用户第一印象,至少要有 1 张 |
| R-04 | 商品视频选填,最多 1 个,MP4 格式,最大 50MB | 视频能提升转化率,但需控制存储成本 |
| R-05 | SKU 至少 1 个;未配置销售规格时自动生成默认 SKU | 确保每个商品都有可购买的规格 |
| R-06 | SKU 价格必须 > 0,最多 2 位小数 | 价格精度控制,避免计算误差 |
| R-07 | SKU 库存必须 >= 0,整数 | 库存不能为负数是基本业务约束 |
| R-08 | 市场价(划线价)必须 >= 售价 | 划线价高于售价才有"优惠感"的意义 |
| R-09 | 商品详情支持富文本编辑,可插入图片/表格/链接 | 满足多样化的商品展示需求 |
| R-10 | 分类属性中必填属性必须填写 | 保证同类商品信息完整度一致 |
| R-11 | 商品编码(SPU 级别)全局唯一 | 商品编码是系统间交互的唯一标识 |
| R-12 | 支持保存为草稿状态 | 商品录入可能需要分步完成,草稿避免数据丢失 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 创建商品 | POST | /admin-api/product/spu/create | 创建商品(含 SKU) |
| 更新商品 | PUT | /admin-api/product/spu/update | 更新商品(含 SKU) |
| 获取商品详情 | GET | /admin-api/product/spu/get-detail | 获取商品完整详情 |
创建/更新商品请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | 商品名称 |
| subtitle | String | 否 | 副标题 |
| categoryId | Long | 是 | 分类 ID |
| brandId | Long | 否 | 品牌 ID |
| keyword | String | 否 | 关键词,多个用逗号分隔 |
| picUrls | String[] | 是 | 商品图片 URL 列表 |
| videoUrl | String | 否 | 商品视频 URL |
| description | String | 否 | 商品详情(HTML) |
| sort | Integer | 否 | 排序值,默认 0 |
| status | Integer | 否 | 状态(0-草稿 1-上架 2-下架 3-售罄) |
| recommendTypes | Integer[] | 否 | 推荐类型列表 |
| deliveryTemplateId | Long | 否 | 运费模板 ID |
| seoTitle | String | 否 | SEO 标题 |
| seoDescription | String | 否 | SEO 描述 |
| seoKeywords | String | 否 | SEO 关键词 |
| attrValues | List | 否 | 商品属性值列表 |
| skus | List | 是 | SKU 列表 |
SKU 请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | SKU 名称(规格组合描述,如"红色/XL") |
| picUrl | String | 否 | SKU 图片 URL |
| price | Decimal | 是 | 售价 |
| marketPrice | Decimal | 否 | 市场价(划线价) |
| costPrice | Decimal | 否 | 成本价 |
| stock | Integer | 是 | 库存 |
| barCode | String | 否 | 条形码 |
| attrValues | List | 是 | 规格属性值列表(属性 ID + 属性值 ID) |
3.1.7 商品状态管理
状态流转图:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 商品状态:草稿(0)、上架(1)、下架(2)、售罄(3) | 四种状态覆盖商品从创建到售完的完整生命周期 |
| R-02 | 上架时校验:至少一个 SKU 库存 > 0,至少一张主图 | 无库存或无图片的商品上架无意义 |
| R-03 | 下架即时生效,前台立即不可见/不可购买 | 问题商品需要紧急下架能力 |
| R-04 | 所有 SKU 库存为 0 时自动标记为售罄 | 自动化管理,避免"幽灵商品"(可看不可买) |
| R-05 | 售罄商品补货后可手动恢复为上架 | 补货是常见操作,需要便捷的恢复路径 |
| R-06 | 推荐类型:精品(1)、新品(2)、热卖(3)、推荐(4) | 多维度推荐标签,支持营销场景 |
| R-07 | 推荐类型为多选,一个商品可同时拥有多个标签 | 一个商品可以同时是"新品"和"热卖" |
| R-08 | 仅上架状态的商品支持设置推荐 | 下架/售罄商品不应出现在推荐位 |
3.1.8 运费模板管理
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 计费方式:按件(1)、按重量(2)、按体积(3) | 不同商品类型适用不同计费方式 |
| R-02 | 每个租户至少需要一个默认运费模板 | 新商品必须能关联运费模板 |
| R-03 | 删除运费模板时,若有关联商品则不允许删除 | 已关联商品的运费计算不能断裂 |
| R-04 | 配送区域支持按省/市/区选择,支持多选 | 不同地区运费差异是常见业务需求 |
| R-05 | 运费设置:首件/首重/首体积费用 + 续件/续重/续体积费用 | 阶梯计费是物流行业标准模式 |
| R-06 | 包邮条件支持:满额包邮、满件包邮 | 包邮是常见促销手段,提升客单价 |
| R-07 | 未配置的区域默认使用"默认运费"规则 | 避免新增区域时出现"无法计算运费"的问题 |
| R-08 | 支持指定区域不配送 | 部分商品无法配送到偏远地区 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取运费模板分页 | GET | /admin-api/trade/delivery/express-template/page | 获取分页列表 |
| 获取运费模板详情 | GET | /admin-api/trade/delivery/express-template/get | 获取详情 |
| 创建运费模板 | POST | /admin-api/trade/delivery/express-template/create | 创建模板 |
| 更新运费模板 | PUT | /admin-api/trade/delivery/express-template/update | 更新模板 |
| 删除运费模板 | DELETE | /admin-api/trade/delivery/express-template/delete | 删除模板 |
| 获取模板下拉列表 | GET | /admin-api/trade/delivery/express-template/simple-list | 用于下拉选择 |
3.1.9 商品评价管理
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 1-2 星为差评,3 星为中评,4-5 星为好评 | 行业标准评分分级方式 |
| R-02 | 评价支持图片,最多 9 张 | 带图评价更有说服力,提升购买转化率 |
| R-03 | 商家可对每条评价回复一次 | 一次回复避免"刷回复"嫌疑 |
| R-04 | 隐藏评价后前台不展示,但后台仍可见 | 不当评价需要管控,但保留审计记录 |
| R-05 | 评价统计实时更新 | 好评率是用户购买决策的重要参考 |
| R-06 | 匿名评价时前台展示"匿名用户" | 保护用户隐私 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取评价分页 | GET | /admin-api/product/comment/page | 获取评价分页列表 |
| 获取评价详情 | GET | /admin-api/product/comment/get | 获取评价详情 |
| 回复评价 | PUT | /admin-api/product/comment/reply | 商家回复评价 |
| 隐藏/显示评价 | PUT | /admin-api/product/comment/update-status | 更新展示状态 |
| 获取评价统计 | GET | /admin-api/product/comment/statistics | 获取统计数据 |
3.2 前台用户端
3.2.1 功能清单
| 功能 | 优先级 | 说明 |
|---|---|---|
| 分类导航 | P0 | 展示分类树,支持展开/收起 |
| 商品列表 | P0 | 分类/搜索进入列表,支持筛选/排序 |
| 商品搜索 | P0 | 关键词搜索,支持搜索建议 |
| 商品详情 | P0 | 展示商品信息、规格选择、评价 |
| 规格选择 | P0 | 多规格联动选择、价格联动 |
| 评价展示 | P1 | 商品评价列表、好评率、图片评价 |
3.2.2 分类导航
业务规则:
| 规则编号 | 规则描述 |
|---|---|
| R-01 | 仅展示状态为"显示"的分类 |
| R-02 | 按排序值升序排列 |
| R-03 | 分类下无商品时仍展示分类入口(点击进入为空列表) |
| R-04 | 一级分类支持展示配置的大图 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取前台分类树 | GET | /app-api/product/category/list | 获取前台可见分类树 |
3.2.3 商品列表与搜索
业务规则:
| 规则编号 | 规则描述 |
|---|---|
| R-01 | 仅展示上架状态的商品 |
| R-02 | 展示价格为该商品最低 SKU 价格 |
| R-03 | 默认按综合排序(考虑推荐权重 + 销量 + 时间) |
| R-04 | 分页加载,每页 20 条 |
| R-05 | 推荐标签商品展示对应角标(精品/新品/热卖) |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取商品分页 | GET | /app-api/product/spu/page | 获取前台商品分页列表 |
| 搜索商品 | GET | /app-api/product/spu/search | 关键词搜索商品 |
| 获取搜索建议 | GET | /app-api/product/spu/get-suggest | 获取搜索关键词建议 |
3.2.4 商品详情
业务规则:
| 规则编号 | 规则描述 |
|---|---|
| R-01 | 选择规格后价格和库存实时联动变化 |
| R-02 | 库存为 0 的规格选项置灰不可选 |
| R-03 | 库存不足时展示"缺货"提示 |
| R-04 | 加入购物车需先选择完整规格(所有销售属性均已选择) |
| R-05 | 未登录用户点击加购/购买跳转登录页 |
| R-06 | 商品详情图片采用懒加载 |
| R-07 | 市场价低于或等于售价时不展示市场价 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取商品详情 | GET | /app-api/product/spu/get-detail | 获取商品完整详情 |
3.2.5 评价展示
业务规则:
| 规则编号 | 规则描述 |
|---|---|
| R-01 | 仅展示状态为"显示"的评价 |
| R-02 | 匿名评价展示为"匿名用户" |
| R-03 | 评价按时间倒序排列 |
| R-04 | 分页加载,每页 10 条 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取评价分页 | GET | /app-api/product/comment/page | 获取前台评价分页 |
| 获取评价统计 | GET | /app-api/product/comment/statistics | 获取商品评价统计 |
四、非功能需求
4.1 性能要求
| 指标 | 目标值 | 说明 |
|---|---|---|
| 商品列表查询 | < 500ms | 含分页、筛选条件 |
| 商品详情查询 | < 300ms | 含 SKU 列表、属性值 |
| 分类树查询 | < 200ms | 全量分类树 |
| 商品搜索 | < 800ms | 含关键词分析 |
| 搜索建议 | < 200ms | 用户输入即响应 |
| 商品创建/更新 | < 1000ms | 含 SKU 矩阵保存 |
| 批量操作(100 条) | < 5s | 批量上下架/删除 |
| 导出 10000 条 | < 60s | 异步导出 |
| SKU 规格联动 | < 100ms | 前端计算,无需后端请求 |
| 前台商品列表页 | < 2s | 含图片懒加载 |
| 前台商品详情页 | < 3s | 含图片懒加载 |
4.2 安全要求
| 要求 | 实现方式 |
|---|---|
| 权限控制 | 后台所有操作校验 RBAC 操作权限 |
| 数据隔离 | 多租户通过 tenant_id 字段严格隔离 |
| 图片安全 | 上传时校验文件格式和大小,防止恶意文件上传 |
| XSS 防护 | 商品详情 HTML 内容经 XSS 过滤后存储 |
| SQL 注入防护 | 搜索接口使用参数化查询 |
| 价格安全 | 价格和库存操作进行合理性校验(> 0、非负整数等) |
| 操作审计 | 上下架、删除、价格变更等关键操作记录操作日志 |
| 成本价保护 | 成本价仅对特定角色可见,前台接口不返回 |
4.3 兼容性要求
| 端 | 要求 |
|---|---|
| PC 后台 | Chrome 80+、Firefox 75+、Safari 13+、Edge 80+ |
| PC 前台 | Chrome 80+、Firefox 75+、Safari 13+、Edge 80+ |
| 移动端前台 | iOS Safari 12+、Android Chrome 80+、微信内置浏览器 |
| 屏幕适配 | 后台 ≥ 1280px;前台 375px-1920px 响应式 |
| 图片格式 | JPG、PNG、WebP;视频 MP4 |
五、数据设计
5.1 核心数据表
5.1.1 商品分类表(product_category)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 分类 ID |
| parent_id | BIGINT | NOT NULL, DEFAULT 0 | 父分类 ID,一级为 0 |
| name | VARCHAR(100) | NOT NULL | 分类名称 |
| icon | VARCHAR(512) | 分类图标 URL | |
| pic_url | VARCHAR(512) | 分类大图 URL | |
| description | VARCHAR(500) | 分类描述 | |
| sort | INT | DEFAULT 0 | 排序值 |
| status | TINYINT | NOT NULL, DEFAULT 0 | 0-显示 1-隐藏 |
| level | TINYINT | NOT NULL | 层级(1/2/3) |
| creator | VARCHAR(64) | 创建者 | |
| create_time | DATETIME | NOT NULL | 创建时间 |
| updater | VARCHAR(64) | 更新者 | |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT(1) | NOT NULL, DEFAULT 0 | 删除标记 |
| tenant_id | BIGINT | NOT NULL | 租户 ID |
索引设计:idx_parent_id (parent_id)、uk_name_parent (parent_id, name, tenant_id) UNIQUE
5.1.2 商品品牌表(product_brand)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 品牌 ID |
| name | VARCHAR(100) | NOT NULL | 品牌名称 |
| pic_url | VARCHAR(512) | 品牌 Logo URL | |
| description | VARCHAR(1000) | 品牌描述 | |
| sort | INT | DEFAULT 0 | 排序值 |
| status | TINYINT | NOT NULL, DEFAULT 0 | 0-启用 1-禁用 |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
索引设计:uk_name_tenant (name, tenant_id) UNIQUE
5.1.3 商品 SPU 表(product_spu)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 商品 ID |
| name | VARCHAR(200) | NOT NULL | 商品名称 |
| subtitle | VARCHAR(300) | 副标题 | |
| category_id | BIGINT | NOT NULL | 分类 ID |
| brand_id | BIGINT | 品牌 ID | |
| keyword | VARCHAR(500) | 关键词 | |
| description | TEXT | 商品详情(HTML) | |
| pic_urls | VARCHAR(2000) | 商品图片 URL 列表(JSON 数组) | |
| video_url | VARCHAR(512) | 商品视频 URL | |
| status | TINYINT | NOT NULL, DEFAULT 0 | 0-草稿 1-上架 2-下架 3-售罄 |
| sort | INT | DEFAULT 0 | 排序值 |
| recommend_types | VARCHAR(100) | 推荐类型(JSON 数组) | |
| price | DECIMAL(10,2) | 展示价格(最低 SKU 价格) | |
| market_price | DECIMAL(10,2) | 市场价(划线价) | |
| stock | INT | DEFAULT 0 | 总库存 |
| sales_count | INT | DEFAULT 0 | 总销量 |
| delivery_template_id | BIGINT | 运费模板 ID | |
| seo_title | VARCHAR(200) | SEO 标题 | |
| seo_description | VARCHAR(500) | SEO 描述 | |
| seo_keywords | VARCHAR(300) | SEO 关键词 | |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
索引设计:idx_category_id (category_id)、idx_brand_id (brand_id)、idx_status (status, tenant_id)、idx_sort (sort, status)
5.1.4 商品 SKU 表(product_sku)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | SKU ID |
| spu_id | BIGINT | NOT NULL | 商品 SPU ID |
| name | VARCHAR(200) | NOT NULL | SKU 名称(规格组合描述) |
| pic_url | VARCHAR(512) | SKU 图片 URL | |
| price | DECIMAL(10,2) | NOT NULL | 售价 |
| market_price | DECIMAL(10,2) | 市场价(划线价) | |
| cost_price | DECIMAL(10,2) | 成本价 | |
| stock | INT | NOT NULL, DEFAULT 0 | 库存 |
| sales_count | INT | DEFAULT 0 | SKU 销量 |
| bar_code | VARCHAR(100) | 条形码 | |
| attr_values | VARCHAR(1000) | 规格属性值(JSON 数组) | |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
索引设计:idx_spu_id (spu_id)、uk_bar_code (bar_code, tenant_id) UNIQUE
5.1.5 商品属性表(product_property)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 属性 ID |
| name | VARCHAR(100) | NOT NULL | 属性名称 |
| category_id | BIGINT | NOT NULL | 关联分类 ID |
| type | TINYINT | NOT NULL | 1-普通属性 2-销售属性 |
| sort | INT | DEFAULT 0 | 排序值 |
| status | TINYINT | NOT NULL, DEFAULT 0 | 0-启用 1-禁用 |
| required | BIT(1) | DEFAULT 0 | 是否必填 |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
5.1.6 商品属性值表(product_property_value)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 属性值 ID |
| property_id | BIGINT | NOT NULL | 属性 ID |
| name | VARCHAR(200) | NOT NULL | 属性值内容 |
| sort | INT | DEFAULT 0 | 排序值 |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
5.1.7 属性模板表(product_attr_template)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 模板 ID |
| name | VARCHAR(100) | NOT NULL | 模板名称 |
| category_id | BIGINT | NOT NULL | 关联分类 ID |
| property_ids | VARCHAR(2000) | 关联属性 ID 列表(JSON 数组) | |
| status | TINYINT | NOT NULL, DEFAULT 0 | 0-启用 1-禁用 |
| sort | INT | DEFAULT 0 | 排序值 |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
5.1.8 商品评价表(product_comment)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 评价 ID |
| user_id | BIGINT | NOT NULL | 评价用户 ID |
| spu_id | BIGINT | NOT NULL | 商品 SPU ID |
| sku_id | BIGINT | NOT NULL | SKU ID |
| order_item_id | BIGINT | NOT NULL | 订单项 ID |
| description_scores | TINYINT | NOT NULL | 描述评分(1-5) |
| benefit_scores | TINYINT | NOT NULL | 性价比评分(1-5) |
| content | VARCHAR(1000) | 评价内容 | |
| pic_urls | VARCHAR(2000) | 评价图片 URL 列表(JSON 数组) | |
| seller_reply | VARCHAR(1000) | 商家回复 | |
| reply_time | DATETIME | 回复时间 | |
| status | TINYINT | NOT NULL, DEFAULT 0 | 0-显示 1-隐藏 |
| anonymous | BIT(1) | DEFAULT 0 | 是否匿名 |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
索引设计:idx_spu_id (spu_id, status)、idx_user_id (user_id)
5.1.9 运费模板表(trade_delivery_express_template)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 模板 ID |
| name | VARCHAR(100) | NOT NULL | 模板名称 |
| charge_mode | TINYINT | NOT NULL | 1-按件 2-按重量 3-按体积 |
| is_default | BIT(1) | DEFAULT 0 | 是否默认模板 |
| sort | INT | DEFAULT 0 | 排序值 |
| status | TINYINT | NOT NULL, DEFAULT 0 | 0-启用 1-禁用 |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
5.1.10 运费模板区域计费表(trade_delivery_express_template_charge)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 记录 ID |
| template_id | BIGINT | NOT NULL | 运费模板 ID |
| area_ids | VARCHAR(2000) | NOT NULL | 区域 ID 列表(JSON 数组) |
| is_free | BIT(1) | DEFAULT 0 | 是否包邮 |
| start_count | DECIMAL(10,2) | NOT NULL | 首件/首重/首体积 |
| start_price | DECIMAL(10,2) | NOT NULL | 首费 |
| extra_count | DECIMAL(10,2) | NOT NULL | 续件/续重/续体积 |
| extra_price | DECIMAL(10,2) | NOT NULL | 续费 |
| free_count | INT | 满件包邮数量 | |
| free_price | DECIMAL(10,2) | 满额包邮金额 | |
| creator / create_time / updater / update_time / deleted / tenant_id | 通用字段 |
5.2 数据字典
| 字典类型 | 字典值 | 说明 |
|---|---|---|
| product_spu_status | 0-草稿 1-上架 2-下架 3-售罄 | 商品状态 |
| product_category_status | 0-显示 1-隐藏 | 分类状态 |
| product_brand_status | 0-启用 1-禁用 | 品牌状态 |
| product_property_type | 1-普通属性 2-销售属性 | 属性类型 |
| product_recommend_type | 1-精品 2-新品 3-热卖 4-推荐 | 推荐类型 |
| product_delivery_charge_mode | 1-按件 2-按重量 3-按体积 | 运费计费方式 |
| product_comment_status | 0-显示 1-隐藏 | 评价状态 |
六、跨模块联动
6.1 联动关系总览
| 联动模块 | 联动方式 | 数据流向 | 触发时机 |
|---|---|---|---|
| 交易管理(06-02) | 商品数据被订单引用 | 商品 → 订单 | 用户下单时,快照商品信息(名称、价格、图片)到订单项 |
| 营销管理(06-03) | 活动关联商品 | 商品 ↔ 活动 | 创建秒杀/拼团/砍价活动时选择参与商品 |
| 统计分析(06-04) | 商品数据作为统计维度 | 商品 → 统计 | 商品维度销售统计、品类分析 |
| 支付模块(04) | 间接关联 | - | 订单支付时涉及商品价格计算 |
| 会员模块(05) | 会员价 | 会员 → 商品 | 不同会员等级可享不同会员价 |
| 库存管理(08-03 WMS) | 库存同步 | WMS → 商品 | 仓库出入库时同步更新 SKU 库存 |
| 系统管理(01) | 操作日志 | 商品 → 日志 | 商品上下架、删除等操作记录审计日志 |
6.2 关键联动流程
6.2.1 商品 → 订单(下单快照)

设计要点:订单中保存商品快照而非实时引用,确保即使后续商品修改名称/价格,历史订单数据不受影响。
6.2.2 商品 ↔ 营销活动

6.2.3 商品 → 统计

6.3 数据一致性要求
| 场景 | 一致性策略 |
|---|---|
| 下单扣库存 | 乐观锁(version 字段),失败重试 |
| 活动锁定库存 | 独立活动库存字段,与日常库存隔离 |
| 商品删除 | 逻辑删除,订单中快照数据不受影响 |
| 价格变更 | 仅影响变更后新创建的订单,历史订单价格不变 |
| 库存归零 | 自动触发售罄状态变更,发送通知给运营 |
七、附录
7.1 名词解释
| 术语 | 通俗解释 | 类比 |
|---|---|---|
| SPU (Standard Product Unit) | 标准化产品单元,代表"一个商品" | 比如"iPhone 16"就是一个 SPU |
| SKU (Stock Keeping Unit) | 库存量单位,代表商品的一个具体规格 | "iPhone 16 黑色 256GB"就是一个 SKU |
| 商品属性 | 描述商品特性的参数 | 就像人的"姓名、年龄、性别" |
| 销售属性(规格) | 区分不同 SKU 的维度 | 买衣服时选的"颜色+尺码"就是销售属性 |
| 属性模板 | 预设的属性组合,创建商品时一键填充 | 就像"简历模板",填好基本信息就行 |
| 运费模板 | 定义运费计算规则的配置 | 就像快递公司的"收费标准表" |
| 划线价 | 商品市场价,与售价对比展示 | 商场里的"原价¥999 → 现价¥599" |
| 推荐类型 | 商品的营销标签 | 超市货架上的"店长推荐""新品上市"标签 |
| 逻辑删除 | 不真正删除数据,只标记为"已删除" | 就像把文件放进"回收站"而非永久删除 |
| 租户隔离 | SaaS 模式下不同客户的数据完全隔离 | 同一栋办公楼里不同公司的门禁卡互不相通 |
| 包邮条件 | 满足特定条件后免除运费 | "满 99 元包邮""满 3 件包邮" |
| 商品状态 | 控制商品在前台的可见性和可购买性 | 草稿=未发布,上架=在售,下架=停售,售罄=卖完了 |
| 分类树 | 层级结构的分类体系 | 超市的"食品区→饮料区→碳酸饮料" |
| 富文本 | 支持加粗、图片、表格等格式的文本 | 不只是纯文字,可以有颜色、排版、插图 |
| 乐观锁 | 通过版本号防止并发冲突的机制 | 两个人同时编辑同一文档,后保存的会提示"已被他人修改" |
7.2 权限标识
| 权限标识 | 说明 | 所属菜单 |
|---|---|---|
| product:category:list | 查看商品分类 | 商品管理 > 分类管理 |
| product:category:create | 创建商品分类 | 商品管理 > 分类管理 |
| product:category:update | 编辑商品分类 | 商品管理 > 分类管理 |
| product:category:delete | 删除商品分类 | 商品管理 > 分类管理 |
| product:brand:list | 查看商品品牌 | 商品管理 > 品牌管理 |
| product:brand:create | 创建商品品牌 | 商品管理 > 品牌管理 |
| product:brand:update | 编辑商品品牌 | 商品管理 > 品牌管理 |
| product:brand:delete | 删除商品品牌 | 商品管理 > 品牌管理 |
| product:property:list | 查看商品属性 | 商品管理 > 属性管理 |
| product:property:create | 创建商品属性 | 商品管理 > 属性管理 |
| product:property:update | 编辑商品属性 | 商品管理 > 属性管理 |
| product:property:delete | 删除商品属性 | 商品管理 > 属性管理 |
| product:attr-template:list | 查看属性模板 | 商品管理 > 属性模板 |
| product:attr-template:create | 创建属性模板 | 商品管理 > 属性模板 |
| product:spu:list | 查看商品列表 | 商品管理 > 商品列表 |
| product:spu:create | 创建商品 | 商品管理 > 商品列表 |
| product:spu:update | 编辑商品 | 商品管理 > 商品列表 |
| product:spu:delete | 删除商品 | 商品管理 > 商品列表 |
| product:spu:update-status | 上下架商品 | 商品管理 > 商品列表 |
| product:spu:batch-operate | 批量操作商品 | 商品管理 > 商品列表 |
| product:spu:export | 导出商品 | 商品管理 > 商品列表 |
| product:comment:list | 查看商品评价 | 商品管理 > 评价管理 |
| product:comment:reply | 回复评价 | 商品管理 > 评价管理 |
| product:comment:update-status | 显示/隐藏评价 | 商品管理 > 评价管理 |
| trade:delivery:express-template:* | 运费模板 CRUD | 交易管理 > 运费模板 |
7.3 接口汇总
后台管理端(共 40+ 接口):
| 模块 | 核心接口 | 数量 |
|---|---|---|
| 分类管理 | 树查询/CRUD/排序/下拉 | 7 |
| 品牌管理 | 分页/CRUD/下拉 | 6 |
| 属性管理 | 分页/CRUD/属性值/按分类查 | 10 |
| 属性模板 | 分页/CRUD | 4 |
| 商品 SPU | 分页/详情/创建/更新/删除/状态/批量/导出 | 12 |
| 评价管理 | 分页/详情/回复/状态/统计 | 5 |
| 运费模板 | 分页/详情/CRUD/下拉 | 6 |
前台用户端(共 7 接口):
| 模块 | 接口 |
|---|---|
| 分类 | 获取前台分类树 |
| 商品 | 分页/搜索/搜索建议/详情 |
| 评价 | 分页/统计 |
7.4 错误码定义
| 错误码 | 说明 |
|---|---|
| PRODUCT_CATEGORY_NOT_EXISTS | 商品分类不存在 |
| PRODUCT_CATEGORY_EXISTS | 商品分类名称已存在 |
| PRODUCT_CATEGORY_HAS_CHILDREN | 分类下存在子分类,无法删除 |
| PRODUCT_CATEGORY_HAS_SPU | 分类下存在商品,无法删除 |
| PRODUCT_BRAND_NOT_EXISTS | 商品品牌不存在 |
| PRODUCT_BRAND_NAME_EXISTS | 品牌名称已存在 |
| PRODUCT_BRAND_HAS_SPU | 品牌下存在商品,无法删除 |
| PRODUCT_SPU_NOT_EXISTS | 商品不存在 |
| PRODUCT_SPU_STATUS_ERROR | 商品状态不允许此操作 |
| PRODUCT_SKU_STOCK_NOT_ENOUGH | SKU 库存不足 |
| PRODUCT_SKU_PRICE_INVALID | SKU 价格不合法 |
| PRODUCT_PROPERTY_HAS_SPU | 属性已关联商品,无法删除 |
| PRODUCT_COMMENT_REPLY_EXISTS | 评价已回复,不可重复回复 |
| PRODUCT_DELIVERY_TEMPLATE_HAS_SPU | 运费模板已关联商品,无法删除 |
7.5 变更记录
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| v1.0 | 2026-09-24 | 初始版本 | PM Team |
| v2.0 | 2026-09-19 | 增强业务场景与验收标准、增加 ASCII 页面原型、增加跨模块联动章节、增加名词解释与错误码 | PM Team |
本文档为商品管理模块 PRD v2.0,如有问题请联系产品负责人。