# 购物车 — 功能需求说明（C 端）

> 本文档在《购物车功能需求-草稿》基础上整理，并关联 **《关联需求分析.md》** v1.6、平台侧 **《商品管理功能需求》** v1.3.3、《商品审核功能需求》** v1.0、《商品分类功能需求》** v1.5、《店铺管理功能需求》** v1.3.6、《会员管理功能需求》** v1.1、《订单管理功能需求》** v1.0.1 及 C 端兄弟模块 **《商品详情内页功能需求》** v1.0、《我的服务功能需求》** v1.1、《商城首页功能需求》** v1.0.2、《搜索页功能需求》** v1.0、《店铺主页功能需求》** v1.0 做边界与流程对齐。  
> 范围：**C 端（消费者 APP / 用户商城）· 购物车** 的已加购商品列表、勾选、改数量、移除、失效提醒与 **同店合并结算** 入口；**不涉及** 确认订单、支付、履约及数据库/接口设计。  
> **说明：** 本模块 **维护当前会员购物车行** 并 **读取** 商品/店铺实时档案；**不维护** 商品发品、订单履约。  
> **v1.0：** 首版定稿；对齐草稿 §1～§8；补全按店分组、加购来源、四条件校验时机、与确认订单边界。

---

## 1. 模块定位

### 1.1 业务目标

为 **已登录的 C 端买家会员** 提供 **待购商品暂存与合并下单前整理** 能力，使其能够：

- 查看已加入购物车的商品，按 **店铺** 分组浏览；
- **勾选** 待结算商品、**增减数量**、**移出** 购物车；
- **批量清理** 缺货、已下架等 **失效** 商品；
- 对 **同一店铺** 内已选商品 **合并结算**，进入 **确认订单**（另册）；
- 接收 **库存/下架** 等失效提醒，并可 **进入商品详情** 查看。

**不包含（本期或与它模块分工）：**

| 能力 | 说明 |
|------|------|
| **商品详情展示、规格选择、首次加购** | 见 **《商品详情内页功能需求》** §7 |
| **确认订单、地址选择、运费、支付** | 见 **确认订单**、**《订单管理功能需求》** |
| **订单列表、售后、评价** | 见 **我的订单** 等模块 |
| **全站搜索、分类浏览、店铺主页** | 兄弟模块 **只读跳转** 来源，**不在此** 执行 |
| **平台/商家维护商品、店态** | 见 **商品管理**、**店铺管理** |
| **跨店铺合并为一笔订单结算** | 草稿 **明确不支持**（§5） |

### 1.2 在业务链中的位置

```text
【浏览层】首页 / 分类 / 搜索 / 店铺主页 ──► 商品详情
                              ↓
【加购】详情「加入购物车」（须登录 + 四条件，见 §10）
                              ↓
【本模块】购物车 · 勾选 · 改数量 · 同店结算
                              ↓
【交易层】确认订单 → 支付 → 订单履约（平台订单管理）

【用户链】须 **已登录且启用** 会员；访客 **不可** 使用本模块（加购在详情引导登录）
```

| 关联模块 | 关系 | 边界说明 |
|----------|------|----------|
| **商品详情** v1.0 | **上游写入** | 加购写入本模块；细则 **去重、累加** 见 §6.3 |
| **确认订单**（待建设） | **下游** | 本模块 **仅跳转** 并携带 **单店已选行** |
| **订单管理** v1.0.1 | **下游** | 下单后生成订单；购物车行 **移除或扣减** 策略在确认订单/下单成功时处理（另册） |
| **我的服务** v1.1 | **间接** | 结算页 **选用收货地址**；地址维护 **不在** 本模块 |
| **商品管理/审核** | **商品态/库存/价格** | 列表 **读实时**；非出售中/零库存 **标失效** |
| **店铺管理** v1.3.6 | **店态** | 停业店商品 **可展示**；**结算拦截** |
| **商品分类** v1.5 | **可购第 3 条** | 分类隐藏 → 结算时 **不可购** |
| **会员管理** v1.1 | **用户链** | 禁用会员 **不可** 使用购物车 |
| **关联需求分析** v1.6 §11 | **四条件** | 加购与 **去结算** 均须校验（§10） |

### 1.3 与《关联需求分析》的对应

