# 活动卡片列表最小产品方案
> 文档版本：v1.2
> 最后更新：2026-04-03 19:26:23

## 1. 当前定位

当前阶段“活动卡片列表页”第一刀已落地，当前文档转为：

1. 第一刀范围说明
2. 当前最小字段口径
3. 当前联调回归重点

也就是说，这份文档当前是：

**第一刀已完成后的最小产品方案文档**

---

## 2. 当前阶段边界

### 2.1 当前已完成

- 独立活动列表页：`/pages/events/events`
- 最小筛选：`全部 / 体验`
- 最小卡片展示
- 列表跳转活动详情页
- 首页补“活动列表”独立入口

### 2.2 当前不做

- 不重构首页现有卡片入口
- 不设计复杂运营样式
- 不展开 `presentation schema`
- 不展开 `content bundle` 明细
- 不直接下发报名、签到、排行榜等复杂前台流程

---

## 3. 最小字段表

以下字段按“当前第一刀已使用的最小口径”划分。

### 3.1 必需字段

- `eventId`
  - 活动唯一标识
- `title`
  - 活动主标题
- `subtitle`
  - 副标题或活动短说明
- `summary`
  - 卡片摘要
- `status`
  - 活动状态
- `timeWindow`
  - 活动时间窗口摘要
- `ctaText`
  - 主动作文案

### 3.2 推荐字段

- `coverUrl`
  - 封面图
- `isDefaultExperience`
  - 是否默认体验活动
- `eventType`
  - 活动类型摘要
- `currentPresentation`
  - 当前展示版本摘要
- `currentContentBundle`
  - 当前内容包摘要

### 3.3 可选字段

- `locationName`
  - 地点摘要
- `tagText`
  - 轻标签
- `participantHint`
  - 人群或参与提示
- `ruleHint`
  - 规则提示

当前阶段不建议为了列表页再额外增加复杂字段。

---

## 4. 字段展示建议

### 4.1 卡片主信息

- 主标题：`title`
- 副标题：`subtitle`
- 摘要：`summary`

### 4.2 卡片状态信息

- 状态：`status`
- 时间：`timeWindow`
- 主动作：`ctaText`

### 4.3 卡片轻运营信息

- 封面：`coverUrl`
- 体验标识：`isDefaultExperience`
- 展示版本摘要：`currentPresentation`
- 内容包摘要：`currentContentBundle`

当前阶段只建议做“摘要显示”，不要做复杂 schema 级解释。

---

## 5. 缺字段降级策略

活动卡片列表属于前台浏览层，必须允许后端阶段性缺字段时仍可工作。

### 5.1 标题缺失

- `title` 缺失时：显示 `未命名活动`

### 5.2 副标题缺失

- `subtitle` 缺失时：整行不显示

### 5.3 摘要缺失

- `summary` 缺失时：显示 `当前暂无活动摘要`

### 5.4 状态缺失

- `status` 缺失时：显示 `状态待确认`
- 不影响点击进入详情页

### 5.5 时间窗口缺失

- `timeWindow` 缺失时：显示 `时间待公布`

### 5.6 CTA 缺失

- `ctaText` 缺失时：统一回退成 `查看详情`

### 5.7 封面缺失

- `coverUrl` 缺失时：使用默认卡片背景，不阻断渲染

### 5.8 `currentPresentation` 缺失

- 显示：`当前未声明展示版本`

### 5.9 `currentContentBundle` 缺失

- 显示：`当前未声明内容包版本`

### 5.10 体验标识缺失

- `isDefaultExperience` 缺失时：按普通活动处理

---

## 6. 最小页面结构建议

当前结构已按第一刀最小版本落地。

建议的最小结构如下：

```text
活动列表页
├─ 顶部说明区
│  ├─ 标题
│  ├─ 频道/地区摘要
│  └─ 当前状态说明
├─ 筛选区
│  ├─ 全部
│  ├─ 体验活动
│  ├─ 进行中
│  ├─ 即将开始
│  └─ 已结束
├─ 卡片列表区
│  ├─ 活动卡片
│  ├─ 活动卡片
│  └─ 活动卡片
└─ 空状态 / 错误状态
```

当前第一刀阶段保留这套最小结构，不扩复杂分组和复杂运营区。

---

## 7. 最小卡片状态建议

### 7.1 默认体验活动

- 标识：`体验`
- 主动作：`进入体验`

### 7.2 进行中

- 标识：`进行中`
- 主动作：`进入活动`

### 7.3 即将开始

- 标识：`即将开始`
- 主动作：`查看详情`

### 7.4 已结束

- 标识：`已结束`
- 主动作：`查看详情`
  或
- `查看回顾`

---

## 8. 与当前架构的关系

活动卡片列表层只消费轻摘要，不直接消费后台复杂生产对象。

建议关系保持为：

```text
Event
-> EventRelease
-> currentPresentation / currentContentBundle / runtime 摘要
-> 活动卡片列表层
```

前端列表层当前只认：

- 活动摘要
- 当前状态
- 轻运营摘要
- 主动作文案

不要把：

- 原始 `EventPresentation schema`
- 原始 `ContentBundle` 明细
- backend 内部生产对象

直接推到卡片列表层。

---

## 9. 与活动详情页的分工

### 9.1 活动卡片列表层

负责：

- 浏览
- 粗筛
- 判断要不要进入活动详情页

### 9.2 活动详情页

负责：

- 活动介绍
- 展示版本摘要
- 内容包摘要
- 准备页入口
- 后续更深的运营信息

这样列表层可以一直保持轻。

---

## 10. 当前阶段输出物

当前第一刀的输出物已经包括：

1. 最小字段表
2. 缺字段降级规则
3. 最小页面结构落地
4. 列表页到详情页的最小跳转链

当前阶段不应继续包括：

- 列表页重构
- 卡片系统深度样式扩张
- 复杂运营专区方案
- 更多玩家侧新入口

---

## 11. 下一步建议

当前第一刀之后，下一步建议按下面顺序推进：

1. 先做联调回归与小范围修复
2. 后端继续收口字段稳定性和默认值
3. 前端确认分组和卡片信息层级是否顺手
4. 再决定是否进入第二刀产品扩展

---

## 12. 一句话结论

当前“活动卡片列表最小产品方案”已从准备阶段进入第一刀落地阶段：

**独立列表页 + 最小筛选 + 最小卡片字段 + 跳详情页链路**

接下来先做联调回归和小范围修复，不直接扩第二刀。
