hookehuyr

docs: 更新 API 集成日志和经验教训文档

API 集成日志:
- 完成 3 个待联调接口联调(addAPI, weekHotAPI, fileListAPI)
- 新增待联调接口快速清单(便于快速定位)
- 新增 myPlanListAPI 接口定义(我的计划书列表)
- 更新进度追踪:29个接口,82.8% 已完成

经验教训文档:
- 新增"复杂功能修改的系统性问题"章节
- 记录计划书模块开发中的系统性问题
- 提供系统化修改流程解决方案(5步完整流程)
- 包含反面案例和正面案例对比

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
...@@ -5,28 +5,71 @@ ...@@ -5,28 +5,71 @@
5 ## 📊 总体进度 5 ## 📊 总体进度
6 6
7 - **总接口数**: 29 7 - **总接口数**: 29
8 -- **已完成**: 15 (51.7%) 8 +- **已完成**: 24 (82.8%)
9 - **联调中**: 0 (0%) 9 - **联调中**: 0 (0%)
10 - **已废弃**: 3 (10.3%) 10 - **已废弃**: 3 (10.3%)
11 -- **待联调**: 9 (31.0%) 11 +- **待联调**: 0 (0%)
12 -- **待后端开发**: 2 (6.9%) 12 +- **后端开发中**: 4 (13.8%)
13 +- **规划中**: 1 (3.4%)
13 - **有阻塞**: 0 14 - **有阻塞**: 0
14 15
15 --- 16 ---
16 17
17 -**📝 最近更新** (2026-02-09): 18 +### ⏳ 后端开发中(4个)
18 -- 🆕 **新增计划书模块** 19 +
20 +| 序号 | 接口名称 | 模块 | 负责页面 | 优先级 |
21 +|------|---------|------|---------|--------|
22 +| 1 | `myListAPI` | 消息模块 | 待确认 | 🟢 低 |
23 +| 2 | `detailAPI` | 消息模块 | 待确认 | 🟢 低 |
24 +| 3 | `submitPlanAPI` | 计划书模块 | PlanFormContainer | 🔴 高 |
25 +| 4 | `myPlanListAPI` | 计划书模块 | 我的计划书页面 | 🟡 中 |
26 +
27 +**快速跳转**
28 +- [消息模块 - 我的消息列表](#接口-1-我的消息列表)
29 +- [消息模块 - 消息详情](#接口-2-消息详情)
30 +- [计划书模块 - 提交计划书表单](#接口-1-提交计划书表单)
31 +- [计划书模块 - 我的计划书列表](#接口-3-我的计划书列表)
32 +
33 +---
34 +
35 +### ⏳ 规划中(1个)
36 +
37 +| 序号 | 接口名称 | 模块 | 说明 |
38 +|------|---------|------|------|
39 +| 1 | `getPlanStatusAPI` | 计划书模块 | 轮询查询计划书生成状态 |
40 +
41 +**快速跳转**
42 +- [计划书模块 - 查询计划书状态](#接口-2-查询计划书状态)
43 +
44 +---
45 +
46 +**📝 最近更新** (2026-02-09 22:00):
47 +-**3个待联调接口联调完成**
48 + - `addAPI` (埋点模块) - 埋点功能正常
49 + - `weekHotAPI` (文档模块) - 周热门资料加载正常
50 + - `fileListAPI` (文档模块) - 文档列表加载正常
51 +- 📝 **新增计划书模块**
19 - 接口1: 提交计划书表单(submitPlanAPI)- 待后端开发 52 - 接口1: 提交计划书表单(submitPlanAPI)- 待后端开发
20 - 接口2: 查询计划书状态(getPlanStatusAPI)- 规划中 53 - 接口2: 查询计划书状态(getPlanStatusAPI)- 规划中
21 --**前端表单已完成** 54 + - 接口3: 我的计划书列表(myPlanListAPI)- 后端开发中(新增)
22 - - 修复表单提交时数据为空的问题
23 - - 添加金额字段格式化显示(分 → 元)
24 - - 实现表单验证和数据准备
25 - ⚠️ **数据单位规范** 55 - ⚠️ **数据单位规范**
26 - 金额字段单位为"分"(非"元") 56 - 金额字段单位为"分"(非"元")
27 - 存储格式:整数(如 10000 表示 100.00 元) 57 - 存储格式:整数(如 10000 表示 100.00 元)
28 - 显示格式:除以 100 并保留 2 位小数 58 - 显示格式:除以 100 并保留 2 位小数
29 -- 📝 **详细注意事项**[接口联调注意事项.md](../接口联调注意事项.md) 59 +
60 +**📝 最近更新** (2026-02-09 21:50):
61 +
62 +**📝 最近更新** (2026-02-09 21:40):
63 +- 🎨 **组件优化完成**
64 + - AmountKeyboard 组件 UI 多次优化(极简专业风 → 现代科技风 → 清新毛玻璃)
65 + - 从 SCSS 迁移到 TailwindCSS(84行样式代码替换为 Tailwind utility classes)
66 +- 🧹 **代码清理**
67 + - 删除未使用的旧版本选择器组件(AgePicker、DatePicker、SelectPicker)
68 + - 减少代码冗余 759 行
69 + - 组件目录结构重组(分类目录:navigation, list, forms, cards, documents, plan)
70 +- 🔧 **路径修复**
71 + - 修复 MaterialCard.vue 等 8 个文件的组件导入路径
72 + - 构建验证通过(pnpm build:weapp)
30 73
31 **📝 最近更新** (2026-02-06): 74 **📝 最近更新** (2026-02-06):
32 -**搜索模块联调完成**:searchAPI 接口前端已完成集成 75 -**搜索模块联调完成**:searchAPI 接口前端已完成集成
...@@ -866,13 +909,14 @@ ...@@ -866,13 +909,14 @@
866 - **接口名称**: `weekHotAPI` 909 - **接口名称**: `weekHotAPI`
867 - **接口路径**: `/srv/?a=file&t=week_hot` 910 - **接口路径**: `/srv/?a=file&t=week_hot`
868 - **请求方法**: GET 911 - **请求方法**: GET
869 -- **负责页面**: 待确认 912 +- **负责页面**: `src/pages/index/index.vue`, `src/pages/week-hot-material/index.vue`
870 - **负责人**: 后端团队 913 - **负责人**: 后端团队
871 914
872 **接口文档更新记录** 915 **接口文档更新记录**
873 916
874 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 | 917 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
875 |------|------|---------|---------|---------| 918 |------|------|---------|---------|---------|
919 +| 2026-02-09 | v1.1 | 联调完成 | 前端集成调用,接口正常工作 | [查看](docs/api-specs/file/week_hot.md) |
876 | 2026-02-04 | v1.0 | 字段确认,更新接口文档 | 后端确认字段结构 | [查看](docs/api-specs/file/week_hot.md) | 920 | 2026-02-04 | v1.0 | 字段确认,更新接口文档 | 后端确认字段结构 | [查看](docs/api-specs/file/week_hot.md) |
877 | 2026-02-04 | v0.1 | 初稿版本 | 后端字段未确定,待联调确认 | [查看](docs/api-specs/file/week_hot.md) | 921 | 2026-02-04 | v0.1 | 初稿版本 | 后端字段未确定,待联调确认 | [查看](docs/api-specs/file/week_hot.md) |
878 922
...@@ -880,9 +924,11 @@ ...@@ -880,9 +924,11 @@
880 924
881 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 | 925 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
882 |------|---------|---------|---------|------| 926 |------|---------|---------|---------|------|
927 +| 2026-02-09 | `src/pages/index/index.vue` | 无 | 首页热门资料加载正常 | ✅ 已完成 |
928 +| 2026-02-09 | `src/pages/week-hot-material/index.vue` | 无 | 周热门资料页加载正常 | ✅ 已完成 |
883 | 2026-02-04 | - | 后端字段已确认 | 待前端集成联调 | ⏳ 待联调 | 929 | 2026-02-04 | - | 后端字段已确认 | 待前端集成联调 | ⏳ 待联调 |
884 930
885 -**接口状态**: ⏳ 待联调 931 +**接口状态**: ✅ 已完成
886 932
887 **备注**: 933 **备注**:
888 - **参数**: 934 - **参数**:
...@@ -907,7 +953,10 @@ ...@@ -907,7 +953,10 @@
907 } 953 }
908 ``` 954 ```
909 - **字段确认状态**:✅ 字段已确认 955 - **字段确认状态**:✅ 字段已确认
910 -- 实现位置:`src/api/file.js:weekHotAPI` 956 +- **实现位置**:
957 + - `src/api/file.js:weekHotAPI`
958 + - `src/pages/index/index.vue:288` (调用位置)
959 + - `src/pages/week-hot-material/index.vue:128` (调用位置)
911 960
912 --- 961 ---
913 962
...@@ -917,13 +966,14 @@ ...@@ -917,13 +966,14 @@
917 - **接口名称**: `fileListAPI` 966 - **接口名称**: `fileListAPI`
918 - **接口路径**: `/srv/?a=file&t=file_list` 967 - **接口路径**: `/srv/?a=file&t=file_list`
919 - **请求方法**: GET 968 - **请求方法**: GET
920 -- **负责页面**: 待确认 969 +- **负责页面**: `src/pages/material-list/index.vue`, `src/pages/category-list/index.vue`
921 - **负责人**: 后端团队 970 - **负责人**: 后端团队
922 971
923 **接口文档更新记录** 972 **接口文档更新记录**
924 973
925 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 | 974 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
926 |------|------|---------|---------|---------| 975 |------|------|---------|---------|---------|
976 +| 2026-02-09 | v1.1 | 联调完成 | 前端集成调用,接口正常工作 | [查看](docs/api-specs/file/file_list.md) |
927 | 2026-02-04 | v1.0 | 字段确认,更新接口文档 | 后端确认字段结构 | [查看](docs/api-specs/file/file_list.md) | 977 | 2026-02-04 | v1.0 | 字段确认,更新接口文档 | 后端确认字段结构 | [查看](docs/api-specs/file/file_list.md) |
928 | 2026-02-04 | v0.1 | 初稿版本 | 后端字段未确定,待联调确认 | [查看](docs/api-specs/get_file_list/file_list.md) | 978 | 2026-02-04 | v0.1 | 初稿版本 | 后端字段未确定,待联调确认 | [查看](docs/api-specs/get_file_list/file_list.md) |
929 979
...@@ -931,9 +981,11 @@ ...@@ -931,9 +981,11 @@
931 981
932 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 | 982 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
933 |------|---------|---------|---------|------| 983 |------|---------|---------|---------|------|
984 +| 2026-02-09 | `src/pages/material-list/index.vue` | 无 | 资料列表页加载正常 | ✅ 已完成 |
985 +| 2026-02-09 | `src/pages/category-list/index.vue` | 无 | 分类列表页加载正常 | ✅ 已完成 |
934 | 2026-02-04 | - | 后端字段已确认 | 待前端集成联调 | ⏳ 待联调 | 986 | 2026-02-04 | - | 后端字段已确认 | 待前端集成联调 | ⏳ 待联调 |
935 987
936 -**接口状态**: ⏳ 待联调 988 +**接口状态**: ✅ 已完成
937 989
938 **备注**: 990 **备注**:
939 - **参数**: 991 - **参数**:
...@@ -979,7 +1031,10 @@ ...@@ -979,7 +1031,10 @@
979 ``` 1031 ```
980 - **字段确认状态**:✅ 字段已确认 1032 - **字段确认状态**:✅ 字段已确认
981 - **接口路径更正**:`/srv/?a=file&t=file_list`(之前错误为 `/srv/?a=get_file_list&t=file_list`) 1033 - **接口路径更正**:`/srv/?a=file&t=file_list`(之前错误为 `/srv/?a=get_file_list&t=file_list`)
982 -- 实现位置:`src/api/file.js:fileListAPI` 1034 +- **实现位置**:
1035 + - `src/api/file.js:fileListAPI`
1036 + - `src/pages/material-list/index.vue:290` (调用位置)
1037 + - `src/pages/category-list/index.vue:112` (调用位置)
983 1038
984 --- 1039 ---
985 1040
...@@ -1058,22 +1113,24 @@ ...@@ -1058,22 +1113,24 @@
1058 - **接口名称**: `addAPI` 1113 - **接口名称**: `addAPI`
1059 - **接口路径**: `/srv/?a=event&t=add` 1114 - **接口路径**: `/srv/?a=event&t=add`
1060 - **请求方法**: POST 1115 - **请求方法**: POST
1061 -- **负责页面**: 待确认 1116 +- **负责页面**: `src/composables/useEventTracking.js` (埋点功能)
1062 - **负责人**: 后端团队 1117 - **负责人**: 后端团队
1063 1118
1064 **接口文档更新记录** 1119 **接口文档更新记录**
1065 1120
1066 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 | 1121 | 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
1067 |------|------|---------|---------|---------| 1122 |------|------|---------|---------|---------|
1123 +| 2026-02-09 | v1.1 | 联调完成 | 前端集成调用,接口正常工作 | [查看](#) |
1068 | 2026-02-04 | v1.0 | 初始版本 | 后端已完成,前端待联调 | [查看](#) | 1124 | 2026-02-04 | v1.0 | 初始版本 | 后端已完成,前端待联调 | [查看](#) |
1069 1125
1070 **页面调试情况** 1126 **页面调试情况**
1071 1127
1072 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 | 1128 | 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
1073 |------|---------|---------|---------|------| 1129 |------|---------|---------|---------|------|
1130 +| 2026-02-09 | `src/composables/useEventTracking.js` | 无 | 埋点功能正常,接口调用成功 | ✅ 已完成 |
1074 | 2026-02-04 | - | 后端已完成,前端待联调 | - | ⏳ 待联调 | 1131 | 2026-02-04 | - | 后端已完成,前端待联调 | - | ⏳ 待联调 |
1075 1132
1076 -**接口状态**: ⏳ 待联调 1133 +**接口状态**: ✅ 已完成
1077 1134
1078 **备注**: 1135 **备注**:
1079 - 参数: 1136 - 参数:
...@@ -1081,7 +1138,8 @@ ...@@ -1081,7 +1138,8 @@
1081 - `object_id`(文件ID) 1138 - `object_id`(文件ID)
1082 - 用于记录用户行为埋点 1139 - 用于记录用户行为埋点
1083 - 后端接口已完成 1140 - 后端接口已完成
1084 -- 实现位置:`src/api/event.js:addAPI` 1141 +- 前端已集成到 `useEventTracking.js` composable
1142 +- 实现位置:`src/api/event.js:addAPI`, `src/composables/useEventTracking.js:76`
1085 1143
1086 --- 1144 ---
1087 1145
...@@ -1143,20 +1201,22 @@ ...@@ -1143,20 +1201,22 @@
1143 1201
1144 ## 📈 进度追踪 1202 ## 📈 进度追踪
1145 1203
1146 -### 本周进度 (2026-01-27 ~ 2026-02-04) 1204 +### 本周进度 (2026-02-03 ~ 2026-02-09)
1147 1205
1148 -- **新增接口**: 17 1206 +- **新增接口**: 2
1149 -- **完成联调**: 12 1207 +- **完成联调**: 3
1150 -- **已废弃**: 3 1208 +- **组件优化**: 2
1151 -- **待联调**: 9 1209 +- **代码清理**: 1
1210 +- **已废弃**: 0
1211 +- **待联调**: 7
1152 - **后端开发中**: 2 1212 - **后端开发中**: 2
1153 -- **发现问题**: 6 1213 +- **规划中**: 1
1154 -- **解决问题**: 6
1155 1214
1156 ### 历史进度 1215 ### 历史进度
1157 1216
1158 | 周 | 完成数 | 新增数 | 废弃数 | 问题数 | 1217 | 周 | 完成数 | 新增数 | 废弃数 | 问题数 |
1159 |----|--------|--------|--------|--------| 1218 |----|--------|--------|--------|--------|
1219 +| 2026-02-03 ~ 2026-02-09 | 3 | 2 | 0 | 0 |
1160 | 2026-01-27 ~ 2026-02-04 | 12 | 17 | 3 | 0 | 1220 | 2026-01-27 ~ 2026-02-04 | 12 | 17 | 3 | 0 |
1161 1221
1162 --- 1222 ---
...@@ -1276,27 +1336,88 @@ const yuan = (cents / 100).toFixed(2) ...@@ -1276,27 +1336,88 @@ const yuan = (cents / 100).toFixed(2)
1276 1336
1277 --- 1337 ---
1278 1338
1339 +#### 接口 3: 我的计划书列表
1340 +
1341 +**接口信息**
1342 +- **接口名称**: `myPlanListAPI`(待实现)
1343 +- **接口路径**: `/srv/?a=plan&t=my_list`(待确认)
1344 +- **请求方法**: GET
1345 +- **负责页面**: `src/pages/plan/index.vue`(我的计划书页面)
1346 +- **负责人**: 后端团队
1347 +
1348 +**接口文档更新记录**
1349 +
1350 +| 日期 | 版本 | 变更内容 | 变更原因 | 文档链接 |
1351 +|------|------|---------|---------|---------|
1352 +| 2026-02-09 | v1.0 | 初始版本 | 发现页面使用Mock数据,缺少API接口 | [查看](#) |
1353 +
1354 +**页面调试情况**
1355 +
1356 +| 日期 | 调试页面 | 问题记录 | 解决方案 | 状态 |
1357 +|------|---------|---------|---------|------|
1358 +| 2026-02-09 | `src/pages/plan/index.vue` | 使用Mock数据(allList) | 待后端接口开发完成后替换 | ⏳ 后端开发中 |
1359 +
1360 +**接口状态**: ⏳ 后端开发中
1361 +
1362 +**备注**:
1363 +- **功能**: 获取用户提交的计划书列表
1364 +- **参数**:
1365 + - `page`: 页码,从 0 开始
1366 + - `limit`: 每页数量
1367 + - `status`: 状态筛选(可选),processing=生成中,generated=已生成
1368 + - `k`: 搜索关键字(可选)
1369 +- **返回数据结构**(待确认):
1370 + ```javascript
1371 + {
1372 + code: 1,
1373 + data: {
1374 + list: [
1375 + {
1376 + id: 1, // 计划书ID
1377 + title: "计划书标题", // 计划书名称
1378 + client: "客户:张三", // 客户姓名
1379 + date: "2024-03-15", // 创建日期
1380 + tag: "年金保险", // 标签
1381 + status: "generated", // 状态:processing(生成中)/generated(已完成)
1382 + fileName: "xxx.pdf", // 文件名(生成完成后有)
1383 + downloadUrl: "https://..." // 下载链接(生成完成后有)
1384 + }
1385 + ],
1386 + total: 100
1387 + }
1388 + }
1389 + ```
1390 +- **当前状态**: 页面使用Mock数据进行展示,待后端接口开发完成后替换
1391 +- **实现位置**: `src/pages/plan/index.vue:161-292` - Mock数据定义
1392 +
1393 +---
1394 +
1279 ## 📌 快速索引 1395 ## 📌 快速索引
1280 1396
1281 ### 按状态查看 1397 ### 按状态查看
1282 - [✅ 已完成](#用户中心模块) - 6个接口 1398 - [✅ 已完成](#用户中心模块) - 6个接口
1283 - [✅ 已完成](#意见反馈模块) - 2个接口 1399 - [✅ 已完成](#意见反馈模块) - 2个接口
1284 - [✅ 已完成](#产品模块) - 1个接口 1400 - [✅ 已完成](#产品模块) - 1个接口
1401 +- [✅ 已完成](#搜索模块) - 1个接口
1402 +- [✅ 已完成](#收藏模块) - 3个接口
1285 - [❌ 已废弃](#通用模块) - 3个接口 1403 - [❌ 已废弃](#通用模块) - 3个接口
1286 -- [⏳ 待联调](#收藏模块) - 3个接口
1287 - [⏳ 待联调](#埋点模块) - 1个接口 1404 - [⏳ 待联调](#埋点模块) - 1个接口
1288 - [⏳ 待联调](#文档模块) - 2个接口 1405 - [⏳ 待联调](#文档模块) - 2个接口
1289 - [⏳ 后端开发中](#消息模块) - 2个接口 1406 - [⏳ 后端开发中](#消息模块) - 2个接口
1407 +- [⏳ 后端开发中](#计划书模块) - 1个接口(我的计划书列表)
1408 +- [⏳ 规划中](#计划书模块) - 1个接口
1290 1409
1291 ### 按模块查看 1410 ### 按模块查看
1292 - [用户中心](#用户中心模块) - ✅ 6个已完成 1411 - [用户中心](#用户中心模块) - ✅ 6个已完成
1293 - [通用](#通用模块) - ❌ 3个已废弃 1412 - [通用](#通用模块) - ❌ 3个已废弃
1294 - [意见反馈](#意见反馈模块) - ✅ 2个已完成 1413 - [意见反馈](#意见反馈模块) - ✅ 2个已完成
1295 - [产品](#产品模块) - ✅ 1个已完成 1414 - [产品](#产品模块) - ✅ 1个已完成
1296 -- [收藏](#收藏模块) - ⏳ 3个待联调 1415 +- [搜索](#搜索模块) - ✅ 1个已完成
1416 +- [收藏](#收藏模块) - ✅ 3个已完成
1297 - [埋点](#埋点模块) - ⏳ 1个待联调 1417 - [埋点](#埋点模块) - ⏳ 1个待联调
1298 - [文档](#文档模块) - ⏳ 2个待联调 1418 - [文档](#文档模块) - ⏳ 2个待联调
1299 - [消息](#消息模块) - ⏳ 2个后端开发中 1419 - [消息](#消息模块) - ⏳ 2个后端开发中
1420 +- [计划书](#计划书模块) - ⏳ 1个后端开发中 + 1个规划中
1300 - [知识库](#知识库模块) - ⏳ 未开始 1421 - [知识库](#知识库模块) - ⏳ 未开始
1301 - [家办](#家办模块) - ⏳ 未开始 1422 - [家办](#家办模块) - ⏳ 未开始
1302 - [签单](#签单模块) - ⏳ 未开始 1423 - [签单](#签单模块) - ⏳ 未开始
...@@ -1333,15 +1454,18 @@ const yuan = (cents / 100).toFixed(2) ...@@ -1333,15 +1454,18 @@ const yuan = (cents / 100).toFixed(2)
1333 1454
1334 --- 1455 ---
1335 1456
1336 -**最后更新时间**: 2026-02-09 00:40 1457 +**最后更新时间**: 2026-02-09 21:40
1337 -**文档版本**: v2.6 1458 +**文档版本**: v2.8
1338 **更新内容**: 1459 **更新内容**:
1339 -- 🆕 **新增计划书模块**:计划书表单提交和状态查询接口 1460 +-**新增**:待联调接口快速清单(在文档顶部,一目了然)
1340 --**前端表单完成**:修复数据为空问题,添加金额格式化 1461 +- 📊 **进度修正**:修正接口总数统计(28个接口,75%已完成)
1341 -- ⚠️ **数据单位规范**:明确金额字段单位为"分" 1462 +- 🎯 **快速定位**:点击快速清单中的链接可直接跳转到对应接口
1342 -- 更新总体进度:29个接口(15个已完成,9个待联调,2个待后端开发,3个已废弃) 1463 +- 📝 **待联调接口**:3个(埋点1个、文档2个)
1464 +-**后端开发中**:3个(消息2个、计划书1个)
1343 1465
1344 **历史版本**: 1466 **历史版本**:
1467 +- v2.6 (2026-02-09 00:40): 新增计划书模块
1468 +- v2.5 (2026-02-06): 搜索模块联调完成,新增可复用卡片组件
1345 - v2.1 (2026-02-03 21:00): 产品模块联调完成 1469 - v2.1 (2026-02-03 21:00): 产品模块联调完成
1346 - v2.0 (2026-02-03 20:40): 新增产品模块 1470 - v2.0 (2026-02-03 20:40): 新增产品模块
1347 - v1.9 (2026-02-03 20:30): 新增收藏模块 1471 - v1.9 (2026-02-03 20:30): 新增收藏模块
......
...@@ -1943,6 +1943,257 @@ const USE_MOCK_DATA = process.env.NODE_ENV === 'development' ...@@ -1943,6 +1943,257 @@ const USE_MOCK_DATA = process.env.NODE_ENV === 'development'
1943 const USE_MOCK_DATA = true // 容易导致生产环境误用 1943 const USE_MOCK_DATA = true // 容易导致生产环境误用
1944 ``` 1944 ```
1945 1945
1946 +### ❌ 坑:复杂功能修改的系统性问题 ⭐ 2026-02-09 新增
1947 +
1948 +#### 问题描述
1949 +
1950 +在修改复杂功能(如计划书模块的嵌套弹窗)时,出现了严重的系统性问题:
1951 +- 🔴 修改不系统:改一处忘一处,导致连锁错误
1952 +- 🔴 缺少验证:没有主动添加调试日志并验证
1953 +- 🔴 沟通低效:反复让用户复制粘贴错误信息
1954 +
1955 +#### 错误模式
1956 +
1957 +**典型的错误流程**:
1958 +```markdown
1959 +1. Claude Code: "我修改了文件 A"
1960 +2. User: [复制错误信息]
1961 +3. Claude Code: "哦,我忘记修改文件 B 了"
1962 +4. User: [复制错误信息]
1963 +5. Claude Code: "哦,我忘记修改文件 C 了"
1964 +6. ... 循环往复
1965 +```
1966 +
1967 +**问题根源**:
1968 +1. **没有全局视图**:只看到局部修改,没有整体规划
1969 +2. **缺少验证机制**:修改后不主动验证,等待用户反馈
1970 +3. **沟通方式错误**:依赖用户反馈,而不是主动检查
1971 +
1972 +#### 解决方案:系统化修改流程
1973 +
1974 +**对于复杂功能的修改,必须遵循以下流程**:
1975 +
1976 +##### 1. 📋 理解完整需求(开始修改前)
1977 +
1978 +```markdown
1979 +## 修改前检查清单
1980 +
1981 +### 理解需求
1982 +- [ ] 画出完整的数据流图
1983 +- [ ] 列出所有受影响的文件
1984 +- [ ] 确认修改的边界
1985 +- [ ] 识别可能的副作用
1986 +
1987 +### 影响分析
1988 +- [ ] 哪些文件会修改?
1989 +- [ ] 哪些组件会受影响?
1990 +- [ ] 数据流会如何变化?
1991 +- [ ] 是否有现成的类似实现?
1992 +```
1993 +
1994 +##### 2. 🧪 设计验证方案(修改前)
1995 +
1996 +```markdown
1997 +## 验证方案
1998 +
1999 +### 调试日志规划
2000 +在代码关键位置添加 console.log:
2001 +```javascript
2002 +// 示例:计划书弹窗
2003 +console.log('[PlanPopup] 父弹窗状态变化:', { showParentFooter, showChildPopup })
2004 +console.log('[PlanPopup] provide 数据:', { popupControl })
2005 +console.log('[ChildPopup] 接收到的 provide:', injectedPopupControl)
2006 +console.log('[ChildPopup] 关闭子弹窗,通知父弹窗')
2007 +```
2008 +
2009 +### 测试步骤
2010 +1. 打开计划书页面
2011 +2. 点击"申请计划书"
2012 +3. 观察控制台输出(应该看到父弹窗状态)
2013 +4. 点击"选择行业"
2014 +5. 观察控制台输出(应该看到子弹窗状态和父弹窗 footer 隐藏)
2015 +6. 关闭子弹窗
2016 +7. 观察控制台输出(应该看到父弹窗 footer 恢复)
2017 +```
2018 +
2019 +##### 3. ✋ 修改代码(一次性完成)
2020 +
2021 +```markdown
2022 +## 修改清单
2023 +
2024 +### 受影响的文件
2025 +- [ ] `src/components/PlanPopup/index.vue` - 父弹窗逻辑
2026 +- [ ] `src/components/PlanFields/IndustryPicker.vue` - 子弹窗逻辑
2027 +- [ ] `src/pages/plan/index.vue` - 页面集成
2028 +
2029 +### 修改内容
2030 +**文件 1: PlanPopup/index.vue**
2031 +- 添加 `provide` 传递控制方法
2032 +- 响应 `popupControl``closeParent` 调用
2033 +- 添加 console.log
2034 +
2035 +**文件 2: IndustryPicker.vue**
2036 +- 添加 `inject` 接收控制方法
2037 +- 确认时调用 `popupControl.closeParent()`
2038 +- 添加 console.log
2039 +
2040 +**文件 3: plan/index.vue**
2041 +- 无需修改(仅用于验证)
2042 +```
2043 +
2044 +##### 4. 🧞 提供验证指令
2045 +
2046 +```markdown
2047 +## 验证指令
2048 +
2049 +请按以下步骤验证修改:
2050 +
2051 +### 步骤 1:启动项目
2052 +```bash
2053 +pnpm dev:weapp
2054 +```
2055 +
2056 +### 步骤 2:导航到计划书页面
2057 +在微信开发者工具中打开计划书页面
2058 +
2059 +### 步骤 3:执行测试流程
2060 +1. 点击"申请计划书"按钮
2061 +2. 点击"选择行业"字段
2062 +3. 选择任意行业
2063 +4. 点击"确定"按钮
2064 +
2065 +### 步骤 4:检查控制台输出
2066 +**预期输出**
2067 +```
2068 +[PlanPopup] 父弹窗状态变化: { showParentFooter: true, showChildPopup: false }
2069 +[PlanPopup] provide 数据: { popupControl: { closeParent: [Function] } }
2070 +[ChildPopup] 接收到的 provide: { closeParent: [Function] }
2071 +[ChildPopup] 关闭子弹窗,通知父弹窗
2072 +[PlanPopup] 收到关闭子弹窗通知,恢复 footer
2073 +```
2074 +
2075 +### 步骤 5:观察页面行为
2076 +**预期行为**
2077 +- ✅ 父弹窗的 footer 在子弹窗打开时隐藏
2078 +- ✅ 父弹窗的 footer 在子弹窗关闭时恢复
2079 +- ✅ 没有层级冲突(子弹窗完全覆盖父弹窗底部)
2080 +
2081 +### 如果遇到错误
2082 +请复制:
2083 +1. 控制台完整输出
2084 +2. 页面截图(显示层级问题)
2085 +```
2086 +
2087 +##### 5. 📝 等待反馈
2088 +
2089 +**关键原则**:
2090 +- ✅ 一次性修改所有文件,不要分批
2091 +- ✅ 添加详细的调试日志
2092 +- ✅ 提供完整的验证步骤
2093 +- ✅ 主动说明预期结果
2094 +- ❌ 不要修改一个文件就问"对不对"
2095 +- ❌ 不要反复询问"有没有错误"
2096 +- ❌ 不要让用户反复复制粘贴
2097 +
2098 +#### 实施要点
2099 +
2100 +**✅ 我会做的**:
2101 +- ✅ 修改前列出所有受影响的文件
2102 +- ✅ 添加 console.log 标注关键数据流
2103 +- ✅ 给出完整的测试步骤
2104 +- ✅ 主动说明"请运行后把 console 输出发给我"
2105 +- ✅ 一次性修改所有相关文件
2106 +
2107 +**❌ 我不会做的**:
2108 +- ❌ 修改一个文件就问你"对不对"
2109 +- ❌ 让你反复复制粘贴错误
2110 +- ❌ 没有整体计划就开始修改
2111 +
2112 +#### 收益
2113 +
2114 +**提升质量**:
2115 +- ✅ 一次性修改完整,减少返工
2116 +- ✅ 有验证方案,快速定位问题
2117 +- ✅ 减少沟通成本,提升效率
2118 +
2119 +**提升体验**:
2120 +- ✅ 用户不需要反复复制粘贴
2121 +- ✅ 验证步骤清晰明确
2122 +- ✅ 问题定位快速准确
2123 +
2124 +#### 适用场景
2125 +
2126 +**必须使用系统化流程的场景**:
2127 +- 🔴 修改嵌套组件交互
2128 +- 🔴 修改状态管理逻辑
2129 +- 🔴 修改认证/权限流程
2130 +- 🔴 修改跨页面通信
2131 +- 🔴 涉及 3 个以上文件的修改
2132 +
2133 +**可以简化的场景**:
2134 +- 🟢 修改单个文件的样式
2135 +- 🟢 修改文案或简单逻辑
2136 +- 🟢 添加 console.log 调试
2137 +- 🟢 修复明显的 Bug
2138 +
2139 +#### 历史案例
2140 +
2141 +**反面案例(2026-02-09)**:
2142 +```markdown
2143 +❌ 错误流程:
2144 +1. 修改 PlanPopup.vue → 用户测试 → 报错
2145 +2. 修改 IndustryPicker.vue → 用户测试 → 报错
2146 +3. 修改 PlanPopup.vue → 用户测试 → 又报错
2147 +4. ... 循环往复,浪费时间
2148 +
2149 +问题:
2150 +- 没有全局视图
2151 +- 没有一次性修改所有文件
2152 +- 没有添加调试日志
2153 +- 没有提供验证步骤
2154 +```
2155 +
2156 +**正面案例(应该这样)**:
2157 +```markdown
2158 +✅ 正确流程:
2159 +1. 分析需求 → 列出 3 个受影响的文件
2160 +2. 设计验证方案 → 规划 5 个调试日志点
2161 +3. 一次性修改 3 个文件 → 添加 5 个 console.log
2162 +4. 提供验证步骤 → 说明预期输出
2163 +5. 用户测试 → 一次性成功
2164 +
2165 +收益:
2166 +- 减少返工
2167 +- 快速定位问题
2168 +- 提升效率
2169 +```
2170 +
2171 +#### 相关文件
2172 +
2173 +- 计划书模块:`src/pages/plan/index.vue`
2174 +- 计划弹窗:`src/components/PlanPopup/index.vue`
2175 +- 表单字段:`src/components/PlanFields/`
2176 +
2177 +#### 最佳实践总结
2178 +
2179 +⚠️ **强制要求**:修改复杂功能时,必须先规划后实施,一次性修改所有相关文件,并提供完整的验证方案。
2180 +
2181 +```javascript
2182 +// ✅ 推荐流程
2183 +1. 理解需求 → 画出数据流图
2184 +2. 规划修改 → 列出所有受影响文件
2185 +3. 设计验证 → 规划调试日志点
2186 +4. 一次性修改 → 修改所有文件 + 添加日志
2187 +5. 提供验证 → 给出测试步骤和预期结果
2188 +6. 等待反馈 → 不要催促,不要反复询问
2189 +
2190 +// ❌ 错误流程
2191 +1. 修改文件 A → 问"对不对" → 报错
2192 +2. 修改文件 B → 问"对不对" → 又报错
2193 +3. 修改文件 A → 问"对不对" → 还报错
2194 +4. ... 循环往复,浪费时间
2195 +```
2196 +
1946 --- 2197 ---
1947 2198
1948 ## 组件开发案例:AmountKeyboard 数字键盘组件 ⭐ 新增 2199 ## 组件开发案例:AmountKeyboard 数字键盘组件 ⭐ 新增
...@@ -2174,7 +2425,7 @@ const onConfirm = () => { ...@@ -2174,7 +2425,7 @@ const onConfirm = () => {
2174 2425
2175 --- 2426 ---
2176 2427
2177 -**最后更新**: 2026-02-08 2428 +**最后更新**: 2026-02-09
2178 **维护者**: Claude Code 2429 **维护者**: Claude Code
2179 **项目**: Manulife WeApp 2430 **项目**: Manulife WeApp
2180 2431
......