| 关联分析要点 | 本模块 |
|--------------|--------|
| C 端浏览与下单分离 | 购物车 **可含** 停业/缺货/下架行（展示层）；**结算** 按四条件拦截 |
| 店铺停业 S-P3 | 行 **可保留展示**；**去结算** 提示停业 |
| 商品状态变更 | 商家/平台下架 **不自动删** 购物车行；本模块 **标失效** 并可清理 |
| 库存 | 加购/改数量/结算前 **校验实时库存** |
| 不支持跨店合单 | 草稿 §5；**仅同店** 合并结算 |
| 订单 O-P4 | 支付成功扣库存；购物车 **不预扣** 库存 |

### 1.4 使用端与角色

| 端 | 角色 | 能力 |
|----|------|------|
| **C 端** | **已登录且启用的会员** | 本模块全部能力 |
| **C 端** | 访客 | **不可进入**；详情加购 **引导登录** |
| **C 端** | **已禁用会员** | **不可** 使用（无法登录） |
| 平台/商家端 | 管理员/商家 | **不操作** 本页面；在各自模块维护商品/店铺 |

---

## 2. 关联需求分析

### 2.1 与 C 端《商品详情内页功能需求》

| 项 | 定稿 |
|----|------|
| 加购入口 | **仅** 详情页「加入购物车」写入（本期）；列表 **无** 快捷加购 |
| 加购前置 | 须 **登录**；多规格须 **选完规格**；通过 **四条件** 方可写入（GD3、§11） |
| 加购后 | 成功提示；**默认停留详情**；用户 **可** 进入购物车 Tab/页 |
| 购物车行字段 | **商品、所选规格、数量** 与详情选择 **一致** |
| 同商品同规格 | **合并为一行**，数量 **累加**（去重规则见 §6.3） |
| 失效进详情 | 缺货/下架提醒 **可点击** 进入 **该商品详情**（草稿 §7、§8） |

### 2.2 与平台《商品管理》/《商品审核》

| 项 | 定稿 |
|----|------|
| 可展示行 | 购物车 **可保留** 历史加购行；**实时** 读商品状态与库存 |
| **出售中** | 有库存且满足四条件 → **可勾选结算** |
| **已下架** | 标 **「已下架」**；**不可** 勾选结算；可 **批量清理**（草稿 §4、§8） |
| 非出售中（待审/未上架/审核失败） | 视同 **不可购**；标 **失效** 或 **已下架** 类文案；**不可** 结算 |
| 单价 | 展示 **当前售价**；进入/刷新列表时 **读最新**；若变价 **以最新为准**（可选提示「价格已更新」） |
| 规格 | 展示 **加购时规格文案**；多规格商品 **一行对应一组规格** |

### 2.3 与平台《店铺管理功能需求》

| 项 | 定稿 |
|----|------|
| 分组 | 列表按 **店铺名称** 分组（草稿隐含） |
| **开业** | 该店已选商品 **可** 尝试结算（仍须商品侧四条件） |
| **停业** | 该店商品 **仍展示**；**去结算** 拦截，提示 **店铺已停业** |
| **已删店** | 该店行 **标失效** 或 **整组不可结算**；建议 **可批量清理** |
| 店名/头像 | **实时** 读档；刷新列表更新 |

### 2.4 与平台《商品分类功能需求》

| 项 | 定稿 |
|----|------|
| 可购第 3 条 | 商品所属 **平台分类**（一、二级）**均显示** 方可结算 |
| 分类被隐藏后 | 购物车行 **仍可展示**；**去结算** 提示 **商品不可购买** |

### 2.5 与 C 端《我的服务功能需求》

| 项 | 定稿 |
|----|------|
| 登录态 | 与 **我的服务** 一致：须 **有效 Token** |
| 收货地址 | **不在** 购物车维护；**确认订单** 页选用 **地址簿**（MS-A 系列） |

### 2.6 与《订单管理功能需求》

| 项 | 定稿 |
|----|------|
| 结算产物 | 本模块 **去结算** → **确认订单** → 提交生成 **待支付** 订单 |
| 订单范围 | **单店铺** 一次结算对应 **一笔** 订单（草稿 §5；与订单「单店」一致） |
| 支付超时/关单 | **不影响** 购物车其它未结算行 |
| 平台履约 | **不在** 本模块 |

---

