Appearance
里程挑战 — 打卡型原型设计
版本: 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 对比

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

3.1 页面结构差异
| 区域 | 积累型 | 打卡型 |
|---|---|---|
| 信息卡-关联雪场 | 关联雪场 万龙 | 福龙 | 军都山... | 目标雪场 万龙滑雪场(单一) |
| 信息卡-打卡范围 | — | 打卡范围 初级道 8 条(🆕) |
| 报名统计 | 已报名 30 人 | 已报名 30 人 · 12人已集齐 |
| Tab 栏 | 活动详情 | 里程排名 | 获奖名单 | 活动详情 | 打卡进度 | 排行榜 | 获奖名单 |
| 底部按钮 | 免费报名 | 已报名后 → 去滑雪 🎿(绿色) |
3.2 打卡进度区
已报名用户默认看到此 Tab。
字段定义
| 字段名 | 类型 | 说明 |
|---|---|---|
| 已打卡数 | 整数 | 已打卡雪道数 |
| 总数 | 整数 | 目标雪道总数 |
| 雪道列表 | 数组 | 雪道打卡状态列表 |
雪道条目对象
| 字段名 | 类型 | 说明 |
|---|---|---|
| 雪道名称 | 字符串 | 雪道名称 |
| 打卡状态 | 布尔 | 是否已打卡 |
| 打卡时间 | 时间戳 | 空 | 首次打卡时间 |
| 关联轨迹 | 字符串 | 空 | 关联轨迹 ID(用于点击查看) |
交互
| 操作 | 行为 |
|---|---|
| 点击已打卡雪道 | 跳转该次滑行轨迹详情 |
| 底部文案 | 进行中 → 还差 N 条 💪;已集齐 → 🎊 已集齐!排名第 X 名 |
3.3 排行榜 Tab(里程排名 → 打卡排行)

| 维度 | 积累型(里程排名) | 打卡型(排行榜) |
|---|---|---|
| 上榜条件 | 有成绩即可 | 仅集齐者 |
| 排序 | 滑行里程降序 | 完成时间升序(最早居前) |
| 右侧信息 | 19.9 公里 + 滑行时长 | 完成日期 01/22 14:32 + 用时 |
| 用户标签 | 好友·最高速度·单板 | 好友·单板 + 8/8 ✓ 集齐标 |
| 空状态 | 「暂无数据」 | 「暂无人集齐,成为第一个吧!🏔️」 |
| 底部提示 | — | 「💡 集齐全部 N 条雪道后你将出现在榜单」 |
打卡型榜单条目字段
| 字段名 | 类型 | 说明 |
|---|---|---|
| 排名 | 整数 | 名次 |
| 用户头像 | 图片 | 头像 |
| 用户昵称 | 字符串 | 昵称 |
| 进度 | 字符串 | "N/N" 格式 |
| 完成时间 | 时间戳 | 最后一条雪道打卡时间(= 完成时间) |
3.4 挑战规则区
| 积累型 | 打卡型 |
|---|---|
| 📊 统计维度:累计里程 | 🏔️ 目标雪场: |
| 🎿 有效雪场:万龙、云顶 | 🎿 打卡范围:{难度} N 条 |
| 🏅 完赛门槛:≥ 10km | 📊 排名方式:最先集齐者排名靠前 |
| 🏅 上榜条件:集齐全部目标雪道 |
3.5 获奖名单 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 自动生成,无需人工标注:
- 计算雪道全长 L
- 跳过首尾各 20%(起点/终点多道交汇区,GPS 无法区分)
- 中段 60% 等距采样
| 雪道长度 | 检查点数 |
|---|---|
| < 500m | 2 个 |
| 500m ~ 1.5km | 3 个 |
| > 1.5km | 4-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 | 目标雪场必选 | 未选雪场时「发布」按钮禁用 |
| 3 | GIS 过滤 | 无 GIS 数据的雪场灰显不可选 |
| 4 | 打卡范围联动 | 选范围后展示对应雪道数量 |
| 5 | 完赛奖 Tab | 奖项弹窗第二个 Tab 为「完赛奖」 |
| 6 | 打卡进度 | 已打卡/未打卡状态正确,点击已打卡可查轨迹 |
| 7 | 排行榜 | 仅集齐者上榜,按完成时间升序 |
| 8 | 报名抽屉 | 展示目标雪场 + 打卡范围 + 匹配说明文案 |
| 9 | 检查点匹配 | 空间命中 + 有序性 + 时间窗口 + 速度校验四步全通过才打卡 |
| 10 | 去重 | 同一雪道重复滑行不重复打卡 |
| 11 | Toast | 打卡成功 3s 通知,多道逐条展示 |
| 12 | 集齐弹窗 | 排名 + 完成时间 + 分享入口 |
| 13 | Push | 单道打卡 + 集齐两种通知文案 |
| 14 | 底部栏 | 5 种状态正确切换 |
| 15 | 快照机制 | 挑战进行中更新 GIS 不影响已创建挑战 |
