BNEF活动管理平台

基于 React 19 + Supabase + 微信生态的活动管理 SaaS 平台,含 C 端(微信内浏览器)和 Admin 后台,支持报名、签到、电子票、通知等全流程。

概述

BNEF 活动管理平台是一个功能完整的活动管理 SaaS 系统,技术栈为 React 19 + TypeScript + Vite + Tailwind v4 + Supabase + 微信生态。项目仓库位于 ~/projects/BNEF(GitHub: Restry/BNEF.git),线上地址为 https://demo.dtask.net(原 bnef.restry.cn 已迁移)。

系统包含 20 个用户端页面和 13 个管理端页面,覆盖活动浏览、报名、签到、电子票、收藏、PC 端适配等功能。数据库使用 Supabase,已完成 11 次迁移。

技术栈

层面技术
前端框架React 19 + TypeScript + Vite
UI 样式Tailwind CSS v4
后端/数据库Supabase(PostgreSQL + Auth + Edge Functions)
微信集成微信公众号 AppID wx225bf76b06064faa
测试框架Playwright (E2E) + Vitest (单测)

环境清单

环境配置文件Supabase URL前端地址
Dev(开发).envhttps://db.dora.restry.cnhttps://demo.dtask.net
Test(测试).env.testhttps://restry-dev.chinanorth3.cloudapp.chinacloudapi.cn
SIT(集成测试).env.sithttps://tiger-host.chinanorth3.cloudapp.chinacloudapi.cn

功能模块

用户端(20 页面)

  • 首页(活动列表、分类筛选、已结束筛选)
  • 活动详情(浏览量统计、倒计时、回放入口)
  • 报名流程(动态表单、“其它”选项、隐私协议)
  • 签到/电子票(二维码、搜索模式核销)
  • 个人中心(报名记录、收藏、个人信息)
  • PC 端适配(PCHome、PCEventDetail)

管理端(13 页面)

  • 数据看板(活动数/报名数/会员数/浏览量)
  • 活动管理(创建/编辑/发布/停止报名/隐藏/回收站)
  • 报名管理(筛选/搜索/导出/拼音列)
  • 通知系统(微信/短信模板选择、发送记录)
  • 权限管理(角色、管理员创建/Ban/Unban)
  • Banner 管理

测试体系

测试规模

  • 单元测试: 228 个用例,7 个文件,全部通过
  • E2E 测试: 179 个用例,17 个 spec 文件
  • Smoke 测试: 14 个用例(本地)+ 线上 smoke

测试迭代过程(10 轮进化)

BNEF Bot 执行了 10 轮测试迭代,从”写死脚本”进化到”像真人一样测试”:

  1. 第 1-2 轮: 修复 13 个失败单测,跑通 Smoke
  2. 第 3-4 轮: 修复 E2E 选择器过时问题(24 个),通过核心链路
  3. 第 5-6 轮: 补充签到/电子票/PC 端/个人信息 26 个新用例
  4. 第 7-8 轮: 清理 37 个 skip(部分是旧 spec 指向不存在的路由)
  5. 第 9-10 轮: 探索性测试——像真人 QA 浏览页面截图发现问题

探索性测试发现的真实问题

严重度问题状态
P1PC 端活动封面图 broken(img src="" 空值未处理)✅ 已修复
P1placeholder 占位图还在用 via.placeholder.com✅ 已修复
P2报名页时间格式不一致(ISO vs 中文格式)✅ 已修复
P3活动详情页无浏览量显示✅ 已修复
P3Console 报 406 错误(PGRST116 未静默处理)✅ 已修复
P3首页无”已结束”状态筛选✅ 已修复

测试覆盖缺口

模块单测E2E风险
auth.ts (529行)❌ 016🔴 认证核心无单测
notifications.ts (504行)❌ 01🔴 通知基本裸奔
Edge Functions (5个)❌ 00🔴 零覆盖
banners.ts / subscriptions.ts❌ 00🟡 零覆盖
components (14个)❌ 0🟡 无组件单测

架构审查发现

P0 安全漏洞:service_role key 暴露到前端

VITE_SUPABASE_SERVICE_ROLE_KEY 通过 import.meta.env 被打包进客户端 JS。虽然生产环境 .env 中变量名无 VITE_ 前缀(实际未暴露),但测试环境 .env.test 有此前缀。

修复方案:新建 admin-user Edge Function 处理 createAdmin/ban/unban 三个操作,前端改为调 Edge Function,删除 supabaseAdmin 导出。已实施。

架构问题

问题影响
API 层单体聚合对象无法 tree-shakeBundle 膨胀
45 个页面无代码分割首屏加载慢(微信内浏览器)
CheckIn 路由权限不一致未授权用户可访问签到页
EventDetail.tsx 976 行 God Component26 个 useState,不可维护
错误处理三种风格混用静默返回 [] 最危险
66 个 console.error 散落在 API 层生产环境暴露内部信息

项目整理

已清理

  • 17 个一次性探索脚本 + 72MB 临时文件
  • 过时文档:rollback-plan.md、changelog.md、Bug-list.md
  • 合并重复测试文档(test-case.md → 删)
  • 删除过时 POM 页面和 spec 文件
  • 删除无引用的 src/api/core.ts

docs/ 目录现状

文件内容
prd.md完整 PRD(1707 行)
e2e-test-cases.mdE2E 自动化测试案例清单
test-plan.md测试计划(已更新)
test-report-20260321.md测试报告

时间线

  • 2026-03-21: 项目整理,确认技术栈和环境清单
  • 2026-03-21~22: 10 轮 E2E 测试迭代,从 13 个失败到 0 failure
  • 2026-03-22: 探索性测试发现并修复 6 个真实问题
  • 2026-03-22: 项目文件清理(72MB 垃圾 + 过时文档)
  • 2026-03-23: 架构代码审查,发现并修复 P0 安全漏洞
  • 2026-03-24: 代码推送,PackHorizon-AI 部署

相关页面