## 3. 页面与入口

### 3.1 页面清单

| 页面 | 说明 |
|------|------|
| **A. 购物车列表** | 按店铺分组的商品行 + 勾选 + 数量 + 底栏结算 |

**本期仅一页**；**无** 购物车二级页、**无** 店内搜索。

### 3.2 入口

| 入口 | 行为 |
|------|------|
| **底部 Tab / 导航「购物车」** | 进入 **A. 列表**（须登录） |
| **商品详情加购成功** | 可选跳转购物车（**非强制**） |
| **其它链入** | 带登录态进入 **A. 列表** |

**未登录：** 进入购物车 → **引导登录** → 成功后 **可回跳** 购物车（以前台为准）。

---

## 4. 访问控制

| 编号 | 规则 |
|------|------|
| **CT0** | 使用本模块 **须** **已登录** 且会员 **启用** |
| **CT1** | 购物车数据 **仅归属当前会员**；**不可** 查看他人购物车 |
| **CT2** | 访客 **不可** 加载列表（详情加购时已引导登录） |

---

## 5. 购物车列表展示

> 对齐草稿 §1。

### 5.1 分组与排序

| 项 | 定稿 |
|----|------|
| 分组 | **按店铺** 分组；组头展示 **店铺名称**（可 **点击进店** 至 **店铺主页**，可选） |
| 组内排序 | **最近加购/最近更新在前** 或 **加购时间倒序**（以前台定稿为准） |
| 店铺间排序 | **最近有更新的店铺组在前**（建议） |

### 5.2 商品行展示字段

| 字段 | 说明 |
|------|------|
| 店铺名称 | 组头展示；行内 **可不重复** |
| 商品主图 | 读商品 **当前主图** |
| 商品名称 | 读 **当前名称** |
| 商品规格 | **加购时所选规格** 文案（统一规格可为「默认」） |
| 数量 | 当前购物车数量 |
| 单价 | **当前售价**（见 §2.2） |
| 小计 | **单价 × 数量**（可选行内展示） |
| 失效标签 | 见 §8（缺货 / 已下架 / 店铺停业等 **可选组合展示**） |

### 5.3 空态

| 情形 | 行为 |
|------|------|
| 购物车无任何行 | **「购物车是空的」**（或等价）；**可** 引导 **首页/分类** |
| 某店组内全失效且已清理 | 该 **店组消失** |

---

## 6. 勾选、数量与加购合并

### 6.1 商品勾选

> 对齐草稿 §2。

| 项 | 定稿 |
|----|------|
| 行勾选 | 每条 **可独立勾选/取消** |
| 店铺全选 | **可选** 支持 **店铺组内全选/取消** |
| 全局全选 | **可选**；若实现，**不改变** 「仅同店结算」规则 |
| 失效行 | **不可勾选** 或勾选后 **去结算时拦截**（建议：**不可勾选** 并置灰） |
| 默认勾选 | 新加购行 **默认勾选** 或 **默认不勾选**（以前台定稿为准） |

### 6.2 增减数量

> 对齐草稿 §3。

```text
用户点击「+ / -」或输入数量
    → 校验：数量 ≥ 1
    → 校验：数量 ≤ 当前规格 **实时库存**
        → 超过 → 提示「库存不足」，**不** 超过库存上限
    → 数量为 0 或点删除 → 见 §7（移出行）
    → 成功 → 更新行数量与小计
```

| 编号 | 规则 |
|------|------|
| **CT-Q1** | 数量 **最小为 1**（在本模块改数量时） |
| **CT-Q2** | 数量 **不得超过** 当前规格 **库存** |
| **CT-Q3** | 改数量时 **重新校验** 商品出售中、店态等；不满足则 **标失效** |

### 6.3 同商品同规格合并（加购去重）

| 项 | 定稿 |
|----|------|
| 维度 | **同一会员 + 同一商品 + 同一规格** → **一行** |
| 再次加购 | 数量 **累加**；不超过 **库存上限** |
| 超过库存 | 加购或累加 **阻断**，提示 **库存不足** |
| 不同规格 | **不同行** |

---

## 7. 管理购物车（移出与批量清理）

> 对齐草稿 §4。

### 7.1 移出购物车

