# 微信隐私授权与用户信息功能设计

## 概述

接入微信小游戏隐私授权 API，实现：
1. 进入 PageHome 时检查用户是否已授权隐私，未授权则引导授权
2. PageWriteLevels 点击分享按钮时获取用户头像、昵称并上传服务端

## 功能设计

### 1. 隐私授权检查

**触发时机**: PageHome `onViewLoad`

**实现逻辑**:
```typescript
// 检查用户是否已授权隐私
wx.getPrivacySetting({
  success: (res) => {
    if (!res.needAuthorization) {
      // 已授权，继续正常流程
      return;
    }
    // 未授权，调用引导授权
    wx.requirePrivacyAuthorize({
      success: () => {
        console.log('用户已授权隐私');
      },
      fail: () => {
        console.log('用户拒绝授权');
      }
    });
  }
});
```

### 2. 用户头像昵称获取

**触发时机**: PageWriteLevels 点击分享按钮 (`_onCompleteClick`)

**实现逻辑**:
1. 调用 `wx.getUserProfile` 获取用户头像和昵称
2. 上传到服务端
3. 本地 StorageManager 缓存

```typescript
wx.getUserProfile({
  desc: '用于完善用户资料',
  success: async (res) => {
    const userInfo = res.userInfo;
    // 上传服务端
    await HttpUtil.post(API_ENDPOINTS.USER_INFO_UPDATE, {
      avatarUrl: userInfo.avatarUrl,
      nickName: userInfo.nickName
    });
    // 本地缓存
    StorageManager.setUserInfo(userInfo);
  },
  fail: (err) => {
    console.error('获取用户信息失败', err);
  }
});
```

### 3. 新增 API 端点

在 `ApiConfig.ts` 中添加：

| 端点 | 方法 | 用途 |
|------|------|------|
| `/user/info` | POST | 更新用户头像昵称 |
| `/user/info` | GET | 获取用户头像昵称 |

### 4. 数据存储

**本地 StorageManager**:
- `userInfo` - 用户头像昵称缓存

**服务端**:
- 新增用户信息表，存储头像 URL 和昵称

## 文件变更

| 文件 | 变更类型 |
|------|----------|
| `assets/scripts/config/ApiConfig.ts` | 新增端点 |
| `assets/scripts/utils/StorageManager.ts` | 新增用户信息存取方法 |
| `assets/scripts/utils/WxSDK.ts` | 新增隐私授权、用户信息获取方法 |
| `assets/scripts/utils/HttpUtil.ts` | 新增用户信息 API 调用方法 |
| `assets/prefabs/PageHome.ts` | 接入隐私授权检查 |
| `assets/prefabs/PageWriteLevels.ts` | 接入用户信息获取与上传 |

## 错误处理

- 隐私授权失败：提示用户"需要授权隐私才能使用完整功能"，但不阻断流程
- 获取用户信息失败：提示用户"获取头像昵称失败"，继续原有流程
- 服务端上传失败：本地缓存成功，服务端下次登录时同步