# 团课管理系统 API 文档

## 1. 项目概述

本项目是一个基于 UniApp 的健身房团课管理系统，包含完整的 API 层设计，支持开发/生产环境的快速切换。

### 1.1 项目结构

```
gym-manage-uniapp/
├── api/                           # API 层目录
│   ├── requestBase.js             # 基础请求封装
│   ├── groupCourse.js             # 团课真实API
│   ├── groupCourse.mock.js        # 团课模拟数据API
│   └── envConfig.js               # 环境配置与服务导出
├── pages/
│   └── groupCourse/
│       └── list.vue               # 团课列表页面
└── components/                    # 组件目录
```

---

## 2. API 层设计

### 2.1 架构设计

| 层级 | 文件 | 职责 |
|------|------|------|
| 基础层 | `requestBase.js` | 封装 uni.request，统一处理加载状态、错误提示 |
| 接口层 | `groupCourse.js` | 定义真实后端API接口 |
| 模拟层 | `groupCourse.mock.js` | 提供模拟数据，支持开发测试 |
| 配置层 | `envConfig.js` | 环境配置，统一服务导出入口 |

### 2.2 环境切换机制

通过修改 `envConfig.js` 中的 `ENV_MODE` 变量实现环境切换：

```javascript
// envConfig.js
export const ENV_MODE = 'development' // 'production' | 'development'
```

- **`production`**：生产环境，使用真实网络请求
- **`development`**：开发环境，使用模拟数据

---

## 3. 文件详细说明

### 3.1 requestBase.js - 基础请求封装

**功能定位**：封装 `uni.request`，提供统一的请求处理逻辑。

**核心特性**：
- 自动显示/隐藏加载提示
- 统一的响应状态码处理
- 统一的错误提示机制

**接口定义**：

| 方法 | 说明 | 参数 | 返回值 |
|------|------|------|--------|
| `request(options)` | 发起网络请求 | `options` 对象 | `Promise` |

**options 参数**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `url` | string | 是 | 请求路径 |
| `method` | string | 否 | 请求方法，默认 `GET` |
| `data` | object | 否 | 请求数据 |
| `header` | object | 否 | 请求头 |

**响应数据结构**：

```javascript
// 成功响应
{
  code: 0,           // 状态码，0表示成功
  message: 'success', // 提示信息
  data: {}           // 业务数据
}
```

### 3.2 groupCourse.js - 团课真实 API

**功能定位**：定义团课相关的真实后端接口。

**接口列表**：

| 方法 | 说明 | 参数 | HTTP方法 | 路径 |
|------|------|------|----------|------|
| `getList()` | 获取团课列表 | 无 | GET | `/api/groupCourse/list` |
| `getDetail(id)` | 获取团课详情 | `id`: 课程ID | GET | `/api/groupCourse/detail/{id}` |
| `book(data)` | 预约团课 | `data`: 预约数据 | POST | `/api/groupCourse/book` |
| `cancelBooking(id)` | 取消预约 | `id`: 预约记录ID | POST | `/api/groupCourse/cancel/{id}` |

**book 方法参数结构**：

```javascript
{
  courseId: string,  // 课程ID
  memberId: string   // 会员ID
}
```

### 3.3 groupCourse.mock.js - 团课模拟数据 API

**功能定位**：提供模拟数据，支持开发测试，无需后端服务。

**特性**：
- 模拟网络延迟（300-500ms）
- 接口签名与真实API完全一致
- 包含6条完整的模拟团课数据

**模拟数据结构**：

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | string | 课程唯一标识 |
| `courseName` | string | 课程名称 |
| `coachName` | string | 教练姓名 |
| `coachAvatar` | string | 教练头像 |
| `startTime` | string | 开始时间（ISO格式） |
| `endTime` | string | 结束时间（ISO格式） |
| `duration` | number | 课程时长（分钟） |
| `location` | string | 上课地点 |
| `maxMembers` | number | 最大人数 |
| `currentMembers` | number | 当前人数 |
| `storedValueAmount` | number | 储值卡价格（元） |
| `pointCardAmount` | number | 次卡次数 |
| `courseType` | string | 课程类型 |
| `level` | string | 难度级别 |
| `description` | string | 课程描述 |
| `tags` | array | 标签列表 |
| `status` | string | 状态（available/closed） |

### 3.4 envConfig.js - 环境配置

**功能定位**：统一服务导出入口，根据环境模式自动选择 API 实现。

**导出内容**：

| 导出项 | 类型 | 说明 |
|--------|------|------|
| `ENV_MODE` | string | 当前环境模式 |
| `groupCourseService` | object | 团课服务实例 |

---

## 4. 使用示例

### 4.1 在页面中使用

```javascript
// pages/groupCourse/list.vue
import { groupCourseService } from '@/api/envConfig.js'

// 获取团课列表
const fetchCourseList = async () => {
  try {
    const data = await groupCourseService.getList()
    courseList.value = data
    console.log('团课列表获取成功:', data)
  } catch (error) {
    console.error('获取团课列表异常:', error)
  }
}
```

### 4.2 切换环境

```javascript
// api/envConfig.js
// 开发环境 - 使用模拟数据
export const ENV_MODE = 'development'

// 生产环境 - 使用真实网络请求
export const ENV_MODE = 'production'
```

---

## 5. 数据流转图

```
┌─────────────────────────────────────────────────────────────┐
│                      页面层 (View)                          │
│              pages/groupCourse/list.vue                     │
└───────────────────────────┬─────────────────────────────────┘
                            │ import & call
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                   环境配置层 (Config)                       │
│              api/envConfig.js                               │
│    根据 ENV_MODE 选择对应的服务实现                          │
└───────────────────────────┬─────────────────────────────────┘
                            │
          ┌─────────────────┴─────────────────┐
          ▼                                   ▼
┌─────────────────────────┐     ┌─────────────────────────────┐
│   groupCourse.js        │     │   groupCourse.mock.js       │
│   (production 环境)      │     │   (development 环境)        │
└───────────┬─────────────┘     └─────────────┬───────────────┘
            │                                 │
            ▼                                 ▼
┌─────────────────────────┐           ┌─────────────────────┐
│   requestBase.js        │           │  本地模拟数据        │
│   (真实网络请求)         │           │  (无需后端)         │
└───────────┬─────────────┘           └─────────────────────┘
            │
            ▼
┌─────────────────────────┐
│     后端服务器 API       │
└─────────────────────────┘
```

---

## 6. 注意事项

1. **环境变量配置**：部署前务必确认 `ENV_MODE` 设置正确
2. **数据一致性**：模拟数据结构应与真实API保持一致
3. **错误处理**：所有API调用都应包含 try-catch 错误处理
4. **日志记录**：建议在关键节点添加日志，便于调试

---

## 7. 版本历史

| 版本 | 日期 | 更新内容 |
|------|------|----------|
| v1.0 | 2026-06-04 | 初始版本，完成基础API层设计 |
