加壹个 | OneMore
球类活动招募组队微信小程序 - 产品需求文档
需求背景
用户痛点
球类运动(篮球、羽毛球、足球等)是中国参与人数最多的运动品类。根据国家统计局数据,2023年全国体育场地数量排名前三的分别是篮球场、全民健身路径和乒乓球场[1]。截至2025年4月,中国户外运动参与人数已突破4亿[2]。庞大的运动人口背后,散客球友长期面临一个高频痛点:想打球但缺人。
现有解决方案存在明显断层:
产品机会
微信小程序是解决这一矛盾的最佳载体。加壹个 | OneMore定位为球类运动的"活动招募工具"——不做赛事管理、不做场馆预订,只做一件事:让球友通过位置发现附近活动,快速组队。
需求目标
MVP阶段为产品冷启动期,以验证核心假设为主:散客球友愿意通过小程序发起和加入约球,并最终在线下完成组队。
定性目标
- 用户能在3分钟内完成一次约球发起或加入操作
- 覆盖篮球、羽毛球、足球三大主流球类的约球场景
- 用户发起活动后30分钟内,平均获得至少2人报名
- 用户通过活动记录找到曾经一起玩过的球友
验证指标
| 指标 | 定义 | MVP目标值 |
|---|---|---|
| 发起约球数 | 每日新发起的约球局数量 | 单城市 ≥ 50/日 |
| 报名转化率 | 约球大厅访客中点击报名的比例 | ≥ 15% |
| 组队成功率 | 满员或达到最低人数的约球占比 | ≥ 40% |
| 7日留存率 | 首日使用后7日内再次打开的比例 | ≥ 25% |
市场分析与竞品分析
市场规模
中国体育产业持续增长,全民健身国家战略推动下,体育场地设施和参与人数稳步提升。根据国家统计局和体育总局数据,2024年全国共有体育场地484.17万个,体育场地面积42.3亿平方米,全国人均体育场地面积达到3.0平方米[1]。球类运动场地达到303.62万个,其中足球、篮球、排球"三大球"场地150.42万个,乒乓球和羽毛球场地139.54万个[6]。
参与人群方面,2025年全民健身活动状况调查显示,我国经常参加体育锻炼的人数比例达38.52%,96.8%的被调查者参与过体育项目,其中健步走、跑步、跳绳、骑自行车、羽毛球和篮球项目的参与度最高[7]。羽毛球参与人数已达2.5亿,仅次于健步走人群[8]。国务院《全民健身计划》提出,到2025年带动全国体育产业总规模达到5万亿元[9]。19-59岁居民人均体育消费达2428元,服务型体育消费占比提升至48.5%[7]。庞大的运动人口和持续增长的体育消费,为散客活动组队工具提供了广阔的市场空间。
竞品分析
当前市场约球类产品可分为三类,各有侧重但均未充分覆盖散客轻量组队场景:
| 产品 | 形态 | 球类覆盖 | 核心功能 | 目标用户 | 不足 |
|---|---|---|---|---|---|
| 约球天下 | App | 多球类 | 找球友、找陪练、发活动、报名收费、分组排程、记分排名[3] | 运动爱好者 | 需下载App,功能重,散客门槛高 |
| 斑马邦 | App+平台 | 足球为主 | 赛事报名、俱乐部管理、队费缴纳、数据统计、订场缴费[4] | 球队/俱乐部 | 面向组织化球队,散客临时组队场景过重 |
| 与球有约 | 小程序 | 仅篮球 | 24小时约球、精准对位找对手[5] | 篮球爱好者 | 单球类覆盖,未扩展至其他球类 |
| 约球伴侣 | App | 多球类 | 球类社交、约球互动 | 运动爱好者 | 社交属性重,组队效率不足 |
| 加壹个 | OneMore | 小程序 | 多球类通用 | 发起约球、约球大厅、即时找人、组队沟通 | 散客球友 | —— |
用户画像与使用场景
目标用户画像
阿杰 / 篮球散客
下班后想打球,但同事各回各家,群里喊人经常凑不齐。到了球场有时能加入野队,有时等半小时没人来。希望有个工具能快速找到附近想打球的人。
小林 / 羽毛球爱好者
订了羽毛球馆的场地,但搭临时有事来不了。场地费已经付了,急需找人凑局AA。希望快速找到同水平、能来的球友补位。
老张 / 足球组织者
每周组织业余足球局,固定队友有时来不了,需要临时找人补位。微信群里喊人效率低,经常到开球了人还没凑齐。需要一个简单的工具管理报名和到场状态。
核心使用场景
场景一:基于位置的活动招募
场景二:提前发起约球局(预约约球)
功能需求详情
本章节为 PRD 核心内容,覆盖 MVP 全部10个功能模块。每个模块包含可交互原型 Demo、页面布局说明、业务逻辑和字段规则。产品决策说明:MVP 采用发起人制组队模式(一人发起活动、他人报名加入),基于位置发现附近活动;活动分类体系支持后台扩展,用户可自定义首页显示的分类;标签系统替代水平分级,支持预置标签+自定义标签(自定义需审核);活动地点采用微信位置API获取;图片存储采用腾讯云COS;用户登录采用手机号登录(优先微信获取,电脑端回退验证码);广告变现采用自有Banner位(外部广告主投放)+微信流量主激励视频,支持全局开关和个人免广告。
用户系统
手机号登录(优先微信快捷获取,不可用时回退验证码),登录后进入资料设置页完善个人信息。个人资料包含昵称、头像、生日、我的介绍、常打球类和个性化标签。
页面布局
登录拆分为两个独立页面,系统自动判断进入哪个页面:
- 页面A - 微信手机号快速登录:① 品牌展示区(Logo+应用名称+Slogan),② "手机号快速登录"按钮(微信绿色),③ 用户协议提示。页面简洁,一键完成登录。
- 页面A2 - 验证码登录:① 提示文案("当前环境不支持微信快捷获取"),② 手机号输入框,③ 验证码输入框+获取验证码按钮(并排),④ 登录按钮。
- 页面B - 资料设置页(登录成功后跳转):① 头像区(圆形头像+上传按钮),② 昵称输入框,③ 生日选择(日期选择器),④ "我的介绍"入口(跳转独立页面),⑤ 常打球类多选区,⑥ 标签区(预置标签网格+自定义入口),⑦ 保存按钮。
业务逻辑
用户首次进入小程序,未登录状态下所有功能不可用。系统首先尝试调用小程序 getPhoneNumber 能力获取用户微信绑定的手机号:
- 获取成功(页面A):系统展示简洁的快速登录页,用户点击"手机号快速登录"按钮,微信弹出手机号授权弹窗,用户确认后系统直接获取手机号,完成登录并跳转至资料设置页。整个流程一键完成,无需手动输入任何信息。
- 获取失败(跳转页面A2):当用户使用电脑端微信打开小程序(PC微信不支持 getPhoneNumber),或 getPhoneNumber 调用失败时,系统自动跳转至验证码登录页。页面顶部提示"当前环境不支持微信快捷获取",用户手动输入11位手机号并获取验证码完成登录。验证码60秒冷却、5分钟有效。
登录成功后逻辑一致:首次登录创建新用户并进入资料设置页,已注册则直接进入首页。由于微信隐私政策变更,头像和昵称需用户手动填写,提供"使用微信头像/昵称"快捷选项。用户需补充常打球类(至少1个)。
生日字段为选填,用户选择后存储在个人资料中。生日信息有两个用途:① 在个人主页展示年龄或星座(可选),② 发起活动时可选择是否限制报名年龄(系统根据报名者生日自动判断是否满足年龄条件)。
"我的介绍"为独立页面,从资料设置页点击"去填写"跳转。用户可输入自由文本(最多500字),提交后进入审核队列。审核通过前,介绍内容仅用户自己可见;审核通过后对所有用户可见,展示在用户个人主页中。审核未通过则不显示,系统提示用户修改后重新提交。MVP阶段审核方式为人工审核。
标签系统让用户通过标签展示个人特点。标签分为两类:
- 预置标签:平台提供50个预置标签,最多可选10个,涵盖打球风格、性格特点、装备情况等维度,点击选择/取消。
- 自定义标签:每个用户最多可添加3个自定义标签(2-10字符),提交后进入审核状态,审核通过前仅自己可见,通过后对所有用户可见。审核未通过的标签不显示。MVP阶段人工审核。自定义标签在审核中(待审核或审核未通过)时不允许修改或删除,审核通过后支持删除。
自定义标签审核流程:用户提交自定义标签后,系统首先在已有标签库(预置标签+已审核通过的自定义标签)中进行精确匹配和模糊匹配。若存在内容相同或高度相似的已有标签(编辑距离≤2),则自动放通,无需人工审核,直接关联到该已有标签。若无匹配,则进入人工审核队列。
自定义标签内容安全规则:仅允许输入中文汉字、英文字母(大小写)和中英文常见标点(逗号、句号、感叹号、问号、连字符)。禁止输入的内容包括:表情符号(Emoji)、特殊Unicode字符、HTML/JS代码片段、SQL注入语句、超链接URL、连续空格或不可见字符。后端在接收标签文本时需进行以下校验:正则白名单过滤(仅允许中文、英文、数字和指定标点),长度检查(2-10字符),XSS转义处理,SQL参数化查询。校验不通过时提示"标签内容不规范,请重新输入"。
标签非必填,用户可在资料设置页随时编辑。
字段规则
| 字段名 | 类型 | 必填 | 长度/范围 | 默认值 |
|---|---|---|---|---|
| 头像 | 图片URL(COS) | 是 | jpg/png ≤ 2MB | 默认占位图 |
| 昵称 | 文本 | 是 | 2-12字符 | 无(需手动输入) |
| 手机号 | 文本 | 是 | 11位手机号 | 无(微信获取或手动输入) |
| 生日 | 日期 | 否 | 年-月-日 | 无 |
| 我的介绍 | 文本 | 否 | 0-500字符 | 无(需审核后才对外展示) |
| 常打球类 | 数组 | 是 | 1-5项 | 无 |
| 标签 | 数组 | 否 | 预置最多10个 + 自定义最多3个 | 无 |
发起活动
用户填写活动分类、球局类型、时间、地点、图片、标题、简介、分组等信息,发布到活动大厅。支持最多5个分组,每个分组独立设置人数、价格、截止时间等。
页面布局
页面从上到下依次为:① 封面图上传区(虚线框+引导文案,至少上传1张),② 活动标题输入框(必填,2-30字符),③ 活动描述/简介文本框(选填,最多500字),④ 基础信息表单区(活动分类/球局类型/活动时间/活动地点/集合地点,带"*"号标识必填项,右侧箭头表示跳转选择),⑤ 分组管理区(浅色背景卡片,包含分组名称、人数、价格、费用包含、截止时间、候补开关、限购开关),⑥ 新增分组按钮,⑦ 年龄限制开关(开启后需设置最小和最大年龄),⑧ 更多设置入口(包含联系方式图片上传),⑨ 底部固定操作栏(存草稿+发布活动)。
业务逻辑
用户点击底部Tab栏中间的"发起"按钮进入发起活动页。封面图上传区为页面第一个元素,引导用户先上传图片。图片上传至腾讯云COS,第一张自动作为封面图。活动分类默认选中用户资料中设置的第一个常打球类,支持单选切换。活动分类体系支持后台扩展(不限于篮球/羽毛球/足球),新增分类后用户可在首页自定义添加。球局类型为选填字段,位于活动分类下方,采用预设选项+自定义模式。预设选项包括:休闲局、养生局、竞技局、教学局、出汗局(预设列表支持后台扩展)。发起人可从预设中单选一个,也可点击"+自定义"输入自定义球局类型(2-8个中英文字符,不支持emoji和非标字符)。自定义球局类型提交后先发布并生效(先通过后审核),后台定期审核自定义内容,对不合规内容进行隐藏或修改。活动时间选择器默认定位到当前时间后最近的整点,开始时间最早可选当前时间后1小时,结束时间晚于开始时间。图片上传为必填项(至少1张,最多9张),图片存储至腾讯云COS,第一张自动作为封面图。活动地点通过 `wx.chooseLocation` API 获取。用户点击活动地点表单行后,微信直接弹出系统级的位置选择界面,用户在微信原生界面中完成选点,系统只需等待回调并接收返回的 name(地点名称)、address(地址)、latitude(纬度)、longitude(经度)四个字段,存入数据库。系统不自行渲染地图,不做地图标记、搜索框等自定义UI,完全依赖微信原生能力。集合地点使用相同逻辑,为选填。标题必填(2-30字符),简介选填(最多500字,支持换行)。
分组管理是核心改动:发起人可创建最多5个分组,每个分组独立设置以下字段。分组信息区使用浅灰背景与上方表单区视觉分离。候补功能和限购功能使用开关控件,默认关闭。开启候补后在分组卡片下方显示绿色提示"TIPS: 开启候补,活动开始后不支持取消"。
年龄限制为活动级别的可选项(非分组级别),位于分组管理区下方。发起人开启"限制报名年龄"开关后,需设置最小年龄和最大年龄(如18-35岁)。用户报名时,系统根据该用户资料中的生日字段自动计算年龄,判断是否在限制范围内。不在范围内的用户,报名按钮置灰并提示"您的年龄不在本次活动要求的范围内"。未填写生日的用户,视为年龄未知,不受限制。活动地点到期后自动从大厅消失,发起人也可手动标记"已满人"提前结束招募。系统生成活动分享卡片,支持转发至微信群和朋友圈。
更多设置位于年龄限制下方、底部操作栏上方,点击进入更多设置页。更多设置页核心功能是上传联系方式图片:发起人可上传一张联系人或群聊二维码图片(描述为"联系人/群聊二维码"),不允许直接填写文字联系方式。图片上传至腾讯云COS,上传后预览展示。有费用活动(分组价格>0)建议设置联系方式图片,报名成功的用户在确认页中可查看此图片以联系发起人完成费用结算。免费活动也可选填。更多设置为选填区域,不设置不影响活动发布。
- 分组名称(可修改,默认"分组N")
- 活动人数(最少2人,最多50人)
- 活动价格(0表示免费,最大999元)
- 费用包含(文本说明,如"含场地费+水")
- 报名截止时间(不晚于活动开始时间)
- 是否候补(开启后超过人数的报名进入候补队列)
- 是否限购(开启后每人限报1个名额,关闭后无限制)
用户报名时选择加入某个分组。活动发布后出现在活动大厅列表中,同时创建组队群聊。活动时间到期后自动从大厅消失,发起人也可手动标记"已满人"提前结束招募。系统生成活动分享卡片,支持转发至微信群和朋友圈。底部固定操作栏包含"存草稿"和"发布活动"两个按钮,未完成所有必填项时"发布活动"按钮置灰不可点击。用户点击"发布活动"时,若全局激励视频开关开启且当前用户未被标记为"免广告",则先弹出微信流量主激励视频广告,用户完整观看后才执行活动发布。若全局开关关闭或用户免广告,则直接发布。用户中途关闭广告则不执行发布操作。
字段规则
| 字段名 | 类型 | 必填 | 长度/范围 | 默认值 |
|---|---|---|---|---|
| 活动分类 | 枚举 | 是 | 后台可扩展 | 用户首选球类 |
| 球局类型 | 枚举/自定义 | 否 | 单选,预设或自定义(2-8字符) | 无 |
| 活动开始时间 | 时间戳 | 是 | 当前+1h ~ +30d | 无 |
| 活动结束时间 | 时间戳 | 是 | 开始时间后 ~ +6h | 无 |
| 活动图片 | 数组(图片URL) | 是 | 1-9张,单张≤2MB | 无 |
| 活动地点 | 对象(微信位置) | 是 | name+address+lat+lng | 无 |
| 集合地点 | 对象(微信位置) | 否 | 同上 | 无 |
| 标题 | 文本 | 是 | 2-30字符 | 无 |
| 简介 | 文本 | 否 | 0-500字符 | 无 |
| 分组 | 数组 | 是 | 1-5个 | 1个默认分组 |
| 年龄限制 | 对象 | 否 | 最小年龄18-60,最大年龄18-80 | 无(不开启时不限制) |
| 联系方式图片 | 图片URL | 否 | 1张,≤2MB,描述为联系人/群聊二维码 | 无 |
分组子字段规则
| 字段名 | 类型 | 必填 | 范围 | 默认值 |
|---|---|---|---|---|
| 分组名称 | 文本 | 是 | 2-10字符 | "分组N" |
| 活动人数 | 整数 | 是 | 2-50 | 6 |
| 活动价格 | 金额 | 是 | 0-999元 | 0(免费) |
| 费用包含 | 文本 | 否 | 0-50字符 | 无 |
| 报名截止时间 | 时间戳 | 是 | ≤活动开始时间 | 活动开始时间 |
| 是否候补 | 布尔 | 是 | true/false | false |
| 是否限购 | 布尔 | 是 | true/false | true |
活动大厅
展示基于用户定位附近的活动列表。分类可自定义,卡片支持自动轮播图片。日期显示智能规则。
页面布局
页面从上到下依次为:① 顶部导航栏(城市选择器+定位图标+城市名称+下拉箭头,右侧搜索入口),② Banner广告位(后台配置,无广告时不显示),③ 分类筛选标签栏(用户自定义显示的分类+末尾"+"入口),④ 排序切换栏(距离最近/时间最新),⑤ 活动卡片列表(每张卡片包含:轮播封面图、日期智能显示、活动地点、发起人名称、已报名/需人数、分组名称),⑥ 底部Tab栏(大厅/发起/我的)。城市选择器位于导航栏左侧,显示当前选中的城市名称和定位图标,点击展开城市列表。分类标签栏支持用户自定义,点击"+"进入分类管理页添加/移除首页显示的分类,默认显示篮球、羽毛球、足球。
业务逻辑
用户进入活动大厅后,导航栏左侧显示城市选择器。系统通过 GPS 定位自动识别用户当前所在城市并设为默认值(如"北京"),用户也可手动点击城市名称展开城市列表切换到其他城市。城市列表按热门城市和字母排序展示,支持搜索城市名称。切换城市后,活动大厅只展示该城市范围内的活动列表(活动归属城市基于活动地点的经纬度与服务端城市范围数据匹配)。系统基于用户当前定位获取附近活动列表,招募半径由发起人设定(默认1km,最大5km)。分类筛选标签栏展示用户自定义的分类(默认篮球/羽毛球/足球),支持单选切换,选中"全部"显示所有分类。末尾"+"入口允许用户从后台所有分类中添加更多分类到首页显示。排序支持"距离最近"和"时间最新"。卡片图片轮播展示活动上传的图片(至少1张),无轮播控件,每隔3秒自动切换下一张,切换时使用淡入淡出效果。日期显示规则:今天→显示"今天",明天→显示"明天",后天到本周日→显示"本周X",下周一到下周日→显示"下周X",超过下周→只显示"周X"。卡片核心信息:轮播封面图、智能日期、活动地点(截断显示)、发起人昵称、分组报名进度。已结束的活动(活动结束时间已过)不在活动大厅中显示,已结束的活动仅可通过个人中心的"活动记录"或分享卡片查看。列表每页20条,上拉加载更多。搜索支持按标题和地点模糊搜索。
Banner广告逻辑
活动大厅导航栏下方设置Banner广告位,为自有广告位,由外部广告主主动联系我们投放,后台管理员手动配置素材。使用 `
活动详情与报名
展示活动完整信息、分组列表、发起人信息、"本场怎么玩"说明和图片轮播。参考 PickJoy 产品布局。
页面布局
页面从上到下依次为:① 导航栏(返回+标题+分享入口),② 封面图轮播区(全宽,支持左右滑动切换,底部圆点指示器,右上角显示页码如"1/3"),③ 活动概览区(标题+分类标签+类型标签),④ 日期时间选择区(开始-结束时间),⑤ 活动地点区(地点名称+距离+嵌入式地图),⑥ 集合地点区(如有,同位置展示),⑦ 分组报名区(每个分组卡片显示名称、价格、人数进度条、报名按钮),⑧ 发起人信息区(头像+昵称+水平标签),⑨ "本场怎么玩"区(活动简介,标题固定为"本场怎么玩"),⑩ 底部固定操作栏(群聊入口+分享+报名按钮)。MVP不含"参与更安心"功能(退款政策/意外保障)。
业务逻辑
用户从活动大厅点击卡片进入活动详情页。封面图区全宽展示活动上传的图片(至少1张)。封面图支持用户左右滑动切换,底部圆点指示器显示当前位置,右上角显示页码(如"1/3")。无自动轮播,由用户主动滑动查看。活动概览区展示标题、分类标签和局类型标签。日期时间区展示活动的起止时间。地点区展示活动地点名称和距离,嵌入微信地图组件支持一键导航。如有集合地点则单独展示。分组报名区是核心:列出所有分组,每个分组卡片显示分组名称、活动价格、当前报名人数/上限(进度条形式)、报名截止时间。用户选择一个分组点击报名,弹出确认弹窗(显示分组名称、价格、人数),确认后检查广告策略(参见模块9广告变现)。若全局激励视频开关开启且当前用户未被标记为"免广告",则先弹出微信流量主激励视频广告,用户完整观看后才执行报名。若全局开关关闭或用户免广告,则直接完成报名。用户中途关闭广告则不执行报名操作。报名成功后用户自动加入组队群聊,分组人数+1,满员后该分组报名按钮变为"已满"(若开启候补则显示"候补报名")。发起人信息区展示头像、昵称和水平标签。"本场怎么玩"区展示活动简介内容(发起人填写的简介字段)。底部固定操作栏包含群聊入口(报名后可用)、分享按钮和报名主按钮。未报名时显示分组选择+价格的主按钮,已报名时变为"已报名·进入群聊"。
报名确认与发起人审核
用户完成报名操作(含激励视频,如有)后,跳转到报名成功确认页。确认页顶部显示报名成功提示,中间展示活动基本信息摘要(标题、时间、地点、分组名称、价格)。若发起人在"更多设置"中上传了联系方式图片(联系人/群聊二维码),则确认页中展示该图片,提示"请联系发起人完成费用确认"(有费用活动)或"可扫码联系发起人"(免费活动)。确认页底部提供"查看活动详情"和"进入群聊"两个入口。未设置联系方式图片时,确认页不显示该区域。
报名审核机制:用户报名后状态为"待确认",发起人可在活动详情页或组队群聊中查看所有报名用户列表,并对每位报名用户执行"确认参与"或"确认不参与"操作。确认参与的用户状态变为"已确认",在活动分组列表中正常显示并占位。确认不参与的用户状态变为"未通过",但仍保留在报名列表中,后续发起人可更改其状态(将"未通过"改回"已确认")。确认不参与后该用户解除分组占位(分组人数-1),释放名额给其他用户。发起人也可不执行审核,用户报名后默认视为参与,审核为可选操作。
报名状态转换
| 当前状态 | 触发条件 | 下一状态 | 说明 |
|---|---|---|---|
| 待确认 | 发起人点击"确认参与" | 已确认 | 正常占位,分组人数+1 |
| 待确认 | 发起人点击"确认不参与" | 未通过 | 解除占位,分组人数-1,释放名额 |
| 未通过 | 发起人改为"确认参与" | 已确认 | 重新占位,分组人数+1(如有名额) |
| 已确认 | 发起人改为"确认不参与" | 未通过 | 解除占位,分组人数-1 |
组队沟通
活动成员专属群聊,支持文字沟通和到场状态实时同步。解决"谁到了、还差谁、地点变了"等协调问题。MVP阶段先保持轻量设计,后续根据人数规模迭代优化。
页面布局
页面从上到下依次为:① 导航栏(返回+群聊标题含人数),② 到场状态栏(已到场/总人数+成员头像指示器),③ 聊天消息区(系统消息居中灰色,他人消息靠左白色气泡+头像,自己消息靠右橙色气泡),④ 底部输入区("我到了"快捷按钮+文本输入框+发送按钮)。
业务逻辑
用户加入活动后自动进入组队群聊,群聊成员为该活动的所有报名参与者。群聊页面顶部显示到场状态栏,实时展示已到场和未到场人数,帮助发起人掌握到场进度。用户点击"我到了"按钮后,系统更新其到场状态并在群聊中发送一条系统消息"XX 已到场",到场状态栏对应头像变为绿色高亮。聊天支持文字和表情消息,不支持图片和视频(MVP简化)。消息按时间正序排列,当前用户消息靠右显示橙色气泡,其他成员消息靠左显示白色气泡。发起人拥有群聊管理权限,可移除成员(MVP阶段暂不开放)。系统消息居中显示,样式与聊天消息区分。用户退出活动后自动退出群聊。活动结束后群聊保留为历史记录,用户可在个人中心查看历史群聊。MVP阶段组队沟通保持轻量设计,人数较多时信息清晰度问题将在后续迭代中优化。输入框为空时发送按钮置灰,有内容时高亮可点击。
附近活动发现
基于用户当前位置,自动发现招募半径内的活动。招募半径由发起人设定(默认1km,最大5km),活动到期后自动消失。
页面布局
页面从上到下依次为:① 导航栏(返回+标题"附近活动"),② 当前定位信息卡片(显示用户当前位置和搜索范围),③ 附近活动数量提示,④ 活动列表(缩略图+标题+时间+距离+招募状态+人数进度),⑤ 底部Tab栏。
业务逻辑
附近活动发现是基于用户地理位置的核心功能。用户打开此页面后,系统获取用户当前GPS定位,查询该位置周围招募半径内的所有进行中的活动。招募半径由活动发起人设定,默认1km,最大5km,用户也可以手动调整搜索半径。活动列表按距离从近到远排序。活动状态分为:招募中(未满员,可报名)、已满人(发起人手动标记或分组满员)、已结束(活动时间已过,自动从列表移除)。已结束的活动不在附近活动列表中显示,用户仅可通过个人中心的"活动记录"或分享卡片查看已结束的活动。发起人在发起活动时可选择是否在附近活动发现中展示(默认展示)。用户点击活动卡片跳转至活动详情页。
招募状态转换
| 当前状态 | 触发条件 | 下一状态 |
|---|---|---|
| 招募中 | 活动正常展示,分组未满员 | 保持招募中 |
| 招募中 | 发起人点击"已满人" | 已满人 |
| 招募中 | 活动结束时间到达 | 已结束(从列表移除) |
| 已满人 | 有成员退出释放名额 | 招募中 |
| 已结束 | 不可逆转,仅个人中心/分享卡片可查看 | - |
个人中心
展示用户活动数据、历史球友关系和活动记录。用户可通过活动记录找到曾经一起玩过的球友,沉淀社交关系。
页面布局
页面从上到下依次为:① 导航栏(标题"我的"+设置入口),② 用户资料卡片(深色背景+头像+昵称+球类水平标签),③ 数据统计区(三栏:累计活动次数、球友数量、到场率),④ 历史球友区(横向滚动的球友头像列表+昵称+同场次数,右上角"查看全部"入口),⑤ 活动记录Tab切换栏(我发起的/我加入的),⑥ 活动记录列表,⑦ 底部Tab栏。
业务逻辑
个人中心展示用户的活动数据和社交关系沉淀。页面顶部为用户资料卡片,包含头像、昵称、球类和水平标签,点击可进入资料编辑页。资料卡片下方为三项统计数据:累计活动次数(发起和加入的活动总数)、球友数量(参与过同一活动的不同用户去重数)、到场率(实际到场次数/已报名活动次数,到场通过"我到了"按钮确认)。
历史球友区是新增核心功能:系统自动记录每次活动中参与过的所有用户,建立"同场关系"。球友列表按最近活动时间排序,横向滚动展示,每个球友显示头像、昵称和同场次数(如"3次同场")。点击"查看全部"进入球友列表完整页,支持按同场次数排序。球友列表是用户发现曾经一起玩过的人的入口,用户可点击球友查看其资料和即将发起的活动,实现社交关系沉淀。
历史球友区下方为活动记录列表,支持"我发起的"和"我加入的"两个Tab切换。每条记录展示分类图标、标题、时间、地点、状态标签(进行中/已结束/已取消)和参与人数。点击记录进入活动详情页或历史群聊。设置入口提供消息通知开关、隐私设置和关于页面。MVP阶段不提供等级、积分等游戏化元素,聚焦核心约球功能。
历史球友数据关系
| 字段名 | 类型 | 说明 |
|---|---|---|
| 用户A | 用户ID | 当前用户 |
| 用户B | 用户ID | 同场球友 |
| 活动ID | 活动ID | 共同参与的活动 |
| 同场次数 | 整数 | 共同参与活动的累计次数 |
| 最近同场时间 | 时间戳 | 最近一次共同参与的时间 |
广告变现
通过微信流量主(激励视频)和自有Banner位(外部广告主投放)实现广告变现。MVP阶段仅在活动大厅展示Banner广告,在关键用户行为节点展示激励视频广告。支持全局开关和个人免广告配置。
广告形式
| 广告形式 | 出现位置 | 触发方式 | 使用组件 |
|---|---|---|---|
| Banner广告 | 活动大厅导航栏下方 | 页面加载自动展示 | 自定义 ` |
| 激励视频广告 | 发起活动 / 加入活动 / 解锁表情包 | 用户主动点击触发 | `wx.createRewardedVideoAd()` |
激励视频触发场景
| 场景 | 触发时机 | 广告完成后行为 |
|---|---|---|
| 发起活动 | 用户点击"发布活动"按钮时,若需看广告则弹出激励视频,看完后活动发布成功 | 活动发布成功,进入发布确认页 |
| 加入活动(报名) | 用户点击"报名"按钮时,若需看广告则弹出激励视频,看完后报名成功 | 报名成功,进入报名确认页 |
| 解锁系统表情包 | 用户在组队聊天中点击"表情"面板,选择未解锁的表情时,弹出激励视频 | 解锁该表情包,可在聊天中使用 |
广告开关控制
| 层级 | 开关 | 说明 |
|---|---|---|
| 全局开关 | 后台设置 | 后台总开关控制激励视频广告是否全局开启。关闭时,所有用户跳过广告直接完成操作,Banner广告不受此开关影响 |
| 个人免广告 | 后台设置 | 后台可为每个用户单独设置"免广告"标记。开启后该用户在以上三个场景中无需观看激励视频,直接完成操作。个人免广告不影响Banner广告的展示 |
业务逻辑
MVP阶段采用两种广告形式:自有Banner广告和微信流量主激励视频广告。Banner广告为自有广告位,由外部广告主主动联系我们投放,后台管理员手动配置Banner素材(图片+跳转链接)。Banner广告仅出现在活动大厅主页,导航栏下方,使用 `
激励视频广告接入微信流量主,使用 `wx.createRewardedVideoAd()` API 创建激励视频广告实例,广告单元ID(adUnitId)在微信流量主后台创建并配置。激励视频广告在以下三个场景触发:① 发起活动时点击"发布活动"按钮;② 加入活动时点击"报名"按钮;③ 在组队聊天中解锁系统表情包时。
触发流程:用户执行触发操作 -> 系统检查全局开关是否开启 -> 全局关闭则直接完成操作 -> 全局开启则检查当前用户是否被标记为"免广告" -> 免广告则直接完成操作 -> 需看广告则调用激励视频广告 -> 用户完整观看广告视频 -> 广告关闭回调触发 -> 完成后续操作(发布活动/报名成功/解锁表情包)。用户若中途关闭广告(未完整观看),则不执行后续操作,回到触发前的页面状态,提示"观看完整广告即可完成操作"。
Banner广告不受全局开关和个人免广告影响,始终按后台配置展示。激励视频广告受全局开关和个人免广告双重控制,两层任一放行即可跳过广告。
Banner跳转页面
Banner点击后跳转到后台发布的文章详情页,展示文章标题和富文本正文内容。文章内容支持富文本渲染(标题、段落、加粗、图片、链接、有序/无序列表等),使用 `
个人主页入口
个人主页为全局可点击的通用入口,所有展示其他用户信息的地方(如活动卡片中的发起人名称、群聊中的成员头像/昵称、历史球友列表等),点击用户头像或昵称即可跳转到该用户的个人主页。个人主页展示用户头像、昵称、常打球类、个性化标签、活动统计等公开信息,为公开页面,所有用户可查看。个人主页不需要通过Banner跳转,不纳入Banner配置。
文章页字段规则
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 文章ID | 自增ID | 自动生成 | 文章唯一标识 |
| 标题 | 文本 | 是 | 文章标题,最多50字符 |
| 封面图 | 图片URL | 否 | 文章封面,≤2MB |
| 正文 | 富文本HTML | 是 | 支持标题/段落/加粗/斜体/图片/链接/列表等富文本格式 |
| 发布时间 | 时间戳 | 是 | 文章发布时间 |
| 状态 | 枚举 | 是 | 草稿/已发布/已下架 |
Banner广告字段规则
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Banner图片 | 图片URL | 是 | 建议尺寸750x280px,支持JPG/PNG |
| 文章ID | 文本 | 是 | 关联的文章ID,点击Banner后跳转到对应文章页 |
| 展示优先级 | 整数 | 是 | 数值越大优先级越高,同优先级随机展示 |
| 生效开始时间 | 时间戳 | 是 | Banner开始展示的时间 |
| 生效结束时间 | 时间戳 | 是 | Banner停止展示的时间 |
| 状态 | 枚举 | 是 | 启用/停用,停用后不参与展示 |
个人免广告字段规则
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 用户ID | 用户ID | 是 | 目标用户唯一标识 |
| 免广告 | 布尔 | 是 | true为免广告,false为正常展示广告 |
| 备注 | 文本 | 否 | 后台管理员的设置备注 |
全局开关字段规则
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 全局激励视频开关 | 布尔 | 是 | true为全局开启激励视频,false为全局关闭 |
| 激励视频单元ID | 文本 | 是 | 微信流量主后台创建的adUnitId |
他人个人主页
展示其他用户的公开信息,包括基本资料、活动统计和参加过的活动时间轴。为独立页面,不复用"我的"个人中心。所有展示其他用户信息的地方均可点击进入此页。
页面布局
页面从上到下依次为:① 导航栏(返回+标题"XX的主页"),② 用户资料卡片(深色背景+头像+昵称+球类和水平标签),③ 数据统计区(三栏:与多少人组过局 / 组织过多少场 / 到场率),④ 个人标签区(横向排列的标签chips),⑤ 活动记录时间轴(按时间倒序排列,左侧竖线+圆点时间轴样式)。无底部Tab栏,为纯浏览页面。
业务逻辑
他人个人主页为独立页面,不复用"我的"个人中心页面。页面展示目标用户的公开信息,任何用户均可查看。用户资料卡片展示头像、昵称和常打球类/水平标签,与个人中心风格一致但为只读模式(不显示编辑入口)。
数据统计区展示三项核心数据:① 与多少人组过局(该用户历史上所有活动中共同参与过的不同用户去重数),② 组织过多少场(该用户发起的活动总数),③ 到场率(实际到场次数/已报名活动总数,到场通过"我到了"按钮确认)。
个人标签区展示该用户设置的所有标签(预置标签+审核通过的自定义标签),横向排列,超出可换行。标签为只读展示。
活动记录时间轴是核心展示区:按时间倒序(最新在前)展示该用户参加过的所有活动(发起的和加入的均展示)。时间轴使用左侧竖线+圆点样式,每条记录包含:日期、活动分类图标、活动标题、状态标签(进行中/已结束/已取消)、活动时间、活动地点和参与角色(发起人/参与)。点击活动记录可跳转到活动详情页(仅可查看已公开信息,不显示报名操作按钮)。时间轴默认展示最近20条,上拉加载更多。
入口场景:活动卡片中的发起人昵称/头像、组队群聊中的成员头像/昵称、历史球友列表中的球友头像/昵称,点击均可跳转到该用户的他人个人主页。不提供"关注"、"私信"等社交操作入口,MVP阶段聚焦信息展示。
时间轴数据结构
| 字段名 | 类型 | 说明 |
|---|---|---|
| 日期 | 日期字符串 | 活动日期,格式YYYY年M月D日 |
| 活动ID | 活动ID | 关联活动唯一标识 |
| 分类图标 | 枚举 | 活动分类对应图标 |
| 活动标题 | 文本 | 活动标题 |
| 状态 | 枚举 | 进行中/已结束/已取消 |
| 活动时间 | 文本 | HH:mm格式 |
| 活动地点 | 文本 | 地点名称 |
| 参与角色 | 枚举 | 发起人/参与 |
全量流程图
本章使用Mermaid流程图覆盖MVP全部模块的核心业务流程,包含用户注册登录、发起活动、报名与审核、活动发现、组队沟通、广告变现等完整链路。