Files
vscode-workbench/.trae/documents/编程学习模块添加浏览历史记录.md
T

107 lines
3.2 KiB
Markdown

# 编程学习模块添加浏览历史记录
## 摘要
为 Learn 模块(课程列表页和课程学习详情页)添加浏览历史记录功能,支持云端和本地存储。
## 当前状态分析
### 缺失的页面
| 页面 | 文件路径 | 是否使用 useRecordHistory |
|------|----------|---------------------------|
| 课程列表页(桌面端) | `src/pages/Learn/Learn.tsx` | ❌ 否 |
| 课程列表页(移动端) | `src/pages/Learn/LearnMobile.tsx` | ❌ 否 |
| 课程学习详情页 | `src/pages/CourseLearn/CourseLearn.tsx` | ❌ 否 |
### 现有功能
- 项目已有完整的浏览历史系统,支持 `learn` 类型
- 后端 `BrowsingHistory` 模型已支持 `learn` 类型
- 前端 `useRecordHistory` Hook 支持 `learn` 类型
- 历史记录页面已有"学习"类型筛选按钮
## 实施步骤
### 步骤 1:在 CourseLearn.tsx 添加浏览记录
**文件**: `src/pages/CourseLearn/CourseLearn.tsx`
**修改内容**:
1. 添加 `useRecordHistory` 导入
2. 在获取课程详情成功后,调用 `useRecordHistory` 记录浏览历史
3. 需要等 `courseData` 加载完成后调用
**代码修改**:
```typescript
// 添加导入
import { useRecordHistory } from "@/hooks/useRecordHistory";
// 在组件中使用
const [courseData, setCourseData] = useState<CourseDetailData | null>(null);
useRecordHistory(
courseData
? {
type: "learn",
title: courseData.title,
description: courseData.description,
image: courseData.cover_image_url || "",
category: courseData.category,
link: `/course-learn?id=${courseData.id}`,
}
: null
);
```
### 步骤 2:在 Learn.tsx 添加浏览记录
**文件**: `src/pages/Learn/Learn.tsx`
**修改内容**:
1. 添加 `useRecordHistory` 导入
2. 记录课程列表页的浏览
**代码修改**:
```typescript
// 添加导入
import { useRecordHistory } from "@/hooks/useRecordHistory";
// 在组件顶部调用
useRecordHistory({
type: "learn",
title: "编程学习",
description: "系统化编程学习课程,从入门到精通",
link: "/learn",
});
```
### 步骤 3:在 LearnMobile.tsx 添加浏览记录
**文件**: `src/pages/Learn/LearnMobile.tsx`
**修改内容**: 与 Learn.tsx 相同
## 涉及的文件清单
| 文件 | 操作 |
|------|------|
| `src/pages/CourseLearn/CourseLearn.tsx` | 添加 useRecordHistory 调用 |
| `src/pages/Learn/Learn.tsx` | 添加 useRecordHistory 调用 |
| `src/pages/Learn/LearnMobile.tsx` | 添加 useRecordHistory 调用 |
## 验证步骤
1. 运行 TypeScript 编译检查:`npx tsc --noEmit`
2. 启动开发服务器:`npm run dev`
3. 测试以下场景:
- 访问 `/learn` 页面,检查是否记录浏览历史
- 访问 `/course-learn?id=1` 页面,检查是否记录浏览历史
- 检查历史记录页面(`/history`)是否能正确显示学习记录
- 未登录用户访问时,检查 localStorage 是否有记录
- 已登录用户访问时,检查云端是否有记录
## 注意事项
- `useRecordHistory` 的防抖机制:同一链接 2 秒内不重复记录
- 课程详情页的 `link` 需要包含课程 ID,以便正确区分不同课程
- 课程列表页的 `link` 固定为 `/learn`