Quellcode durchsuchen

feat: 按中版本分文件存储 changelog,CHANGELOG.md 作为索引页显示最新版本

iwt vor 2 Monaten
Ursprung
Commit
e05e2fd5d2
3 geänderte Dateien mit 2309 neuen und 228 gelöschten Zeilen
  1. 2148 0
      cfc-web/public/CHANGELOG-v1.0.md
  2. 32 191
      cfc-web/public/CHANGELOG.md
  3. 129 37
      cfc-web/scripts/generate-changelog.js

+ 2148 - 0
cfc-web/public/CHANGELOG-v1.0.md

@@ -0,0 +1,2148 @@
+# v1.0 版本历史
+
+[« 返回最新版本](CHANGELOG.md)
+
+---
+
+## v1.0.320 (2026-07-14)
+
+### 新功能
+- skip version bump if only chore/engineering commits
+
+### Bug 修复
+- missing SubscriptionBenefitLog import + column comparison in ButlerService
+
+## v1.0.319 (2026-07-14)
+
+## v1.0.318 (2026-07-14)
+
+### Bug 修复
+- remove extra closing braces at end of DatabaseInitializer
+
+## v1.0.317 (2026-07-14)
+
+## v1.0.316 (2026-07-14)
+
+### 新功能
+- butler 管家服务 - 申请/档案/分配 + DB迁移
+
+### 其他
+- - ButlerService: 管家核心业务逻辑
+- - ButlerProfile: 管家档案实体
+- - SubscriptionBenefitLogService: 订阅权益日志
+- - DatabaseInitializer: butler_assignments 表迁移
+- - MemberSubscriptionService: 订阅关联修改
+-
+
+## v1.0.315 (2026-07-14)
+
+## v1.0.314 (2026-07-14)
+
+### 测试
+- add E2E tests for DAN report, flora microbiome, and AI plan-task flows + fix playwright.config.js baseURL
+
+### Bug 修复
+- 修复 pages.json tabBar 富页面注册缺失 + 维度权重前端修改
+
+### 新功能
+- add dan_reports - assessment reports and processing scripts
+- 肠道菌群报告详情页 + 上传日期评分优化 + 身页面重构 + 首页角色分流
+
+## v1.0.313 (2026-07-14)
+
+## v1.0.312 (2026-07-14)
+
+### 新功能
+- add butler entities + migration + schema
+
+## v1.0.311 (2026-07-14)
+
+## v1.0.310 (2026-07-14)
+
+### Bug 修复
+- resolve merge conflicts in package.json, CHANGELOG.md, .last_build_commit
+
+## v1.0.308 (2026-07-14)
+
+## v1.0.307 (2026-07-14)
+
+### Bug 修复
+- add missing closing brace for export default in Detail.vue — fixes build error
+
+## v1.0.301 (2026-07-14)
+
+### 其他
+- merge: integrate remote changes + supply hierarchy management
+- - cfc-web: supply-hierarchy management (new), supply-system/Detail update
+- - cfc-frontend: App.vue, invite/join.vue updates
+- - cfc-web: admin.js API, router updates
+-
+
+## v1.0.299 (2026-07-14)
+
+### Bug 修复
+- resolve merge conflicts in cfc-web build files
+
+## v1.0.298 (2026-07-14)
+
+## v1.0.297 (2026-07-14)
+
+## v1.0.296 (2026-07-14)
+
+## v1.0.294 (2026-07-14)
+
+## v1.0.293 (2026-07-14)
+
+### Bug 修复
+- add missing Map import in SupplySystemService
+
+## v1.0.292 (2026-07-14)
+
+## v1.0.291 (2026-07-14)
+
+### 新功能
+- add dan_reports - assessment reports and processing scripts
+- 肠道菌群报告详情页 + 上传日期评分优化 + 身页面重构 + 首页角色分流
+
+## v1.0.290 (2026-07-14)
+
+## v1.0.289 (2026-07-14)
+
+### 文档
+- 家庭推广体系重构 — 设计文档与实施计划
+
+### 其他
+- 实施计划: 分 P1~P4 四个阶段,每阶段可独立上线
+- - P1: 二维码改造(wxacode + env_version 修复 + scene 解析)
+- - P2: 家庭公共账户(3 张新表 + CommissionService 改造)
+- - P3: 前端重构(推广中心重设计 + 支付集成)
+- - P4: 管理后台(家庭收益管理 + 提现审核)
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+-
+
+## v1.0.288 (2026-07-14)
+
+## v1.0.287 (2026-07-14)
+
+### 新功能
+- 新增家庭关系联系人组件 FamilyRelationshipSection
+
+## v1.0.286 (2026-07-14)
+
+## v1.0.285 (2026-07-14)
+
+### Bug 修复
+- 二维码分享功能统一收敛 — 新增通用 QR 后端接口 + 修复三处前端 QR 生成
+
+## v1.0.284 (2026-07-14)
+
+## v1.0.283 (2026-07-14)
+
+### Bug 修复
+- PpointService null date handling + adminList keyword filter; ProductPpointManage effectiveDate→startDate field name fix
+
+## v1.0.282 (2026-07-14)
+
+## v1.0.281 (2026-07-14)
+
+## v1.0.280 (2026-07-13)
+
+## v1.0.279 (2026-07-13)
+
+### Bug 修复
+- resolve ambiguous mapping /api/recommend/dimension-products - remove duplicate from RecommendationController
+
+## v1.0.278 (2026-07-13)
+
+## v1.0.277 (2026-07-13)
+
+### Bug 修复
+- SupplyManageController detail/update/delete robust id parsing
+- api.js repurchase-reminders GET→POST + click tracking
+
+### 其他
+- JSON string rather than a number. Added type-safe parsing that
+- handles both Number and String id values across the supplier
+- management endpoints.
+- Co-authored-by: Sisyphus <sisyphus@omo.codes>
+- 
+-   implementation plan for dimension-products, repurchase-reminders,
+-   scheduled task, and frontend fixes
+- - 2026-07-13-dan-assessment-phase2-5.md: pending Phase 2-5 plan
+-   referencing assessment-market-plan.md — quota system, dual-channel
+-   reports, plan generation engine, and review→confirm→execute loop
+- Co-authored-by: Sisyphus <sisyphus@omo.codes>
+- 
+- @PostMapping convention. DimensionProductList.goProduct() fires
+- clickRepurchaseReminder() before navigation for repurchase-type
+- products.
+- Co-authored-by: Sisyphus <sisyphus@omo.codes>
+- 
+- RecommendationService.generateDailyRepurchaseReminders() to scan
+- paid/received orders and generate repurchase reminders based on
+- repurchase_reminder_config rules (category/reminderDays/maxReminders).
+- Co-authored-by: Sisyphus <sisyphus@omo.codes>
+- 
+- - getDimensionProducts() — query product_dimension_mapping by
+-   dimensionCode, join products, filter status=上架/stock>0
+- - getRepurchaseReminders() — query user's unpurchased reminders
+- - markRepurchaseClicked() — update clicked=1 on reminder record
+- - generateDailyRepurchaseReminders() — scan paid/received orders,
+-   apply repurchase_reminder_config rules, insert reminders
+- Injects ProductDimensionMappingMapper, RepurchaseReminderRecordMapper,
+- RepurchaseReminderConfigMapper, ProductOrderMapper.
+- Co-authored-by: Sisyphus <sisyphus@omo.codes>
+- 
+- RecommendationController adds 3 @PostMapping endpoints:
+- - /dimension-products — query products by dimension code, sorted by matchScore
+- - /repurchase-reminders — list user's pending repurchase reminders
+- - /repurchase-reminder/{id}/click — mark reminder as clicked
+- Co-authored-by: Sisyphus <sisyphus@omo.codes>
+- 
+
+### 文档
+- supplier-system gap-fix plan + DAN Phase 2-5 framework
+
+### 新功能
+- RepurchaseReminderScheduledTask runs daily at 2 AM
+- dimension-product query + repurchase-reminder service logic
+- add dimension-products + repurchase-reminders endpoints with DTO fields
+
+## v1.0.276 (2026-07-13)
+
+## v1.0.275 (2026-07-13)
+
+### 新功能
+- 6个管理端表单页增加保存成功确认对话框(继续添加/关闭)
+
+### Bug 修复
+- 添加 dify.callback-secret 配置 + 管理端多页面优化
+
+### 其他
+- - cfc-web: 多个管理页面样式和功能优化(ArticleCategory, BaziConfigs, CouponManagement, KnowledgeTag, PackageTemplates, RelationshipTypes, VirtualTeamList, ZodiacConfigs, data-source-config, dimension-config, dimension/index)
+- - 版本号自动更新
+-
+
+## v1.0.274 (2026-07-13)
+
+## v1.0.273 (2026-07-13)
+
+### 新功能
+- AI conversation memory - migration 82 for ai_conversation_summary + ai_user_facts tables
+
+## v1.0.272 (2026-07-13)
+
+## v1.0.271 (2026-07-13)
+
+### 文档
+- 添加参考资料 PDF
+
+### 其他
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+-
+
+## v1.0.270 (2026-07-13)
+
+## v1.0.269 (2026-07-13)
+
+### 新功能
+- CartService.buildCartItemDTO builds specDesc from ProductSku.specs JSON when skuId is present
+- 五行能量配置管理
+- 增强五行雷达图可视化
+- 管理端功能优化
+- 五行相生相克前端展示
+- AI对话记忆层 - 会话摘要+关键事实+意图感知上下文注入
+- productSpecMap API + Ppoint API 重构 + 供应商管理员搜索修复
+- products/cart 表新增 SKU 规格字段
+- admin/user/search 供应商选管理员接口 + 修复 CircleService 循环依赖
+
+### 其他
+- - WuxingConfig.vue: 能量来源比例配置+每日限制概览
+- - 路由注册 /admin/energy-config
+- 
+- - 数据驱动多边形填充(familyWuxing.aggregatePercentages)
+- - 百分比标签 + 数据节点圆点
+- - 中心显示家庭名+最强/最弱元素
+- 
+- - ProductOrderService: SKU价格计算
+- - Form.vue: 标签更新
+- 
+- 
+- - 心理维度子项卡片(仅儿童用户显示)
+- - 11个新data字段 + 13个CSS状态变体
+- - loadWealthDetail读取API新字段
+- 
+- - 新增映射器: AiConversationSummaryMapper, AiUserFactMapper
+- - 新增AiContextService: 7意图路由
+- - AIService: enrichInputsWithMemory, getContext, requestSummaryAsync
+- - AIChatController: getContext()端点 + sendMessage注入记忆
+- - DatabaseInitializer: runMigration81内建表
+- - schema.sql: 同步两张新表定义
+- - WebConfig: /api/ai/context加入JWT白名单
+- - chat.vue: 简化传参(移除reportId/surveyId)
+- 
+- - admin.js: Ppoint API 重命名 (getProductPpointList/saveProductPpoint/deleteProductPpoint/byProduct)
+- - supply-system/Form.vue: searchUsers 改用 API 函数
+- 
+- - products.sku_spec_names: 规格维度名 JSON
+- - products.delivery_methods: 配送方式支持
+- - cart.sku_id: 选中 SKU ID
+- - cart.spec_option_ids: 规格选项 ID 列表 JSON
+- 
+- - CircleService: 添加 @Lazy 注解打破 CircleService ↔ CircleMatchService 循环依赖
+- - cfc-web: 新增 ProductPpointManage 积分管理页面,完善供应商体系表单
+- - cfc-frontend: product-detail 页面更新
+- 
+
+### Bug 修复
+- 修复DatabaseInitializer编译错误
+
+## v1.0.268 (2026-07-13)
+
+## v1.0.267 (2026-07-13)
+
+### Bug 修复
+- break circular dependency CircleService↔CircleMatchService with @Lazy
+
+### 重构
+- rename FamilyRelationshipSection -> OctopusGraph; fix: health chart shows zeros when no data
+- 重构FamilyRelationGraph为全Canvas force-directed关系图
+
+### 新功能
+- 添加OctopusGraph关系健康组件
+
+### 其他
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+-
+
+## v1.0.266 (2026-07-13)
+
+## v1.0.265 (2026-07-13)
+
+### Bug 修复
+- resolve playwright.config.js merge conflict - restore baseURL
+
+## v1.0.264 (2026-07-13)
+
+## v1.0.263 (2026-07-13)
+
+### 其他
+- 测试回退
+- 修复管理端前端标签不闭合问题
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### 新功能
+- add article placeholder cards on action home page
+- DAN报告上传 - 集成到mind/wisdom维度页面
+- DAN报告上传 - 前端API + report-upload页面
+- DAN报告上传 - Controller端点 + 维度分数更新
+- DAN报告上传 - 创建DanReportParseService (A2/B4解析)
+- DAN报告上传 - 实体字段 + 数据库迁移80
+
+## v1.0.262 (2026-07-13)
+
+### 其他
+- 测试提交
+
+## v1.0.261 (2026-07-13)
+
+## v1.0.260 (2026-07-13)
+
+## v1.0.259 (2026-07-13)
+
+## v1.0.258 (2026-07-13)
+
+### 新功能
+- AI对话记忆层 - 会话摘要+关键事实+意图感知上下文注入
+
+### 其他
+- - 新增映射器: AiConversationSummaryMapper, AiUserFactMapper
+- - 新增AiContextService: 7意图路由
+- - AIService: enrichInputsWithMemory, getContext, requestSummaryAsync
+- - AIChatController: getContext()端点 + sendMessage注入记忆
+- - DatabaseInitializer: runMigration81内建表
+- - schema.sql: 同步两张新表定义
+- - WebConfig: /api/ai/context加入JWT白名单
+- - chat.vue: 简化传参(移除reportId/surveyId)
+-
+
+## v1.0.257 (2026-07-13)
+
+## v1.0.256 (2026-07-13)
+
+### 新功能
+- productSpecMap API + Ppoint API 重构 + 供应商管理员搜索修复
+- products/cart 表新增 SKU 规格字段
+
+### 其他
+- - admin.js: Ppoint API 重命名 (getProductPpointList/saveProductPpoint/deleteProductPpoint/byProduct)
+- - supply-system/Form.vue: searchUsers 改用 API 函数
+- 
+- - products.sku_spec_names: 规格维度名 JSON
+- - products.delivery_methods: 配送方式支持
+- - cart.sku_id: 选中 SKU ID
+- - cart.spec_option_ids: 规格选项 ID 列表 JSON
+-
+
+## v1.0.255 (2026-07-13)
+
+## v1.0.254 (2026-07-13)
+
+## v1.0.253 (2026-07-13)
+
+## v1.0.252 (2026-07-13)
+
+### 新功能
+- admin/user/search 供应商选管理员接口 + 修复 CircleService 循环依赖
+
+### 其他
+- - CircleService: 添加 @Lazy 注解打破 CircleService ↔ CircleMatchService 循环依赖
+- - cfc-web: 新增 ProductPpointManage 积分管理页面,完善供应商体系表单
+- - cfc-frontend: product-detail 页面更新
+-
+
+## v1.0.251 (2026-07-13)
+
+### Bug 修复
+- ProductController spec map JSON.parseArray type inference for Java 8
+
+### 新功能
+- 维度页面缺口修补(Phase1) + 圈子系统(Phase2)
+
+### 其他
+- - 身: 健康打卡入口(HealthCheckinCard) + body/index.vue
+- - 智: 阅读时长展示(wisdom/index.vue reading stats)
+- - 心: 天盘相性入门版(已有完整天盘/兼容性模块)
+- - EnergyService: 心子维度(情绪稳定/理解包容/传承传递) + 五行克生算法v2.0
+- - MemberEnergyDTO: 心子维度字段
+- - ProductController: spec/map 规格映射接口
+- Phase2 珍珠图/圈子系统:
+- - 后端: SocialCircle/SocialCircleMember实体+Mapper
+- - 后端: CircleService CRUD + CircleMatchService匹配引擎
+- - 后端: CircleController API + DatabaseInitializer迁移85 + schema.sql
+- - 前端: PearlDiagram.vue 珍珠图横向滚动
+- - 前端: CircleCard.vue 圈子卡片组件
+- - 前端: CircleDetail.vue 圈子详情弹窗
+- - 前端: action/index.vue 集成PearlDiagram + CircleDetail
+- - 前端: api.js 圈子API函数
+-
+
+## v1.0.250 (2026-07-13)
+
+### 新功能
+- 商品推荐 Phase 3-5 — FamilyContextService Dify输入 + AIChatController userId + 复购提醒
+- 电商 + 推荐系统 + 阅读统计 综合升级
+
+### 其他
+- - FamilyContextService: 新增3个Dify inputs (dimensionScores/recentCognitiveResult/purchasedProductTags) + 3私有辅助方法
+- - AIChatController: RecommendationQuery传入userId和familyId用于已购过滤
+- Phase 4 (P1):
+- - AssessmentService已有异步hook: DanAssessmentResult parent_upload 触发认知弱维度商品推荐
+- Phase 5 (P2):
+- - RepurchaseReminderService: @Scheduled 每日09:00扫描30-60天订单创建复购提醒 + getPendingReminders/onReminderClicked/onReminderPurchased
+- - RepurchaseReminderController: GET list + POST click/purchased 3个端点
+- - RepurchaseReminder.vue: 前端待处理复购提醒组件
+- 
+- - wisdom/index.vue: 阅读时长条件从 !== undefined 改为 > 0
+- 
+- - cart: 支持 SKU 选择 (sku_id, spec_option_ids), 字段扩展  (skuId, specDesc, supplierName)
+- - DatabaseInitializer: 迁移84 — cart 表 sku_id, spec_option_ids 列
+- - OrderItemVO: 新增 skuId, specOptionIds
+- - ProductDTO: 新增 effectivePpoint, ppointSource, profitRate
+- - CartService: addToCart 接收 skuId, 回填 supplierName 从 vendorName
+- ### P点管理
+- - PpointService: adminList() 管理端分页列表
+- - AdminProductPpointController: 新增管理端 P点配置控制器
+- ### 商品推荐系统
+- - ProductRecommendationService: 维度匹配引擎 (dimensionScore 排序 + 90天过滤 + 购买历史排除)
+- - ProductRecommendationController: POST /api/recommend/dimension-products
+- - 5维页面 (wisdom/body/mind/action/wealth): DimensionProductList 替换 DimensionProducts
+- ### 健康打卡
+- - HealthCheckinCard.vue: 新增健康打卡卡片组件
+- - body/index.vue: 集成 HealthCheckinCard
+- ### 智慧维度
+- - wisdom/index.vue: 本月阅读卡片 + 阅读统计 API 接入
+- ### 文档
+- - 五维能量设计: 更新 v2.1 富维度子维度算法 + 身克富杠杆文档
+- - 五维五行哲学: 补充富子维度表 + 身克富三态公式
+- 
+
+### Bug 修复
+- CartService 回填 skuId + wisdom 阅读统计条件优化
+
+## v1.0.249 (2026-07-13)
+
+### 文档
+- ISSUE-012~015 family member fixes tracking
+
+### 其他
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### Bug 修复
+- restore family member menu + auto-derive generationLevel + add birth/preference form fields
+
+### 新功能
+- wire FamilyMember birth fields + User hobbies/dietPreferences + profile history through service/controller/migration
+- UserProfileHistory entity + mapper + schema.sql for tracking profile changes
+- add hobbies + dietPreferences to User entity + UpdateUserDTO
+- add birthHour/birthWeight/birthPlace/isCesarean to FamilyMember entity + DTO
+
+## v1.0.248 (2026-07-12)
+
+## v1.0.247 (2026-07-12)
+
+### 新功能
+- 商品推荐维度映射 + 复购提醒 + 供应商/规格迁移补全
+- 电商体系升级 — 供应商/规格/推荐日志 + 五维能量富维度详情 + 产品推荐
+
+### 其他
+- - 迁移80: 创建 product_dimension_mapping 表 + 索引
+- - 迁移81: products 表添加 recommendation_tags/purchase_count_threshold/repurchase_interval_days
+- - 迁移82: 创建 repurchase_reminder_record 表
+- - 迁移83: 创建 repurchase_reminder_config 表
+- - 新增 ProductDimensionMapping/RepurchaseReminderConfig/RepurchaseReminderRecord 实体+Mapper
+- - schema.sql 同步新表DDL
+- - 小程序: DimensionProductList 组件 + api.js 推荐/复购接口
+- - 修复 RecommendationQuery DTO
+- 
+- - 新增 Supplier/ProductSpecGroup/ProductSpecOption/ProductSupplier/OrderItemSku 实体+Mapper+Service+Controller
+- - 新增 ProductRecommendationLog 实体+Mapper(推荐记录打点)
+- - EnergyController: /wealth-detail 富维度详情接口
+- - EnergyService: 身克富杠杆逻辑 + calcParentWealth 传参修复
+- - AssessmentService + HealthAnalysisService: 推荐系统相关逻辑
+- - schema.sql: 同步新表DDL
+- - 小程序: 商品详情页规格选择器; 购物车/结算页展示SKU与供应商; 富维度页重构; 个人主页新增
+- - 管理端: EcomSupplierManage.vue 供应商CRUD页面 + admin.js API + 路由
+- - 前端 api.js: 新增供应商/规格/推荐相关接口
+-
+
+## v1.0.246 (2026-07-12)
+
+## v1.0.245 (2026-07-12)
+
+### 文档
+- 五维功能-能量映射文档 + 缺失功能补全实施计划
+
+### 其他
+- - 新增 2026-07-12-wuxing-ke-full-design.md(五克完整设计)
+- - 新增 2026-07-12-wuxing-homepage-and-conversion-algorithm.md(首页+转化算法)
+- - 新增 2026-07-12-dimension-pages-gap-fix.md(分阶段实施计划)
+- - 更新 2026-06-08-five-dimension-wuxing-philosophy.md(克哲学对齐新理解)
+-
+
+## v1.0.244 (2026-07-12)
+
+## v1.0.243 (2026-07-12)
+
+### Bug 修复
+- 退款流程5项修复 (ISSUE-007~011)
+
+### 其他
+- - ISSUE-008: 中止退款后订单状态未恢复 — cancelPendingRefund增加ProductOrder状态回滚
+- - ISSUE-009: 订单管理搜索条件增强 — 后端支持keyword+日期范围 + 前端增加日期选择器和搜索按钮
+- - ISSUE-010: Dashboard缺失退款审核计数 — StatsController增加pendingRefundCount + Dashboard新增卡片
+- - ISSUE-011: 退款余额不足提示优化 — approveRefund返回明确提示 + 前端使用后端message
+-
+
+## v1.0.242 (2026-07-12)
+
+## v1.0.241 (2026-07-12)
+
+### 文档
+- 商品推荐功能实施计划
+
+### 重构
+- 删除 UserQuickEntry 组件及全站引用
+
+### 其他
+- - 移除 wisdom/mind/body 三个页面中的 import、components 注册、模板使用
+- - 清理 body/index.vue 中的残留注释
+-
+
+## v1.0.240 (2026-07-12)
+
+## v1.0.239 (2026-07-12)
+
+### 新功能
+- clean dimension tabs + styled action articles
+
+### 其他
+- - action 统一化:补 @manage="goFamilyMembers" + goFamilyMembers method
+- - action 推荐阅读 -> 独立 ActionArticleRecommend 组件,行绿色调卡片造型
+- - 移除未用导入 getContactList/getHealthAlerts/getMilestones
+-
+
+## v1.0.238 (2026-07-12)
+
+## v1.0.237 (2026-07-12)
+
+### 文档
+- 添加富维度体系重设计划(子维度拆分+身克富杠杆+小程序富页)
+
+## v1.0.236 (2026-07-12)
+
+## v1.0.235 (2026-07-12)
+
+### Bug 修复
+- 拆分 v-if 条件提高可读性
+- ArticleManage table 添加 max-height 防止溢出
+- 修复前后端数据流5个关键bug
+
+### 其他
+- - daily-fortune.vue: 请求载荷添加 familyId
+- - related-items.vue: 请求载荷从 {} 改为 { familyId, daysAhead: 7 }
+- - relation-detail.vue: 传参从 { familyId, memberId } 改为 { member1Id, member2Id }
+- - TianpanController: 兼容性接口从参数读取 memberType (不再硬编码 child)
+-
+
+## v1.0.234 (2026-07-12)
+
+## v1.0.233 (2026-07-12)
+
+### Bug 修复
+- 待退款队列可见性 + 退款到帐中状态 + 防重复审核
+
+### 其他
+- - ProductOrder实体: refundStatus注释补充 4=退款到帐中
+- - PendingRefund实体: status注释补充 cancelled(已中止)
+- - AdminCommissionController + PendingRefundService: getAllPendingRefunds 支持 orderType 过滤
+- - OrderManage.vue: 新增 refund_pending 状态(退款到帐中)文案/样式/筛选选项,隐藏退款审核按钮
+- - PendingRefund.vue: loadList 传 orderType 到后端
+- - router/index.js: 注册 pending-refund 路由
+- - Layout.vue: 商城营销菜单加'待退款管理'入口
+-
+
+## v1.0.232 (2026-07-11)
+
+## v1.0.231 (2026-07-11)
+
+### Bug 修复
+- body index simplify childId checks use || '' fallback
+
+## v1.0.230 (2026-07-11)
+
+## v1.0.229 (2026-07-11)
+
+### Bug 修复
+- FamilyRelationGraph 修复单成员家庭显示重复的问题
+
+### 其他
+- 避免 selfId 不匹配时 same member 同时出现在 selfMember 和 otherMembers 中
+-
+
+## v1.0.228 (2026-07-11)
+
+## v1.0.227 (2026-07-11)
+
+### 重构
+- remove FamilyRelationshipSection (重要关系组件) from body/mind/wisdom pages, keep unified FamilyRelationGraph
+
+## v1.0.226 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.225 (2026-07-11)
+
+### 工程化
+- rebase merge from remote cfclub
+
+## v1.0.224 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.223 (2026-07-11)
+
+### 新功能
+- TianpanService 引入缓存逻辑 - DB持久化每日运势和年度能量
+
+### 其他
+- - 新增 TianpanDailyFortuneMapper/TianpanMemberAnnualEnergyMapper
+- - buildDailyFortune: cache-aside 模式,优先读 DB 无则计算写入
+- - buildAnnualEnergy: cache-aside 模式,按 member+year 缓存年度能量
+- - schema.sql 同步两表 DDL
+- 
+
+### Bug 修复
+- 补充迁移79(pending_refund.order_type/order_no) + 修复TianpanDailyFortune import
+
+## v1.0.222 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.221 (2026-07-11)
+
+### 新功能
+- 产品订单退款系统 - 余额不足待退款队列、管理员中止、提现/商品双路退款
+
+### 其他
+- - PendingRefundService新增overloaded createPendingRefund、cancelPendingRefund、移除markFailed最大重试限制
+- - ProductOrderService在approveRefund中拦截NOT_ENOUGH余额不足异常,自动加入待退款队列
+- - RefundScheduledTasks新增processProductRefund按orderType路由提现/商品退款
+- - AdminCommissionController新增POST /refunds/cancel管理员中止接口
+- - schema.sql和DatabaseInitializer迁移78同步order_type/order_no列
+- - cfc-web新增PendingRefund.vue管理页面和admin.js API函数
+-
+
+## v1.0.220 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.219 (2026-07-11)
+
+### Bug 修复
+- add missing FamilyRelationGraph to mind page
+
+## v1.0.218 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.217 (2026-07-11)
+
+### 新功能
+- 家庭天盘完整功能 - 核心服务+控制器+DTO+前端页面
+
+### 其他
+- - TianpanController: REST API端点(/api/tianpan/*)
+- - DTOs: TianpanMemberVO/TianpanDashboardVO/DailyFortuneVO/MemberAnnualEnergyVO/RelatedItemsVO/RelationshipVO
+- - TaskService: 新增getPendingTasksByFamily
+- - AssessmentOrderService: 新增getPendingOrdersByFamily
+- - ZodiacAnnualEnergyService: 新增getWesternSign公开方法
+- - WebConfig: 添加cf-club.iwintrue.com CORS
+- - 前端: 天盘6页面 + store模块 + routes/API配置
+-
+
+## v1.0.216 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.215 (2026-07-11)
+
+### 重构
+- remove relationship components from body/mind/wisdom pages
+
+## v1.0.214 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.213 (2026-07-11)
+
+### 新功能
+- 退款队列系统 - 待退款自动重试
+- 确定性差距修复 - P0全部 + P1部分 + P2/P3核心完成
+
+### 其他
+- - WithdrawalService.audit() 审核通过时余额不足自动创建待退款记录
+- - RefundScheduledTasks 每5分钟执行,FIFO处理待退款队列,指数退避重试
+- - 新增 Admin API: /api/admin/commission/refunds/pending (列表+状态过滤+分页)
+- - 新增 Admin API: /api/admin/commission/refunds/summary (待退款总金额统计)
+- - 修复 TianpanDashboardVO 缺失 import
+- 
+- P0: G7(FamilyAccessInterceptor), G1(五维能量分数持久化), G18(测评对比)
+- P1: G8(视角切换+密码校验), G9(邀请码过期/次数/吊销), G2(results_ready联动)
+-      新增: G10(规划师绑定家庭审批), G13(地址SFMS导入骨架), G14(Dify会话本地镜像)
+- P2: G23(schema_versions迁移表), G25(schema.sql新表补齐),
+-      G3(测评报告结构化 structured_analysis), G26(test-mode启动断言)
+- P3: G4(死字段标记deprecated), G27(sfms只读强制)
+- 新增文件: TeacherFamilyBindingController/Service/Mapper/Entity,
+-           ChatConversation, ChatMessage, ChatMirrorService,
+-           SchemaVersion, PendingRefund服务(提现退款处理)
+- 预留未完成(工作量过大): G15(饮食推荐规则层), G21(PDF多供应商), G22(前端mock)
+-
+
+## v1.0.212 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.211 (2026-07-11)
+
+### Bug 修复
+- 删除body页face多余的</view>修复模板多根元素错误
+
+## v1.0.210 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.209 (2026-07-11)
+
+### 新功能
+- 变更日志弹窗宽高加大至900px/700px
+
+### Bug 修复
+- 修复E2E-TEST-SCENARIOS.md section12编码乱码
+- 鏇存柊 playwright 閰嶇疆 + 鏂板娴嬭瘯鏂囦欢 (consignee/health-report/teacher-dashboard/publish-dimension-articles)
+
+## v1.0.207 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.206 (2026-07-11)
+
+### Bug 修复
+- add updateTier(Long, String, String) overload to match call in PromotionTierEvalService
+
+### 新功能
+- enhance PpointService with save/delete/query methods and English javadoc
+
+### 其他
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.205 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.204 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.203 (2026-07-11)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.202 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.201 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.200 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.199 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.198 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.197 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.196 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.195 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.194 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.193 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.192 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.191 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.190 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.189 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.188 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.187 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.186 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.185 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.184 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.183 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.182 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.181 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.180 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.179 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.178 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.177 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.176 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.175 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.174 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.173 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.172 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.171 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.170 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.169 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.168 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.167 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.166 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.165 (2026-07-10)
+
+### 重构
+- merge health actions into quick-action bar, remove separate report/nutrition sections
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.164 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.163 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.162 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.161 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.160 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.159 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.158 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.157 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.156 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.155 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.154 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.153 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.152 (2026-07-10)
+
+### 新功能
+- add PromotionTierEvalService and daily scheduled task for tier check
+- promotion tier system, teacher message unread badge, FamilyEnergyBar collapse
+- integrate promotion tier scaling into commission settlement + DB migration
+- add PromotionTierConfig entity/mapper for configurable promotion tiers
+
+### 其他
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### Bug 修复
+- 七维健康图无个人数据时返回默认值 65
+
+## v1.0.151 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.150 (2026-07-10)
+
+### Bug 修复
+- 身/心维度页推荐文章添加dimensionCode过滤
+
+### 其他
+- 遗漏了 dimensionCode 参数,导致推荐文章未按维度过滤。
+- 智/行维度页已有正确过滤,对齐处理。
+-
+
+## v1.0.149 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.148 (2026-07-10)
+
+### 新功能
+- 确定性差距修复 - P0全部 + P1部分完成
+
+### 其他
+- - G7: FamilyAccessInterceptor familyId 入参校验
+- - G1: 五维能量分数持久化 (five_dimension_scores)
+- - G18: 首次vs最新测评对比端点
+- - G8: 视角切换统一 + 密码校验
+- - G9: 邀请码过期/次数/吊销
+- - G2: 测评订单 results_ready 联动
+- - G13: 地址数据库导入骨架
+-
+
+## v1.0.146 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.145 (2026-07-10)
+
+### Bug 修复
+- 修复退款失败 - package_orders表缺少user_coupon_id列
+
+### 其他
+- - schema.sql: package_orders建表语句同步添加user_coupon_id列
+-
+
+## v1.0.143 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.142 (2026-07-10)
+
+### Bug 修复
+- add missing PpointService for CommissionService compilation
+
+### 新功能
+- 一生一世家庭会员订阅系统 - 编译修复与完善
+
+### 其他
+- - 创建缺失的 PpointService (被 CommissionService 引用)
+- - 修复 FamilyAccessInterceptor 两处编译错误
+-   - 添加缺失 @Component import
+-   - HandlerMapping.PATH_VARIABLES_ATTR → 字符串字面量
+- - MemberSubscriptionService 实现 P-point 消费返利
+-   - subscribe/renew 时 L1 推荐人获消费返利 (L1=20%, L2=40%)
+- - DatabaseInitializer 添加迁移69: promotion_tier_config 表 + R0-R4 种子数据
+- New files:
+- - PpointService.java
+- - FamilyAccessInterceptor.java (家庭数据访问安全拦截器)
+- - RequestBodyCachingFilter.java (body 缓存供拦截器使用)
+- - AdminSubscriptionController.java
+- - FiveDimensionScoreService.java + entity/mapper (五维能量持久化)
+- 
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.140 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.139 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.136 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.133 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.130 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.129 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.128 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.127 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.126 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.125 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.124 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.123 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.122 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.121 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.120 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.119 (2026-07-10)
+
+### Bug 修复
+- specs字段规范化为合法JSON避免MySQL JSON列报错
+
+### 其他
+-   将 "颜色:红色;尺码:M" 文本格式转为 {"颜色":"红色","尺码":"M"} JSON
+- - 前端 ProductSkuEditor handleSave 发送前同样做前端规范化
+- - 根因: product_skus.specs 列为 MySQL JSON NOT NULL, 前端输入普通文本被拒绝
+- 
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.118 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.117 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.116 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.115 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.114 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.113 (2026-07-10)
+
+### 重构
+- 全代码库替换术语 分销→销售 分润→返利 裂变→推荐 分佣→佣金
+
+### 其他
+- - 前端小程序(cfc-frontend)会员页用户可见文本
+- - PPT 生成器脚本及输出(5 个生成器 + 确定性PPT)
+- - Java 后端 Swagger 描述、错误消息、日志、注释
+- - SQL schema COMMENT 和段注释
+- - Web 管理端路由和 API 注释
+- - 所有设计文档/需求文档/Spec 文档
+- - 测试文件描述和官网文稿
+- 保留不变:数据库表名/列名、Java 类名/方法名/变量名等技术标识符
+- 
+- - Update imports in guide/plans/detail.vue and guide/plans/index.vue
+- - Remove AssessmentOrderController and related tests (moved to DanAssessmentController)
+- - Resolve merge conflicts in cfc-web
+- 
+
+### Bug 修复
+- resolve getPlanDetail duplicate declaration and clean up assessment controllers
+- getTrendStats send {} to avoid axios stringify undefined
+
+## v1.0.112 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+### Bug 修复
+- 用原生 button @click 替换 el-button 绕过组件事件问题
+
+### 其他
+-
+
+## v1.0.111 (2026-07-10)
+
+### Bug 修复
+- knowledge layout — wrap body, add status filter dropdown
+
+## v1.0.109 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.108 (2026-07-10)
+
+### 其他
+- debug: 添加原生 button 对比测试点击事件
+-
+
+## v1.0.106 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.105 (2026-07-10)
+
+### 文档
+- 添加 superpowers 设计文档与确定性修复计划
+- 添加融资计划书演示文稿(PreA/PreA+轮)
+- 融资计划书PPT内容方案更新至 v1.0
+
+### 其他
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+-
+
+## v1.0.104 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.103 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.102 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.101 (2026-07-10)
+
+### 重构
+- remove login gate from activity/product/article detail pages
+
+### 其他
+- Prices visible before/after login. Login only required for booking, placing orders, adding to cart.
+-
+
+## v1.0.99 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.98 (2026-07-10)
+
+### 新功能
+- DAN测评市场转化全链路实现(Phase 1-5)
+
+### 其他
+- - AssessmentProduct实体/Mapper/Service/Controller
+- - 管理端测评商品管理页面 + 规划师端测评商品页
+- - 测评额度配额管理与扣减服务
+- - 商品SKU/促销层级/推荐树实体与迁移
+- Phase 2 - 购买与执行解耦:
+- - 预约-支付-执行分离流程
+- - AssessmentQuotaService额度扣减逻辑
+- - 预约确认/取消/支付回调
+- - 前端预约页+额度页+上传页
+- Phase 3 - 报告双通道+结构化指导:
+- - AssessmentReportController(上传/确认/指导意见)
+- - GrowthGuidanceService结构化指导意见
+- - ReportParseService PDF解析
+- - 家长上传报告+规划师录入结果双通道
+- Phase 4 - 方案生成引擎:
+- - AssessmentPlanRule规则引擎(维度×分数区间匹配)
+- - AssessmentPlanGenerator自动方案生成
+- - AdminPlanRuleController规则CRUD
+- - 迁移63-66: assessment_plan_rule建表 + TaskPlanInstance扩展字段
+- - 管理端方案规则配置页 + 方案管理看板
+- Phase 5 - 方案审核与执行:
+- - PlanReviewController(规划师方案列表/审核/激活)
+- - PlanActivationService激活生成待办任务
+- - 规划师小程序方案审核页+详情页
+- - 修复既存asyncDeepParse编译错误
+- 新增: 会员订阅/积分体系/商城商品管理等基础设施
+-
+
+## v1.0.97 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.96 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+### Bug 修复
+- el-link 点击事件改用 .native 修饰符
+
+### 其他
+-
+
+## v1.0.94 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.93 (2026-07-10)
+
+### 重构
+- remove reading timer from article detail
+
+### 其他
+- Ultraworked with Sisyphus
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+-
+
+## v1.0.92 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.91 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+### 其他
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- 新增 Vue.use(Link) 注册 Link 组件
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+-   防御性判空: 增加 !trim().isEmpty() 检查, 避免空字串  传入 Long.valueOf()
+- 
+
+### Bug 修复
+- 注册 Element UI Link 组件使变更日志可点击
+- AdminArticleController 空字串转Long抛NumberFormatException
+
+## v1.0.89 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.88 (2026-07-10)
+
+### 文档
+- add DAN assessment market transformation plan — full 5-phase design
+
+## v1.0.87 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.86 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+### 其他
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- 新增服务器运行状态: 运行时长、CPU 使用率、JVM 内存占用, 数据来自后端 /api/system/health 接口
+- 已在 mounted 中调用 loadServerHealth() 自动加载
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### Bug 修复
+- 系统状态卡片增加变更日志入口与服务器运行监控
+
+## v1.0.84 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.83 (2026-07-10)
+
+### 新功能
+- tongue diagnosis as health report type
+
+### 其他
+- - report-confirm.vue: add tongue indicators card, route confirm to confirmTongue
+- - report-list.vue: add tongue badge display
+- - body/index.vue: redirect tongue entry to report-upload?reportType=tongue
+- - tongue-index.vue: deprecate — redirect to new report flow
+- - api.js: parseReportPreview accepts optional type param
+-
+
+## v1.0.82 (2026-07-10)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.81 (2026-07-10)
+
+### 新功能
+- AI管家会话管理 - ButlerSession实体/服务/控制器 + 迁移42
+- 统一四个Tab页面的家庭关系卡片组件 + 齿轮图进入成员维护
+
+### 其他
+- - 新增 ButlerSessionMapper (MyBatis-Plus)
+- - 新增 ButlerSessionService (CRUD/归档/上下文管理)
+- - 新增 ButlerController (/api/ai/butler/sessions/* 6端点)
+- - DatabaseInitializer 迁移42: 创建 butler_sessions 表
+- - schema.sql 同步更新
+-
+
+## v1.0.80 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.79 (2026-07-09)
+
+### 新功能
+- emotion checkin add video capture + enhanced AI simulation
+
+### 其他
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+-
+
+## v1.0.78 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.77 (2026-07-09)
+
+### 文档
+- 一生一世家庭会员设计方案 v1.1 + 双并行实施计划
+
+### 其他
+- - 拆分为两个并行实施计划:
+-   Plan 1: 订阅+推广核心(P0+P1, 12-15天)
+-   Plan 2: AI+管家+推荐引擎(P0b+P2+P3, 15-20天)
+- - Plan 2 通过 Stub/Provider 模式与 Plan 1 解耦,可完全并行开发
+-
+
+## v1.0.76 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.75 (2026-07-09)
+
+### 新功能
+- 五维幸福矩阵『身』由『主动健康』更名为『根基永固』
+
+## v1.0.74 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.73 (2026-07-09)
+
+### 新功能
+- split admin/teacher dashboards, enrich admin with 8 stat cards, ECharts charts, system health panel, 8 quick actions
+
+### 其他
+- - Rewrite Dashboard.vue to admin-only (875 lines) with expanded stats
+- - Add getDashboardOverview() API for /api/stats/overview
+- - Add ECharts trend chart (user/family growth) and membership pie chart
+- - Replace system info with enriched health panel (status, version, refresh)
+- - Expand quick actions from 4 to 8 (4x2 gradient icon grid)
+- - Register /teacher-dashboard route, update router guard for teacher redirect
+- - Make sidebar '首页' menu path dynamic based on role
+- - Update AGENTS.md with new dashboard architecture
+-
+
+## v1.0.72 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.71 (2026-07-09)
+
+### 新功能
+- purchase field config UI + consignee mini-program pages (P2-P3)
+
+## v1.0.70 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.69 (2026-07-09)
+
+### Bug 修复
+- convert content-bearing VARCHAR columns to TEXT to prevent Data too long errors
+
+### 其他
+-   audit_reason, summary, advice, overall_assessment, config_value fields
+-   from VARCHAR(255/500/200) to TEXT across ~40 tables
+- - Added idempotent modifyColumnToText() migrations in DatabaseInitializer
+-   (~55 ALTER TABLE MODIFY COLUMN calls) for production database sync
+- - Primary fix: activities.description was the original crash site but
+-   many other columns had the same truncation risk
+-
+
+## v1.0.68 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.67 (2026-07-09)
+
+### Bug 修复
+- show family relation graph card even with single member
+
+### 其他
+- so the card displays for families with only 1 member. the canvas
+- drawing already guards against drawing lines when < 2 members.
+-
+
+## v1.0.66 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.65 (2026-07-09)
+
+### Bug 修复
+- connect after-sales request and product order refund flows
+
+### 其他
+- admin order management can find refunding orders (was filtering by
+- order.status='refunding' but after-sales was stored in separate table).
+- ProductOrderService.approveRefund/rejectRefund now syncs back to
+- AfterSalesRequest.status so mini-program after-sales list stays in sync.
+- ProductOrderDTO.from() now carries refund/logistics fields that were
+- previously omitted, so admin refund dialog shows refund reason.
+-
+
+## v1.0.64 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.63 (2026-07-09)
+
+### Bug 修复
+- restore DatabaseInitializer encoding and fix ActivityController tests
+
+### 其他
+- - ActivityControllerTest.java: add missing 'role' parameter to create/update/publish/end calls
+- Ultraworked with Sisyphus (https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.62 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.61 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.60 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.59 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.58 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.57 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.56 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.55 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.54 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.53 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.52 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.51 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.50 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.49 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.48 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.47 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.46 (2026-07-09)
+
+### Bug 修复
+- 修复 numsoul_config 种子数据语法错误(缺失引号和逗号)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.45 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.44 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.43 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.42 (2026-07-09)
+
+### 新功能
+- enhance health reports page and add draft audit UI
+
+### 其他
+- - HealthReportAudit.vue: new draft audit page with detail dialog (indicators/gut flora/disease risk tabs)
+- - Router + sidebar: register /health-report-audit route and menu entry
+- Ultraworked with Sisyphus (https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- - HealthReportController: add POST /api/health/report/admin-list endpoint
+- - HealthReportService: add listAllReportsForAdmin() with childName resolution
+- - UpdateUserDTO: fix stale git conflict markers
+- Ultraworked with Sisyphus (https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### Bug 修复
+- improve health report scoring and add admin report list
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.41 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.40 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+### 其他
+- sync: merge E2E test stash from cfclub branch (AGENTS.md, package-lock, test report)
+
+### 测试
+- fix e2e test runner - mini-games Playwright syntax, admin-panel URL, baseURL
+- improve E2E test robustness and simplify DAN assessment flow
+
+### 文档
+- update E2E test results documentation
+
+### Bug 修复
+- repair playwright baseURL, add test scripts and lockfile
+- resolve merge conflict in DatabaseInitializer, add mascot to UpdateUserDTO
+
+## v1.0.39 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.38 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.37 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.36 (2026-07-09)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.35 (2026-07-09)
+
+### 新功能
+- consignee + purchase field module (migration, entity, mapper, service, controller)
+- add admin activity creation and management features
+- family members empty state — always show as entry point
+
+### 其他
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- - 添加 → 导航到 /pages/family/add-member
+- - 邀请 → 打开邀请弹窗
+- - family-header 在无 familyName 时显示 '我的家庭' 占位
+- - 筛选后无结果时仍显示 '暂无家长/暂无孩子' 提示
+- 
+- 
+- - Unify formatTime to t.replace('T',' ').substring(0,19) pattern
+- - Replace new Date().toLocaleString() with consistent T-replace in
+-   OrderManage/WithdrawAudit/EmotionAlertManage/ProductManage
+- 
+- - Uses table-scroll-wrap CSS classes (overflow:auto + max-height)
+- - Inline overflow:auto;max-height style on pages without class wrapper
+- 
+
+### Bug 修复
+- add role-based permission checks to activity endpoints
+- 补齐个人信息保存缺失的 idCard/mascot 映射
+- normalize time format to YYYY-MM-DD HH:mm:ss across admin pages
+- complete scroll wrapper for all 59 pages with fixed=right columns
+
+### 工程化
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+
+## v1.0.34 (2026-07-08)
+
+### 重构
+- unify admin page styles with global CSS design tokens
+- merge wechatLogin and wechatPhoneLogin, capture phone from WeChat
+
+### 其他
+- - Import admin-tokens.css globally in main.js
+- - Refactor ~33 admin pages to use standard classes:
+-   - admin-page-header / admin-page-title / admin-page-actions for card headers
+-   - table-scroll-wrap(-sm/-lg) for table containers
+-   - pagination-wrap for pagination
+-   - filter-bar for search/filter bars
+-   - Remove inline width/height/float styles
+- - Update ActivityEdit, ProductEdit with proper header layout
+- - Fix ActivityReview, Assessment (syntax error fix)
+- - Remove duplicate scoped CSS for filter-bar, header patterns
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### 工程化
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+- auto bump version and changelog [skip ci]
+
+### 文档
+- add article system redesign design document
+
+### 新功能
+- redesign article-center with search/nav/dimension-param; enhance mind/articles with search and unified detail
+- unify article entry points to article-center
+- redesign family-members page with gear entry, detail modal, edit permissions
+- add /api/family/member/editable endpoint
+- add FamilyRelationshipService, refactor FamilyMemberService for bidirectional relations
+- add family_relationships table with entity/mapper/migration
+
+### Bug 修复
+- revert error-throwing, keep auto-create for unidentified users
+- prevent auto-create user when openid not found and no phoneCode
+- wechatLogin use real code2Session API instead of mock openid
+- validate openid before WeChat prepay - reject phone-prefixed/mock openid (resolves PARAM_ERROR 无效的openid)
+
+## v1.0.31 (2026-07-08)
+
+### Bug 修复
+- add missing wangEditor Toolbar component to enable rich text editing
+- add overflow:auto scroll wrapper to all 58 pages with fixed=right columns
+
+### 其他
+- - Fix prop name from :config to :defaultConfig (wangEditor Vue2 API)
+- - Add toolbarConfig for Toolbar component initialization
+- - Add missing @wangeditor/editor CSS import to ArticleEdit and ActivityEdit
+- - Add editor CSS styles (rich-editor border, toolbar wrap, text-container min-height)
+- 
+- - All 58 Vue pages with fixed="right" columns now have horizontal scroll container
+- - Pattern: div wrapper with overflow:auto;max-height:calc(100vh - 300px)
+- 
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.29 (2026-07-08)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.27 (2026-07-08)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.25 (2026-07-08)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+## v1.0.24 (2026-07-08)
+
+### 工程化
+- auto bump version and changelog [skip ci]
+
+### Bug 修复
+- admin UI improvements - action dropdown, scroll, labels, confirm dialogs
+
+### 其他
+- - Layout.vue 全局滚动修复(overflow-y:auto 覆盖所有 admin-page 编辑页)
+- - 搜索框"全部"选项改为语义标签(11 页面:「全部状态」「全部分类」等)
+- - 状态变更操作增加  确认 + 自动 loadList() 刷新
+- - 活动列表 flex 布局 + 滚动 CSS 修复
+-
+
+## v1.0.21 (2026-07-08)
+
+### 工程化
+- bump to v1.0.20
+
+## v1.0.20 (2026-07-08)
+
+### 新功能
+- radar chart dual-line support (avg + user cognitive scores)
+
+### 其他
+- - Shows gray dashed avg line behind user's indigo filled polygon
+- - 6 dims: perception/focus/memory/logic/spatial/processing speed
+-
+
+## v1.0.19 (2026-07-08)
+
+### 新功能
+- radar chart dual-line support (avg + user scores)
+
+### 其他
+- - New _drawAvgScoreArea() method renders average as background layer
+- - Body page passes mock avg scores alongside user dimension scores
+- - Avg scores: [72,68,75,70,73,69,71] for 7 dimensions
+- - Without user data, only avg line shows; with data, both lines visible
+- 
+- - Add console logs for tracking dimension data loading flow
+- - Helps diagnose radar chart not rendering when no child selected or API fails
+- 
+- - Bump package.json version 1.0.11 → 1.0.17
+- - Update .last_build_commit to latest build
+- - web/index.html: update Clarity tracking ID, remove duplicate inline script
+- 
+
+### Bug 修复
+- guard loadHealthDimensions on activeChildId + debug logs
+- add table overflow scroll to admin pages
+
+### 工程化
+- clean CHANGELOG, bump version to 1.0.17, update Clarity tracking ID
+
+## v1.0.18 (2026-07-08)
+
+### Bug 修复
+- guard loadHealthDimensions on activeChildId + debug logs
+- add table overflow scroll to admin pages
+
+### 其他
+- - Add console logs for tracking dimension data loading flow
+- - Helps diagnose radar chart not rendering when no child selected or API fails
+- 
+- - Bump package.json version 1.0.11 → 1.0.17
+- - Update .last_build_commit to latest build
+- - web/index.html: update Clarity tracking ID, remove duplicate inline script
+- 
+
+### 工程化
+- clean CHANGELOG, bump version to 1.0.17, update Clarity tracking ID
+
+## v1.0.18 (2026-07-08)
+
+## v1.0.18 (2026-07-08)
+
+### Bug 修复
+- Dashboard.vue: 替换 CSS Grid 为 flexbox(.td-quick-actions、.td-today-stats)
+- Dashboard.vue: teacher API null/undefined 守卫,防止 Promise.all catch 后访问 undefined 属性
+- Dashboard.vue: el-progress 进度环空值容错(parseFloat fallback)
+- Dashboard.vue: 改进 Markdown 解析器,支持代码块、列表、标题、加粗/斜体/链接
+- 闭合括号格式错误导致构建失败
+
+## v1.0.17 (2026-07-08)
+
+### Bug 修复
+- ArticleService.recordRead: null userId 守卫,防止 creator_id NOT NULL 异常
+- TeacherDashboard: 添加 null/undefined 守卫
+
+### 新功能
+- Dashboard.vue 全面优化:CSS grid → flexbox、API 错误处理、进度条容错、Markdown 解析器增强
+
+### 其他
+- omf 插件更新至最新版本
+- web/index.html: Clarity 追踪 ID 更新 (xbtkn3d56w → xj4p74ra9m),移除重复内联脚本

Datei-Diff unterdrückt, da er zu groß ist
+ 32 - 191
cfc-web/public/CHANGELOG.md


+ 129 - 37
cfc-web/scripts/generate-changelog.js

@@ -1,11 +1,9 @@
 /**
- * generate-changelog.js — 从 git log 生成 CHANGELOG.md
+ * generate-changelog.js — 从 git log 生成 changelog,按中版本分文件存储
  *
- * 逻辑:
- *   1. 读取 LAST_BUILD 文件(记录上次构建的 commit hash)
- *   2. 从 LAST_BUILD 到 HEAD 收集 commit messages
- *   3. 按 conventional-commit 分类 (Feat/Fix/Refactor/Chore/Docs/…)
- *   4. 追加到 CHANGELOG.md 末尾并更新 LAST_BUILD
+ * 文件结构:
+ *   public/CHANGELOG.md           — 索引页,显示最新版本内容 + 链接到所有版本文件
+ *   public/CHANGELOG-v{MAJOR}.{MINOR}.md — 每个中版本一个文件
  *
  * 用法: node scripts/generate-changelog.js <version>
  */
@@ -14,6 +12,7 @@ const path = require('path');
 const { execSync } = require('child_process');
 
 const rootDir = path.resolve(__dirname, '..');
+const PUBLIC_DIR = path.join(rootDir, 'public');
 const version = process.argv[2];
 if (!version) {
   console.error('[generate-changelog] 用法: node scripts/generate-changelog.js <version>');
@@ -21,14 +20,19 @@ if (!version) {
 }
 
 const lastBuildFile = path.join(rootDir, '.last_build_commit');
-const changelogFile = path.join(rootDir, 'public', 'CHANGELOG.md');
+const changelogFile = path.join(PUBLIC_DIR, 'CHANGELOG.md');
+
+const versionParts = version.split('.');
+const minorVersion = `${versionParts[0]}.${versionParts[1]}`;
+const versionFileName = `CHANGELOG-v${minorVersion}.md`;
+const versionFilePath = path.join(PUBLIC_DIR, versionFileName);
+
+// ==================== 1. 获取 commit 日志 ====================
 
-// 获取上次构建 commit hash
 let fromHash = '';
 try {
   fromHash = fs.readFileSync(lastBuildFile, 'utf-8').trim();
 } catch {
-  // 首次构建:从第一个 commit 开始
   try {
     fromHash = execSync('git rev-list --max-parents=0 HEAD', { cwd: rootDir, encoding: 'utf-8' }).trim();
   } catch {
@@ -36,10 +40,8 @@ try {
   }
 }
 
-// 获取当前 HEAD
 const headHash = execSync('git rev-parse HEAD', { cwd: rootDir, encoding: 'utf-8' }).trim();
 
-// 获取 commit 日志
 let log = '';
 try {
   const range = fromHash ? `${fromHash}..HEAD` : 'HEAD';
@@ -51,7 +53,6 @@ try {
   log = '';
 }
 
-// 解析 commit
 const commits = log ? log.split('\n').filter(Boolean).map(line => {
   const [subject, body, author, date] = line.split('|||');
   return { subject: subject || '', body: body || '', author: author || '', date: date || '' };
@@ -59,22 +60,12 @@ const commits = log ? log.split('\n').filter(Boolean).map(line => {
 
 if (commits.length === 0) {
   console.log('[generate-changelog] 没有新 commit,跳过 changelog 生成');
-  // 仍然更新 LAST_BUILD
   fs.writeFileSync(lastBuildFile, headHash, 'utf-8');
   return;
 }
 
-const hasMeaningful = commits.some(c => {
-  const cat = categorize(c.subject);
-  return cat !== '工程化';
-});
-if (!hasMeaningful) {
-  console.log('[generate-changelog] 仅有工程化变更,跳过 changelog 生成');
-  fs.writeFileSync(lastBuildFile, headHash, 'utf-8');
-  return;
-}
+// ==================== 2. 分类 commit ====================
 
-// 分类
 function categorize(subject) {
   const s = subject.toLowerCase();
   if (s.startsWith('feat') || s.startsWith('feature')) return '新功能';
@@ -88,17 +79,24 @@ function categorize(subject) {
   return '其他';
 }
 
+const hasMeaningful = commits.some(c => categorize(c.subject) !== '工程化');
+if (!hasMeaningful) {
+  console.log('[generate-changelog] 仅有工程化变更,跳过 changelog 生成');
+  fs.writeFileSync(lastBuildFile, headHash, 'utf-8');
+  return;
+}
+
 const grouped = {};
 commits.forEach(c => {
   const cat = categorize(c.subject);
   if (!grouped[cat]) grouped[cat] = [];
-  // 格式化 subject:去掉 feat/fix: 前缀
   let desc = c.subject.replace(/^(feat|feature|fix|refactor|docs?|chore|build|ci|perf|style|test)(\([^)]*\))?[:\s]*/i, '');
   if (!desc) desc = c.subject;
   grouped[cat].push(`- ${desc}`);
 });
 
-// 构建新版本 changelog 块
+// ==================== 3. 构建版本内容块 ====================
+
 const now = new Date().toISOString().slice(0, 10);
 let block = `\n## v${version} (${now})\n\n`;
 for (const [cat, items] of Object.entries(grouped)) {
@@ -106,23 +104,117 @@ for (const [cat, items] of Object.entries(grouped)) {
   block += `### ${cat}\n${items.join('\n')}\n\n`;
 }
 
-// 追加或新建 CHANGELOG.md
-let existing = '';
+// ==================== 4. 写入版本文件 ====================
+
+let versionContent = '';
 try {
-  existing = fs.readFileSync(changelogFile, 'utf-8');
+  versionContent = fs.readFileSync(versionFilePath, 'utf-8');
 } catch {
-  existing = '# 更新日志 (Changelog)\n\n此文件记录所有构建版本的变更。\n';
+  versionContent = `# v${minorVersion} 版本历史\n\n[« 返回最新版本](CHANGELOG.md)\n\n---\n`;
 }
-// 新版本插入到标题之后、旧内容之前
-const headerEnd = existing.indexOf('\n## ');
-if (headerEnd === -1) {
-  existing = existing.trimEnd() + block;
+
+const versionHeaderEnd = versionContent.indexOf('\n## ');
+if (versionHeaderEnd === -1) {
+  versionContent = versionContent.trimEnd() + block;
 } else {
-  existing = existing.slice(0, headerEnd) + block + existing.slice(headerEnd);
+  versionContent = versionContent.slice(0, versionHeaderEnd) + block + versionContent.slice(versionHeaderEnd);
 }
-fs.writeFileSync(changelogFile, existing, 'utf-8');
+fs.writeFileSync(versionFilePath, versionContent, 'utf-8');
+
+// ==================== 5. 迁移旧版 CHANGELOG.md 内容(首次运行) ====================
+
+// 检查是否已有版本文件(除当前文件外),若没有则从旧版 CHANGELOG.md 迁移
+const allFiles = fs.readdirSync(PUBLIC_DIR);
+const existingVersionFiles = allFiles.filter(f => /^CHANGELOG-v\d+\.\d+\.md$/.test(f) && f !== versionFileName);
+
+if (existingVersionFiles.length === 0) {
+  try {
+    const legacyContent = fs.readFileSync(changelogFile, 'utf-8');
+    // 判断是否是旧版格式(包含 ## v 条目但没有版本导航链接)
+    const hasLegacyEntries = /^## v\d+\.\d+\.\d+/m.test(legacyContent);
+    const hasVersionNav = legacyContent.includes('版本历史](');
+    if (hasLegacyEntries && !hasVersionNav) {
+      // 提取所有版本条目,按中版本分组
+      const versionRegex = /(## v(\d+\.\d+)\.\d+ .*?)(?=\n## v\d+\.\d+\.\d+ |\n*$)/gs;
+      const entries = {};
+      let match;
+      while ((match = versionRegex.exec(legacyContent)) !== null) {
+        const entry = match[1].trim();
+        const ver = match[2];
+        if (!entries[ver]) entries[ver] = [];
+        entries[ver].push(entry);
+      }
+
+      for (const [ver, entryList] of Object.entries(entries)) {
+        if (ver === minorVersion) continue; // 当前版本已写入
+        const vf = path.join(PUBLIC_DIR, `CHANGELOG-v${ver}.md`);
+        let vc = '';
+        try {
+          vc = fs.readFileSync(vf, 'utf-8');
+        } catch {
+          vc = `# v${ver} 版本历史\n\n[« 返回最新版本](CHANGELOG.md)\n\n---\n`;
+        }
+        const vhEnd = vc.indexOf('\n## ');
+        const migratedBlock = '\n' + entryList.join('\n') + '\n';
+        if (vhEnd === -1) {
+          vc = vc.trimEnd() + migratedBlock;
+        } else {
+          vc = vc.slice(0, vhEnd) + migratedBlock + vc.slice(vhEnd);
+        }
+        fs.writeFileSync(vf, vc, 'utf-8');
+      }
+      console.log(`[generate-changelog] 已迁移 ${Object.keys(entries).length} 个中版本的历史记录`);
+    }
+  } catch {
+    // 没有旧版 CHANGELOG.md,忽略
+  }
+}
+
+// ==================== 6. 重建主 CHANGELOG.md ====================
+
+const allVersionFiles = fs.readdirSync(PUBLIC_DIR)
+  .filter(f => /^CHANGELOG-v(\d+)\.(\d+)\.md$/.test(f))
+  .sort((a, b) => {
+    // 降序排列:1.1 > 1.0
+    const ma = a.match(/^CHANGELOG-v(\d+)\.(\d+)\.md$/);
+    const mb = b.match(/^CHANGELOG-v(\d+)\.(\d+)\.md$/);
+    if (!ma || !mb) return 0;
+    const va = parseInt(ma[1]) * 1000 + parseInt(ma[2]);
+    const vb = parseInt(mb[1]) * 1000 + parseInt(mb[2]);
+    return vb - va;
+  });
+
+const links = allVersionFiles.map(f => {
+  const v = f.replace('CHANGELOG-v', '').replace('.md', '');
+  return `- [v${v} 版本历史](${f})`;
+}).join('\n');
+
+// 读取最新版本文件内容作为默认显示
+let latestContent = '';
+if (allVersionFiles.length > 0) {
+  const latestFile = allVersionFiles[0];
+  latestContent = fs.readFileSync(path.join(PUBLIC_DIR, latestFile), 'utf-8');
+  // 去掉文件头(标题 + 返回链接 + 分隔线)
+  latestContent = latestContent.replace(/^# .+?\n\n\[.+?\]\(.+?\)\n\n---\n\n/s, '');
+}
+
+const mainContent = `# 更新日志
+
+> 当前版本: v${version}
+
+## 历史版本
+
+${links}
+
+---
+
+${latestContent}
+`;
+
+fs.writeFileSync(changelogFile, mainContent, 'utf-8');
+
+// ==================== 7. 更新 LAST_BUILD ====================
 
-// 更新 LAST_BUILD
 fs.writeFileSync(lastBuildFile, headHash, 'utf-8');
 
-console.log(`[generate-changelog] CHANGELOG.md 已更新,新增 ${commits.length} 条记录`);
+console.log(`[generate-changelog] CHANGELOG.md + ${versionFileName} 已更新,新增 ${commits.length} 条记录`);

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.