Skip to content

Repository files navigation

星幕网 (Shimmer)

一个现代化的在线演出票务预订平台 — 微光闪烁,精彩呈现

功能特性

用户端

  • 首页 - 热门演出推荐(基于订单收入算法排序)、分类浏览、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 部署指南

快速开始

方式一: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

方式二:本地开发

1. 启动数据库服务

# 使用 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

2. 初始化数据库

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

3. 启动后端服务

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

4. 启动前端服务

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 文档

认证接口

接口 方法 描述
/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反向代理
  • 日常运维与故障排查

许可证

本项目仅供学习交流使用。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages