# 抽奖游戏管理系统 - 完整功能清单

> **重要提示**: 这份文档记录了整个系统的所有功能、数据库结构、API接口和技术实现细节。如果需要在新的 VS Code 环境重新开发，请参照此文档作为需求说明。

## 📋 系统概述

### 系统信息
- **系统名称**: Lucky Draw (luckyDD)
- **技术栈**: PHP 7.4+ + MySQL 5.7+ + 原生 JavaScript
- **架构模式**: 前后端分离 + RESTful API
- **默认管理员**: 用户名 `admin` / 密码 `admin123`
- **显示设备**: HONOR Pad X8a 平板(分辨率 1920x1200)
- **控制终端**: 后台管理使用 PC 电脑,抽奖可通过手机远程触发

### 访问入口
- **后台管理**: `http://your-domain/backend/login.php` (PC端管理)
- **转盘游戏**: `http://your-domain/backend/pages/display.php?token={token}` (平板显示)
- **九宫格游戏**: `http://your-domain/backend/pages/grid_display.php?token={token}` (平板显示)
- **手机遥控**: `http://your-domain/backend/pages/mobile.php?token={token}` (手机触发抽奖)

---

## 🗄️ 数据库结构

### 核心表

#### 1. admins - 管理员表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
username        VARCHAR(50) UNIQUE NOT NULL       -- 登录用户名
password        VARCHAR(255) NOT NULL             -- 密码哈希（bcrypt）
email           VARCHAR(100)                      -- 邮箱
is_active       TINYINT(1) DEFAULT 1              -- 启用状态
last_login      DATETIME                          -- 最后登录时间
created_at      TIMESTAMP DEFAULT CURRENT_TIMESTAMP
```

#### 2. game_templates - 游戏模板表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
name            VARCHAR(100) NOT NULL             -- 游戏名称
type            ENUM('wheel','grid','scratch')    -- 游戏类型
description     TEXT                              -- 游戏描述
is_active       TINYINT(1) DEFAULT 1              -- 启用状态
style_config    JSON                              -- 样式配置（颜色、字体等）
game_config     JSON                              -- 游戏配置（规则、参数）
hide_title      TINYINT(1) DEFAULT 0              -- 隐藏主标题
hide_subtitle   TINYINT(1) DEFAULT 0              -- 隐藏副标题
created_at      TIMESTAMP
updated_at      TIMESTAMP
```

#### 3. access_tokens - 访问令牌表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
game_id         INT NOT NULL                      -- 关联游戏模板
token           VARCHAR(32) UNIQUE NOT NULL       -- 访问令牌（MD5）
name            VARCHAR(100)                      -- 令牌名称/备注
is_enabled      TINYINT(1) DEFAULT 1              -- 启用状态
max_uses        INT                               -- 最大使用次数（NULL=无限）
used_count      INT DEFAULT 0                     -- 已使用次数
expired_at      DATETIME                          -- 过期时间
created_at      TIMESTAMP
```

#### 4. prizes - 奖品表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
game_id         INT NOT NULL                      -- 关联游戏模板
name            VARCHAR(100) NOT NULL             -- 奖品名称
image           VARCHAR(255)                      -- 奖品图片路径
probability     DECIMAL(5,2) DEFAULT 0.00         -- 中奖概率（%）
stock           INT DEFAULT -1                    -- 库存（-1=无限）
original_stock  INT DEFAULT -1                    -- 初始库存
weight          INT DEFAULT 1                     -- 排序权重
is_active       TINYINT(1) DEFAULT 1              -- 启用状态
display_order   INT DEFAULT 0                     -- 显示顺序
bg_color        VARCHAR(20)                       -- 转盘背景色
icon_scale      DECIMAL(3,1) DEFAULT 1.0          -- 图标缩放倍数
icon_rotation   INT DEFAULT 0                     -- 图标旋转角度
icon_position   DECIMAL(3,2) DEFAULT 0.75         -- 图标位置（0.1-0.9）
text_offset_x   INT DEFAULT 0                     -- 文字X偏移（像素）
text_offset_y   INT DEFAULT 0                     -- 文字Y偏移（像素）
created_at      TIMESTAMP
```

