Files
emall-web/README-API.md

421 lines
11 KiB
Markdown
Raw Normal View History

2025-10-16 09:59:34 +08:00
# ChronoMail 前端API对接文档
## 项目概述
ChronoMail未来邮箱是一个基于Vue 3 + Electron + Vant + Axios构建的跨平台邮件应用支持发送未来邮件、时光胶囊、AI辅助写作等功能。
## 技术栈
- **前端框架**: Vue 3
- **桌面端**: Electron
- **路由**: Vue Router 4
- **UI组件库**: Vant 4
- **HTTP客户端**: Axios
- **状态管理**: Vue 3 Composition API
## 项目结构
```
src/
├── api/ # API接口模块
│ ├── index.js # API方法集合
│ └── request.js # Axios实例和拦截器配置
├── assets/ # 静态资源
│ └── styles/ # 样式文件
│ └── global.css # 全局样式
├── router/ # 路由配置
│ └── index.js # 路由定义和守卫
├── store/ # 状态管理
│ └── index.js # 状态和操作方法
├── utils/ # 工具函数
│ └── index.js # 通用工具函数
├── views/ # 页面组件
│ ├── Login.vue # 登录页
│ ├── Register.vue # 注册页
│ ├── Home.vue # 首页
│ ├── Compose.vue # 撰写邮件页
│ ├── Inbox.vue # 收件箱页
│ ├── Sent.vue # 发件箱页
│ ├── Profile.vue # 个人中心页
│ ├── Timeline.vue # 时间线页
│ └── CapsuleDetail.vue # 胶囊详情页
├── App.vue # 根组件
└── main.js # 入口文件
```
## API接口说明
### 1. 认证相关接口
#### 用户注册
```javascript
import { authAPI } from '@/api'
const registerData = {
username: 'string', // 用户名
email: 'string', // 邮箱
password: 'string', // 密码
avatar: 'string?' // 头像URL可选
}
const response = await authAPI.register(registerData)
// 响应数据: { code: 200, message: 'success', data: { userId, username, email, avatar, token, refreshToken } }
```
#### 用户登录
```javascript
const loginData = {
email: 'string', // 邮箱
password: 'string' // 密码
}
const response = await authAPI.login(loginData)
// 响应数据同注册
```
#### 刷新Token
```javascript
const response = await authAPI.refreshToken(refreshToken)
// 响应数据: { code: 200, message: 'success', data: { token, refreshToken } }
```
#### 退出登录
```javascript
const response = await authAPI.logout()
// 响应数据: { code: 200, message: 'success' }
```
### 2. 邮件管理接口
#### 创建邮件
```javascript
import { mailAPI } from '@/api'
const mailData = {
title: 'string', // 邮件标题
content: 'string', // 邮件内容
recipientType: 'SELF|SPECIFIC|PUBLIC', // 收件人类型
recipientEmail: 'string?', // 指定收件人邮箱当recipientType为SPECIFIC时必填
sendTime: 'string', // ISO时间格式 "2025-12-31T23:59:59Z"
triggerType: 'TIME|LOCATION|EVENT', // 触发类型
triggerCondition: { // 触发条件
location: {
latitude: 'number?',
longitude: 'number?',
city: 'string?'
},
event: {
keywords: 'string[]?',
type: 'string?'
}
},
attachments: [ // 附件列表
{
type: 'IMAGE|VOICE|VIDEO',
url: 'string',
thumbnail: 'string?'
}
],
isEncrypted: 'boolean', // 是否加密
capsuleStyle: 'string' // 胶囊皮肤
}
const response = await mailAPI.createMail(mailData)
// 响应数据: { code: 200, message: 'success', data: { mailId, capsuleId, status, createdAt } }
```
#### 获取邮件列表
```javascript
const params = {
type: 'INBOX|SENT|DRAFT', // 邮件类型
status: 'PENDING|DELIVERING|DELIVERED', // 状态筛选
page: 1, // 页码
size: 10 // 每页数量
}
const response = await mailAPI.getMails(params)
// 响应数据: { code: 200, message: 'success', data: { list, total, page, size } }
```
#### 获取邮件详情
```javascript
const mailId = 'string'
const response = await mailAPI.getMailDetail(mailId)
// 响应数据: { code: 200, message: 'success', data: { 邮件详情 } }
```
#### 更新邮件
```javascript
const mailId = 'string'
const updateData = { /* 同创建邮件,但所有字段可选 */ }
const response = await mailAPI.updateMail(mailId, updateData)
// 响应数据: { code: 200, message: 'success', data: { 更新后的邮件信息 } }
```
#### 删除邮件
```javascript
const mailId = 'string'
const response = await mailAPI.deleteMail(mailId)
// 响应数据: { code: 200, message: 'success' }
```
#### 撤销发送
```javascript
const mailId = 'string'
const response = await mailAPI.revokeMail(mailId)
// 响应数据: { code: 200, message: 'success', data: { mailId, status: 'REVOKED' } }
```
### 3. 时光胶囊接口
#### 获取胶囊视图
```javascript
import { capsuleAPI } from '@/api'
const response = await capsuleAPI.getCapsules()
// 响应数据: { code: 200, message: 'success', data: { capsules, scene, background } }
```
#### 更新胶囊样式
```javascript
const capsuleId = 'string'
const style = 'string'
const response = await capsuleAPI.updateCapsuleStyle(capsuleId, style)
// 响应数据: { code: 200, message: 'success' }
```
### 4. AI助手接口
#### 写作辅助
```javascript
import { aiAPI } from '@/api'
const data = {
prompt: 'string', // 用户输入
type: 'OUTLINE|DRAFT|COMPLETE', // 辅助类型
tone: 'FORMAL|CASUAL|EMOTIONAL|INSPIRATIONAL', // 语气
length: 'SHORT|MEDIUM|LONG', // 长度
context: 'string?' // 上下文信息
}
const response = await aiAPI.writingAssistant(data)
// 响应数据: { code: 200, message: 'success', data: { content, suggestions, estimatedTime } }
```
#### 情感分析
```javascript
const content = 'string'
const response = await aiAPI.sentimentAnalysis(content)
// 响应数据: { code: 200, message: 'success', data: { sentiment, confidence, emotions, keywords, summary } }
```
#### 未来预测
```javascript
const data = { /* 预测参数 */ }
const response = await aiAPI.futurePrediction(data)
// 响应数据: { code: 200, message: 'success', data: { 预测结果 } }
```
### 5. 个人空间接口
#### 获取时间线
```javascript
import { userAPI } from '@/api'
const params = {
startDate: 'string?', // 开始日期
endDate: 'string?', // 结束日期
type: 'ALL|SENT|RECEIVED' // 类型
}
const response = await userAPI.getTimeline(params)
// 响应数据: { code: 200, message: 'success', data: { timeline } }
```
#### 获取统计数据
```javascript
const response = await userAPI.getStatistics()
// 响应数据: { code: 200, message: 'success', data: { 统计数据 } }
```
#### 获取用户信息
```javascript
const response = await userAPI.getUserProfile()
// 响应数据: { code: 200, message: 'success', data: { 用户信息 } }
```
#### 更新用户信息
```javascript
const data = { /* 用户信息 */ }
const response = await userAPI.updateUserProfile(data)
// 响应数据: { code: 200, message: 'success', data: { 更新后的用户信息 } }
```
#### 获取用户订阅信息
```javascript
const response = await userAPI.getSubscription()
// 响应数据: { code: 200, message: 'success', data: { 订阅信息 } }
```
### 6. 文件上传接口
#### 上传附件
```javascript
import { uploadAPI } from '@/api'
const file = /* File对象 */
const response = await uploadAPI.uploadAttachment(file)
// 响应数据: { code: 200, message: 'success', data: { 文件信息 } }
```
#### 上传头像
```javascript
const file = /* File对象 */
const response = await uploadAPI.uploadAvatar(file)
// 响应数据: { code: 200, message: 'success', data: { 头像URL } }
```
### 7. 推送通知接口
#### 注册设备
```javascript
import { notificationAPI } from '@/api'
const data = { /* 设备信息 */ }
const response = await notificationAPI.registerDevice(data)
// 响应数据: { code: 200, message: 'success' }
```
#### 获取通知设置
```javascript
const response = await notificationAPI.getNotificationSettings()
// 响应数据: { code: 200, message: 'success', data: { 通知设置 } }
```
#### 更新通知设置
```javascript
const data = { /* 通知设置 */ }
const response = await notificationAPI.updateNotificationSettings(data)
// 响应数据: { code: 200, message: 'success' }
```
## 状态管理
### 用户状态
```javascript
import { userState, userActions } from '@/store'
// 获取用户状态
console.log(userState.isLoggedIn)
console.log(userState.userInfo)
// 用户操作
await userActions.login(credentials)
await userActions.logout()
await userActions.getSubscription()
```
### 邮件状态
```javascript
import { mailState, mailActions } from '@/store'
// 获取邮件状态
console.log(mailState.inboxList)
console.log(mailState.currentMail)
// 邮件操作
await mailActions.getMails('INBOX')
await mailActions.getMailDetail(mailId)
await mailActions.createMail(mailData)
```
### 胶囊状态
```javascript
import { capsuleState, capsuleActions } from '@/store'
// 获取胶囊状态
console.log(capsuleState.capsules)
// 胶囊操作
await capsuleActions.getCapsules()
await capsuleActions.updateCapsuleStyle(capsuleId, style)
```
## 工具函数
```javascript
import { formatDate, countdown, validateEmail, validatePassword } from '@/utils'
// 格式化日期
const formattedDate = formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss')
// 计算倒计时
const { days, hours, minutes, seconds } = countdown('2025-12-31T23:59:59Z')
// 验证邮箱
const isValidEmail = validateEmail('user@example.com')
// 验证密码强度
const { strength, message } = validatePassword('password123')
```
## 环境配置
项目使用环境变量来配置不同环境的API地址
- 开发环境:`.env.development`
- 生产环境:`.env.production`
```bash
# 开发环境配置
VUE_APP_API_BASE_URL=http://localhost:3000/api/v1
VUE_APP_TITLE=ChronoMail - 未来邮箱
# 生产环境配置
VUE_APP_API_BASE_URL=https://api.chronomail.com/api/v1
VUE_APP_TITLE=ChronoMail - 未来邮箱
```
## 开发指南
1. 安装依赖:
```bash
npm install
```
2. 启动开发服务器:
```bash
npm run serve
```
3. 构建生产版本:
```bash
npm run build
```
4. 运行Electron应用
```bash
npm run electron:serve
```
## 注意事项
1. 所有API请求都会自动添加Authorization头格式为`Bearer {token}`
2. 当收到401或403响应时会自动清除用户信息并跳转到登录页
3. 文件上传需要使用FormData格式
4. 日期格式统一使用ISO 8601标准
5. 所有状态变更都应通过相应的Actions方法进行以保证状态一致性
## 错误处理
API请求失败时会显示错误提示并返回Promise.reject可以在组件中使用try-catch处理
```javascript
try {
const response = await mailAPI.createMail(mailData)
// 处理成功响应
} catch (error) {
// 处理错误
console.error('创建邮件失败:', error)
}
```