Skip to content

社交活动发布模块 (Social & Professional Activities)

文档版本: V1.2 更新日期: 2024-05-20 状态: 评审中

0. 背景与目标 (Context & Goals)

问题陈述 (Problem Statement)

  • 用户痛点:雪友在滑雪出行时难以找到水平相当的伙伴(拼车/拼房/搭子)或线下聚会局;教练和摄影师缺乏高效的获客与排期管理工具,常依赖微信群接龙,信息混乱且无履约保障。
  • 商业价值:通过高频的组局与工具化服务(教学/跟拍),提升 APP 打开率与用户粘性,并为二期交易抽佣建立基础。

成功指标 (Success Metrics)

  • 发布成功率:进入发布页到成功发布活动的转化率 > 60%。
  • 履约率:发布活动中最终状态为 已结束 的比例 > 40%。
  • 客诉率:因自动取消或排期冲突导致的用户投诉 < 1%。

一、 角色与活动类型

发布身份活动类型核心意图专属字段/功能准入要求
普通雪友约搭子拼车、拼房、纯滑雪搭子--
普通雪友聚会 (Gathering)饭局、剧本杀、KTV聚会标签 (#火锅 #桌游)、性别限制-
认证教练教学拼课找学员、拼野雪教学多时段排期、教学类别、水平要求教练 认证
认证摄影师摄影跟拍约拍、跟拍服务多时段排期、交付周期、跟拍类型摄影师 认证

:俱乐部官方活动将由独立的"俱乐部管理后台"发布,不在本模块范围内。但在本模块中,雪友发起的活动可关联其所在的俱乐部,用于社群引流。


二、 核心场景流程

2.1 状态流转图 (Lifecycle)

从"生效"与"取消"维度管理生命周期。

mermaid
stateDiagram-v2
    [*] --> 招募中: 发布活动
    招募中 --> 已生效: 达到最低参与人数
    招募中 --> 已取消: 触发自动取消规则 / 发起人主动取消
    招募中 --> 已取消: 所有人退出
    已生效 --> 已结束: 活动时间结束
    已生效 --> 已取消: 发起人因故取消 (需赔付)
    已结束 --> [*]
    已取消 --> [*]

    state 招募中 {
        [*] --> 名额未满
        名额未满 --> 名额已满: 报名人数达到上限
        名额已满 --> 名额未满: 有人退出
    }

2.2 报名与超额处理流程

mermaid
flowchart TD
    Start[用户点击报名] --> CheckLimit{名额已满?}
    CheckLimit -- 未满 --> CheckPay{需支付?}
    
    %% 正常报名流程
    CheckPay -- 免费/线下AA --> Success[报名成功]
    CheckPay -- 线上支付 --> Pay[发起支付]
    Pay -- 成功 --> Success
    
    %% 超额处理流程
    CheckLimit -- 已满 --> CheckType{超额策略?}
    CheckType -- 禁止超额 --> Reject[提示名额已满]
    
    CheckType -- 允许等位 --> JoinWaitlist[支付并加入等位列表]
    JoinWaitlist --> WaitNotify[提示当前排位]
    
    CheckType -- 允许摇号 --> JoinPool[支付并加入抽签池]
    JoinPool --> PoolNotify[等待开奖通知]
    
    %% 补位逻辑 (异步)
    Success --> JoinGroup[自动加入 IM 群组]
    JoinGroup --> DeductInventory[扣减库存]
    UserExit[有人退出] --> ReleaseInventory[释放库存]
    ReleaseInventory --> CheckWaitlist{有等位者?}
    CheckWaitlist -- 是 --> AutoMove[队首自动补位]
    AutoMove --> Success

三、 详细字段定义

3.1 基础设置 (通用)

字段名称类型必填逻辑/约束默认值
标题文本最多 30 字。-
地点地点关联雪场 POI。-
活动说明富文本支持文字与图片。-

3.2 身份与类型专属设置

A. 雪友 - 聚会 (Gathering)

字段类型说明
聚会主题标签选择#火锅 #烧烤 #桌游 #KTV #其他
性别要求单选不限 / 仅男 / 仅女
时间单点时间e.g., 晚上 20:00

B. 教练/摄影师 - 职业排期 (Professional Scheduling)

支持多时段与周期性发布

字段交互逻辑说明
发布模式切换单日多时段 / 周期性重复
日期范围日历选择e.g., 2023-12-01 至 2024-03-15
重复规则多选标签每天 / 工作日 / 周末 / 节假日
每日时段动态列表 (List)可添加多个具体的服务时段。
e.g., 09:00-12:00, 13:30-16:30

3.3 费用与权益

字段名称交互逻辑细则
收费模式切换标签1. 免费活动
2. 线下AA (仅展示预估费用)
3. 线上支付 (真金白银交易, 平台托管)
单价数字输入仅"线上支付"有效。精确到 0.01 元。
退改政策下拉选择1. 随时退 (活动开始前均可退)
2. 24小时前可退 (标准)
3. 不可退 (强约束)

3.4 高级设置

区域字段交互/逻辑
人数控制限制人数整数输入, 最小 1, 最大 100.
允许超额报名开关
开启时显示子选项:
- 报名等位: 先到先得排队。
- 报名摇号: 随机抽取入选者。
活动对象准入范围单选:
1. 所有用户
2. 仅限实名认证
3. 仅限俱乐部成员
生效风控自动取消活动开关
开启时需填写规则:
"活动开始前 [24] 小时内,若报名人数不足 [2] 人,由系统自动处理退款通知。"
社群引流关联俱乐部选择发起人加入的俱乐部,活动将展示在俱乐部页。
即时通讯群聊功能默认开启
活动发布成功后,系统自动创建 App 内 IM 群组,报名成功者自动入群。
活动管理管理与我的发布详见 管理与我的发布
- 编辑:仅限无人报名时。
- 取消:进行中活动。
- 删除:已结束/已取消活动。

四、 复杂逻辑详解

4.1 自动取消 (Auto-Cancellation)

mermaid
flowchart TD
    Timer("定时任务 (每分钟)") --> FindActs{查找活动}
    FindActs --> Filter[筛选: 招募中 + 开启自动取消]
    Filter --> CheckTime{"当前时间 ≥ (开始时间 - 设定阈值)?"}
    
    CheckTime -- 否 --> Skip[跳过]
    CheckTime -- 是 --> CheckCount{"当前人数 < 最低生效人数?"}
    
    CheckCount -- 否 --> Lock["锁定活动: 不再触发自动取消"]
    CheckCount -- 是 --> ExecCancel[执行取消]
    
    ExecCancel --> UpdateStatus[状态变更为: 已取消]
    UpdateStatus --> Refund[触发自动退款]
    Refund --> Notify["发送取消通知 (短信/推送)"]

五、 验收标准 (Acceptance Criteria)

  1. 聚会场景:确认选择"聚会"类型时,出现"聚会主题"标签云 (#火锅 等)。
  2. 排期场景:教练发布一个"12月全月,每周末,9点/13点"的活动,需在日历上正确生成约 8-10 天 x 2 时段 = 16-20 个独立的 sku 或活动实例。
  3. 群聊场景:报名成功后,检查"消息"列表应出现该活动的群聊。
  4. 自动取消:T-24h 且人数不足时,活动自动变更为 Cancelled。

六、 不做范围 (Out-of-Scope)

  • 保险售卖:MVP 阶段暂不捆绑保险销售。
  • 跨天排期:暂不支持单个 SKU 跨越 24 点(如通宵活动需拆分)。

C 端详情页

雪友组局详情页 PRD

版本: V2.0
更新日期: 2026-01-21
依赖: 通用组件规范更新内容: TypeSwitcher 类型切换器、4 种组局类型专属字段、关联信息展示规则


一、模块定位

场景:雪友发起的社交活动(拼车/拼房/搭子/聚会),或认证教练/摄影师的单次服务。

核心交互:查看详情 → 报名 → 自动入群


二、差异化插槽区

2.0 TypeSwitcher 活动类型切换器

V2.0 新增:支持 4 种组局类型切换

┌────────────────────────────────────┐
│ [👥 搭子] [🚗 拼车] [🏨 拼房] [🍽️ 聚会] │
└────────────────────────────────────┘
类型标识中文名称图标说明
SKI_BUDDY搭子👥找滑雪搭子/教练/摄影
CARPOOL拼车🚗往返雪场拼车
HOTEL拼房🏨酒店拼房
DINING聚会🍽️火锅/饭局/KTV 等

交互:横向标签切换,所选类型高亮


2.1 各类型专属字段

2.1.1 搭子 (SKI_BUDDY)

字段类型必填说明
genderEnum性别要求(不限/限男/限女)
skillLevelEnum能力要求(不限/初级/中级/高级)

2.1.2 拼车 (CARPOOL)

字段类型必填说明
genderEnum性别要求
departureObject出发地(名称+时间)
destinationObject目的地(名称+预计时间)
tripTypeEnum单程/往返
carString车型
seatsInteger座位数
canCarryBoardBoolean可放雪板
canCarryLuggageBoolean可放行李

2.1.3 拼房 (HOTEL)

字段类型必填说明
roomTypeEnum类型(雪票/住宿/雪票+住宿)
genderEnum性别要求
hotelNameString酒店名称

2.1.4 聚会 (DINING)

字段类型必填说明
genderEnum性别要求
expectedCountInteger预计人数
budgetPerPersonInteger人均预算(元)
themeArray聚会标签(#火锅 #桌游 等)

2.2 报名信息区

┌────────────────────────────────────┐
│ 📍 太舞滑雪小镇 · W酒店大堂          │
│ 📅 01/25 周六 20:00                 │
│ 👥 3/6 人 · 仅差3人即可成行          │
├────────────────────────────────────┤
│ 🏷️ 标签                            │
│ ┌────────────────────────────────┐ │
│ │ #火锅  #拼房  #女生友好          │ │
│ └────────────────────────────────┘ │
├────────────────────────────────────┤
│ 📋 报名人列表                       │
│ ┌────────────────────────────────┐ │
│ │ [头像1] [头像2] [头像3] +3      │ │
│ └────────────────────────────────┘ │
└────────────────────────────────────┘

通用字段定义

字段名类型说明
活动地点地点关联雪场 POI
活动时间时间戳活动开始时间
当前人数整数已报名人数
人数上限整数最大可报名人数
最低人数整数成行所需最低人数
聚会标签数组标签列表(#火锅 #拼车 等)
已报名用户数组用户头像列表

人数状态展示

条件展示文案
当前人数 < 最低人数👥 {当前}/{上限}人 · 仅差{最低-当前}人即可成行
最低人数 ≤ 当前人数 < 上限👥 {当前}/{上限}人 · 已成行 (绿色)
当前人数 = 上限👥 {当前}/{上限}人 · 已满员 (橙色)

2.2 费用信息区

┌────────────────────────────────────┐
│ 💰 费用说明                        │
├────────────────────────────────────┤
│ 收费模式:线下AA                    │
│ 预估费用:约 ¥150/人               │
│                                    │
│ ⚠️ 实际费用以现场结算为准           │
└────────────────────────────────────┘

字段定义

字段名类型说明
收费模式枚举免费/线下AA/线上支付
单价金额线上支付模式下的价格
预估费用金额AA 模式下的预估金额

收费模式展示

收费模式展示样式
免费💰 免费活动
线下AA预估费用:约¥{预估费用}/人 + ⚠️ 提示
线上支付💰 ¥{单价}/人 + 平台托管说明

2.3 拼车信息区(CARPOOL 场景专属)

┌────────────────────────────────────┐
│ 🚗 拼车信息                        │
├────────────────────────────────────┤
│ ● 北土城地铁站C口                   │
│   出发 06:00                [单程]  │
│ │                                  │
│ ● 崇礼万龙雪场                      │
│   预计到达 约08:30                  │
├────────────────────────────────────┤
│ 🚙 别克 GL8 · 银色                  │
│ 👥 3/4 个空位                       │
│ ✅ 可放雪板  ✅ 可放行李             │
└────────────────────────────────────┘

字段定义

字段名类型必填说明
departure.nameString出发地点名称
departure.timeString出发时间
destination.nameString目的地名称
destination.timeString预计到达时间
tripTypeEnum单程 / 往返
carString车型信息(可选)
seats.totalInteger总座位数
seats.availableInteger剩余座位数
canCarryBoardBoolean是否可放雪板
canCarryLuggageBoolean是否可放行李

展示规则

  • 路线时间线:使用圆点+竖线视觉连接出发地与目的地
  • 行程类型:右上角标签展示「单程」或「往返」
  • 车型:可选字段,未填写时不展示
  • 行李标签:仅在对应字段为 true 时展示

三、须知规则区配置

标题📋 活动须知

内容来源(根据发布配置动态生成):

配置项展示文案
准入范围 = 所有用户(不显示)
准入范围 = 仅限实名• 准入范围:仅限实名认证用户
准入范围 = 仅限俱乐部• 准入范围:仅限 {俱乐部名称} 成员
性别要求 = 仅女• 性别要求:仅限女生报名
性别要求 = 仅男• 性别要求:仅限男生报名
自动取消开启• 自动取消:活动前{N}小时不足{M}人将自动取消退款
退改政策 = 随时退• 取消规则:活动开始前均可取消
退改政策 = 24小时前可退• 取消规则:活动前24小时可取消
退改政策 = 不可退• 取消规则:报名后不可取消

四、关联信息展示规则

V2.0 新增:遵循通用组件规范中的 ClubCard / ResortCard 定义

4.1 关联俱乐部 (ClubCard)

位置:发起人卡片下方

条件渲染:仅当活动配置了关联俱乐部时显示

4.2 关联雪场 (ResortCard)

位置:活动须知区下方(页面底部)

条件渲染:仅当活动配置了关联雪场时显示


五、发布者卡片配置

发起身份展示样式
普通雪友用户头像 + 昵称 + 「实名认证」标签
认证教练用户头像 + 昵称 + 🎿认证教练 + 评分
认证摄影师用户头像 + 昵称 + 📷认证摄影师 + 评分

五、报名流程(底部抽屉)

5.1 免费/AA 活动

┌────────────────────────────────────┐
│ 确认报名                      [×]  │
├────────────────────────────────────┤
│ 活动:太舞周末火锅局               │
│ 时间:01/25 周六 20:00            │
│ 地点:W酒店大堂                    │
├────────────────────────────────────┤
│ 报名人信息                         │
│ 姓名 *        [            ]       │
│ 手机号 *      [🔒 138****8888 ]      │
│ ⓘ 默认使用注册手机号                │
├────────────────────────────────────┤
│ ☑ 我已阅读并同意《活动须知》        │
├────────────────────────────────────┤
│ ⓘ 报名成功后将自动加入活动群聊      │
├────────────────────────────────────┤
│           [确认报名]               │
└────────────────────────────────────┘

5.2 线上支付活动

┌────────────────────────────────────┐
│ 确认报名                      [×]  │
├────────────────────────────────────┤
│ 活动:初级教学拼课                 │
│ 时间:01/26 周日 09:00-12:00      │
│ 地点:云顶初级道                   │
├────────────────────────────────────┤
│ 报名人信息                         │
│ 姓名 *        [            ]       │
│ 手机号 *      [🔒 138****8888 ]      │
│ ⓘ 默认使用注册手机号                │
│ 滑雪水平      [初级 ▼]             │
├────────────────────────────────────┤
│ 费用明细                           │
│ ¥199 × 1人 = ¥199                  │
├────────────────────────────────────┤
│           [确认支付 ¥199]          │
└────────────────────────────────────┘

5.3 异常流程

参见 通用组件规范 中关于「报名异常处理」的定义。支持以下错误类型反馈:

  • 名额已满 (FULL)
  • 报名截止 (EXPIRED)
  • 活动取消 (CANCELLED)
  • 无报名资格 (NO_QUALIFICATION)
  • 网络异常 (NETWORK)

5.5 退出/取消报名流程 (Participant Cancel)

场景:已报名的用户因故无法参加,需发起退款/退出。

交互入口

  1. 主入口我的 Tab (底部导航) → 内容广场 (卡片区) → 我的参与 (右侧卡片)。
  2. 交互动作:点击目标活动卡片进入详情页(或唤起管理弹窗)进行取消操作。
┌────────────────────────────────────┐
│ 我的报名信息                  [×]  │
├────────────────────────────────────┤
│ 状态:✅ 报名成功                   │
│ 凭证:8293-2938-1234               │
├────────────────────────────────────┤
│ [进入群聊]    [查看订单详情]        │
├────────────────────────────────────┤
│ ⚠️ 如无法参加,请提前取消。          │
│ [        取消报名/退款        ]     │
└────────────────────────────────────┘

取消规则判定

  • 免费/AA:直接退出,释放名额。
  • 付费:根据「退改政策」判断:
    • 符合退款:自动原路退回,释放名额。
    • 不符退款:弹窗提示「当前已过退款截止时间,无法取消,建议自行转让」。

六、底部操作栏配置

元素内容
左侧信息按收费模式展示(见标题区价格规范)
主按钮我要报名
状态变体已报名:进入群聊 / 已满员:已满员 / 已结束:已结束

七、群聊功能

自动入群逻辑

报名成功

检查活动是否有群聊
    ↓ 有
将用户加入群聊

跳转「报名成功」页,显示「进入群聊」按钮

报名成功页

┌────────────────────────────────────┐
│            ✅ 报名成功              │
├────────────────────────────────────┤
│ 太舞周末火锅局                      │
│ 📅 01/25 周六 20:00                │
│ 📍 W酒店大堂                        │
├────────────────────────────────────┤
│ 💬 已自动加入活动群聊               │
├────────────────────────────────────┤
│   [进入群聊]      [返回首页]        │
└────────────────────────────────────┘

七、群聊功能 (原七)

... (Previous content of Section 7) ...


八、管理操作

发起人管理入口: 所有管理操作(编辑活动 / 取消活动 / 删除活动)统一收敛至 「我的」-「我的发布」 列表页进行操作。 详情页内不提供发起人的编辑/取消入口,保持详情页作为信息展示与报名的纯粹性。

详细交互规范请查阅:管理与我的发布


九、不做范围 (原八)

以下功能不在 MVP 范围内

  • 等位机制:满员后加入等位列表,有人退出自动递补
  • 摇号机制:满员后加入抽签池,随机抽取入选者

九、验收标准

  1. 准入校验:仅限女生活动,男性用户报名时弹出提示拒绝
  2. 人数状态正确:实时展示当前/最大人数及成行状态
  3. 自动入群:报名成功后 3 秒内自动加入活动群
  4. 标签展示:正确渲染聚会标签和性别要求标签
  5. AA 费用提示:线下 AA 活动明确提示「实际费用以现场结算为准」
  6. 自动取消提示:开启自动取消的活动在须知中展示规则
  7. 退改政策展示:须知区正确展示退改政策文案
  8. 满员状态:当前人数达到上限时,按钮变为「已满员」且不可点击