这是一个专为日麻对局设计的记分与统计应用。采用 Next.js 作为前端框架,Supabase 作为后端数据库,并部署在 Vercel 上。
- 数据看板:实时展示玩家总分天梯榜(支持滚动查看)及最近五场对局记录。
- 对局管理:
- 支持记录 4 人点数,自动计算位次分。
- 智能算分:支持同分情况,自动平摊顺位奖励(例如两人并列第一,则平摊一、二位的得分)。
- 支持对历史对局进行检索、修改和删除。
- 集成可搜索的玩家下拉选择框(Select2 风格)。
- 用户管理:支持添加新玩家及修改玩家名称(行内编辑)。
- 权限安全:
- 简单的管理后台登录(哈希加密存储凭证)。
- API Key 中间件保护,防止后端接口被非法调用。
- 自动化计算:核心算分逻辑经过单元测试验证,确保数据的准确性。
- 前端:Next.js (App Router), TypeScript, CSS Modules
- 后端:Supabase (PostgreSQL)
- 部署:Vercel
- 测试:ts-node (单元测试)
在 web 目录下创建 .env.local 文件,并填写以下配置:
NEXT_PUBLIC_SUPABASE_URL=你的Supabase项目地址
NEXT_PUBLIC_SUPABASE_ANON_KEY=你的Supabase匿名密钥
API_KEY=你的API保护密钥
NEXT_PUBLIC_API_KEY=你的API保护密钥(需与上方一致,用于前端调用)请在 Supabase SQL Editor 中执行以下建表操作:
players表:存储玩家信息(ID 使用BIGSERIAL)。matches表:存储对局基础信息(备注、桌号、时间)。match_results表:存储每场对局的具体得分和点数。player_totals视图:用于实时计算玩家累计总分。
(具体的 SQL 脚本可参考项目中的开发记录)
cd web
npm install
npm run dev打开 http://localhost:3000 即可访问。
npm run testRiichi-42/
├── web/ # Next.js 前端项目
│ ├── src/
│ │ ├── app/ # 页面路由与 API 路由
│ │ ├── lib/ # 通用工具类(算分逻辑、Supabase 客户端、权限校验)
│ │ ├── middleware.ts # API 安全中间件
│ │ └── globals.css # 全局样式
│ └── package.json
└── README.md # 项目说明文档
- 第一名:
20 + (点数/1000) - 第二名:
(点数/1000) - 20 - 第三名:
(点数/1000) - 40 - 第四名:
(点数/1000) - 60 - 同分处理:如果出现名次并列,则取对应名次分值的平均值。