sanapati-tenis
Next.js · React / 后台 · 作者 MrPrinceAli
基于 Next.js 15 与 SQLite 的开源网球社区平台,提供场地预订、公开赛程、约球匹配、锦标赛、球员资料、图库与后台管理,支持印尼语/英语双语,面向印尼网球俱乐部与社群。
使用许可与条件
尚未完成使用条件评估,请先查看原仓库许可证。
查看许可来源
模板详细介绍
Sanapati Tenis 是一个面向印尼网球俱乐部和社群的开源平台,采用 Next.js 15 App Router、TypeScript、Tailwind CSS v4 和 SQLite(本地文件或 Turso)构建。它把日常运营中常用的功能集中在一起:场地预订、公开赛程日历、约球与匹配、锦标赛管理、球员资料、图库以及管理员后台。预订本身免费,不涉及价格或支付功能,场地数量可由管理员自由设置。
平台默认提供印尼语和英语两种语言,语言选择保存在 cookie 中,覆盖所有页面、错误提示、日期时间格式以及日历文件。业务规则(如营业时间、单次预订时长上限、提前预订天数、自助取消时限)可在管理后台调整,并存储在数据库的 settings 表中。预订冲突检查与插入在同一个 SQLite 事务中完成,避免同一时段被重复预订。
管理员后台包含概览统计、预订管理、场地与时段封锁、图库、用户管理、约球管理和全局设置等标签页。所有服务器操作都会独立检查角色权限,而不仅仅隐藏按钮。项目还包含针对真实浏览器的端到端测试,覆盖多角色、多语言、错误页面、图库、常规俱乐部时段和服务器操作渗透测试。
主要特点
- 场地预订采用场地×小时面板,支持连续选择1–3小时,最多可预订未来14天
- 公开赛程日历展示月度密度与每日每小时详情,仅显示公开资料的球员姓名
- 约球与匹配功能支持轮换赛和淘汰赛,可设置性别规则、目标分数和时长,自动生成对阵与积分榜
- 管理员可配置每周固定俱乐部时段,以重复模式存储,无需定时任务即可长期生效
- 内置印尼语/英语双语,覆盖界面、错误消息、日期格式和日历文件
- 提供管理员后台,可管理预订、场地、图库、用户、约球和全局设置
适用场景
- 网球俱乐部日常运营:管理场地、开放预订、设置固定俱乐部时段并查看占用统计
- 社群组织约球或小型锦标赛:使用匹配功能随机分组、记录比分并自动生成积分榜或淘汰赛对阵
- 球员自助服务:查看公开赛程、在线预订场地、管理个人预订、接收提醒并下载日历文件
- 多语言环境下的俱乐部网站:面向印尼语和英语用户提供一致的界面与通知
适合人群
- 印尼的网球俱乐部或社群,需要开源、可自行部署的场地预订与活动管理平台
- 希望以模板为基础二次开发或定制自己俱乐部网站的技术团队
- 需要多语言支持且不涉及在线支付的免费预订场景
使用前需要核对
- 运行 npm install 和 npm run dev 即可启动,首次访问会自动创建 SQLite 数据库并填充示例数据(2个场地、5名球员、近3周预订和图库)
- 开发模式下提供演示账号:管理员 admin@sanapati.id / admin123,球员 raka@contoh.id / tenis123
- 生产环境仅创建管理员账号,密码来自 ADMIN_PASSWORD 环境变量,且必须设置至少32字符的 SESSION_SECRET,否则应用拒绝启动
- 数据库默认使用本地 SQLite 文件(./data),也可通过环境变量切换到 Turso;上传的图片在本地模式下保存在 ./data/uploads
- 删除 data/ 文件夹可重置数据库并重新生成示例数据;数据库迁移为增量式,更新代码不会清除已有数据
本介绍由 AI 根据目录元数据和仓库 README 整理,实际功能以原仓库为准。