Skip to content

里程挑战 — 打卡型原型设计

版本: V2.5
更新日期: 2026-03-05
依赖: 里程挑战模块 V2 · 里程挑战详情页 · 通用组件规范
定位: 打卡型与积累型的全量差异说明 — 创建页 + 详情页 + 算法规则,供开发对照实现


一、类型切换

标题栏下拉选择器(复用现有 里程挑战 ▾ 控件):

选项对应类型说明
里程挑战积累型现有逻辑不变
雪道打卡打卡型切换后联动显隐下方字段

切换时表单数据不清空(共享字段保留,专属字段各自缓存)。


二、发布端 — 创建页

创建页对比

2.1 字段差异表

仅列出有差异的字段。未列出的字段(封面、标题、描述、时间、报名截止、限制人数、费用与权益、更多设置)两种类型完全一致。

字段积累型打卡型复用组件
提示横幅🧭 轨迹数据自动采集📍 轨迹自动采集 · 雪道自动打卡Banner 卡片
排名规则三选一 chip(里程/落差/时长)一行轻提示:「⏱️ 最先集齐全部雪道者排名靠前」chip-card → hint-line
目标雪场🆕 必选,点击进入雪场选择页复用「活动地点」行卡
打卡范围🆕 四选一 chip + 雪道数预览复用「报名截止时间」chip 卡
活动地点请选择— 隐藏(被目标雪场替代)
奖项设置排名奖 + 参与奖排名奖 + 完赛奖复用底部弹窗,Tab 名变更

2.2 字段顺序(打卡型)

标题栏「雪道打卡 ▾」
├── 提示横幅(文案变更)
├── 封面 / 标题 / 描述          ← 不变
├── 🆕 目标雪场                 ← 替代排名规则位置
├── 🆕 打卡范围 + 雪道数预览
├── ⏱️ 排名轻提示(一行文案)
├── 🎁 奖项设置(完赛奖 Tab)
├── ⏰ 时间                     ← 不变
├── 📅 报名截止                 ← 不变
├── 👥 限制人数                 ← 不变
├── 💰 费用与权益               ← 不变
├── ⚙️ 更多设置                 ← 不变
└── [发布]

2.3 目标雪场选择页

  • 列表展示所有雪场,仅 GIS 数据已就绪的雪场可选
  • 未接入 GIS 的雪场灰显 + 提示「暂无雪道数据」
  • 选中后返回创建页,行卡右侧显示雪场名称

2.4 打卡范围

chip 选项含义
全部雪道该雪场全部雪道
初级道仅初级难度雪道
中级道仅中级难度雪道
高级道仅高级难度雪道

选中后下方显示预览条:🎿 {难度} 共 N 条 · 集齐即完赛

必须先选目标雪场才能选打卡范围(未选雪场时 chip 置灰)。

2.5 完赛奖(奖项弹窗变更)

复用现有「添加奖项」底部弹窗,Tab 变更:参与奖完赛奖

完赛奖 = 集齐全部目标雪道即可获得,不限名额。


三、C 端 — 详情页

以下原型基于真实 App 截图迭代,红色标 绿色标 为打卡型差异点。

3.0 活动详情 Tab 对比

活动详情 Tab 对比

3.0.1 打卡进度 Tab(打卡型新增)

打卡进度 Tab

3.1 页面结构差异

区域积累型打卡型
信息卡-关联雪场关联雪场 万龙 | 福龙 | 军都山...目标雪场 万龙滑雪场(单一)
信息卡-打卡范围打卡范围 初级道 8 条(🆕)
报名统计已报名 30 人已报名 30 人 · 12人已集齐
Tab 栏活动详情 | 里程排名 | 获奖名单活动详情 | 打卡进度 | 排行榜 | 获奖名单
底部按钮免费报名已报名后 → 去滑雪 🎿(绿色)

3.2 打卡进度区

已报名用户默认看到此 Tab。

字段定义

字段名类型说明
已打卡数整数已打卡雪道数
总数整数目标雪道总数
雪道列表数组雪道打卡状态列表
雪道条目对象
字段名类型说明
雪道名称字符串雪道名称
打卡状态布尔是否已打卡
打卡时间时间戳 | 空首次打卡时间
关联轨迹字符串 | 空关联轨迹 ID(用于点击查看)
交互
操作行为
点击已打卡雪道跳转该次滑行轨迹详情
底部文案进行中 → 还差 N 条 💪;已集齐 → 🎊 已集齐!排名第 X 名

3.3 排行榜 Tab(里程排名 → 打卡排行)

排行榜 Tab 对比

维度积累型(里程排名)打卡型(排行榜)
上榜条件有成绩即可仅集齐者
排序滑行里程降序完成时间升序(最早居前)
右侧信息19.9 公里 + 滑行时长完成日期 01/22 14:32 + 用时
用户标签好友·最高速度·单板好友·单板 + 8/8 ✓ 集齐标
空状态「暂无数据」「暂无人集齐,成为第一个吧!🏔️」
底部提示「💡 集齐全部 N 条雪道后你将出现在榜单」

