hookehuyr

docs(project): 更新项目文档记录重大功能更新

今天(2026-02-15):
- 多产品文档解析(product-splitter.js)
- 智能字段提取器(smartExtractList)
- 产品边界检测能力

昨天(2026-02-14):
- Git 工作流优化(standard-version)
- 消息功能全面优化
- 计划书 Schema 化重构
- MCP 文档解析集成
- Mock 数据优化

更新文件:
- CLAUDE.md
- README.md
- CHANGELOG.md
- lessons-learned.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
...@@ -82,9 +82,40 @@ pnpm dev:tt # 字节跳动小程序开发 ...@@ -82,9 +82,40 @@ pnpm dev:tt # 字节跳动小程序开发
82 82
83 ## 📋 快速参考 83 ## 📋 快速参考
84 84
85 -### 🆕 最新更新(2026-02-12) 85 +### 🆕 最新更新(2026-02-15 & 2026-02-14)
86 - 86 +
87 -**计划书功能优化** 87 +**文档解析重大升级**
88 +- ✅ 支持多产品文档解析(自动识别和分割多个保险产品)
89 +- ✅ 实现智能字段提取器 smartExtractList()
90 +- ✅ 新增产品边界检测模块(支持产品代码和命名模式识别)
91 +- ✅ 完善 MCP 解析切换功能和审核流程
92 +- ✅ 优化文档解析工具链和测试验证
93 +
94 +**计划书模块重构**
95 +- ✅ 计划书表单字段 Schema 化(人寿/重疾模板)
96 +- ✅ 优化字段配置管理,提取订单状态常量
97 +- ✅ 重构表单提交逻辑,使用模板字段映射
98 +- ✅ 完善表单交互和字段验证
99 +- ✅ 优化提取方式字段映射和重命名
100 +
101 +**消息功能全面优化**
102 +- ✅ 优化消息列表卡片布局,提升信息可读性
103 +- ✅ 简化消息列表逻辑,移除冗余代码
104 +- ✅ 优化消息详情页布局和样式
105 +- ✅ 统一消息页面交互体验
106 +
107 +**Git 工作流与版本管理**
108 +- ✅ 使用 standard-version 替代自定义版本更新脚本
109 +- ✅ 配置 conventional commits 规范
110 +- ✅ 完善版本发布流程文档
111 +- ✅ 移除旧的版本自动更新脚本
112 +
113 +**Mock 数据优化**
114 +- ✅ 优化产品列表 Mock 数据结构
115 +- ✅ 添加测试商品到列表首位
116 +- ✅ 修正搜索测试 Mock 开关
117 +
118 +**计划书功能优化(历史更新)**
88 - ✅ 添加计划书卡片状态标记("生成中"/"已完成",黄色/绿色背景) 119 - ✅ 添加计划书卡片状态标记("生成中"/"已完成",黄色/绿色背景)
89 - ✅ 修复嵌套弹窗层级冲突(使用 provide/inject 模式) 120 - ✅ 修复嵌套弹窗层级冲突(使用 provide/inject 模式)
90 - ✅ 优化页面滚动加载并清理调试代码 121 - ✅ 优化页面滚动加载并清理调试代码
......
...@@ -49,9 +49,32 @@ pnpm lint ...@@ -49,9 +49,32 @@ pnpm lint
49 -**文档预览能力** - DocumentPreview 支持多格式文件预览 49 -**文档预览能力** - DocumentPreview 支持多格式文件预览
50 -**统一列表交互** - 搜索、收藏、资料列表统一点击与操作逻辑 50 -**统一列表交互** - 搜索、收藏、资料列表统一点击与操作逻辑
51 51
52 -## 🆕 最新更新(2026-02-14) 52 +## 🆕 最新更新(2026-02-15 & 2026-02-14)
53 - 53 +
54 -### 构建告警修复 54 +### 文档解析重大升级(2026-02-15)
55 +-**多产品文档解析** - 支持自动识别和分割包含多个保险产品的文档
56 +-**智能字段提取器** - 实现 smartExtractList() 智能列表边界识别
57 +-**产品边界检测** - 支持产品代码(GS、GC、FA、LV2)和命名模式识别
58 +-**MCP 解析切换** - 完善 markitdown 文档解析服务集成
59 +-**审核流程落地** - 待审核文件管理,人工确认后才写入配置
60 +
61 +### Git 工作流优化(2026-02-14)
62 +-**版本管理标准化** - 使用 standard-version 替代自定义脚本
63 +-**Conventional Commits** - 配置提交信息规范
64 +-**自动化版本发布** - 自动更新版本号和生成 Git 标签
65 +-**人工维护 CHANGELOG** - 配置跳过自动生成,使用自定义模板
66 +
67 +### 消息功能全面优化(2026-02-14)
68 +-**列表布局优化** - 提升消息卡片信息可读性
69 +-**代码简化** - 移除冗余逻辑,提升可维护性
70 +-**详情页优化** - 避免内容重复显示,统一交互体验
71 +
72 +### 计划书模块重构(2026-02-14)
73 +-**Schema 驱动** - 储蓄类/人寿/重疾模板字段配置化
74 +-**提交映射优化** - 从容器迁移到模板配置
75 +-**校验提示改进** - 必填提示与百分比校验统一
76 +
77 +### 构建告警修复(2026-02-14)
55 -**usePlanView 导出补齐** - 补充 usePlanView 导出并绑定 viewFile,修复构建告警 78 -**usePlanView 导出补齐** - 补充 usePlanView 导出并绑定 viewFile,修复构建告警
56 79
57 ### 计划书表单演进 80 ### 计划书表单演进
......
...@@ -47,6 +47,46 @@ ...@@ -47,6 +47,46 @@
47 47
48 --- 48 ---
49 49
50 +## [2026-02-14] - 消息功能全面优化
51 +
52 +### 优化
53 +- 优化消息列表卡片布局,提升信息可读性
54 +- 简化消息列表逻辑,移除冗余代码
55 +- 优化消息详情页布局,避免内容重复显示
56 +- 统一消息页面样式和交互体验
57 +
58 +---
59 +
60 +**详细信息**
61 +- **影响文件**: src/pages/message/index.vue, src/pages/message-detail/index.vue
62 +- **技术栈**: Vue 3, Taro 4, NutUI
63 +- **测试状态**: 已通过
64 +- **备注**: 提升用户阅读体验,代码更简洁可维护
65 +
66 +---
67 +
68 +## [2026-02-14] - Git 工作流与版本管理优化
69 +
70 +### 优化
71 +- 使用 standard-version 替代自定义版本更新脚本
72 +- 配置 standard-version 不自动生成 CHANGELOG(由人工维护)
73 +- 完善版本发布流程和 Git 工作流文档
74 +- 移除旧的版本自动更新脚本
75 +
76 +### 新增
77 +- 配置 conventional commits 规范
78 +- 完善版本管理最佳实践文档
79 +
80 +---
81 +
82 +**详细信息**
83 +- **影响文件**: .versionrc.json, package.json, scripts/ (removed)
84 +- **技术栈**: standard-version, conventional commits
85 +- **测试状态**: 已验证
86 +- **备注**: 统一版本管理工具,简化发布流程
87 +
88 +---
89 +
50 ## [2026-02-14] - 文档解析使用说明完善 90 ## [2026-02-14] - 文档解析使用说明完善
51 91
52 ### 优化 92 ### 优化
......
...@@ -2190,6 +2190,266 @@ onMounted(() => { ...@@ -2190,6 +2190,266 @@ onMounted(() => {
2190 2190
2191 ## 开发工作流 2191 ## 开发工作流
2192 2192
2193 +### ✅ 文档解析工具链最佳实践(2026-02-15)
2194 +
2195 +#### 问题描述
2196 +
2197 +在处理计划书文档解析时,遇到了复杂的多产品文档解析和字段提取问题:
2198 +
2199 +1. **多产品文档识别困难**:一份文档中包含多个保险产品,难以自动识别边界
2200 +2. **字段提取不准确**:列表类型字段(如缴费期、提取方式)边界识别不清
2201 +3. **审核流程缺失**:解析结果直接写入配置,缺少人工审核环节
2202 +
2203 +#### 解决方案
2204 +
2205 +**1. 多产品边界检测**
2206 +
2207 +创建 `product-splitter.js` 模块,基于产品特征自动分割文档:
2208 +
2209 +```javascript
2210 +// scripts/product-splitter.js
2211 +/**
2212 + * 产品边界检测器
2213 + *
2214 + * 支持的识别模式:
2215 + * 1. 产品代码前缀:GS、GC、FA、LV2 等
2216 + * 2. 产品命名模式:以"計劃"、"保障"、"保险"、"壽險"结尾
2217 + */
2218 +export function splitProducts(text) {
2219 + const productCodePattern = /^[A-Z]{2}\d*-/
2220 + const productNamePattern = /(計劃|保障|保险|壽險)$/g
2221 +
2222 + // 自动检测产品边界并分割
2223 + const products = []
2224 + // ... 分割逻辑
2225 + return products
2226 +}
2227 +```
2228 +
2229 +**2. 智能列表提取**
2230 +
2231 +实现 `smartExtractList()` 函数,基于起始模式和结束关键词识别列表边界:
2232 +
2233 +```javascript
2234 +// scripts/smart-field-extractor.js
2235 +/**
2236 + * 智能列表提取器
2237 + *
2238 + * @param {string} text - 文本内容
2239 + * @param {string} startPattern - 起始模式(正则表达式字符串)
2240 + * @param {string[]} endKeywords - 结束关键词数组
2241 + * @returns {string[]} 提取的列表项
2242 + */
2243 +export function smartExtractList(text, startPattern, endKeywords) {
2244 + // 1. 找到起始位置
2245 + const startMatch = text.match(new RegExp(startPattern, 'm'))
2246 + if (!startMatch) return []
2247 +
2248 + // 2. 从起始位置开始,找到第一个结束关键词
2249 + const startIndex = startMatch.index + startMatch[0].length
2250 + let endIndex = text.length
2251 +
2252 + for (const keyword of endKeywords) {
2253 + const keywordIndex = text.indexOf(keyword, startIndex)
2254 + if (keywordIndex !== -1 && keywordIndex < endIndex) {
2255 + endIndex = keywordIndex
2256 + }
2257 + }
2258 +
2259 + // 3. 提取中间内容
2260 + const listText = text.substring(startIndex, endIndex)
2261 +
2262 + // 4. 解析列表项
2263 + return parseListItems(listText)
2264 +}
2265 +```
2266 +
2267 +**使用示例**:
2268 +
2269 +```javascript
2270 +// 提取缴费期列表
2271 +const paymentPeriods = smartExtractList(
2272 + text,
2273 + '繳費年期[::]?\\s*',
2274 + ['投保年齡', '提取方式', '保障年期']
2275 +)
2276 +
2277 +// 提取提取方式列表
2278 +const withdrawalModes = smartExtractList(
2279 + text,
2280 + '提取方式[::]?\\s*',
2281 + ['保障年期', '身故賠償', '保單價值']
2282 +)
2283 +```
2284 +
2285 +**3. 审核流程设计**
2286 +
2287 +```bash
2288 +# 解析流程
2289 +node scripts/parse-docs.js --file=计划书模版.docx
2290 +
2291 +生成待审核文件(docs/to-parse/parse-audit/pending/)
2292 +
2293 +人工审核(检查字段提取准确性)
2294 +
2295 +审核通过后移动到 approved/ 目录
2296 +
2297 +运行合并脚本写入配置文件
2298 +```
2299 +
2300 +#### 实施效果
2301 +
2302 +✅ **成功解析复杂文档**:
2303 +- 计划书模版2.docx → 识别出 4 个保险产品
2304 +- 每个产品生成独立的审核文件
2305 +
2306 +✅ **提升提取准确性**:
2307 +- `insurance_period` 和 `withdrawal_modes` 字段类型处理修复
2308 +- `payment_periods` 字段过滤逻辑优化,排除"投保年龄"等无效项
2309 +
2310 +✅ **可追溯的审核流程**:
2311 +- 待审核文件:`docs/to-parse/parse-audit/pending/`
2312 +- 已审核文件:`docs/to-parse/parse-audit/approved/`
2313 +- 审核记录:`docs/to-parse/parse-audit/records/`
2314 +
2315 +#### 最佳实践
2316 +
2317 +1. **增量开发**:先支持单产品解析,再扩展多产品
2318 +2. **单元测试驱动**:每个提取函数都有对应的测试用例
2319 +3. **人工审核优先**:解析结果不直接写入配置,先人工确认
2320 +4. **文档记录过程**:记录解析策略、测试结果、问题修复
2321 +
2322 +#### 相关文件
2323 +
2324 +- `scripts/product-splitter.js` - 产品边界检测模块
2325 +- `scripts/smart-field-extractor.js` - 智能字段提取器
2326 +- `scripts/parse-docs.js` - 文档解析主脚本
2327 +- `docs/to-parse/README.md` - 解析工具使用说明
2328 +
2329 +---
2330 +
2331 +### ✅ Git 版本管理最佳实践(2026-02-14)
2332 +
2333 +#### 问题描述
2334 +
2335 +项目使用自定义脚本进行版本管理,存在以下问题:
2336 +
2337 +1. **维护成本高**:自定义脚本需要持续维护和修复 bug
2338 +2. **功能不完善**:缺少标签生成、CHANGELOG 自动更新等功能
2339 +3. **不够标准化**:与社区工具不兼容,团队成员需要学习成本
2340 +
2341 +#### 解决方案:使用 standard-version
2342 +
2343 +**1. 安装和配置**
2344 +
2345 +```bash
2346 +# 安装 standard-version
2347 +pnpm add -D standard-version
2348 +
2349 +# 配置 package.json
2350 +{
2351 + "scripts": {
2352 + "release": "standard-version"
2353 + }
2354 +}
2355 +```
2356 +
2357 +**2. 配置文件 `.versionrc.json`**
2358 +
2359 +```json
2360 +{
2361 + "types": [
2362 + { "type": "feat", "section": "✨ 新增功能" },
2363 + { "type": "fix", "section": "🐛 Bug 修复" },
2364 + { "type": "perf", "section": "⚡ 性能优化" },
2365 + { "type": "refactor", "section": "♻️ 代码重构" },
2366 + { "type": "docs", "section": "📝 文档更新", "hidden": true },
2367 + { "type": "style", "section": "💄 代码格式", "hidden": true },
2368 + { "type": "test", "hidden": true },
2369 + { "type": "chore", "hidden": true }
2370 + ],
2371 + "skip": {
2372 + "changelog": true // 跳过自动生成 CHANGELOG(由人工维护)
2373 + }
2374 +}
2375 +```
2376 +
2377 +**3. 使用流程**
2378 +
2379 +```bash
2380 +# 1. 开发完成后提交代码
2381 +git add .
2382 +git commit -m "feat(plan): 添加新功能"
2383 +
2384 +# 2. 运行 release(自动更新版本号和生成 CHANGELOG)
2385 +pnpm release
2386 +
2387 +# 3. 推送到远程
2388 +git push --follow-tags origin develop
2389 +```
2390 +
2391 +**4. 版本号自动更新规则**
2392 +
2393 +遵循 Semantic Versioning:
2394 +- `feat` → MINOR 版本更新(1.0.0 → 1.1.0)
2395 +- `fix` → PATCH 版本更新(1.0.0 → 1.0.1)
2396 +- `perf` → MINOR 版本更新
2397 +- `docs/style/refactor/test/chore` → 不更新
2398 +
2399 +#### 实施效果
2400 +
2401 +✅ **标准化流程**:
2402 +- 使用社区广泛采用的工具
2403 +- 团队成员无需学习自定义脚本
2404 +- 与 CI/CD 工具兼容性好
2405 +
2406 +✅ **自动化程度高**:
2407 +- 自动更新版本号
2408 +- 自动生成 Git 标签
2409 +- 可选自动生成 CHANGELOG
2410 +
2411 +✅ **减少维护成本**:
2412 +- 无需维护自定义脚本
2413 +- 社区持续更新和维护
2414 +- bug 修复由社区完成
2415 +
2416 +#### 最佳实践
2417 +
2418 +1. **Conventional Commits**:所有提交信息遵循规范
2419 + ```
2420 + feat(plan): 添加新功能
2421 + fix(message): 修复消息列表显示
2422 + docs(readme): 更新使用说明
2423 + ```
2424 +
2425 +2. **人工维护 CHANGELOG**:
2426 + - 配置 `skip.changelog: true`
2427 + - 使用自定义的 CHANGELOG 模板
2428 + - 记录更详细的变更信息
2429 +
2430 +3. **版本发布流程**:
2431 + ```bash
2432 + # 1. 确保所有测试通过
2433 + pnpm test
2434 +
2435 + # 2. 更新版本
2436 + pnpm release
2437 +
2438 + # 3. 检查生成的标签
2439 + git tag
2440 +
2441 + # 4. 推送代码和标签
2442 + git push --follow-tags origin develop
2443 + ```
2444 +
2445 +#### 相关文件
2446 +
2447 +- `.versionrc.json` - standard-version 配置文件
2448 +- `package.json` - release 脚本定义
2449 +- `docs/to-parse/README.md` - 版本管理流程说明
2450 +
2451 +---
2452 +
2193 ### ✅ Mock 数据环境自动切换模式 2453 ### ✅ Mock 数据环境自动切换模式
2194 2454
2195 #### 问题描述 2455 #### 问题描述
......