#### 5. customers - 顾客表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
name            VARCHAR(50) NOT NULL              -- 顾客姓名
phone           VARCHAR(20)                       -- 电话号码
seat_no         VARCHAR(20)                       -- 座位号
server_name     VARCHAR(50)                       -- 服务员姓名
ip_address      VARCHAR(45)                       -- IP地址
user_agent      TEXT                              -- 浏览器UA
created_at      TIMESTAMP
```

#### 6. win_records - 中奖记录表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
game_id         INT NOT NULL                      -- 游戏ID
token_id        INT NOT NULL                      -- 令牌ID
prize_id        INT                               -- 奖品ID（NULL=未中奖）
customer_id     INT NOT NULL                      -- 顾客ID
seat_no         VARCHAR(20)                       -- 座位号
is_won          TINYINT(1) DEFAULT 0              -- 是否中奖
win_time        TIMESTAMP                         -- 中奖时间
ip_address      VARCHAR(45)                       -- IP地址
created_at      TIMESTAMP
```

#### 7. remote_controls - 远程控制表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
game_id         INT NOT NULL                      -- 游戏ID
token_id        INT                               -- 令牌ID(NULL=全局)
prize_id        INT NOT NULL                      -- 指定中奖奖品ID
is_used         TINYINT(1) DEFAULT 0              -- 是否已使用
used_at         DATETIME                          -- 使用时间
customer_id     INT                               -- 使用者顾客ID
created_by      INT NOT NULL                      -- 创建管理员ID
created_at      TIMESTAMP
```

**说明**: 远程控制指的是通过手机端触发平板上的抽奖动画,实现异地操作。管理员可在PC后台预设指定奖品(可选),用于内定中奖、测试流程或营销活动。未设置时按正常概率抽奖。

#### 8. system_logs - 系统日志表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
admin_id        INT                               -- 操作管理员ID
action          VARCHAR(50) NOT NULL              -- 操作类型
resource_type   VARCHAR(50)                       -- 资源类型
resource_id     INT                               -- 资源ID
description     TEXT                              -- 操作描述
ip_address      VARCHAR(45)                       -- IP地址
user_agent      TEXT                              -- 浏览器UA
created_at      TIMESTAMP
```

#### 9. rooms - 房间表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
name            VARCHAR(100) NOT NULL             -- 房间名称
is_active       TINYINT(1) DEFAULT 1              -- 启用状态
sort_order      INT DEFAULT 0                     -- 排序
created_at      TIMESTAMP
```

#### 10. servers - 服务员表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
name            VARCHAR(100) NOT NULL             -- 服务员姓名
is_active       TINYINT(1) DEFAULT 1              -- 启用状态
sort_order      INT DEFAULT 0                     -- 排序
created_at      TIMESTAMP
```

#### 11. system_config_kv - 系统配置表
```sql
config_key      VARCHAR(100) PRIMARY KEY          -- 配置键
config_value    TEXT                              -- 配置值
description     VARCHAR(255)                      -- 配置说明
created_at      TIMESTAMP
updated_at      TIMESTAMP
```

