一个现代化的在线演出票务预订平台 — 微光闪烁,精彩呈现
- 首页 - 热门演出推荐(基于订单收入算法排序)、分类浏览、Banner轮播
- 演出列表 - 按分类/状态筛选,支持搜索和多种排序(价格、时间、库存)
- 演出详情 - 演出信息、票种选择、立即抢购
- 秒杀抢票 - 分布式锁保证抢票一致性
- 订单管理 - 订单列表、订单详情、取消/支付/退款
- 个人中心 - 账户设置、隐私设置、数据导出
- 数据看板 - 今日/本周收入、订单统计、分类分布、演出分布扇形图
- 用户管理 - 用户列表、状态管理、删除
- 演出管理 - CRUD 演出信息、封面上传
- 票种管理 - 票种配置、库存管理
- 订单管理 - 订单列表、退款处理、订单导出
- 分类管理 - 演出分类配置
- 系统设置 - 系统配置管理
- 日志审计 - 管理员操作日志
| 层级 |
技术 |
| 前端 |
React 19 + TypeScript + Vite 6 + Tailwind CSS |
| 后端 |
Go 1.23 + Gin Web Framework + GORM |
| 数据库 |
MySQL 8.0 |
| 缓存 |
Redis 7 |
| 认证 |
JWT + bcrypt |
| 部署 |
Docker + Docker Compose + Nginx |
Shimmer/
├── Backend/ # Go 后端服务
│ ├── controller/ # 控制器层
│ ├── middleware/ # 中间件(认证、日志)
│ ├── model/ # 数据模型层
│ ├── router/ # 路由配置
│ ├── util/ # 工具函数
│ ├── uploads/ # 上传文件(封面图、头像)
│ └── Dockerfile # Docker 构建文件
│
├── Web/ # React 前端应用
│ ├── src/
│ │ ├── api/ # API 请求封装
│ │ ├── components/ # 公共组件
│ │ │ └── common/ # 通用组件(CustomSelect等)
│ │ ├── contexts/ # React Context
│ │ ├── hooks/ # 自定义 Hooks
│ │ ├── pages/ # 页面组件
│ │ │ ├── admin/ # 管理端页面(Dashboard等)
│ │ │ ├── Home.tsx # 首页(热门排序)
│ │ │ ├── Login.tsx # 登录页
│ │ │ └── ...
│ │ └── types/ # TypeScript 类型定义
│ ├── Dockerfile # Docker 构建文件
│ └── nginx.conf # Nginx 配置
│
├── Database/ # 数据库脚本
│ ├── Createdb.sql # 初始化表结构
│ ├── InitData.sql # 测试数据
│ └── admin_schema.sql # 管理员表结构
│
├── deploy/ # 部署专用
│ ├── docker-compose.yml # 生产环境编排
│ ├── .env.example # 环境变量模板
│ ├── Database/ # 数据库脚本
│ ├── images/ # Docker 镜像 tar 包
│ └── DEPLOY.md # 部署指南
│
├── docker-compose.yml # 本地开发编排
├── .env.example # 环境变量模板
├── README.md # 本文档
├── ACCOUNTS.md # 账户文档
├── TESTING.md # 测试文档
└── DOCKER_DEPLOY.md # Docker 部署指南
# 1. 克隆项目
git clone https://github.com/Zviolin/ShimmerWeb.git
cd ShimmerWeb
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,设置 MYSQL_ROOT_PASSWORD 和 JWT_SECRET
# 3. 启动所有服务
docker compose up -d --build
# 4. 访问应用
# 前端: http://localhost
# 后端API: http://localhost:8080/api
# 健康检查: http://localhost:8080/health
# 使用 Docker 启动 MySQL 和 Redis
docker run -d --name shimmer-mysql \
-e MYSQL_ROOT_PASSWORD=Shimmer2024Secure! \
-e MYSQL_DATABASE=ticketdb \
-p 3308:3306 \
mysql:8.0
docker run -d --name shimmer-redis \
-p 6399:6379 \
redis:7-alpine
docker exec -i shimmer-mysql mysql -uroot -p'Shimmer2024Secure!' < Database/InitData.sql
docker exec -i shimmer-mysql mysql -uroot -p'Shimmer2024Secure!' ticketdb < Database/admin_schema.sql
cd Backend
# 设置环境变量
export JWT_SECRET=your-secure-secret-key
export DATABASE_HOST=localhost
export DATABASE_PORT=3308
export DATABASE_USERNAME=root
export DATABASE_PASSWORD=Shimmer2024Secure!
export DATABASE_DBNAME=ticketdb
export REDIS_HOST=localhost
export REDIS_PORT=6399
go run main.go
cd Web
pnpm install
pnpm dev
| 角色 |
用户名 |
密码 |
地址 |
| 超级管理员 |
admin |
123456 |
/admin/login |
| 内容管理员 |
content_mgr |
123456 |
/admin/login |
| 票务管理员 |
ticket_mgr |
123456 |
/admin/login |
| 普通用户 |
testuser01 ~ testuser05 |
123456 |
/login |
首次登录后请立即修改默认密码!
| 接口 |
方法 |
描述 |
/api/auth/register |
POST |
用户注册 |
/api/auth/login |
POST |
用户登录 |
/api/admin/auth/login |
POST |
管理员登录 |
| 接口 |
方法 |
描述 |
/api/performances |
GET |
演出列表 |
/api/performances/with-stats |
GET |
演出列表(含销售统计,热门排序) |
/api/performances/:id |
GET |
演出详情 |
/api/performances/categories |
GET |
分类列表 |
/api/system/config/public |
GET |
公开系统配置 |
/health |
GET |
健康检查 |
| 接口 |
方法 |
描述 |
/api/users/current |
GET |
获取当前用户信息 |
/api/orders |
GET |
用户订单列表 |
/api/orders/:id |
GET |
订单详情 |
/api/orders/:id/pay |
POST |
支付订单 |
/api/orders/:id/cancel |
POST |
取消订单 |
| 接口 |
方法 |
描述 |
/api/admin/dashboard/stats |
GET |
仪表盘统计(支持分类筛选) |
/api/admin/dashboard/category-distribution |
GET |
分布数据(演出类型/演出分布) |
/api/admin/users |
GET |
用户列表 |
/api/admin/performances |
GET/POST |
演出列表/创建 |
/api/admin/ticket-types |
GET |
票种列表 |
/api/admin/orders |
GET |
订单列表 |
首页热门演出排序基于真实订单数据计算:
- 订单数量(权重 40%):销售越多越热门
- 收入金额(权重 40%):收入越高越热门
- 库存紧迫度(权重 20%):库存越少越热门
价格排序按最低票价从低到高/从高到低排列。
- 选择分类后可查看该分类下各演出的订单数/收入占比扇形图
- 数据趋势图支持按分类筛选
- 实时统计今日/本周订单和收入
| 变量名 |
描述 |
必填 |
MYSQL_ROOT_PASSWORD |
MySQL root密码 |
是 |
JWT_SECRET |
JWT签名密钥 |
是 |
DB_PASSWORD |
数据库连接密码(与MYSQL_ROOT_PASSWORD一致) |
是 |
CORS_ALLOWED_ORIGINS |
CORS允许的域名 |
否 |
TZ |
时区 |
否(默认Asia/Shanghai) |
| 服务 |
端口 |
说明 |
| 前端 (Nginx) |
80 |
Web 入口 |
| 后端 (Go) |
8080 |
API 服务 |
| MySQL |
3308 |
数据库(外部访问) |
| Redis |
6399 |
缓存(外部访问) |
- JWT 令牌认证
- 密码 bcrypt 加密
- 强密码策略验证
- 文件类型上传限制
- SQL 注入防护
- XSS 防护
- CORS 跨域限制
- 操作日志审计
- 管理员权限控制
- 环境变量敏感信息隔离
# Docker
docker compose up -d --build # 构建并启动
docker compose down # 停止并移除容器
docker compose logs -f backend # 查看后端日志
docker compose restart # 重启服务
# 前端
pnpm install # 安装依赖
pnpm dev # 开发模式
pnpm build # 生产构建
# 后端
go mod tidy # 整理依赖
go build # 编译
go run main.go # 运行
详细部署指南请查看 deploy/DEPLOY.md,包含:
- Docker 镜像构建与打包
- 生产环境安全加固
- 域名解析与Nginx反向代理
- 日常运维与故障排查
本项目仅供学习交流使用。