# AppServer API 使用指南

本文档说明如何使用 AppServer.js 中封装的 API 接口。

## 初始化

```javascript
import { AppServer } from '@/modules/api/AppServer';

const appServer = new AppServer();
```

## 认证相关接口

### 1. 微信登录
```javascript
const data = await appServer.WechatLogin(code);
// 返回: { success: true, data: { token, refreshToken, user } }
```

### 2. 刷新Token
```javascript
const data = await appServer.RefreshToken(refreshToken);
// 返回: { success: true, data: { token, refreshToken } }
```

### 3. 登出
```javascript
const data = await appServer.Logout();
// 返回: { success: true, message: '登出成功' }
```

## 用户相关接口

### 1. 获取用户信息
```javascript
const data = await appServer.GetUserProfile();
// 返回: { success: true, data: { id, nickname, avatar, ... } }
```

### 2. 更新用户信息
```javascript
const data = await appServer.UpdateUserProfile({
  nickname: '新昵称',
  avatar: 'https://...',
  realName: '真实姓名',
  phone: '13800138000',
  whatsapp: '+86138...',
  wechatId: 'wechat123'
});
// 返回: { success: true, data: { ...更新后的用户信息 } }
```

### 3. 设置语言偏好
```javascript
const data = await appServer.SetLanguage('zh'); // 'zh', 'en', 'pt'
// 返回: { success: true, message: '语言设置成功' }
```

## 服务相关接口

### 1. 获取服务分类列表
```javascript
const data = await appServer.GetCategories();
// 返回: { success: true, data: [{ id, key, nameZh, nameEn, namePt, ... }] }
```

### 2. 获取服务列表
```javascript
const data = await appServer.GetServices({
  page: 1,
  limit: 10,
  categoryId: 'uuid',  // 可选
  language: 'zh'       // 可选
});
// 返回: { success: true, data: { items: [...], total, page, limit } }
```

### 3. 获取服务详情
```javascript
const data = await appServer.GetServiceById(serviceId, 'zh');
// 返回: { success: true, data: { id, title, description, price, ... } }
```

## 预约相关接口

### 1. 创建预约
```javascript
const data = await appServer.CreateAppointment({
  serviceId: 'uuid',
  realName: '张三',
  contactMethod: 'phone',  // 'phone', 'whatsapp', 'wechat'
  contactValue: '13800138000',
  appointmentDate: '2025-12-31',  // 可选
  appointmentTime: '14:30:00',    // 可选
  notes: '备注信息',               // 可选
  amount: 100.00                  // 可选
});
// 返回: { success: true, data: { id, appointmentNo, ... } }
```

### 2. 获取预约列表
```javascript
const data = await appServer.GetAppointments({
  page: 1,
  limit: 10,
  status: 'pending'  // 可选: 'pending', 'confirmed', 'in-progress', 'completed', 'cancelled'
});
// 返回: { success: true, data: { items: [...], total, page, limit } }
```

### 3. 获取预约详情
```javascript
const data = await appServer.GetAppointmentById(appointmentId);
// 返回: { success: true, data: { id, service, user, status, ... } }
```

### 4. 更新预约
```javascript
const data = await appServer.UpdateAppointment(appointmentId, {
  realName: '李四',
  contactMethod: 'whatsapp',
  contactValue: '+8613800138000',
  notes: '更新备注'
});
// 返回: { success: true, data: { ...更新后的预约信息 } }
```

### 5. 取消预约
```javascript
const data = await appServer.CancelAppointment(appointmentId);
// 返回: { success: true, message: '预约已取消' }
```

## 通知相关接口

### 1. 获取通知列表
```javascript
const data = await appServer.GetNotifications({
  page: 1,
  limit: 10,
  type: 'system'  // 可选: 'system', 'activity', 'service'
});
// 返回: { success: true, data: { items: [...], total, page, limit } }
```

### 2. 标记通知为已读
```javascript
const data = await appServer.MarkNotificationAsRead(notificationId);
// 返回: { success: true, message: '已标记为已读' }
```

### 3. 全部标记为已读
```javascript
const data = await appServer.MarkAllNotificationsAsRead();
// 返回: { success: true, message: '全部已标记为已读' }
```

### 4. 删除通知
```javascript
const data = await appServer.DeleteNotification(notificationId);
// 返回: { success: true, message: '通知已删除' }
```

## 邀请相关接口