#### 12. display_queue - 显示队列表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
win_record_id   INT NOT NULL                      -- 中奖记录ID
token_id        INT NOT NULL                      -- 令牌ID
prize_id        INT                               -- 奖品ID
is_won          TINYINT(1) DEFAULT 0              -- 是否中奖
customer_name   VARCHAR(100)                      -- 顾客姓名
created_at      TIMESTAMP
consumed_at     DATETIME                          -- 消费时间
```

#### 13. poll_throttle - 轮询限流表
```sql
id              INT PRIMARY KEY AUTO_INCREMENT
token_id        INT NOT NULL                      -- 令牌ID
ip              VARCHAR(45) NOT NULL              -- IP地址
last_poll_at    TIMESTAMP                         -- 最后轮询时间
```

---

## 🎮 后台管理功能

### 1. 登录认证 (login.php)
- [x] 管理员用户名密码登录
- [x] Session 会话管理
- [x] 记录登录时间和IP
- [x] 失败登录日志记录

### 2. 仪表盘 (dashboard.php)
- [x] 系统概览数据统计
  - 游戏模板总数
  - 活跃令牌数量
  - 奖品配置数量
  - 今日中奖记录
  - 总参与人数
- [x] 快速操作入口
- [x] 左侧导航菜单
- [x] 单页应用动态加载页面

### 3. 游戏管理 (pages/games.php)
- [x] 游戏模板列表展示
  - 游戏名称、类型、状态
  - 关联令牌数、奖品数
  - 创建时间
- [x] 创建新游戏
  - 游戏名称、类型（转盘/九宫格/刮刮卡）
  - 游戏描述
  - 启用状态
- [x] 编辑游戏信息
- [x] 删除游戏（级联删除令牌、奖品、记录）
- [x] 启用/停用游戏
- [x] 快速生成访问令牌
- [x] 隐藏标题/副标题选项

### 4. 访问令牌管理 (pages/tokens.php)
- [x] 令牌列表展示
  - 令牌名称、关联游戏
  - 使用次数/最大次数
  - 启用状态、过期时间
  - 访问链接快捷复制
- [x] 创建新令牌
  - 选择游戏模板
  - 设置令牌名称
  - 使用次数限制（可选）
  - 过期时间（可选）
- [x] 编辑令牌信息
- [x] 删除令牌
- [x] 启用/停用令牌
- [x] 生成访问链接
  - 转盘游戏链接
  - 手机遥控链接
- [x] 一键复制链接
- [x] 快速打开手机遥控
- [x] 定期清理过期令牌

### 5. 奖品管理 (pages/prizes.php)
- [x] 奖品列表展示
  - 奖品名称、图片预览
  - 中奖概率、库存
  - 关联游戏
  - 启用状态
- [x] 创建新奖品
  - 选择游戏模板
  - 奖品名称
  - 上传奖品图片
  - 设置中奖概率
  - 库存数量（-1=无限）
  - 排序权重
- [x] 编辑奖品信息
- [x] 删除奖品
- [x] 启用/停用奖品
- [x] 图片上传和预览
- [x] 资源浏览器选择已有图片
- [x] 转盘显示控制
  - 显示顺序 (display_order)
  - 背景颜色 (bg_color)
  - 图标缩放 (icon_scale: 0.1-2.0)
  - 图标旋转 (icon_rotation: 0-360度)
  - 图标位置 (icon_position: 0.1-0.9)
  - 文字偏移 (text_offset_x/y)
- [x] 库存实时扣减
- [x] 复制奖品快捷功能

### 6. 中奖记录 (pages/records.php)
- [x] 中奖记录列表
  - 顾客姓名、电话
  - 中奖奖品、游戏名称
  - 座位号、服务员
  - 中奖时间、IP地址
- [x] 筛选功能
  - 按游戏筛选
  - 按日期范围筛选
  - 按中奖/未中奖筛选
- [x] 导出记录为 CSV
- [x] 删除记录
- [x] 批量操作

### 7. 远程控制 (pages/remote.php)
- [x] 远程控制列表
  - 游戏名称、指定奖品
  - 令牌信息(可选)
  - 使用状态、使用时间
  - 创建管理员、创建时间
- [x] 创建远程控制
  - 选择游戏模板
  - 选择奖品
  - 指定令牌(可选,不选=全局)
- [x] 删除未使用控制
- [x] 查看使用详情
- [x] 用途说明
  - 内定中奖者
  - 测试抽奖流程
  - 营销活动指定奖品

**工作流程**: 管理员在PC后台创建远程控制(可指定中奖奖品) → 操作员使用手机端触发抽奖 → 平板显示页面自动执行抽奖并播放动画 → 显示中奖结果(如有预设则为指定奖品)。

### 8. 系统日志 (pages/logs.php)
- [x] 操作日志列表
  - 操作管理员
  - 操作类型（login/create/update/delete等）
  - 资源类型和ID
  - 操作描述
  - IP地址、浏览器UA
  - 操作时间
- [x] 日志筛选
  - 按操作类型筛选
  - 按管理员筛选
  - 按日期范围筛选
- [x] 日志搜索

### 9. 房间管理 (pages/rooms.php)
- [x] 房间列表
- [x] 创建/编辑/删除房间
- [x] 启用/停用房间
- [x] 排序调整

### 10. 服务员管理 (pages/servers.php)
- [x] 服务员列表
- [x] 创建/编辑/删除服务员
- [x] 启用/停用服务员
- [x] 排序调整

### 11. 系统设置 (pages/settings.php)
- [x] UI 配置
  - 转盘边框效果（无/霓虹/彩虹）
  - 边框旋转（无/左转/右转）
  - 边框颜色
  - 指针发光效果
  - 粒子效果
  - 入场动画
  - 中奖特效
  - 轨迹特效
  - 音效开关
  - 转盘背景效果
  - 指针效果
  - 转盘配色方案
  - 弹窗字体设置
  - 转盘中心装饰
  - 转盘外围装饰
  - 转盘字体
  - 自定义字体
- [x] 九宫格配置
  - 格子尺寸（3x3/4x4/5x5）
  - 中心按钮位置
- [x] 手机端配置
  - 自定义按钮图片上传
  - 抽奖冷却时间
  - 倒计时开关
- [x] 抽奖页面配置
  - 隐藏主标题
  - 隐藏副标题
- [x] 迁移工具
  - 一键添加新数据库字段

---

## 🎯 前台游戏功能

### 1. 转盘抽奖 (pages/display.php)
- [x] Token 验证和游戏加载
- [x] 顾客信息收集
  - 姓名、电话
  - 座位号、服务员
- [x] 轮询机制
  - 检测新中奖记录
  - 自动触发转盘动画(用于手机遥控触发场景)
  - 防止页面刷新自动抽奖
  - 奖品扇形区域
  - 自定义背景色
  - 图标缩放、旋转、位置
  - 文字偏移调整
- [x] 抽奖动画
  - 旋转动画
  - 缓动效果
  - 音效播放
- [x] 结果展示
  - 中奖弹窗
  - 奖品图片和名称
- [x] 中奖跑马灯
  - 实时显示最新中奖记录
  - 自动滚动
- [x] 轮询机制
  - 用于跑马灯与状态同步（不触发抽奖）
- [x] UI 自定义
  - 加载所有系统设置
  - 应用视觉效果
  - 自定义字体
- [x] 响应式设计

### 2. 九宫格抽奖 (pages/grid_display.php)
- [x] Token 验证和游戏加载
- [x] 动态格子生成
  - 支持 3x3、4x4、5x5
  - 中心按钮位置可调
- [x] 奖品随机分配
- [x] 抽奖动画
  - 环绕高亮动画
  - 缓动停止效果
- [x] 后端抽奖集成
  - 调用 spin.php API
  - 真实中奖结果
- [x] 结果弹窗展示
- [x] 视觉效果
  - 边框效果
  - 粒子效果
  - 入场动画
- [x] 图片路径修复
- [x] BasePath 全局管理
- [x] 作用域隔离（IIFE）

### 3. 手机遥控 (pages/mobile.php)
- [x] Token 验证
- [x] 步骤式表单
  - 步骤1: 顾客信息
  - 步骤2: 抽奖操作
- [x] 自定义按钮图片
  - 上传图片替换默认按钮
  - 图片预览
- [x] 抽奖状态显示
  - Waiting for result 倒计时
  - 覆盖标签(不替换按钮内容)
  - 保持按钮图片可见
- [x] 冷却时间机制
  - 防止连续抽奖
  - 倒计时显示
- [x] 结果展示
- [x] 返回重抽

**使用场景**: 操作员使用手机访问 mobile.php,填写顾客信息后点击抽奖按钮,后台调用抽奖API生成结果,平板显示页面通过轮询机制检测到新记录,自动播放转盘动画并显示中奖结果。适用于操作员在大厅走动服务顾客的场景。

**核心流程**: PC管理后台配置游戏和奖品 → 手机远程控制触发抽奖(可选预设中奖奖品) → 平板显示页面播放动画并展示结果

---

## 🔌 API 接口

### 1. 认证接口

#### POST /backend/api/auth.php
**登录认证**
```json
// Request
{
  "username": "admin",
  "password": "admin123"
}

