2026-10-07-activity-share-referral-design.md 2.4 KB

活动分享推广与创建活动权限

日期: 2026-10-07 状态: 设计完成,待实现


需求概述

小程序端支持:

  1. 规划师(activity_provider,审核通过)可创建活动
  2. 分享活动带推荐人(海报 + 分享卡均携带 refCode)
  3. 新用户通过分享链接/小程序码进入时自动绑定推荐人

现有基础

功能 现有状态
活动详情页"生成海报"按钮 ✅ 已实现,调用 getShareQrCode,scene=id=X&ref=code
share-mixin.js 获取/绑定推荐码 ✅ 已实现,onLoad 捕获 refCode/inviteCode
App.vue 捕获 ?refCode= 参数 ✅ 已实现,captureReferralParams
App.vue 解析小程序码 scene ⚠️ 仅跳转邀请页,未绑定推荐人
活动创建权限 ⚠️ 仅 admin/activity_admin,未包含 activity_provider
activity/index manage Tab 创建按钮 ⚠️ 仅对 isAdmin 显示

变更清单

后端(cfc-backend)

文件: controller/ActivityController.java

修改以下 5 个接口,新增 activity_provider(审核通过)判断:

  • create — 允许 activity_provider 创建活动
  • update — 允许 activity_provider 编辑自己的活动
  • publish — 允许 activity_provider 发布活动
  • end — 允许 activity_provider 结束自己的活动
  • submit-review — 允许 activity_provider 提交审核

权限判断方式:查询 User 实体,检查 vendorType == 'activity_provider' 且 activityProviderStatus == 'approved'

前端(cfc-frontend)

文件 1: App.vue — handleScene()

  • 当 scene 中有 ref=XXX 时,已登录直接绑定推荐人,未登录存 storage 待登录后绑定
  • 不再仅跳转 /pages/invite/join

文件 2: pages/activity/index.vue — isAdmin computed

  • 新增 isActivityProvider 计算属性,查询用户 vendorType/activityProviderStatus
  • 创建活动按钮改为 v-if="isAdmin || isActivityProvider"

方案选型

采用方案A(复用现有推广体系):

  • 分享码 = 用户个人 referralCode(已有字段)
  • 绑定机制 = bindReferralIfNotSelf(已有方法,幂等)
  • 海报生成 = 复用 getShareQrCode(已有接口)

不变更的内容

  • 活动详情页海报生成逻辑(已完整)
  • 活动列表页(无需分享入口)
  • 数据库迁移(activity_provider_status 列已存在)
  • 后端其他 Controller/Service