Files
vscode-workbench/.trae/documents/profile_enhancement_plan.md
T

426 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 个人主页与个人设置功能增强计划
## 概述
本文档描述个人主页(UserHome)和个人设置(Profile)的功能增强实现方案。
### 用户选择的功能
**个人主页(UserHome)**:
1. 学习/课程展示 - 展示用户已学习的课程和学习进度
2. 活动时间线 - 展示用户的动态、评论、点赞等活动
3. 个人主页封面设置 - 允许用户自定义个人主页的背景图/封面
**个人设置(Profile)**:
1. 隐私设置 - 控制谁可以查看你的主页、文章等内容
2. 登录设备管理 - 管理已登录的设备,支持远程登出
3. 消息通知设置 - 管理邮件、浏览器等消息通知偏好
---
## 一、个人主页(UserHome)功能增强
### 1.1 学习/课程展示
**当前状态**:UserHome 没有展示用户已学课程和学习进度。
**实现方案**:
#### 后端
- 在 `learn/views.py` 中添加接口获取用户学习进度
- 返回用户已学习的课程列表和完成百分比
**新增API**:
- `GET /learn/my-progress/` - 获取当前用户学习进度
**请求参数**:无
**响应示例**:
```json
{
"code": 10000,
"data": {
"courses": [
{
"id": 1,
"title": "Python基础",
"cover_image": "",
"progress": 75,
"completed_chapters": 3,
"total_chapters": 4,
"last_studied_at": "2026-08-01 15:30:00"
}
],
"total_courses": 5,
"total_completed": 2
}
}
```
#### 前端
- 在 `UserHome.tsx` 添加新的标签页"学习"
- 展示课程卡片,包含进度条和完成状态
- 点击跳转到课程详情页
**新增文件**:
- `src/pages/UserHome/components/CourseProgressCard.tsx` - 课程进度卡片组件
**修改文件**:
- `src/pages/UserHome/UserHome.tsx` - 添加"学习"标签页
- `src/pages/UserHome/UserHome.css` - 添加进度条样式
- `src/utils/request.ts` - 添加API请求方法
- `src/locales/*.json` - 添加国际化文本
---
### 1.2 活动时间线
**当前状态**:UserHome 的"活动"标签页是空的(`<Empty description={t('userHome.empty.noActivities')} />`)。
**实现方案**:
#### 后端
- 在 `user/views/` 中添加活动视图
- 聚合用户的各种活动(发表文章、评论、点赞、收藏、学习等)
**新增API**:
- `GET /user/activities/` - 获取用户活动时间线
**响应示例**:
```json
{
"code": 10000,
"data": {
"activities": [
{
"id": 1,
"type": "article",
"title": "发表文章",
"description": "发布了《Python入门指南》",
"created_at": "2026-08-01 10:30:00"
},
{
"id": 2,
"type": "comment",
"title": "评论",
"description": "评论了《JavaScript高级技巧》",
"created_at": "2026-07-31 14:20:00"
},
{
"id": 3,
"type": "like",
"title": "点赞",
"description": "点赞了《Vue3实战》",
"created_at": "2026-07-30 09:15:00"
},
{
"id": 4,
"type": "favorite",
"title": "收藏",
"description": "收藏了《React Hooks详解》",
"created_at": "2026-07-29 16:45:00"
},
{
"id": 5,
"type": "study",
"title": "学习",
"description": "完成了《Python基础》第3章",
"created_at": "2026-07-28 11:00:00"
}
]
}
}
```
#### 前端
- 实现活动时间线组件
- 按时间倒序展示活动
- 每种活动类型有不同的图标和颜色
**新增文件**:
- `src/pages/UserHome/components/ActivityTimeline.tsx` - 活动时间线组件
**修改文件**:
- `src/pages/UserHome/UserHome.tsx` - 实现"活动"标签页
- `src/pages/UserHome/UserHome.css` - 添加时间线样式
- `src/utils/request.ts` - 添加API请求方法
- `src/locales/*.json` - 添加国际化文本
---
### 1.3 个人主页封面设置
**当前状态**:UserHome 没有封面图,只有纯色渐变背景。
**实现方案**:
#### 后端
- 在 `FUser` 模型中添加 `cover_image` 字段
- 添加封面上传API
**模型变更**:
```python
# user/models.py
class FUser(AbstractUser):
# ... 现有字段 ...
cover_image = models.ImageField(upload_to='covers/', blank=True, null=True, verbose_name='个人主页封面')
```
**新增API**:
- `POST /user/profile/cover/` - 上传个人主页封面
#### 前端
- 在 UserHome Hero 区域添加封面图
- 仅主页所有者显示"更换封面"按钮
- 支持拖拽或点击上传
**修改文件**:
- `src/pages/UserHome/UserHome.tsx` - 添加封面图和上传功能
- `src/pages/UserHome/UserHome.css` - 添加封面样式
- `src/utils/request.ts` - 添加API请求方法
- `src/locales/*.json` - 添加国际化文本
---
## 二、个人设置(Profile)功能增强
### 2.1 隐私设置
**当前状态**:Profile 没有隐私设置选项。
**实现方案**:
#### 后端
- 在 `FUser` 模型中添加隐私设置字段
- 添加隐私设置API
**模型变更**:
```python
# user/models.py
class FUser(AbstractUser):
# ... 现有字段 ...
privacy_profile = models.CharField(max_length=20, default='public', verbose_name='主页可见性')
privacy_articles = models.CharField(max_length=20, default='public', verbose_name='文章可见性')
privacy_friends = models.CharField(max_length=20, default='public', verbose_name='好友列表可见性')
```
**新增API**:
- `GET /user/privacy/` - 获取隐私设置
- `PUT /user/privacy/` - 更新隐私设置
**响应示例**:
```json
{
"code": 10000,
"data": {
"privacy_profile": "public",
"privacy_articles": "public",
"privacy_friends": "friends_only"
}
}
```
#### 前端
- 在 Profile 侧边栏添加"隐私设置"菜单项
- 实现隐私设置表单
- 选项:公开、仅好友、仅自己
**新增文件**:
- `src/pages/Profile/components/PrivacySettingCard.tsx` - 隐私设置卡片
**修改文件**:
- `src/pages/Profile/Profile.tsx` - 添加隐私设置菜单
- `src/utils/request.ts` - 添加API请求方法
- `src/locales/*.json` - 添加国际化文本
---
### 2.2 登录设备管理
**当前状态**:Profile 有"最近登录"记录查看,但没有设备管理功能。
**实现方案**:
#### 后端
- 创建 `UserDevice` 模型管理登录设备
- 添加设备管理API
**新增模型**:
```python
# user/models.py
class UserDevice(models.Model):
user = models.ForeignKey(FUser, on_delete=models.CASCADE, related_name='devices')
device_name = models.CharField(max_length=100, verbose_name='设备名称')
device_type = models.CharField(max_length=20, verbose_name='设备类型')
browser = models.CharField(max_length=100, verbose_name='浏览器')
ip_address = models.GenericIPAddressField(verbose_name='IP地址')
location = models.CharField(max_length=200, verbose_name='登录地点')
last_active = models.DateTimeField(auto_now=True, verbose_name='最后活跃时间')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
is_current = models.BooleanField(default=False, verbose_name='是否当前设备')
```
**新增API**:
- `GET /user/devices/` - 获取登录设备列表
- `DELETE /user/devices/<id>/` - 移除/登出设备
#### 前端
- 在 Profile 侧边栏添加"登录设备"菜单项
- 展示设备列表,包含设备类型图标
- 支持"退出其他设备"操作
- 当前设备高亮显示
**新增文件**:
- `src/pages/Profile/components/DeviceManagementCard.tsx` - 设备管理卡片
**修改文件**:
- `src/pages/Profile/Profile.tsx` - 添加设备管理菜单
- `src/utils/request.ts` - 添加API请求方法
- `src/locales/*.json` - 添加国际化文本
---
### 2.3 消息通知设置
**当前状态**:Settings(全局设置)有消息通知开关,但 Profile 没有针对个人的通知偏好设置。
**实现方案**:
#### 后端
- 在 `FUser` 模型中添加通知偏好字段
- 添加通知设置API
**模型变更**:
```python
# user/models.py
class FUser(AbstractUser):
# ... 现有字段 ...
notify_email = models.BooleanField(default=True, verbose_name='邮件通知')
notify_browser = models.BooleanField(default=True, verbose_name='浏览器通知')
notify_reply = models.BooleanField(default=True, verbose_name='回复通知')
notify_like = models.BooleanField(default=True, verbose_name='点赞通知')
notify_follow = models.BooleanField(default=True, verbose_name='关注通知')
notify_system = models.BooleanField(default=True, verbose_name='系统通知')
```
**新增API**:
- `GET /user/notification-settings/` - 获取通知设置
- `PUT /user/notification-settings/` - 更新通知设置
#### 前端
- 在 Profile 侧边栏添加"消息通知"菜单项
- 实现通知设置表单
- 分类设置:评论、点赞、关注、系统
**新增文件**:
- `src/pages/Profile/components/NotificationSettingCard.tsx` - 通知设置卡片
**修改文件**:
- `src/pages/Profile/Profile.tsx` - 添加通知设置菜单
- `src/utils/request.ts` - 添加API请求方法
- `src/locales/*.json` - 添加国际化文本
---
## 三、文件清单
### 新增文件
| 文件路径 | 说明 |
|---------|------|
| `src/pages/UserHome/components/CourseProgressCard.tsx` | 课程进度卡片 |
| `src/pages/UserHome/components/ActivityTimeline.tsx` | 活动时间线 |
| `src/pages/Profile/components/PrivacySettingCard.tsx` | 隐私设置卡片 |
| `src/pages/Profile/components/DeviceManagementCard.tsx` | 设备管理卡片 |
| `src/pages/Profile/components/NotificationSettingCard.tsx` | 通知设置卡片 |
| `learn/migrations/0005_add_course_progress.py` | 学习进度迁移 |
| `user/migrations/0007_add_user_device_and_privacy.py` | 设备管理迁移 |
### 修改文件
| 文件路径 | 说明 |
|---------|------|
| `learn/views.py` | 添加学习进度接口 |
| `learn/urls.py` | 添加学习进度路由 |
| `user/models.py` | 添加封面、隐私、通知字段,UserDevice模型 |
| `user/views/user.py` | 添加隐私、设备、通知接口 |
| `user/urls.py` | 添加新路由 |
| `src/pages/UserHome/UserHome.tsx` | 添加学习标签页、活动实现、封面功能 |
| `src/pages/UserHome/UserHome.css` | 添加时间线、进度条、封面样式 |
| `src/pages/Profile/Profile.tsx` | 添加新菜单项 |
| `src/utils/request.ts` | 添加API请求方法 |
| `src/locales/zh.json` | 添加中文国际化 |
| `src/locales/en.json` | 添加英文国际化 |
| `src/locales/ja.json` | 添加日文国际化 |
| `src/locales/ko.json` | 添加韩文国际化 |
| `src/locales/ru.json` | 添加俄文国际化 |
| `src/locales/zh-TW.json` | 添加繁体中文国际化 |
---
## 四、实现步骤
### 第一阶段:后端基础
1. 添加 `UserDevice` 模型和相关迁移
2. 添加 `FUser` 的新字段(封面、隐私、通知)和相关迁移
3. 实现学习进度API
4. 实现用户活动API
5. 实现隐私设置API
6. 实现设备管理API
7. 实现通知设置API
8. 运行数据库迁移
### 第二阶段:前端个人主页
1. 添加学习/课程展示标签页
2. 实现活动时间线组件
3. 实现个人主页封面设置功能
### 第三阶段:前端个人设置
1. 实现隐私设置组件
2. 实现登录设备管理组件
3. 实现消息通知设置组件
### 第四阶段:国际化
1. 添加所有新文本的国际化支持
2. 测试多语言显示
### 第五阶段:测试与优化
1. 功能测试
2. UI/UX优化
3. 响应式适配
---
## 五、验证步骤
### 后端验证
1. 运行 `python manage.py migrate` 确认迁移成功
2. 使用API测试工具测试所有新接口
3. 验证权限控制(仅本人可操作)
### 前端验证
1. 启动开发服务器 `npm run dev`
2. 访问 `/user` 查看个人主页新功能
3. 访问 `/profile` 查看个人设置新功能
4. 测试深色/浅色模式下的显示
5. 测试移动端响应式布局
### 功能验证清单
- [ ] 学习进度正确显示
- [ ] 活动时间线正确聚合
- [ ] 个人主页封面可上传和显示
- [ ] 隐私设置正确保存和应用
- [ ] 登录设备列表正确显示
- [ ] 可成功退出其他设备
- [ ] 消息通知设置正确保存
- [ ] 多语言文本正确显示
---
## 六、技术注意事项
1. **性能优化**:活动时间线需要分页加载,避免一次性加载过多数据
2. **安全考虑**:隐私设置需要在所有相关接口中生效
3. **图片上传**:封面图片需要压缩和格式验证
4. **设备识别**:使用 User-Agent 解析设备信息
5. **兼容性**:确保新字段不影响现有用户数据