| 操作 | 行为 |
|------|------|
| 单条删除 | 左滑/删除按钮 → **移出** 该行 |
| 勾选后删除 | 勾选 **一个或多个** 行 → **删除选中** → 移出 |
| 确认 | **建议** 二次确认（以前台为准） |

### 7.2 批量清理失效商品

| 操作 | 行为 |
|------|------|
| 入口 | **「清理失效商品」** 或等价按钮 |
| 范围 | **缺货**、**已下架**、**非出售中** 等 **不可购** 行（§8） |
| 交互 | 执行前 **可** 展示将清理数量；确认后 **批量移出** |
| 部分勾选 | **支持** 仅清理失效行；**不影响** 有效行勾选态（草稿「取消个别勾选」） |

---

## 8. 库存校验与失效提醒

> 对齐草稿 §6～§8。

### 8.1 校验时机

| 时机 | 行为 |
|------|------|
| **进入/刷新** 购物车 | **自动** 校验各行 **实时库存** 与商品/店态 |
| **改数量** | 校验库存上限 |
| **点击去结算** | **再次校验** 已选行 **四条件**（§10） |

### 8.2 缺货商品

| 项 | 定稿 |
|----|------|
| 判定 | 商品 **出售中** 但 **当前规格库存 = 0** |
| 展示 | 行标 **「缺货」** 或等价标签 |
| 勾选 | **不可勾选**（建议） |
| 点击 | **可进入商品详情**（草稿 §7） |
| 清理 | 纳入 **批量清理失效** |

### 8.3 下架/不可售商品

| 项 | 定稿 |
|----|------|
| 判定 | 商品 **非出售中**（含 **已下架**） |
| 展示 | 行标 **「已下架」** 或 **「商品不可购买」** |
| 勾选 | **不可勾选** |
| 点击 | **可进入商品详情**（草稿 §8） |
| 清理 | 纳入 **批量清理失效** |

### 8.4 其它失效（补充）

| 情形 | 列表行为 | 结算 |
|------|----------|------|
| 店铺 **停业** | **可展示**；可选标「店铺休息中」 | **拦截**，提示停业 |
| 店铺 **已删** | 标失效或整组不可用 | **不可** |
| 分类 **不可见** | **可展示** | **拦截**，提示不可购 |
| 商品 **已删** | 行 **移除** 或标失效待清理 | **不可** |

---

## 9. 合并结算（同店）

> 对齐草稿 §5。

### 9.1 规则

| 编号 | 规则 |
|------|------|
| **CT-S1** | **不支持** 跨店铺商品 **合并为一笔** 订单结算 |
| **CT-S2** | **仅支持** **同一店铺** 内 **已勾选** 商品 **合并结算** |
| **CT-S3** | 底栏 **合计** 与 **去结算** 针对 **当前操作店铺** 或 **当前勾选且同店** 的商品（以前台 UX 为准，**不得** 跨店合单） |
| **CT-S4** | 若勾选 spanning 多店 → **去结算** **阻断**，提示 **请选择同一店铺的商品结算** 或 **按店分别结算** |

### 9.2 流程

```text
用户勾选某店内一个或多个 **有效** 商品
    → 点击「去结算」
        → 校验 §10 四条件（逐行或整批）
            → 不通过 → 提示具体原因（下架/停业/库存/分类）
            → 通过 → 进入 **确认订单页**
                    携带：shopId、商品行（规格、数量、价格快照策略见确认订单专册）
```

### 9.3 与确认订单边界

| 项 | 定稿 |
|----|------|
| 本模块 | 选店、选品、数量、**跳转** |
| 确认订单 | **收货地址、运费、应付总额、提交订单、支付** |
| 返回 | 确认订单 **返回** 购物车 **保留** 未提交行（除非下单成功清除，见订单专册） |

---

## 10. 与下单、会员的协作（四条件）

须 **同时满足** **《关联需求分析》§11** 四条件方可 **写入购物车（加购时）** 与 **去结算**：

| # | 条件 | 加购时 | 去结算时 | 不满足提示方向 |
|---|------|:------:|:--------:|------------------|
| 1 | 商品 = **出售中** | ✓ | ✓ | 商品已下架 / 不可购买 |
| 2 | 店铺 = **开业** | ✓ | ✓ | 店铺已停业 |
| 3 | **平台分类**（一、二级）**均显示** | ✓ | ✓ | 商品不可购买 |
| 4 | **所选规格** 库存 **> 0** | ✓ | ✓ | 库存不足 / 缺货 |