// Response
{
  "success": true,
  "message": "登录成功",
  "data": {
    "admin_id": 1,
    "username": "admin"
  }
}
```

### 2. 游戏管理接口

#### GET /backend/api/games.php?action=list
**获取游戏列表**

#### POST /backend/api/games.php?action=create
**创建游戏**
```json
{
  "name": "春节抽奖",
  "type": "wheel",
  "description": "2025春节活动"
}
```

#### POST /backend/api/games.php?action=update
**更新游戏**

#### POST /backend/api/games.php?action=delete
**删除游戏**

### 3. 令牌管理接口

#### GET /backend/api/access_tokens.php?action=list
**获取令牌列表**

#### POST /backend/api/access_tokens.php?action=create
**创建令牌**
```json
{
  "game_id": 1,
  "name": "VIP专用",
  "max_uses": 100,
  "expired_at": "2025-12-31 23:59:59"
}
```

#### POST /backend/api/access_tokens.php?action=toggle
**启用/停用令牌**

#### POST /backend/api/access_tokens.php?action=delete
**删除令牌**

### 4. 奖品管理接口

#### GET /backend/api/prizes.php?action=list
**获取奖品列表**

#### POST /backend/api/prizes.php?action=create
**创建奖品**
```json
{
  "game_id": 1,
  "name": "iPhone 15 Pro",
  "probability": 0.5,
  "stock": 10,
  "weight": 1,
  "display_order": 1,
  "bg_color": "#ff0000",
  "icon_scale": 1.2,
  "icon_rotation": 45,
  "icon_position": 0.75
}
```

#### POST /backend/api/prizes.php?action=update
**更新奖品**

#### POST /backend/api/prizes.php?action=delete
**删除奖品**

### 5. 抽奖核心接口

#### POST /backend/api/spin.php
**执行抽奖**
```json
// Request
{
  "token": "abc123...",
  "customer": {
    "name": "张三",
    "phone": "13800138000",
    "seat": "A01",
    "server": "李服务员"
  }
}

