193 lines
4.6 KiB
Markdown
193 lines
4.6 KiB
Markdown
# 宝箱竞猜系统 - 前端
|
||
|
||
基于 React + TypeScript + Vite 构建的现代化前端界面。
|
||
|
||
## 功能特性
|
||
|
||
- 🎨 现代化UI设计,支持深色主题
|
||
- 📱 完全响应式布局,支持移动端
|
||
- 🔐 完整的用户认证和权限管理
|
||
- 🎮 主播控制台 - 创建和管理宝箱
|
||
- 💰 用户中心 - 查看余额和交易记录
|
||
- 🔴 实时WebSocket更新奖池信息
|
||
- 🏆 富豪榜展示
|
||
|
||
## 技术栈
|
||
|
||
- **框架**: React 18 + TypeScript
|
||
- **构建工具**: Vite
|
||
- **路由**: React Router v6
|
||
- **状态管理**: React Context
|
||
- **HTTP客户端**: Axios
|
||
- **WebSocket**: Socket.io Client
|
||
- **样式**: CSS3 (使用CSS变量和现代特性)
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/
|
||
├── components/ # 公共组件
|
||
│ ├── Header.tsx # 页面头部导航
|
||
│ ├── Card.tsx # 卡片组件
|
||
│ ├── ChestCard.tsx # 宝箱卡片
|
||
│ ├── Loading.tsx # 加载组件
|
||
│ └── ProtectedRoute.tsx # 路由权限控制
|
||
├── pages/ # 页面组件
|
||
│ ├── HomePage.tsx # 首页 - 宝箱列表
|
||
│ ├── ChestPage.tsx # 宝箱详情页
|
||
│ ├── LoginPage.tsx # 登录页
|
||
│ ├── RegisterPage.tsx # 注册页
|
||
│ ├── StreamerConsole.tsx # 主播控制台
|
||
│ ├── UserProfile.tsx # 用户中心
|
||
│ └── AdminPanel.tsx # 管理后台
|
||
├── contexts/ # React Context
|
||
│ └── AuthContext.tsx # 认证上下文
|
||
├── services/ # 服务层
|
||
│ ├── api.ts # API接口封装
|
||
│ └── websocket.ts # WebSocket服务
|
||
├── types/ # TypeScript类型定义
|
||
│ └── index.ts
|
||
├── App.tsx # 主应用组件
|
||
├── main.tsx # 应用入口
|
||
└── index.css # 全局样式
|
||
```
|
||
|
||
## 开发
|
||
|
||
### 安装依赖
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### 启动开发服务器
|
||
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
服务将在 http://localhost:3000 启动
|
||
|
||
### 构建生产版本
|
||
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
### 预览生产版本
|
||
|
||
```bash
|
||
npm run preview
|
||
```
|
||
|
||
## API配置
|
||
|
||
前端通过环境变量配置API地址:
|
||
|
||
```typescript
|
||
// src/services/api.ts
|
||
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '';
|
||
```
|
||
|
||
如果需要修改API地址,请在 `.env` 文件中修改 `VITE_API_BASE_URL` 的值。
|
||
|
||
## 功能说明
|
||
|
||
### 用户角色
|
||
|
||
1. **普通用户 (user)**
|
||
- 浏览活跃宝箱
|
||
- 参与下注
|
||
- 查看交易记录
|
||
- 领取每日低保
|
||
|
||
2. **主播 (streamer)**
|
||
- 拥有普通用户所有权限
|
||
- 创建和管理宝箱
|
||
- 封盘和结算操作
|
||
- 获得5%分润
|
||
|
||
3. **管理员 (admin)**
|
||
- 拥有所有权限
|
||
- 管理用户
|
||
- 调整用户余额
|
||
|
||
### 页面说明
|
||
|
||
- **首页** (`/`) - 展示所有活跃宝箱,支持实时更新
|
||
- **宝箱详情** (`/chests/:id`) - 显示详细下注界面和赔率计算
|
||
- **主播控制台** (`/streamer`) - 创建、封盘、结算宝箱
|
||
- **用户中心** (`/profile`) - 查看个人信息、交易记录、富豪榜
|
||
- **管理后台** (`/admin`) - 管理用户和调整余额
|
||
|
||
### WebSocket实时更新
|
||
|
||
系统通过WebSocket实现以下实时功能:
|
||
- 奖池金额实时更新
|
||
- 宝箱状态变更广播
|
||
- 获胜通知推送
|
||
|
||
连接逻辑:
|
||
```typescript
|
||
// 根据用户角色连接不同频道
|
||
const endpoint = userType === 'streamer' ? 'ws/streamer' : 'ws/user';
|
||
```
|
||
|
||
## 样式系统
|
||
|
||
使用CSS变量实现主题系统:
|
||
|
||
```css
|
||
:root {
|
||
--primary-color: #6366f1;
|
||
--bg-color: #0f172a;
|
||
--text-primary: #f1f5f9;
|
||
/* ...更多变量 */
|
||
}
|
||
```
|
||
|
||
响应式断点:
|
||
- 桌面端:> 768px
|
||
- 移动端:≤ 768px
|
||
|
||
## 开发注意事项
|
||
|
||
1. **认证状态管理**
|
||
- 使用AuthContext统一管理用户认证状态
|
||
- 自动处理token刷新和失效
|
||
|
||
2. **路由权限**
|
||
- 使用ProtectedRoute组件保护需要登录的页面
|
||
- 根据用户角色控制页面访问
|
||
|
||
3. **错误处理**
|
||
- 所有API请求都有错误处理机制
|
||
- 401错误自动跳转到登录页
|
||
|
||
4. **性能优化**
|
||
- 使用React.memo优化组件渲染
|
||
- 合理使用useEffect依赖数组
|
||
|
||
## 常见问题
|
||
|
||
### Q: 前端无法连接后端API
|
||
A: 检查后端服务是否在正确的地址启动,并确保CORS配置正确。默认情况下后端服务在 http://localhost:8000 启动。
|
||
|
||
### Q: WebSocket连接失败
|
||
A: 检查后端WebSocket服务是否启动,以及token是否有效。
|
||
|
||
### Q: 样式显示异常
|
||
A: 确保CSS文件正确加载,检查是否有CSS冲突。
|
||
|
||
## 贡献指南
|
||
|
||
1. 遵循现有的代码风格和项目结构
|
||
2. 使用TypeScript进行类型检查
|
||
3. 确保响应式设计兼容性
|
||
4. 添加适当的错误处理
|
||
5. 保持组件的单一职责原则
|
||
|
||
## 许可证
|
||
|
||
MIT License
|