1. 10 Feb, 2026 8 commits
    • - 修复 smoking_status 字段映射(之前错误映射为 smoker)
      - 删除未使用的 formatAmounts 函数
      - 将所有"客户姓名"统一改为"申请人"
      - 更新表单标签、占位符和错误提示
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 添加 OpenAPI 生成器 title 字段识别修复的记录
      - 详细说明影响文件和技术细节
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 修改内容:
      - 修复 generateApiFromOpenAPI.js 同时支持 description 和 title 字段
      - 更新 plan/add.md 文档格式(application/json,使用 title 字段)
      - 重新生成 plan.js 和 user.js API 文件
      
      影响:
      - API 参数描述现在能正确显示中文名称(从 title 字段提取)
      - 修正了参数类型(如 customer_age 从 string 改为 integer)
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 更新总体进度:联调中 2个接口(6.9%)
      - addAPI(新增计划书):后端开发中 → 联调中
      - listAPI(计划书列表):后端开发中 → 联调中
      - 记录当前问题:后端还有点问题
      - 新增联调中接口快速清单
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 在.gitignore中添加.swc/目录以忽略SWC编译缓存
      将NameInput.vue中的字体大小单位从rpx改为响应式单位,提高可维护性
      更新组件文件描述为更准确的中文说明
      hookehuyr authored
    • - 新增 PlanFieldName(NameInput)组件用于输入客户姓名
      - 在重疾险、寿险、储蓄险三个模板中集成客户姓名字段
      - 添加客户姓名必填校验逻辑
      - 优化 NameInput 组件样式,使用 Tailwind CSS 和圆角边框
      - 重构计划书页面代码,减少代码重复
      
      影响文件:
      - src/components/plan/PlanFields/NameInput.vue (新增)
      - src/components/plan/PlanTemplates/*.vue (修改)
      - src/components/plan/PlanFormContainer.vue (重构)
      - src/pages/plan/index.vue (重构)
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 简化 API 包装函数(file.js, get_product.js, plan.js)
      - 更新计划书 API:新增 addAPI 和 listAPI
      - 统一使用 fn(fetch.post/get) 调用方式
      - 清理文件头部注释
      - 新增计划书 API 文档(docs/api-specs/plan/)
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 新增 docs/api-docs/README.md(API 文档缓存说明)
      - 新增 docs/api-docs/常用组件速查表.md(组件使用速查)
      - 更新 .claude/settings.local.json(权限配置)
      
      ---
      
      **详细信息**:
      - **影响文件**: .claude/settings.local.json, docs/api-docs/README.md, docs/api-docs/常用组件速查表.md
      - **技术栈**: 文档
      - **测试状态**: N/A
      - **备注**: 提供 Taro 和 NutUI 文档缓存方案及常用组件使用示例
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
  2. 09 Feb, 2026 21 commits
    • - 添加 hasTemplate prop 控制底部按钮显示状态
      - 未找到模板时只显示"关闭"按钮
      - 找到模板时显示"取消"和"生成计划书"按钮
      - 改进用户体验,避免在无模板时显示无用的按钮
      
      影响文件:
      - src/components/plan/PlanPopupNew.vue
      - src/components/plan/PlanFormContainer.vue
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 更新 CHANGELOG.md 记录 Taro 4.1.9 → 4.1.11 和 NutUI 4.3.13 → 4.3.14 的升级
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 升级 @nutui/nutui-taro: 4.3.13 → 4.3.14
      - 升级 Taro 框架: 4.1.9 → 4.1.11
        - 所有 @tarojs/* 核心包升级
        - 新增 @tarojs/service 依赖
      - 更新 pnpm-lock.yaml
      
      改进内容:
      - NutUI 4.3.14 的 bug 修复和性能优化
      - Taro 4.1.11 的小程序平台兼容性改进
      - 更好的 TypeScript 支持
      
      影响文件:
      - package.json
      - pnpm-lock.yaml
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 开发环境(NODE_ENV=development)自动使用Mock数据
      - 生产环境自动使用真实API
      - 移除硬编码的USE_MOCK_DATA开关
      hookehuyr authored
    • hookehuyr authored
    • 将 Mock 数据相关文档从 docs/api-specs/数据文档/ 移动到 docs/guides/数据文档/
      
      变更内容:
      - 重命名: Mock 数据完整总结.md
      - 重命名: Mock 数据设置指南.md
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 将文档移动到更合理的目录位置:
      - 移动 GlobalPopupManager-弹窗管理器.md 到 docs/guides/
      - 移动 lessons-learned.md 到 docs/lessons-learned/ 子目录
      - 提升文档组织清晰度
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 新增 2026-02-09 变更记录
      - 记录 API 集成日志更新(3个接口联调完成)
      - 记录经验教训文档更新(新增复杂功能修改流程)
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • API 集成日志:
      - 完成 3 个待联调接口联调(addAPI, weekHotAPI, fileListAPI)
      - 新增待联调接口快速清单(便于快速定位)
      - 新增 myPlanListAPI 接口定义(我的计划书列表)
      - 更新进度追踪:29个接口,82.8% 已完成
      
      经验教训文档:
      - 新增"复杂功能修改的系统性问题"章节
      - 记录计划书模块开发中的系统性问题
      - 提供系统化修改流程解决方案(5步完整流程)
      - 包含反面案例和正面案例对比
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 删除 80+ 行自定义 Less 样式代码
      - 使用 Tailwind CSS 工具类实现现代化 UI
      - 添加磨砂玻璃效果和动态流光背景
      - 优化布局层次和视觉层次
      - 改进光标动画效果
      - 统一使用项目样式规范(Tailwind 优先)
      
      优化收益:
      - 减少代码量,提高可维护性
      - 视觉效果更现代化
      - 符合项目 Tailwind 优先原则
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 记录删除 AgePicker、DatePicker、SelectPicker 旧版本组件的重构
      hookehuyr authored
    • - 删除 AgePicker.vue(已被 AgePickerGlobal.vue 替代)
      - 删除 DatePicker.vue(已被 DatePickerGlobal.vue 替代)
      - 删除 SelectPicker.vue(已被 SelectPickerGlobal.vue 替代)
      
      所有模板文件已统一使用 Global 版本组件
      hookehuyr authored
    • - 创建 7 个分类目录:navigation, list, forms, cards, documents, plan, icons
      - 移动所有组件到对应功能分类目录
      - 更新所有组件导入路径(41 个文件)
      - 删除 3 个未使用组件(qrCode, FilterTabs.example, PlanPopup)
      - 修复组件内部和页面的导入路径
      
      代码行变化:-7905 +147
      hookehuyr authored
    • - 为所有 PlanFields 选择器添加 close-on-click-overlay="false"
      - 添加 catch-move 防止触摸事件穿透
      - 优化弹窗交互体验,避免误操作关闭
      
      影响文件:
      - src/components/PlanFields/AgePicker.vue
      - src/components/PlanFields/AgePickerGlobal.vue
      - src/components/PlanFields/DatePicker.vue
      - src/components/PlanFields/DatePickerGlobal.vue
      - src/components/PlanFields/SelectPicker.vue
      - src/components/PlanFields/SelectPickerGlobal.vue
      - src/components/PlanPopup/index.vue
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 删除未使用组件: indexNav, qrCodeSearch, time-picker-data, PosterBuilder
      - 删除旧版计划组件: PlanSchemes (SchemeA, SchemeB, PlanPopup)
      - 删除重复组件: 旧版 SavingsTemplate 和 AmountInput
      - 统一使用 AmountKeyboard 作为金额输入组件
      - 总计删除 13 个文件,约 1500-2000 行代码
      hookehuyr authored
    • - 所有输入框组件添加灰色背景(bg-gray-50)
      - AmountInput 和 AmountKeyboard 添加数字输入震动反馈
      - 修复金额显示自动添加小数点问题(输入12显示12而非12.00)
      - 优化 AmountKeyboard 弹窗和键盘打开时的值初始化
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 将 PlanPopup 引用路径从 PlanPopup/index.vue 更新为 PlanSchemes/PlanPopup.vue
      - 同步更新组件类型声明
      hookehuyr authored
    • hookehuyr authored
    • - 记录取消操作显示异常的修复
      - 记录输入限制的用户体验优化
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • Bug 修复:
      - 修复点击遮罩关闭后显示 "123." 等不完整值的问题
      - 在 watch(showKeyboard) 中添加逻辑,键盘关闭时清除临时输入值
      - 优化 displayValue 计算属性,确保始终显示格式化后的金额
      
      用户体验优化:
      - 添加输入限制的震动反馈(Taro.vibrateShort)
      - 添加 Toast 轻提示提示用户输入限制
      - 重复输入小数点时提示"只能输入一个小数点"
      - 超过2位小数时提示"最多只能输入2位小数"
      
      影响文件:
      - src/components/PlanFields/AmountKeyboard.vue
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • hookehuyr authored
  3. 08 Feb, 2026 11 commits
    • 将独立的接口联调文档合并到统一的 API 集成日志中
      
      变更内容:
      - 将计划书模块接口文档合并到 docs/api-docs/API 集成日志.md
      - 新增计划书模块(2个接口)
        • 接口1: 提交计划书表单(待后端开发)
        • 接口2: 查询计划书状态(待后端开发)
      - 更新总体进度:27 → 29 个接口
      - 更新版本号:v2.5 → v2.6
      - 删除独立的 docs/接口联调注意事项.md
      
      文档规范:
      - 遵循项目统一的接口文档结构
      - 所有接口集成记录集中在 API 集成日志中维护
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 修复问题:
      - 修复表单提交时数据为空的问题(submit 中立即重置导致)
      - 添加金额字段格式化显示(分 → 元),便于调试查看
      
      代码改动:
      - 移除 submit() 中的 resetForm() 调用,让父组件先处理数据
      - 新增 formatAmounts() 函数转换金额单位(分 → 元)
      - 优化日志输出:同时显示格式化数据(元)和原始数据(分)
      - 表单重置逻辑统一由 close() 函数处理
      
      文档新增:
      - docs/接口联调注意事项.md - 完整的 API 联调指南
        - 数据单位规范(金额字段单位为"分")
        - 接口联调流程和注意事项
        - 金额转换工具函数
        - 常见问题和解决方案
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 创建 AmountKeyboard 组件替代 AmountInput 输入框,实现数字键盘交互:
      
      核心功能:
      - 点击弹出数字键盘(右列模式,包含小数点)
      - 金额显示弹窗(渐变背景 + 装饰圆圈)
      - 输入验证(1个小数点,2位小数)
      - 千分位分隔符显示
      - 集成 GlobalPopupManager 解决嵌套弹窗层级
      
      技术实现:
      - nut-number-keyboard @input 事件(单字符传递)
      - 字符累加逻辑:String(inputValue) + String(val)
      - 输入验证:split('.') 检查小数点和小数位数量
      - toFixed(2) 确保保存格式一致性
      - watch(showKeyboard) 同步键盘和弹窗状态
      
      问题解决:
      1. Vue渲染错误:使用 kebab-case 组件名
      2. 键盘被底部按钮遮挡:使用 GlobalPopupManager
      3. 单字符输入:实现字符累加
      4. 字符串相加变数字相加:显式 String() 转换
      5. 输入验证阻塞:初始化为空字符串
      6. 保存格式问题:使用 toFixed(2)
      7. 自动关闭bug:时间判断过滤
      8. 状态同步:watch 同步关闭金额弹窗
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 新增功能:
      - 创建 GlobalPopupManager 全局弹窗管理器
      - 实现 useParentPopup 和 useGlobalPopup 接口
      - 支持多弹窗同时打开和多层嵌套
      
      新增组件:
      - PlanPopupNew: 支持全局弹窗管理的父弹窗组件
      - DatePickerGlobal: 使用全局管理器的日期选择器
      - SelectPickerGlobal: 使用全局管理器的下拉选择器
      - AgePickerGlobal: 使用全局管理器的年龄选择器
      
      技术方案:
      - 子弹窗打开时自动隐藏父弹窗底部按钮
      - 所有子弹窗关闭时自动恢复底部按钮
      - 使用 watch 监听全局状态,解决时序问题
      - 支持多个子弹窗同时打开
      
      迁移工作:
      - 更新 PlanFormContainer 使用 PlanPopupNew
      - 更新所有计划模板使用 Global 版本字段组件
      
      文档:
      - 创建 GlobalPopupManager 技术文档
      - 包含架构设计、API 文档、使用指南
      
      影响文件:
      - src/components/PlanFormContainer.vue (修复结束标签错误)
      - src/components/PlanPopupNew.vue (新组件)
      - src/components/PlanFields/GlobalPopupManager.js (核心管理器)
      - src/components/PlanFields/DatePickerGlobal.vue (新组件)
      - src/components/PlanFields/SelectPickerGlobal.vue (新组件)
      - src/components/PlanFields/AgePickerGlobal.vue (新组件)
      - src/components/PlanTemplates/*.vue (更新导入)
      - docs/GlobalPopupManager-弹窗管理器.md (技术文档)
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 修复问题:
      - 表单关闭后再次打开数据依然存在
      - 第一次点击确认按钮没有值
      - 输入过程中数据意外丢失
      
      问题根因:
      - Vue 3 v-model 每次更新都创建新对象
      - reactive() 只在初始化时读取 props
      - watch 监听策略不当导致数据丢失
      
      解决方案:
      - 区分"重置"和"正常更新"
      - 重置判断:从有数据 → 空对象
      - 正常更新:只合并新字段,不删除已有字段
      
      影响文件:
      - PlanFormContainer.vue - 父组件,使用 nextTick 延迟重置
      - LifeInsuranceTemplate.vue - 子组件,优化 watch 策略
      - CriticalIllnessTemplate.vue - 子组件,优化 watch 策略
      - SavingsTemplate.vue - 子组件,优化 watch 策略
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 移除年龄联动相关的所有 console.log 调试语句
      - 更新 CHANGELOG.md 记录年龄与出生年月日联动优化
      
      影响文件:
      - src/components/PlanFields/AgePicker.vue
      - src/components/PlanTemplates/LifeInsuranceTemplate.vue
      - src/components/PlanTemplates/CriticalIllnessTemplate.vue
      - src/components/PlanTemplates/SavingsTemplate.vue
      - docs/CHANGELOG.md
      hookehuyr authored
    • - 调整字段顺序:年龄在前,出生年月日在后
      - 实现年龄 → 出生年月日自动计算(默认1月1日)
      - 保留出生年月日 → 年龄双向联动
      - 简化占位符文案,避免用户理解混乱
      - 修复 AgePicker 组件不触发 change 事件的问题
      - 添加调试日志便于排查问题
      
      影响文件:
      - src/components/PlanFields/AgePicker.vue: 添加 change 事件支持
      - src/components/PlanTemplates/LifeInsuranceTemplate.vue: 调整逻辑
      - src/components/PlanTemplates/CriticalIllnessTemplate.vue: 调整逻辑
      - src/components/PlanTemplates/SavingsTemplate.vue: 调整逻辑
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • ### 新增功能
      - LoadMoreList 组件支持动态高度测量
        - 使用 Taro.createSelectorQuery() 运行时测量
        - 新增 hasFooter prop(TabBar 页面)
        - 新增 extraBottomSpace prop(固定按钮等)
        - 支持响应式监听 props 变化
        - 支持页面生命周期重新测量(useDidShow)
        - 自动处理底部安全区域
      
      ### 修复
      - 修复 4 个页面的双重滚动问题
        - feedback-list, favorites, material-list, product-center
        - 添加页面容器 height: 100vh 和 overflow: hidden
      - 移除所有调试 console.log,保持代码整洁
      
      ### 配置更新
      - feedback-list: extraBottomSpace=280(固定按钮)
      - favorites: hasFooter=false
      - material-list: hasFooter=false
      - product-center: hasFooter=false
      - search: hasFooter=false
      - message: hasFooter=false
      - week-hot-material: hasFooter=false
      
      ### 文档
      - CHANGELOG.md: 记录双重滚动问题修复
      - lessons-learned.md: 添加坑 5(双重滚动问题)
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • - 更新当前实现状态,说明LoadMoreList已使用scroll-view
      - 补充缺少的功能清单(scrollTop prop、@scroll事件等)
      - 明确不实施原因:需求不明确、技术储备充足、优先级评估
      - 新增实施时机判断标准和启动条件
      - 新增工作量评估(5.5-9.5小时)
      - 新增风险评估(5个风险项及缓解措施)
      - 新增实施建议(技术验证、分阶段实施、充分测试)
      - 添加文档维护记录
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 更新内容:
      - 记录 LoadMoreList 组件底部 padding 堆叠问题的修复
      - 记录搜索页滚动加载优化
      - 记录 LESS 修饰符类样式堆叠坑的经验教训
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored
    • 问题描述:
      - .load-more-content 基础类有 padding: 32rpx(所有边)
      - .load-more-content.scrollable 修饰符类添加 padding-bottom
      - 两者堆叠导致底部 padding ≈ 192rpx + safe-area(过高)
      
      解决方案:
      - 修改 .scrollable 修饰符类,从只添加 padding-bottom 改为覆盖整个 padding 属性
      - 使用 padding: 32rpx 32rpx calc(160rpx + env(safe-area-inset-bottom))
      - 防止与基础类的 padding 堆叠
      
      影响文件:
      - src/components/LoadMoreList/index.vue: 修复 padding 堆叠问题
      - docs/lessons-learned.md: 添加 LESS 修饰符类样式堆叠坑的记录
      - src/pages/search/index.config.js: 添加 disableScroll 配置
      - src/pages/search/index.vue: 简化 shouldEnableScrollLoad 逻辑
      
      测试:
      - ✅ material-list 页面底部 padding 正常
      - ✅ search 页面底部 padding 正常
      - ✅ 所有使用 LoadMoreList 的页面都受益于这个修复
      
      经验教训:
      ⚠️ LESS 嵌套选择器中,修饰符类的属性会与基础类堆叠
      ✅ 需要覆盖基础类的 padding/margin/border 等属性时,重写整个属性而不是只写子属性
      
      Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
      hookehuyr authored