billiards · 项目介绍

billiards

本页由项目自动归档生成,源码与最新进展以 GitHub 仓库为准。

项目简介

撞球派(billiards)是面向球房老板的台球赛事管理小程序,提供从球房注册、赛事发布、球员导入到球桌排产、比分登记、对阵图渲染的完整闭环。后端同时支持微信云开发与 Supabase 两种方案,并配套一个用于现场直播的 Web 电视大屏端,定位为轻量级 B2B2C 赛事 SaaS。

技术栈

维度 技术
主要语言/框架 微信小程序原生(WXML/WXSS/JS),appid wx1702ae609b433c63
关键依赖/库 微信云开发、Supabase JS、exceljs、express、pg、Cloudflare Workers
数据存储 微信云开发数据库 / Supabase Postgres(clubs、players、tournaments、matches 四张表)
运行/部署方式 微信开发者工具构建运行;Web 端 web/ 用 Express + pg 经 Docker 部署;Supabase 用 migrations + Edge Functions,经 Cloudflare Worker(api.zhuangqiupai.hummingg.com)代理

后端切换由 utils/api.js 的 USE_CLOUD 开关控制:true 走微信云开发 callFunction,false 走 Supabase Edge Function(经 CF Worker 代理,正式版必走备案域名)。

核心功能 / 亮点

  • 球房管理:cloudfunctions/createClub、deleteClub、getMyClub,支持绑定微信 OpenID、按 1,2-5,银1-银3 格式解析球桌(updateClubTables)。
  • 赛事发布:createTournament 支持单败 / 双败 / 小组赛+淘汰赛制,勾选启用球桌并生成 6 位赛事码。
  • 球员导入:importPlayers 接收微信群接龙文本,用正则批量提取选手姓名。
  • 球桌排产:dispatchTables 实现 FIFO 自动叫号、空桌即时补位,并支持手动指定「对阵→桌号」映射。
  • 比分登记:submitScore 录分后自动流转赢家到下一轮、清空桌号、触发补位;另有 submitGroupScore、getMatchData。
  • 对阵图:drawBracket / drawGroupBracket 渲染树状晋级图与小组赛积分榜。
  • 小组赛 + 淘汰赛:generateKnockout 由小组排名生成淘汰赛对阵,getGroupStandings 计算含相互战绩(H2H)排序的积分榜。
  • 双败赛制:胜者组 / 败者组 / 总决赛完整流转,含败者组冠军加赛机制。
  • TV 大屏:web/ 目录下的 Express Web 端为双栏看板(当前对局 + 候场队列),每 5 秒轮询刷新。
  • 导出 Excel:exportExcel 借助 exceljs 导出含小组赛积分榜与淘汰赛对阵表的赛事数据。

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
billiards/
├── app.js / app.json / app.wxss # 小程序入口与全局配置
├── pages/ # 13 个页面:index/dashboard/register/tournament/import/console/bracket/bscore/bscorer/brecords/bstats/weblogin/snooker
├── utils/ # api.js(USE_CLOUD 开关)、billiard-storage.js、billiard-util.js
├── cloudfunctions/ # 18 个云函数(见 cloudfunctions/README.md)
├── supabase/ # migrations + Edge Functions + Cloudflare Worker 配置
├── cloudflare/site/ # Cloudflare 静态站
├── web/ # TV 大屏 Web 端(Express + pg,Docker 部署,package.json 依赖 express/pg/exceljs)
├── tests/ # 测试
├── docs/race.md # 产品路径与开发 To-Do
├── GROUP_STAGE_PLAN.md # 小组赛阶段计划
└── GROUP_STAGE_COMPLETION_REPORT.md

相关链接