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>
Showing
4 changed files
with
360 additions
and
6 deletions
| ... | @@ -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 | #### 问题描述 | ... | ... |
-
Please register or login to post a comment