// Response - 中奖
{
  "success": true,
  "message": "抽奖成功",
  "data": {
    "prize": {
      "id": 5,
      "name": "iPhone 15 Pro",
      "image": "iphone.jpg"
    },
    "customer_id": 123
  }
}

// Response - 未中奖
{
  "success": true,
  "message": "抽奖成功",
  "data": {
    "prize": null,
    "customer_id": 123
  }
}
```

### 6. 记录查询接口

#### GET /backend/api/latest_result.php?token={token}
**获取最新中奖记录**（用于轮询）

#### GET /backend/api/winners_list.php?token={token}&limit=10
**获取中奖跑马灯数据**

### 7. UI 配置接口

#### GET /backend/api/ui_config.php
**获取所有 UI 配置**

#### POST /backend/api/ui_config.php
**保存 UI 配置**
```json
{
  "wheel_border_effect": "neon",
  "wheel_border_rotation": "right",
  "wheel_border_color": "#ff6b6b",
  "grid_size": "3x3",
  "mobile_spin_cooldown": 5
}
```

### 8. 资源管理接口

#### POST /backend/api/upload.php
**上传图片**
- 支持类型: jpg, jpeg, png, gif
- 自动生成缩略图
- 返回文件路径

#### GET /backend/api/assets.php?type=prizes
**获取资源列表**

### 9. 迁移接口

#### POST /backend/api/migrations.php
**执行数据库迁移**
- 检测缺失字段
- 自动添加新字段
- 向后兼容

---

## 🎨 前端技术实现

### 1. Canvas 转盘绘制
```javascript
// 核心代码结构
function drawWheel() {
  // 1. 清空画布
  // 2. 计算每个扇形角度
  // 3. 遍历奖品绘制扇形
  //    - 应用背景色
  //    - 绘制图片（缩放、旋转、位置）
  //    - 绘制文字（偏移）
  // 4. 绘制中心圆
  // 5. 绘制装饰
}
```

### 2. 抽奖动画
  if (data.record_id && data.record_id !== lastRecordId) {
    // 触发转盘动画,显示手机端触发的抽奖结果
    lastRecordId = data.record_id;
  }/ 2. 计算目标角度
  // 3. requestAnimationFrame 动画循环
  // 4. 缓动函数控制速度
  // 5. 到达目标后显示结果
}
```