打卡型榜单条目字段

字段名类型说明
排名整数名次
用户头像图片头像
用户昵称字符串昵称
进度字符串"N/N" 格式
完成时间时间戳最后一条雪道打卡时间(= 完成时间)

3.4 挑战规则区

积累型打卡型
📊 统计维度:累计里程🏔️ 目标雪场:
🎿 有效雪场:万龙、云顶🎿 打卡范围:{难度} N 条
🏅 完赛门槛:≥ 10km📊 排名方式:最先集齐者排名靠前
🏅 上榜条件:集齐全部目标雪道

3.5 获奖名单 Tab

获奖名单 Tab 对比

维度积累型打卡型
奖项类型排名奖排名奖 + 完赛奖
排名奖展示按里程排序按完成时间排序
完赛奖展示🆕 集齐即得,独立分组列出

四、报名抽屉

报名抽屉对比

字段积累型打卡型
有效雪场✅ 展示
目标雪场✅ 展示
打卡范围✅ 展示(如 初级道 8 条
提示文案滑行数据自动计入自动匹配雪道完成打卡,集齐即完赛

五、打卡反馈(三级)

打卡反馈

级别触发形式内容
Toast单道打卡成功顶部卡片 3s🎉 {雪道名} 打卡成功!进度 M/N
庆祝弹窗集齐全部(N/N)全屏模态 + 撒花完成时间 + 排名 + [查看排行榜] [分享]
Push打卡/集齐系统通知进度更新 / 集齐排名

Toast 规则

  • 3 秒自动消失,可手动滑走
  • 多道打卡时逐条展示(间隔 0.5s)
  • 点击跳转该挑战详情页打卡进度 Tab

Push 文案

场景文案
单道打卡🎿 银龙道打卡成功!还差3条集齐「万龙初级道打卡挑战」
集齐🎊 恭喜集齐全部初级道!当前排名第3名,快来查看

六、底部操作栏状态

用户状态按钮左侧
未报名报名挑战(蓝色)价格
已报名未集齐去滑雪(绿色)进度 5/8
已集齐已集齐 🎉(蓝色描边)排名 #3
未开始敬请期待(灰色)
已结束已结束(灰色)

七、检查点匹配算法

完整定义见 PRD V2 §3.2,此处为开发实现速查。

7.1 检查点生成

系统从雪道 GIS Polyline 自动生成,无需人工标注

  1. 计算雪道全长 L
  2. 跳过首尾各 20%(起点/终点多道交汇区,GPS 无法区分)
  3. 中段 60% 等距采样
雪道长度检查点数
< 500m2 个
500m ~ 1.5km3 个
> 1.5km4-5 个
  • 半径: 40m(兼容 GPS 误差 + 雪道宽度)
  • 运营可微调: 自动生成后可在后台调整
  • 快照机制: 挑战进行中更新 GIS 数据不影响已创建挑战

7.2 匹配流程

用户上传轨迹后,服务端对每条未打卡雪道执行 4 步校验:

步骤校验内容失败原因
Step 1 空间命中每个检查点 Ci 是否有轨迹点进入半径范围轨迹未经过该雪道
Step 2 有序性命中点时间戳 C1 < C2 < ... < Cm反向滑行或轨迹乱序
Step 3 时间窗口总耗时在 L/80km·h⁻¹ ~ L/3km·h⁻¹ 范围内太快=车载,太慢=步行
Step 4 速度校验命中区间平均速度 5~80 km/h异常移动方式

全部通过 → 打卡成功,完成时间 = 最后一个检查点命中时间戳

7.3 去重规则

  • 同一雪道只记录首次打卡成功时间
  • 重复滑行不重复打卡、不更新时间

八、验收清单

#检查项通过标准
1类型切换联动切换「雪道打卡」后,目标雪场/打卡范围出现,排名规则/活动地点隐藏
2目标雪场必选未选雪场时「发布」按钮禁用
3GIS 过滤无 GIS 数据的雪场灰显不可选
4打卡范围联动选范围后展示对应雪道数量
5完赛奖 Tab奖项弹窗第二个 Tab 为「完赛奖」
6打卡进度已打卡/未打卡状态正确,点击已打卡可查轨迹
7排行榜仅集齐者上榜,按完成时间升序
8报名抽屉展示目标雪场 + 打卡范围 + 匹配说明文案
9检查点匹配空间命中 + 有序性 + 时间窗口 + 速度校验四步全通过才打卡
10去重同一雪道重复滑行不重复打卡
11Toast打卡成功 3s 通知,多道逐条展示
12集齐弹窗排名 + 完成时间 + 分享入口
13Push单道打卡 + 集齐两种通知文案
14底部栏5 种状态正确切换
15快照机制挑战进行中更新 GIS 不影响已创建挑战