# 微信小程序（CommunicationRecords）规范

## Purpose
本能力描述小程序端的主要用户流程、页面职责以及与后端 API 的交互约定。

## Requirements

### Requirement: 协议勾选门槛
系统 SHALL 要求用户在登录前勾选用户协议（隐私合规前置）。

实现位置：`pages/logs/logs.js`

#### Scenario: 未勾选协议尝试登录
- **WHEN** 用户未勾选协议并触发登录流程
- **THEN** 小程序提示“请先勾选用户协议”

### Requirement: 登录流程（微信 code → 后端 Login）
系统 SHALL 使用 `wx.login()` 获取 `code` 并调用后端登录接口。

接口：`POST /api/Login/Login`

行为：
- 登录成功时，SHALL 将 `openid(UserKey)` 写入本地缓存 `openid`，并同步到 `app.globalData`。
- 若用户资料未完善（缺少 `UserName/WeChatName/PhoneNumber`），SHALL 进入注册/完善资料流程。

#### Scenario: 已注册用户直接进入聊天页
- **WHEN** 登录接口返回完整用户信息
- **THEN** 小程序跳转到 `pages/chat/chat`

#### Scenario: 未注册用户提示完善信息
- **WHEN** 登录接口成功但返回的用户信息不完整
- **THEN** 小程序提示需要完善资料并展示注册表单

### Requirement: 注册/完善资料流程
系统 SHALL 提供表单采集姓名、手机号、昵称与头像，并调用后端注册接口更新用户资料。

接口：`POST /api/Login/Register`

实现位置：`pages/logs/logs.js`

行为：
- 注册接口成功后，SHALL 触发头像上传（`/api/Check/UploadFile`）并更新页面头像。

#### Scenario: 正常注册
- **WHEN** 用户提交有效姓名与手机号
- **THEN** 小程序完成注册并进入聊天页

### Requirement: 头像上传
系统 SHALL 允许用户选择头像并上传到服务器，后端返回永久 URL 后用于展示。

接口：`POST /api/Check/UploadFile`

实现位置：`pages/logs/logs.js` 与 `pages/chat/chat.js`

#### Scenario: 上传成功
- **WHEN** 上传接口返回 `success: true`
- **THEN** 小程序使用返回的 `url` 更新头像展示

### Requirement: 聊天页加载历史会话
系统 SHALL 在进入聊天页时请求历史会话并渲染。

接口：`POST /api/Check/GetConversationsByPage`

实现位置：`pages/chat/chat.js`（`loadHistory` / `GetConversations`）

#### Scenario: 首次进入加载第一页
- **WHEN** 进入聊天页
- **THEN** 请求第一页（Page=1, PageSize=20）并展示

### Requirement: 发送消息
系统 SHALL 通过后端新增会话接口发送消息。

接口：`POST /api/Check/AddConversation`

实现位置：`pages/chat/chat.js`

#### Scenario: 文本发送成功
- **WHEN** 用户发送文本消息
- **THEN** 小程序调用新增会话接口并更新列表

### Requirement: 编辑与删除消息
系统 SHALL 支持对会话进行更新与软删除。

接口：
- `POST /api/Check/UpdateConversation`
- `POST /api/Check/DeleteConversation`

实现位置：`pages/chat/chat.js`

#### Scenario: 删除消息
- **WHEN** 用户删除某条消息
- **THEN** 小程序调用删除接口并从列表移除/刷新

## Configuration

### Requirement: API 根地址
系统 SHOULD 通过 `utils/config.js` 统一管理 `baseUrl`，并在请求中使用 `${config.baseUrl}` 拼接接口路径。

#### Scenario: 环境切换
- **WHEN** 小程序环境为 develop/trial/release
- **THEN** 选择对应 `baseUrl`

## Known Limitations
- `utils/config.js` 当前强制返回 `release`，实际不会随 `envVersion` 切换。
- 存在硬编码域名请求（例如注册/登录/上传头像部分），未统一走 `config.baseUrl`。
- `app.js` 中的 `globalData.baseUrl` 为占位配置，实际请求主要依赖 `utils/config.js` 或硬编码。