### 3. 轮询机制
```javascript
let lastRecordId = null;

async function checkLatestRecord() {
  const res = await fetch('/api/latest_result.php?token=' + token);
  const data = await res.json();
  
  if (data.record_id && data.record_id !== lastRecordId) {
    // 更新跑马灯/状态，同步最新记录（不触发抽奖）
    lastRecordId = data.record_id;
  }
}

setInterval(checkLatestRecord, 2000); // 每2秒轮询
```

### 4. 图片路径管理
```javascript
// 统一基础路径
if (!window.basePath) {
  window.basePath = window.location.origin + 
    window.location.pathname.replace(/\/backend\/.*/, '/');
}

// 使用绝对路径
const imageSrc = `${basePath}backend/assets/uploads/prizes/${image}`;
```

### 5. 作用域隔离
```javascript
// 避免与 dashboard 注入冲突
(function(){
  // 所有页面代码包在 IIFE 中
  const basePath = window.basePath;
  // ...
})();
```

---

## 🔒 安全措施

### 1. 后端安全
- [x] PDO 预处理语句防 SQL 注入
- [x] htmlspecialchars 防 XSS
- [x] Session 验证管理员权限
- [x] Token 验证游戏访问权限
- [x] 文件上传类型和大小限制
- [x] 操作日志完整记录

### 2. 前端安全
- [x] 用户输入验证
- [x] 避免内联脚本
- [x] HTTPS 部署（生产环境）
- [x] CSRF Token（可选增强）

### 3. 数据安全
- [x] 密码 bcrypt 哈希存储
- [x] 敏感信息不记录明文
- [x] 定期数据库备份

---

## 📦 部署要求

### 服务器环境
- PHP 7.4 或更高
- MySQL 5.7 或更高
- Apache/Nginx Web 服务器
- PHP 扩展: PDO, mysqli, gd, json

### 目录权限
- `backend/assets/uploads/` - 可写（777 或 755+www-data）
- `backend/assets/uploads/prizes/` - 可写
- `backend/assets/uploads/mobile/` - 可写

### 数据库配置
编辑 `config/Database.php`:
```php
private $host = 'localhost';
private $db_name = 'ldd';
private $username = 'root';
private $password = '';
```

### 初始化步骤
1. 导入 `database/schema.sql` 创建表结构
2. 访问 `/backend/login.php`
3. 使用默认账号 admin/admin123 登录
4. 修改管理员密码
5. 创建游戏模板和奖品
6. 生成访问令牌
7. 分享游戏链接

---

## 🐛 常见问题