### 1. 生成邀请码
```javascript
const data = await appServer.GenerateInvitationCode();
// 返回: { success: true, data: { invitationCode: 'ABC123' } }
```

### 2. 获取邀请统计
```javascript
const data = await appServer.GetInvitationStats();
// 返回: { success: true, data: { totalInvites, totalRewards, availableBalance } }
```

### 3. 获取邀请记录
```javascript
const data = await appServer.GetInvitationRecords();
// 返回: { success: true, data: [{ invitee, registeredAt, firstPaymentAmount, ... }] }
```

## 提现相关接口

### 1. 申请提现
```javascript
const data = await appServer.CreateWithdrawal({
  amount: 100.00,
  paymentMethod: 'wechat',  // 'wechat', 'alipay', 'bank'
  paymentDetails: {
    // 微信/支付宝
    qrcodeImage: 'https://...',
    // 或银行卡
    bankCardNumber: '6222...',
    cardholderName: '张三',
    bankName: '中国银行',
    swiftCode: 'BKCH...'  // 可选
  }
});
// 返回: { success: true, data: { id, withdrawalNo, status, ... } }
```

### 2. 获取提现记录
```javascript
const data = await appServer.GetWithdrawals({
  page: 1,
  limit: 10,
  status: 'waiting'  // 可选: 'waiting', 'processing', 'completed', 'rejected'
});
// 返回: { success: true, data: { items: [...], total, page, limit } }
```

### 3. 获取提现详情
```javascript
const data = await appServer.GetWithdrawalById(withdrawalId);
// 返回: { success: true, data: { id, amount, status, paymentDetails, ... } }
```

## 上传相关接口

### 1. 上传图片
```javascript
// 选择图片
uni.chooseImage({
  count: 1,
  success: async (res) => {
    const filePath = res.tempFilePaths[0];
    const data = await appServer.UploadImage(filePath);
    // 返回: { success: true, data: { url: 'https://...', filename: '...' } }
  }
});
```

## 错误处理

所有接口返回格式统一：

**成功响应:**
```javascript
{
  success: true,
  data: { ... },
  message: '操作成功'
}
```

**失败响应:**
```javascript
{
  success: false,
  error: {
    code: 'ERROR_CODE',
    message: '错误信息',
    details: { ... }  // 可选
  }
}
```

**使用示例:**
```javascript
const data = await appServer.GetUserProfile();
if (data.success) {
  // 成功处理
  console.log('用户信息:', data.data);
} else {
  // 错误处理
  uni.showToast({
    title: data.error?.message || '操作失败',
    icon: 'none'
  });
}
```

## 注意事项

1. **Token 管理**: 所有需要认证的接口会自动从 `globalData` 或 `localStorage` 获取 token
2. **语言设置**: 部分接口支持 `language` 参数，可传入 'zh', 'en', 'pt'
3. **分页参数**: 列表接口通常支持 `page` 和 `limit` 参数
4. **日期格式**: 日期使用 'YYYY-MM-DD' 格式，时间使用 'HH:MM:SS' 格式
5. **UUID**: 所有 ID 字段均为 UUID 格式

## 完整示例

```javascript
// 登录流程
async function handleLogin() {
  try {
    // 1. 获取微信登录code
    const loginRes = await uni.login({ provider: 'weixin' });
    
    // 2. 调用登录接口
    const appServer = new AppServer();
    const data = await appServer.WechatLogin(loginRes.code);
    
    if (data.success) {
      // 3. 保存token
      const token = "Bearer " + data.data.token;
      uni.setStorageSync("token", token);
      
      // 4. 跳转首页
      uni.switchTab({ url: '/pages/index/index' });
    } else {
      uni.showToast({
        title: data.error?.message || '登录失败',
        icon: 'none'
      });
    }
  } catch (error) {
    console.error('登录错误:', error);
  }
}

// 创建预约流程
async function createAppointment() {
  try {
    const appServer = new AppServer();
    const data = await appServer.CreateAppointment({
      serviceId: 'service-uuid',
      realName: '张三',
      contactMethod: 'phone',
      contactValue: '13800138000',
      notes: '请尽快联系我'
    });
    
    if (data.success) {
      uni.showToast({
        title: '预约成功',
        icon: 'success'
      });
      // 跳转到预约详情页
      uni.navigateTo({
        url: `/pages/appointment/detail?id=${data.data.id}`
      });
    }
  } catch (error) {
    console.error('创建预约错误:', error);
  }
}
```
