hookehuyr

feat: 优化 OpenAPI 文档生成工具并更新接口联调日志

- 优化 API 文档生成脚本
  - 添加 CLAUDE.md 文件过滤,避免将文档文件当作 API 文档处理
  - 改进新增模块检测逻辑,显示新增模块包含的所有接口
  - 优化变更检测报告,提升可读性

- 更新 API 接口联调日志
  - 收藏模块:3个接口后端已完成,标记为待联调
  - 埋点模块:1个接口后端已完成,标记为待联调
  - 更新总体进度:24个接口(12已完成,9待联调,3已废弃)

- 新增埋点模块
  - 添加埋点接口(addAPI)
  - 生成 API 文档和接口代码

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
...@@ -5,6 +5,36 @@ ...@@ -5,6 +5,36 @@
5 5
6 --- 6 ---
7 7
8 +## [2026-02-04] - 优化 OpenAPI 文档生成工具
9 +
10 +### 优化
11 +- API 文档生成脚本(`scripts/generateApiFromOpenAPI.js`
12 + - 添加 CLAUDE.md 文件过滤,避免将文档文件当作 API 文档处理
13 + - 改进新增模块检测逻辑,显示新增模块包含的所有接口
14 + - 优化变更检测报告,提升可读性
15 + - 在 3 处添加了 `.md` 文件过滤(扫描模块、对比变更、文件列表)
16 +
17 +### 文档
18 +- 更新 API 接口联调日志(`docs/api-integration-log.md`
19 + - 收藏模块:3个接口后端已完成,标记为待联调
20 + - 埋点模块:1个接口后端已完成,标记为待联调
21 + - 更新总体进度统计:24个接口(12已完成,9待联调,3已废弃)
22 +
23 +---
24 +
25 +**详细信息**
26 +- **影响文件**:
27 + - `scripts/generateApiFromOpenAPI.js` - API 文档生成脚本优化
28 + - `docs/api-integration-log.md` - API 联调日志更新
29 +- **技术栈**: Node.js, fs 模块
30 +- **测试状态**: ✅ 已测试通过
31 +- **备注**:
32 + - 扫描目录时自动忽略 `CLAUDE.md` 文件
33 + - 新增模块时会显示该模块包含的所有接口信息(方法、路径、描述)
34 + - 变更检测报告更加准确和详细
35 +
36 +---
37 +
8 ## [2026-02-04] - 优化视频播放用户体验 38 ## [2026-02-04] - 优化视频播放用户体验
9 39
10 ### 优化 40 ### 优化
......
...@@ -4,28 +4,27 @@ ...@@ -4,28 +4,27 @@
4 4
5 ## 📊 总体进度 5 ## 📊 总体进度
6 6
7 -- **总接口数**: 20 7 +- **总接口数**: 24
8 -- **已完成**: 12 (60.0%) 8 +- **已完成**: 12 (50.0%)
9 - **联调中**: 0 (0%) 9 - **联调中**: 0 (0%)
10 -- **已废弃**: 3 (15.0%) 10 +- **已废弃**: 3 (12.5%)
11 -- **后端开发中**: 5 (25.0%) 11 +- **待联调**: 9 (37.5%)
12 - **有阻塞**: 0 12 - **有阻塞**: 0
13 13
14 --- 14 ---
15 15
16 -**📝 最近更新** (2026-02-03): 16 +**📝 最近更新** (2026-02-04):
17 +- 🔧 **优化 OpenAPI 文档生成工具**
18 + - 添加 CLAUDE.md 文件过滤,避免将文档文件当作 API 文档处理
19 + - 改进新增模块检测逻辑,显示新增模块包含的所有接口
20 + - 优化变更检测报告,提升可读性
21 +-**收藏模块后端完成**:3 个收藏接口(addAPI、delAPI、listAPI)后端已开发完成,前端待联调
22 +-**埋点接口后端完成**:埋点接口(addAPI)后端已开发完成,前端待联调
17 -**产品模块联调完成**:产品列表接口(listAPI)联调成功 23 -**产品模块联调完成**:产品列表接口(listAPI)联调成功
18 - 知识库页面:动态标签栏、分类筛选、滚动加载功能正常 24 - 知识库页面:动态标签栏、分类筛选、滚动加载功能正常
19 - 首页热卖产品:产品列表正常显示 25 - 首页热卖产品:产品列表正常显示
20 - 🆕 **新增产品模块**:添加产品列表接口(listAPI),前端集成完成,待联调 26 - 🆕 **新增产品模块**:添加产品列表接口(listAPI),前端集成完成,待联调
21 - 🆕 **知识库页面 API 集成**:动态标签栏、分类筛选、滚动加载功能 27 - 🆕 **知识库页面 API 集成**:动态标签栏、分类筛选、滚动加载功能
22 --**修复空状态文字居中**:为 text 元素添加 `w-full text-center`
23 --**修复获取个人信息接口字段访问错误**:修正 avatar 字段结构(对象而非字符串)
24 --**修复更新个人资料接口参数结构错误**:传递完整 avatar 对象而非 avatar_meta_id
25 --**修复头像上传接口数据映射错误**:根据实际返回结构正确映射字段
26 --**新增头像设置页面加载时获取用户当前头像功能**:提升用户体验
27 --**更新 API 文档**:完善 get_profile 和 update_profile 接口文档
28 -- 🆕 **新增收藏模块**:添加 3 个收藏接口(addAPI、delAPI、listAPI),后端开发中
29 28
30 --- 29 ---
31 30
...@@ -714,20 +713,22 @@ ...@@ -714,20 +713,22 @@
714 713
715 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 | 714 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
716 |------|------|---------|---------|---------| 715 |------|------|---------|---------|---------|
716 +| 2026-02-04 | v1.1 | 更新状态:后端已完成,前端待联调 | 后端开发完成 | [查看](#) |
717 | 2026-02-03 | v1.0 | 初始版本 | - | [查看](#) | 717 | 2026-02-03 | v1.0 | 初始版本 | - | [查看](#) |
718 718
719 **页面调试情况** 719 **页面调试情况**
720 720
721 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 | 721 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
722 |------|---------|---------|---------|------| 722 |------|---------|---------|---------|------|
723 +| 2026-02-04 | - | 后端已完成,前端待联调 | - | ⏳ 待联调 |
723 | 2026-02-03 | - | 后端开发中 | - | ⏳ 后端开发中 | 724 | 2026-02-03 | - | 后端开发中 | - | ⏳ 后端开发中 |
724 725
725 -**接口状态**: ⏳ 后端开发中 726 +**接口状态**: ⏳ 待联调
726 727
727 **备注**: 728 **备注**:
728 - 参数:`meta_id`(文件ID) 729 - 参数:`meta_id`(文件ID)
729 - 用于收藏产品或资料 730 - 用于收藏产品或资料
730 -- 后端接口开发中 731 +- 后端接口已完成
731 - 实现位置:`src/api/favorite.js:addAPI` 732 - 实现位置:`src/api/favorite.js:addAPI`
732 733
733 --- 734 ---
...@@ -745,20 +746,22 @@ ...@@ -745,20 +746,22 @@
745 746
746 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 | 747 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
747 |------|------|---------|---------|---------| 748 |------|------|---------|---------|---------|
749 +| 2026-02-04 | v1.1 | 更新状态:后端已完成,前端待联调 | 后端开发完成 | [查看](#) |
748 | 2026-02-03 | v1.0 | 初始版本 | - | [查看](#) | 750 | 2026-02-03 | v1.0 | 初始版本 | - | [查看](#) |
749 751
750 **页面调试情况** 752 **页面调试情况**
751 753
752 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 | 754 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
753 |------|---------|---------|---------|------| 755 |------|---------|---------|---------|------|
756 +| 2026-02-04 | - | 后端已完成,前端待联调 | - | ⏳ 待联调 |
754 | 2026-02-03 | - | 后端开发中 | - | ⏳ 后端开发中 | 757 | 2026-02-03 | - | 后端开发中 | - | ⏳ 后端开发中 |
755 758
756 -**接口状态**: ⏳ 后端开发中 759 +**接口状态**: ⏳ 待联调
757 760
758 **备注**: 761 **备注**:
759 - 参数:`meta_id`(文件ID) 762 - 参数:`meta_id`(文件ID)
760 - 用于取消收藏的产品或资料 763 - 用于取消收藏的产品或资料
761 -- 后端接口开发中 764 +- 后端接口已完成
762 - 实现位置:`src/api/favorite.js:delAPI` 765 - 实现位置:`src/api/favorite.js:delAPI`
763 766
764 --- 767 ---
...@@ -776,15 +779,17 @@ ...@@ -776,15 +779,17 @@
776 779
777 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 | 780 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
778 |------|------|---------|---------|---------| 781 |------|------|---------|---------|---------|
782 +| 2026-02-04 | v1.1 | 更新状态:后端已完成,前端待联调 | 后端开发完成 | [查看](#) |
779 | 2026-02-03 | v1.0 | 初始版本 | - | [查看](#) | 783 | 2026-02-03 | v1.0 | 初始版本 | - | [查看](#) |
780 784
781 **页面调试情况** 785 **页面调试情况**
782 786
783 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 | 787 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
784 |------|---------|---------|---------|------| 788 |------|---------|---------|---------|------|
789 +| 2026-02-04 | - | 后端已完成,前端待联调 | - | ⏳ 待联调 |
785 | 2026-02-03 | - | 后端开发中 | - | ⏳ 后端开发中 | 790 | 2026-02-03 | - | 后端开发中 | - | ⏳ 后端开发中 |
786 791
787 -**接口状态**: ⏳ 后端开发中 792 +**接口状态**: ⏳ 待联调
788 793
789 **备注**: 794 **备注**:
790 - 参数: 795 - 参数:
...@@ -808,11 +813,46 @@ ...@@ -808,11 +813,46 @@
808 } 813 }
809 } 814 }
810 ``` 815 ```
811 -- 后端接口开发中 816 +- 后端接口已完成
812 - 实现位置:`src/api/favorite.js:listAPI` 817 - 实现位置:`src/api/favorite.js:listAPI`
813 818
814 --- 819 ---
815 820
821 +### 埋点模块
822 +
823 +#### 接口 1: 添加埋点
824 +
825 +**接口信息**
826 +- **接口名称**: `addAPI`
827 +- **接口路径**: `/srv/?a=event&t=add`
828 +- **请求方法**: POST
829 +- **负责页面**: 待确认
830 +- **负责人**: 后端团队
831 +
832 +**接口文档更新记录**
833 +
834 +| 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
835 +|------|------|---------|---------|---------|
836 +| 2026-02-04 | v1.0 | 初始版本 | 后端已完成,前端待联调 | [查看](#) |
837 +
838 +**页面调试情况**
839 +
840 +| 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
841 +|------|---------|---------|---------|------|
842 +| 2026-02-04 | - | 后端已完成,前端待联调 | - | ⏳ 待联调 |
843 +
844 +**接口状态**: ⏳ 待联调
845 +
846 +**备注**:
847 +- 参数:
848 + - `type`(类型):READ_FILE=阅读素材
849 + - `object_id`(文件ID)
850 +- 用于记录用户行为埋点
851 +- 后端接口已完成
852 +- 实现位置:`src/api/event.js:addAPI`
853 +
854 +---
855 +
816 ### 模块模板 856 ### 模块模板
817 857
818 复制下方模板添加新接口: 858 复制下方模板添加新接口:
...@@ -871,12 +911,12 @@ ...@@ -871,12 +911,12 @@
871 911
872 ## 📈 进度追踪 912 ## 📈 进度追踪
873 913
874 -### 本周进度 (2026-01-27 ~ 2026-02-03) 914 +### 本周进度 (2026-01-27 ~ 2026-02-04)
875 915
876 -- **新增接口**: 16 916 +- **新增接口**: 17
877 -- **完成联调**: 11 917 +- **完成联调**: 12
878 - **已废弃**: 3 918 - **已废弃**: 3
879 -- **联调中**: 0 919 +- **待联调**: 9
880 - **后端开发中**: 2 920 - **后端开发中**: 2
881 - **发现问题**: 6 921 - **发现问题**: 6
882 - **解决问题**: 6 922 - **解决问题**: 6
...@@ -885,7 +925,7 @@ ...@@ -885,7 +925,7 @@
885 925
886 | 周 | 完成数 | 新增数 | 废弃数 | 问题数 | 926 | 周 | 完成数 | 新增数 | 废弃数 | 问题数 |
887 |----|--------|--------|--------|--------| 927 |----|--------|--------|--------|--------|
888 -| 2026-01-27 ~ 2026-02-03 | 9 | 16 | 3 | 0 | 928 +| 2026-01-27 ~ 2026-02-04 | 12 | 17 | 3 | 0 |
889 929
890 --- 930 ---
891 931
...@@ -896,16 +936,18 @@ ...@@ -896,16 +936,18 @@
896 - [✅ 已完成](#意见反馈模块) - 2个接口 936 - [✅ 已完成](#意见反馈模块) - 2个接口
897 - [✅ 已完成](#产品模块) - 1个接口 937 - [✅ 已完成](#产品模块) - 1个接口
898 - [❌ 已废弃](#通用模块) - 3个接口 938 - [❌ 已废弃](#通用模块) - 3个接口
939 +- [⏳ 待联调](#收藏模块) - 3个接口
940 +- [⏳ 待联调](#埋点模块) - 1个接口
899 - [⏳ 后端开发中](#消息模块) - 2个接口 941 - [⏳ 后端开发中](#消息模块) - 2个接口
900 -- [⏳ 后端开发中](#收藏模块) - 3个接口
901 942
902 ### 按模块查看 943 ### 按模块查看
903 - [用户中心](#用户中心模块) - ✅ 6个已完成 944 - [用户中心](#用户中心模块) - ✅ 6个已完成
904 - [通用](#通用模块) - ❌ 3个已废弃 945 - [通用](#通用模块) - ❌ 3个已废弃
905 - [意见反馈](#意见反馈模块) - ✅ 2个已完成 946 - [意见反馈](#意见反馈模块) - ✅ 2个已完成
906 - [产品](#产品模块) - ✅ 1个已完成 947 - [产品](#产品模块) - ✅ 1个已完成
948 +- [收藏](#收藏模块) - ⏳ 3个待联调
949 +- [埋点](#埋点模块) - ⏳ 1个待联调
907 - [消息](#消息模块) - ⏳ 2个后端开发中 950 - [消息](#消息模块) - ⏳ 2个后端开发中
908 -- [收藏](#收藏模块) - ⏳ 3个后端开发中
909 - [知识库](#知识库模块) - ⏳ 未开始 951 - [知识库](#知识库模块) - ⏳ 未开始
910 - [家办](#家办模块) - ⏳ 未开始 952 - [家办](#家办模块) - ⏳ 未开始
911 - [签单](#签单模块) - ⏳ 未开始 953 - [签单](#签单模块) - ⏳ 未开始
...@@ -942,15 +984,23 @@ ...@@ -942,15 +984,23 @@
942 984
943 --- 985 ---
944 986
945 -**最后更新时间**: 2026-02-03 21:00 987 +**最后更新时间**: 2026-02-04 13:00
946 -**文档版本**: v2.1 988 +**文档版本**: v2.2
947 **更新内容**: 989 **更新内容**:
948 -- 产品模块联调完成:产品列表接口(listAPI)✅ 已完成 990 +- 收藏模块:3个接口后端已完成,前端待联调
949 - - 知识库页面:动态标签栏、分类筛选、滚动加载功能正常 991 + - addAPI(添加收藏)
950 - - 首页热卖产品:产品列表正常显示 992 + - delAPI(取消收藏)
951 -- 更新总体进度:20个接口(12个已完成,0个联调中,3个已废弃,5个后端开发中) 993 + - listAPI(收藏列表)
994 +- 埋点模块:1个接口后端已完成,前端待联调
995 + - addAPI(添加埋点)
996 +- OpenAPI 文档生成工具优化:
997 + - 添加 CLAUDE.md 文件过滤
998 + - 改进新增模块检测逻辑
999 + - 优化变更检测报告
1000 +- 更新总体进度:24个接口(12个已完成,9个待联调,3个已废弃)
952 1001
953 **历史版本**: 1002 **历史版本**:
1003 +- v2.1 (2026-02-03 21:00): 产品模块联调完成
954 - v2.0 (2026-02-03 20:40): 新增产品模块 1004 - v2.0 (2026-02-03 20:40): 新增产品模块
955 - v1.9 (2026-02-03 20:30): 新增收藏模块 1005 - v1.9 (2026-02-03 20:30): 新增收藏模块
956 - v1.8 (2026-02-03 20:00): 用户中心模块头像接口修复 1006 - v1.8 (2026-02-03 20:00): 用户中心模块头像接口修复
......
1 +# 埋点
2 +
3 +## OpenAPI Specification
4 +
5 +```yaml
6 +openapi: 3.0.1
7 +info:
8 + title: ''
9 + version: 1.0.0
10 +paths:
11 + /srv/:
12 + post:
13 + summary: 埋点
14 + deprecated: false
15 + description: ''
16 + tags:
17 + - 埋点
18 + parameters:
19 + - name: f
20 + in: query
21 + description: ''
22 + required: true
23 + example: jiangedianlv
24 + schema:
25 + type: string
26 + - name: a
27 + in: query
28 + description: ''
29 + required: true
30 + example: common
31 + schema:
32 + type: string
33 + - name: t
34 + in: query
35 + description: ''
36 + required: true
37 + example: submit_feedback
38 + schema:
39 + type: string
40 + requestBody:
41 + content:
42 + application/x-www-form-urlencoded:
43 + schema:
44 + type: object
45 + properties:
46 + f:
47 + example: manulife
48 + type: string
49 + a:
50 + example: event
51 + type: string
52 + t:
53 + example: add
54 + type: string
55 + type:
56 + description: 类型。READ_FILE=阅读素材
57 + example: READ_FILE
58 + type: string
59 + object_id:
60 + description: 文件ID
61 + example: '834965'
62 + type: string
63 + required:
64 + - f
65 + - a
66 + - t
67 + - type
68 + - object_id
69 + examples: {}
70 + responses:
71 + '200':
72 + description: ''
73 + content:
74 + application/json:
75 + schema:
76 + type: object
77 + properties:
78 + code:
79 + type: integer
80 + msg:
81 + type: string
82 + required:
83 + - code
84 + - msg
85 + x-apifox-orders:
86 + - code
87 + - msg
88 + headers: {}
89 + x-apifox-name: 成功
90 + x-apifox-ordering: 0
91 + security: []
92 + x-apifox-folder: 埋点
93 + x-apifox-status: testing
94 + x-run-in-apifox: https://app.apifox.com/web/project/7792797/apis/api-415042878-run
95 +components:
96 + schemas: {}
97 + responses: {}
98 + securitySchemes: {}
99 +servers: []
100 +security: []
101 +
102 +```
...@@ -571,7 +571,7 @@ function scanAndGenerate(openAPIDir, outputDir) { ...@@ -571,7 +571,7 @@ function scanAndGenerate(openAPIDir, outputDir) {
571 modules.forEach((moduleName) => { 571 modules.forEach((moduleName) => {
572 const moduleDir = path.join(openAPIDir, moduleName); 572 const moduleDir = path.join(openAPIDir, moduleName);
573 const apiFiles = fs.readdirSync(moduleDir) 573 const apiFiles = fs.readdirSync(moduleDir)
574 - .filter(file => file.endsWith('.md')); 574 + .filter(file => file.endsWith('.md') && file !== 'CLAUDE.md');
575 575
576 if (apiFiles.length === 0) { 576 if (apiFiles.length === 0) {
577 console.log(`模块 ${moduleName} 中没有找到 .md 文件`); 577 console.log(`模块 ${moduleName} 中没有找到 .md 文件`);
...@@ -704,14 +704,26 @@ function compareAPIChanges(openAPIDir) { ...@@ -704,14 +704,26 @@ function compareAPIChanges(openAPIDir) {
704 704
705 // 如果临时备份中不存在该模块,说明是新增模块 705 // 如果临时备份中不存在该模块,说明是新增模块
706 if (!fs.existsSync(tempModuleDir)) { 706 if (!fs.existsSync(tempModuleDir)) {
707 - console.log(`📦 新增模块: ${moduleName}`); 707 + console.log(`\n📦 新增模块: ${moduleName}`);
708 + // 解析新增模块的接口
709 + try {
710 + const newDocs = parseOpenAPIPath(moduleDir);
711 + if (newDocs && newDocs.length > 0) {
712 + console.log(` 包含 ${newDocs.length} 个新增接口:`);
713 + newDocs.forEach(doc => {
714 + console.log(` • ${doc.method} ${doc.path} - ${doc.summary}`);
715 + });
716 + }
717 + } catch (error) {
718 + console.error(` ⚠️ 解析模块失败: ${error.message}`);
719 + }
708 hasChanges = true; 720 hasChanges = true;
709 return; 721 return;
710 } 722 }
711 723
712 // 读取当前和临时备份的文档 724 // 读取当前和临时备份的文档
713 - const currentFiles = fs.readdirSync(moduleDir).filter(f => f.endsWith('.md')); 725 + const currentFiles = fs.readdirSync(moduleDir).filter(f => f.endsWith('.md') && f !== 'CLAUDE.md');
714 - const tempFiles = fs.readdirSync(tempModuleDir).filter(f => f.endsWith('.md')); 726 + const tempFiles = fs.readdirSync(tempModuleDir).filter(f => f.endsWith('.md') && f !== 'CLAUDE.md');
715 727
716 // 检查是否有文件变更 728 // 检查是否有文件变更
717 const hasNewFiles = currentFiles.some(f => !tempFiles.includes(f)); 729 const hasNewFiles = currentFiles.some(f => !tempFiles.includes(f));
......
1 +import { fn, fetch } from '@/api/fn';
2 +
3 +const Api = {
4 + Add: '/srv/?a=event&t=add',
5 +}
6 +
7 +/**
8 + * @description 埋点
9 + * @remark
10 + * @param {Object} params 请求参数
11 + * @param {string} params.type 类型。READ_FILE=阅读素材
12 + * @param {string} params.object_id 文件ID
13 + * @returns {Promise<{
14 + * code: number; // 状态码
15 + * msg: string; // 消息
16 + * data: any;
17 + * }>}
18 + */
19 +export const addAPI = (params) => fn(fetch.post(Api.Add, params));