### 1. 图片无法显示
- 检查路径是否包含 `backend/` 前缀
- 检查上传目录权限
- 检查图片文件是否存在

### 2. Dashboard 脚本冲突
- 确保所有页面使用 IIFE 包裹
- 使用 `window.basePath` 全局变量
- 避免 `const` 重复声明

### 3. 轮询自动抽奖
- 确保有初始化基准 `lastRecordId`
- 仅在新记录时触发动画
- 避免页面加载时立即轮询

### 4. 手机按钮消失
（页面已移除）无此问题。

---

## 📝 待开发功能（可选扩展）

### 功能增强
- [ ] 多管理员角色和权限
- [ ] 微信登录集成
- [ ] 实时 WebSocket 推送
- [ ] 数据可视化图表
- [ ] 导出 Excel 报表
- [ ] 短信通知中奖者
- [ ] 二维码分享链接
- [ ] 多语言支持

### 游戏类型
- [ ] 刮刮卡游戏完整实现
- [ ] 老虎机游戏
- [ ] 砸金蛋游戏
- [ ] 摇一摇抽奖

### 性能优化
- [ ] Redis 缓存热点数据
- [ ] CDN 加速静态资源
- [ ] 数据库读写分离
- [ ] API 限流机制

---

## 📄 文件清单

### 后台管理
```
backend/
├── login.php              # 登录页面
├── dashboard.php          # 管理主面板（SPA框架）
├── pages/
│   ├── games.php         # 游戏管理
│   ├── tokens.php        # 令牌管理
│   ├── prizes.php        # 奖品管理
│   ├── records.php       # 中奖记录
│   ├── remote.php        # 远程控制
│   ├── logs.php          # 系统日志
│   ├── rooms.php         # 房间管理
│   ├── servers.php       # 服务员管理
│   ├── settings.php      # 系统设置
│   ├── display.php       # 转盘游戏
│   ├── grid_display.php  # 九宫格游戏
│   └── mobile.php        # 手机遥控
├── api/
│   ├── auth.php          # 认证接口
│   ├── games.php         # 游戏CRUD
│   ├── access_tokens.php # 令牌CRUD
│   ├── prizes.php        # 奖品CRUD
│   ├── spin.php          # 抽奖核心
│   ├── latest_result.php # 最新记录
│   ├── winners_list.php  # 中奖列表
│   ├── ui_config.php     # UI配置
│   ├── upload.php        # 文件上传
│   ├── assets.php        # 资源列表
│   └── migrations.php    # 数据库迁移
└── assets/
    └── uploads/
        ├── prizes/       # 奖品图片
        └── mobile/       # 手机按钮图片
```

### 配置和工具
```
config/
└── Database.php          # 数据库单例类

database/
└── schema.sql            # 数据库结构

README.md                 # 原始文档
FEATURES.md               # 本文档（功能清单）
```

---

## 🎯 快速开发指南

### 如果需要在新 VS Code 中重建项目：

1. **创建数据库表结构**
   - 参照"数据库结构"章节
   - 使用 schema.sql 或手动建表

2. **配置数据库连接**
   - 编辑 `config/Database.php`
   - 设置正确的数据库凭证

3. **实现 API 接口**
   - 参照"API 接口"章节
   - 实现所有带 [x] 的接口

4. **开发后台管理页面**
   - 参照"后台管理功能"章节
   - 实现所有带 [x] 的功能

5. **开发前台游戏页面**
   - 参照"前台游戏功能"章节
   - 实现转盘、九宫格、手机遥控

6. **应用安全措施**
   - 参照"安全措施"章节
   - 实现认证、授权、防护

7. **测试和部署**
   - 本地测试所有功能
   - 配置生产环境
   - 上线并监控

---

## 📞 技术支持

如有疑问，请参考：
- 数据库结构设计
- API 接口定义
- 功能清单检查
- 常见问题排查

**重要**: 此文档涵盖了整个系统的所有核心功能，是重建项目的完整蓝图。