| 场景 | 行为 |
|------|------|
| 加购后商品下架 | 行 **保留**；标失效；**不可结算** |
| 加购后库存变 0 | 标 **缺货**；**不可结算** |
| 加购后店停业 | 行 **保留**；**去结算** 拦截 |
| 会员禁用 | **不可** 进购物车 |
| 购物车 **不扣库存** | 仅 **校验**；**支付成功** 后扣减（订单 O-P4） |

---

## 11. 页面流程总览

```text
【入口】Tab 购物车 / 详情加购后跳转（须登录）
    → A. 购物车列表（按店分组）
        ├── 勾选 / 改数量
        ├── 删除 / 批量清理失效
        ├── 缺货·下架行 → 点击进商品详情
        └── 同店已选 → 去结算 → 确认订单（另册）

【并行写入】
    商品详情 · 加入购物车 → 合并行 / 累加数量 → 本列表可见
```

---

## 12. 异常与加载

> 草稿 §9「code、msg、data」**不在本文定义**。

| 情形 | 行为 |
|------|------|
| 列表加载失败 | **错误提示** + **重试** |
| 改数量/删除失败 | Toast 原因；**不改变** 或 **回滚** 至原值 |
| 去结算校验失败 | 明确提示；**不跳转** 确认订单 |
| Token 失效 | **引导重新登录** |

---

## 13. 业务规则汇总

| 编号 | 规则 |
|------|------|
| **CT0** | 须 **登录且启用** 会员 |
| **CT1** | 仅 **当前会员** 数据 |
| **CT2** | 列表按 **店铺** 分组 |
| **CT3** | 行展示：主图、名称、规格、数量、单价 |
| **CT4** | 支持 **勾选** |
| **CT5** | 支持 **增减数量**（≥1，≤库存） |
| **CT6** | 支持 **移出** 与 **批量清理失效** |
| **CT7** | **不支持跨店** 合并结算 |
| **CT8** | **自动/去结算前** 校验库存与可购态 |
| **CT9** | 缺货/下架 **提醒** 且 **可进详情** |
| **CT10** | 加购 **仅在详情**；同规格 **合并累加** |

---

## 14. 非本期范围

| 项 | 说明 |
|----|------|
| 列表/搜索页 **快捷加购** | 进 **详情** 再加购 |
| 跨店 **一键结算多单** | 草稿 **不支持** |
| 购物车 **优惠券、满减、凑单** | 草稿 **未要求** |
| 购物车 **商品推荐、常买** | 草稿 **未要求** |
| 失效商品 **自动删除**（无用户操作） | 默认 **标失效**；**批量清理** 由用户触发 |
| 商家端查看会员购物车 | **无** |
| 购物车 **服务端搜索/分类 Tab** | **无** |
| 确认订单、支付 **完整交互** | **另册** |

---

## 15. 草稿对照与修订说明

| 草稿条目 | 本文档处理 |
|----------|------------|
| §1 商品列表字段 | §5.2 |
| §2 勾选 | §6.1 |
| §3 增减数量 | §6.2 |
| §4 管理：移出、批量清理、取消勾选 | §7 |
| §5 不支持跨店合并结算 | §9 |
| §6 库存校验 | §8.1 |
| §7 缺货提醒进详情 | §8.2 |
| §8 下架提醒进详情 | §8.3 |
| §9 异常 code/msg/data | §12 **不纳入** |
| §10 技术栈 | **不纳入** |
| 未写：登录、按店分组、加购来源、四条件、确认订单边界 | §1、§2、§4、§9、§10 补充 |

---

## 16. 修订记录

| 版本 | 说明 |
|------|------|
| **v1.0** | 首版定稿：列表、勾选、改量、移出、失效提醒、同店结算；关联详情/订单/店铺/商品/会员与关联需求分析 |

---

*文档版本：v1.0（定稿）· 关联《购物车功能需求-草稿.md》、《关联需求分析.md》v1.6、《商品详情内页功能需求.md》v1.0、《店铺管理功能需求.md》v1.3.6、《订单管理功能需求.md》v1.0.1、《会员管理功能需求.md》v1.1 · 草稿保持不变。*
