Appearance
里程挑战详情页 PRD
版本: V2.0
更新日期: 2026-02-25
依赖: 通用组件规范V2 变更: 新增打卡型挑战详情页差异化设计;挑战类型枚举修正(速度→时长);新增打卡进度区和打卡型排行榜
一、模块定位
场景:官方/俱乐部发起的里程/落差/速度挑战赛,用户通过 GPS 轨迹自动累计成绩。
核心交互:查看规则 → 报名 → 滑雪自动累计 → 查看排名
二、差异化插槽区
2.1 排行榜区
┌────────────────────────────────────┐
│ 🏆 实时排行榜 Top 100 ▼ │
│ ┌────────────────────────────────┐ │
│ │ 🥇 雪疯子 太舞 128.5km │ │
│ │ 🥈 粉雪控 万龙 98.2km │ │
│ │ 🥉 单板小明 云顶 87.6km │ │
│ │ 4 冰雪女王 松花湖 76.3km │ │
│ │ 5 极限骑士 北大壶 71.8km │ │
│ │ [查看完整榜单 ▼] │ │
│ └────────────────────────────────┘ │
├────────────────────────────────────┤
│ 📈 我的战绩 │
│ ┌────────────────────────────────┐ │
│ │ 当前排名 #42 │ │
│ │ 累计里程 32.5 km │ │
│ │ 距上一名 还差 2.3 km 🔥 │ │
│ └────────────────────────────────┘ │
└────────────────────────────────────┘字段定义
| 字段名 | 类型 | 说明 |
|---|---|---|
| 排行榜数据 | 数组 | 榜单条目列表 |
| 我的排名 | 整数 | 当前用户排名 |
| 我的成绩 | 小数 | 当前用户累计成绩 |
| 距上一名差距 | 小数 | 与上一名的成绩差值 |
| 距获奖区差距 | 小数 | 与获奖名次的成绩差值(可选) |
| 是否完赛 | 布尔 | 是否达到完赛门槛 |
榜单条目对象
| 字段名 | 类型 | 说明 |
|---|---|---|
| 排名 | 整数 | 名次 |
| 用户头像 | 图片 | 头像 |
| 用户昵称 | 字符串 | 昵称 |
| 所属俱乐部 | 字符串 | 俱乐部名称(可选) |
| 成绩值 | 小数 | 成绩数值 |
| 单位 | 字符串 | km/m/km/h |
排行榜交互
| 操作 | 行为 |
|---|---|
| 点击「查看完整榜单」 | 展开至 Top 100 |
| 点击榜单用户 | 跳转该用户个人主页 |
| 下拉刷新 | 刷新排行榜数据 |
2.2 挑战规则区
┌────────────────────────────────────┐
│ 📋 挑战规则 │
├────────────────────────────────────┤
│ 📊 统计维度:累计里程(公里) │
│ 🎿 有效雪场:万龙、云顶、太舞 │
│ ⏰ 挑战周期:01/15 - 02/15 │
│ 🏅 完赛门槛:累计滑行 ≥ 10km │
├────────────────────────────────────┤
│ 👥 参与范围:全网公开 │
│ (或:仅限 XX 俱乐部成员) │
├────────────────────────────────────┤
│ 🎁 奖励设置 │
│ • 🥇 第1名:品牌滑雪服一套 │
│ • 🥈 第2名:雪场年卡 │
│ • 🥉 第3名:雪具代金券 ¥500 │
│ • 🏅 完赛奖:100雪币 + 限定周边 │
└────────────────────────────────────┘字段定义
| 字段名 | 类型 | 说明 |
|---|---|---|
| 挑战类型 | 枚举 | 里程/落差/时长 |
| 有效雪场 | 数组 | 有效雪场范围(空=全部有效) |
| 开始时间 | 时间戳 | 挑战开始时间 |
| 结束时间 | 时间戳 | 挑战结束时间 |
| 完赛门槛 | 小数 | 最低有效成绩 |
| 参与范围 | 枚举 | 全网公开/仅限俱乐部成员 |
| 关联俱乐部 | 对象 | 俱乐部信息(仅限俱乐部时必填) |
| 排名奖列表 | 数组 | 前 N 名奖品配置 |
| 完赛奖 | 对象 | 完赛即得奖励 |
2.3 打卡型挑战差异化插槽区
当挑战类型为「雪道打卡」时,详情页使用以下插槽区替换 2.1 排行榜区和 2.2 挑战规则区。
2.3.1 打卡进度区
┌────────────────────────────────────┐
│ 📋 打卡进度 5/8 │
│ ┌────────────────────────────────┐ │
│ │ ✅ 银龙道 01/16 打卡 │ │
│ │ ✅ 玉龙道 01/17 打卡 │ │
│ │ ✅ 白龙道 01/18 打卡 │ │
│ │ ✅ 小龙道 01/19 打卡 │ │
│ │ ✅ 青龙道 01/20 打卡 │ │
│ │ ⬜ 云龙道 未打卡 │ │
│ │ ⬜ 雪龙道 未打卡 │ │
│ │ ⬜ 冰龙道 未打卡 │ │
│ │ 还差 3 条雪道 💪 │ │
│ └────────────────────────────────┘ │
└────────────────────────────────────┘打卡进度字段定义
| 字段名 | 类型 | 说明 |
|---|---|---|
| 已打卡数 | 整数 | 已完成的雪道数 |
| 总数 | 整数 | 该挑战目标雪道总数 |
| 雪道列表 | 数组 | 雪道打卡状态清单 |
雪道条目对象
| 字段名 | 类型 | 说明 |
|---|---|---|
| 雪道名称 | 字符串 | 雪道名称 |
| 打卡状态 | 布尔 | 是否已打卡 |
| 打卡时间 | 时间戳 | 首次打卡时间(未打卡为空) |
打卡进度交互
| 操作 | 行为 |
|---|---|
| 点击已打卡雪道 | 查看该次滑行轨迹详情 |
2.3.2 打卡型排行榜区
┌────────────────────────────────────┐
│ 🏆 排行榜(已集齐 2 人) │
│ ┌────────────────────────────────┐ │
│ │ 🥇 雪疯子 8/8 01/22 完成 │ │
│ │ 🥈 粉雪控 8/8 01/24 完成 │ │
│ └────────────────────────────────┘ │
│ 💡 集齐全部初级道后,你将出现在榜单 │
└────────────────────────────────────┘打卡型榜单条目对象
| 字段名 | 类型 | 说明 |
|---|---|---|
| 排名 | 整数 | 名次 |
| 用户头像 | 图片 | 头像 |
| 用户昵称 | 字符串 | 昵称 |
| 进度 | 字符串 | "N/N" 格式 |
| 完成时间 | 时间戳 | 最后一条雪道打卡时间 |
空状态提示: 尚无人集齐时,显示空状态:"暂无人集齐,成为第一个吧!🏔️"
2.3.3 打卡挑战规则区
┌────────────────────────────────────┐
│ 📋 挑战规则 │
├────────────────────────────────────┤
│ 🏔️ 目标雪场:万龙滑雪场 │
│ 🎿 打卡范围:初级道 8 条 │
│ ⏰ 挑战周期:01/15 - 02/15 │
│ 📊 排名方式:最先集齐者排名靠前 │
├────────────────────────────────────┤
│ 🏅 上榜条件 │
│ 集齐全部初级道即登上排行榜 │
├────────────────────────────────────┤
│ 🎁 奖励设置 │
│ • 🥇 第1名:品牌滑雪服一套 │
│ • 🥈 第2名:雪场年卡 │
│ • 🥉 第3名:雪具代金券 ¥500 │
│ • 🏅 完赛奖:集齐全部初级道 → 100雪币│
└────────────────────────────────────┘三、发布者卡片配置
| 发起身份 | 展示样式 |
|---|---|
| 官方 | 雪哒官方头像 + ✅官方认证 |
| 俱乐部 | 俱乐部头像 + 🏔️俱乐部标签 + 成员数 |
四、完赛感言区(替代评价区)
┌────────────────────────────────────┐
│ 🗣️ 完赛感言 (23条) [更多] │
│ ┌────────────────────────────────┐ │
│ │ 👤 雪疯子 🥇 第1名 │ │
│ │ 终于登顶了!感谢队友陪练! │ │
│ │ 累计 128.5km · 01/28 │ │
│ └────────────────────────────────┘ │
└────────────────────────────────────┘五、报名流程(底部抽屉)
交互:统一使用底部抽屉模式,保持交互一致性
┌────────────────────────────────────┐
│ 报名挑战 [×] │
├────────────────────────────────────┤
│ 挑战名称:崇礼开板首滑挑战 │
│ 挑战周期:01/15 - 02/15 │
│ 有效雪场:万龙、云顶、太舞 │
├────────────────────────────────────┤
│ ⓘ 报名后,您在有效雪场的滑行数据将 │
│ 自动计入挑战成绩。 │
├────────────────────────────────────┤
│ ☑ 我已阅读并同意《挑战规则》 │
├────────────────────────────────────┤
│ [确认报名] │
└────────────────────────────────────┘付费挑战:若挑战设置报名费,底部抽屉显示费用明细和支付按钮
六、须知规则区配置
标题:📋 数据说明
默认内容:
- 仅统计挑战周期内的有效滑行数据
- 数据来源:APP 内置 GPS 轨迹记录
- 异常数据(车载/缆车)将被自动过滤
- 榜单每 5 分钟更新一次
七、底部操作栏配置
布局结构(三列版本)
┌─────────────────────────────────────────┐
│ [咨询] [收藏] │ ¥价格/免费 │ [主操作按钮] │
└─────────────────────────────────────────┘| 元素 | 说明 |
|---|---|
| 咨询按钮 | 图标+文字,点击联系客服 |
| 收藏按钮 | 图标+文字,切换收藏状态 |
| 价格区 | 免费 或 ¥{报名费} |
| 主按钮 | 见下表 |
主按钮状态
| 状态 | 按钮文案 |
|---|---|
| 未报名 | 报名挑战 |
| 已报名 | 去滑雪 |
| 挑战未开始 | 敬请期待(置灰) |
| 已结束 | 已结束(置灰) |
与雪友组局保持一致的三列布局,适用于社交属性较强的活动页面。
九、关联信息展示规则
V1.3 新增:遵循通用组件规范中的 ClubCard / ResortCard 定义
9.1 关联俱乐部 (ClubCard)
位置:发布者卡片下方
条件渲染:仅当活动配置了关联俱乐部时显示
9.2 关联雪场 (ResortCard)
位置:赛事规则区下方(页面底部)
条件渲染:仅当活动配置了关联雪场时显示
十、验收标准
10.1 通用(原有)
- 有效性过滤:非有效雪场的轨迹不计入成绩
- 时间范围过滤:挑战周期外的轨迹不计入
- 重复报名拦截:已报名用户再次点击显示「去滑雪」
- 俱乐部隔离:仅限俱乐部成员的挑战,非成员报名时提示「请先加入俱乐部」
10.2 积累型专属(原有 + 修正)
- 排行榜实时性:上传轨迹后 5 分钟内排名更新
- 差距提示准确:「距上一名还差 X km」计算正确
- 完赛状态标记:达到门槛后显示「已完赛」标签
10.3 打卡型专属(V2 新增)
- 打卡判定准确:滑行轨迹经过雪道全部检查点后,该雪道自动标记为已打卡
- 集齐才上榜:未集齐该挑战全部目标雪道的用户不出现在排行榜中
- 打卡反馈:滑行结束后若有新雪道打卡成功,弹出打卡成功提示
- 去重:同一雪道重复滑行不重复打卡
- 空状态:无人集齐时,显示空状态提示文案
