Browse Source

chore: auto bump version and changelog [skip ci]

iwt 2 days ago
parent
commit
fc854eaedf

+ 75 - 29
cfc-frontend/pages/index-home/index.vue

@@ -103,12 +103,12 @@
       :notices="notices"
       :showHeader="true" />
 
-    <!-- 能量/积分/CF值变更通知条 -->
-    <view v-if="showEnergyBadge || showPointsBadge || showCfBadge" class="change-notification-bar" @click="clearChangeNotifications">
-      <text v-if="showEnergyBadge" class="change-item energy">{{ formatEnergyNotification }}</text>
-      <text v-if="showPointsBadge" class="change-item points">{{ formatPointsNotification }}</text>
-      <text v-if="showCfBadge" class="change-item cf">{{ formatCfNotification }}</text>
-      <text class="change-dismiss">✕</text>
+    <!-- 能量/积分/CF值变更通知 - 从下滑动展示 -->
+    <view v-if="showEnergyBadge || showPointsBadge || showCfBadge" class="change-notification-bar" :class="{ 'visible': isNotificationVisible }" @click="handleNotificationClick">
+      <view v-if="showEnergyBadge" class="change-item energy" @click.stop="onEnergyClick">{{ formatEnergyNotification }}</view>
+      <view v-if="showPointsBadge" class="change-item points" @click.stop="onPointsClick">{{ formatPointsNotification }}</view>
+      <view v-if="showCfBadge" class="change-item cf" @click.stop="onCfClick">{{ formatCfNotification }}</view>
+      <view class="change-dismiss" @click="dismissAll">✕</view>
     </view>
 
     <!-- ④ 内容区 — 推荐文章 -->
@@ -533,7 +533,9 @@ membershipDays: 0,
       cfMessages: [],
       showEnergyBadge: false,
       showPointsBadge: false,
-      showCfBadge: false
+      showCfBadge: false,
+      // 通知栏可见性(从下往上滑入)
+      isNotificationVisible: false
 
 
     }
@@ -691,30 +693,36 @@ title: '添加家庭成员',
         color: 'gray'
       }
     },
-    // ===== 能量/积分/CF值变更通知格式化 =====
+    // ===== 能量/积分/CF值变更通知格式化(标题带具体数量) =====
     formatEnergyNotification: function() {
-      var texts = []
+      var total = 0
       var arr = this.energyMessages || []
       for (var i = 0; i < arr.length; i++) {
-        texts.push(arr[i].description)
+        total += (arr[i].amount || 0)
       }
-      return '⚡ ' + (texts.join(';') || '能量变动')
+      var sign = total > 0 ? '+' : ''
+      var first = arr.length > 0 ? arr[0].description : '能量变动'
+      return '⚡ 能量 ' + sign + total + ' · ' + first
     },
     formatPointsNotification: function() {
-      var texts = []
+      var total = 0
       var arr = this.pointsMessages || []
       for (var i = 0; i < arr.length; i++) {
-        texts.push(arr[i].description)
+        total += (arr[i].amount || 0)
       }
-      return '🪙 ' + (texts.join(';') || '积分变动')
+      var sign = total > 0 ? '+' : ''
+      var first = arr.length > 0 ? arr[0].description : '积分变动'
+      return '🪙 积分 ' + sign + total + ' · ' + first
     },
     formatCfNotification: function() {
-      var texts = []
+      var total = 0
       var arr = this.cfMessages || []
       for (var i = 0; i < arr.length; i++) {
-        texts.push(arr[i].description)
+        total += (arr[i].amount || 0)
       }
-      return '💰 ' + (texts.join(';') || 'CF值变动')
+      var sign = total > 0 ? '+' : ''
+      var first = arr.length > 0 ? arr[0].description : 'CF值变动'
+      return '💰 CF值 ' + sign + total + ' · ' + first
     }
   },
   onLoad(options) {
@@ -1176,6 +1184,9 @@ title: '添加家庭成员',
           self.cfMessages = cfRes.messages
           self.showCfBadge = cfRes.showBadge
         }
+        
+        // 通知栏滑入动画:数据加载完成后触发从下往上的展示
+        self.isNotificationVisible = true
       }).catch(function() {
         self.energyMessages = []
         self.pointsMessages = []
@@ -1400,7 +1411,36 @@ title: '添加家庭成员',
              date.getFullYear() === today.getFullYear()
     },
     
-    clearChangeNotifications: function() {
+    // ===== 能量/积分/CF值变更通知点击处理 =====
+    // 点击通知内容 → 跳转详情页 + 隐藏通知(点击后不再显示)
+    handleNotificationClick: function() {
+      // 点击空白区域:若有多个通知,跳转第一个可见的
+      if (this.showEnergyBadge) {
+        this.onEnergyClick()
+      } else if (this.showPointsBadge) {
+        this.onPointsClick()
+      } else if (this.showCfBadge) {
+        this.onCfClick()
+      } else {
+        this.dismissAll()
+      }
+    },
+    onEnergyClick: function() {
+      var memberId = this.currentChildId || uni.getStorageSync('currentMemberId') || ''
+      this.dismissAll()
+      uni.navigateTo({ url: '/pages/energy/detail?memberId=' + memberId })
+    },
+    onPointsClick: function() {
+      this.dismissAll()
+      uni.navigateTo({ url: '/pages/rewards/rewards' })
+    },
+    onCfClick: function() {
+      this.dismissAll()
+      uni.navigateTo({ url: '/pages/promotion/index' })
+    },
+    // 关闭按钮:仅隐藏,不跳转
+    dismissAll: function() {
+      this.isNotificationVisible = false
       this.showEnergyBadge = false
       this.showPointsBadge = false
       this.showCfBadge = false
@@ -2822,26 +2862,31 @@ title: '添加家庭成员',
 }
 .self-test-badge { display: inline-block; align-self: flex-start; margin-top: 8rpx; font-size: 20rpx; color: #F97316; background: rgba(249,115,22,0.1); padding: 4rpx 14rpx; border-radius: 999rpx; }
 
-/* ===== 能量/积分/CF值变更通知条 ===== */
+/* ===== 能量/积分/CF值变更通知条(从下滑入动画) ===== */
 .change-notification-bar {
-  margin: 16rpx 30rpx;
+  position: fixed;
+  bottom: -80rpx;
+  left: 30rpx;
+  right: 30rpx;
   padding: 16rpx 24rpx;
   background: linear-gradient(135deg, #FFF7ED, #FFEDD5);
   border-radius: 16rpx;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  gap: 16rpx;
   box-shadow: 0 2rpx 8rpx rgba(249,115,22,0.12);
-  flex-wrap: wrap;
+  transition: bottom 0.3s cubic-bezier(0.16,1,0.3,1) forwards;
+  z-index: 100;
+}
+.change-notification-bar.visible {
+  bottom: 0;
+  animation: slide-up-notice 0.4s cubic-bezier(0.16,1,0.3,1) forwards;
+}
+@keyframes slide-up-notice {
+  from { opacity: 0; transform: translateY(80rpx); }
+  to   { opacity: 1; transform: translateY(0); }
 }
 .change-item {
   font-size: 22rpx;
   font-weight: 500;
-  max-width: 100%;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
+  color: #333;
 }
 .change-item.energy { color: #F97316; }
 .change-item.points { color: #10B981; }
@@ -2851,5 +2896,6 @@ title: '添加家庭成员',
   font-size: 24rpx;
   color: #999;
   flex-shrink: 0;
+  cursor: pointer;
 }
 </style>

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-85ffba6aa1976012eb0d42554419fcfc4014102e
+8e11fad3dd9c7a9d2ae565ad0506e0a0bdbe340a

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1532",
+  "version": "1.0.1555",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.1532",
+      "version": "1.0.1555",
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1533",
+  "version": "1.0.1556",
   "private": true,
   "scripts": {
     "dev": "vue-cli-service serve",

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

@@ -4,6 +4,694 @@
 
 ---
 
+## v1.0.1556 (2026-10-09)
+
+### 新功能
+- pages.json 注册 indicator-curve / indicator-quicklook
+- 指标变化曲线页(筛选 + TrendChart + 变化排名 Tab/排序/着色)
+- 指标变化展示规则纯函数 resolveChangeStyle/formatDelta
+- TrendChart 通用折线组件(canvas 2d + DPR,参照 RadarChart 模式)
+- 指标 API 封装 getIndicatorTrend/ChangeRanking/QuickLookup/CorrelationList
+- 视图+管理控制器(4+5接口) + 每日校准Job
+- IndicatorCorrelationService 关联CRUD+对序强制+Spearman校准
+- IndicatorTrendService 曲线/变化排名/速查(含维度评分小节)
+- NormalizeIndicatorPipeline 单一写者+三钩子(入库/编辑/食材快照)
+- IndicatorMappingService exact→fuzzy→AI→惰性注册 映射解析
+- AiGateway.classifyIndicator + LangGraph /api/v1/indicator/classify
+- SpearmanUtil 秩相关+Fisher z 聚合(纯函数,含并列秩)
+- ReportDateExtractor 真实报告日期提取+历史回填(幂等分批)
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 报告管理展示采集完整度列与明细
+- 报告类型管理支持编辑采集指标
+- /report/parse 支持 indicators 采集指标约束注入
+- 非 DAN 解析下传 expected_indicators 驱动 LangGraph LLM
+- 报告管理列表/详情回填采集完整度 collect_validation
+- /types/save 校验 expectedIndicators 为 JSON 字符串数组
+
+### Bug 修复
+- 以 @Lazy 打破 IndicatorMappingService↔AiGateway 循环依赖,修复应用上下文启动失败
+- 修复报告日期回填无限循环(keyset游标+去除no-op写)+ 补回填测试
+- 修复 ActivityControllerTest 参数列表(补 roles 参数,解除全量测试编译阻塞)
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+- 恢复 PromotionManagement 路由缺失的 path/name(构建阻断回归)
+- 采集指标种子改为仅空时写入,保留管理员编辑
+
+### 文档
+- 同步指标统一层 9 个新接口契约 + PROJECT-OVERVIEW 状态
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+### 其他
+- 未同步测试,导致 src/test 全量无法编译。补 null roles 恢复测试编译。
+- 
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+
+## v1.0.1555 (2026-10-09)
+
+### 新功能
+- 指标 API 封装 getIndicatorTrend/ChangeRanking/QuickLookup/CorrelationList
+- 视图+管理控制器(4+5接口) + 每日校准Job
+- IndicatorCorrelationService 关联CRUD+对序强制+Spearman校准
+- IndicatorTrendService 曲线/变化排名/速查(含维度评分小节)
+- NormalizeIndicatorPipeline 单一写者+三钩子(入库/编辑/食材快照)
+- IndicatorMappingService exact→fuzzy→AI→惰性注册 映射解析
+- AiGateway.classifyIndicator + LangGraph /api/v1/indicator/classify
+- SpearmanUtil 秩相关+Fisher z 聚合(纯函数,含并列秩)
+- ReportDateExtractor 真实报告日期提取+历史回填(幂等分批)
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 接入图片识别食材 + 语音自动填入食物清单
+- 跨小程序单点登录 sso_ticket 换票与双向免登
+
+### Bug 修复
+- 以 @Lazy 打破 IndicatorMappingService↔AiGateway 循环依赖,修复应用上下文启动失败
+- 修复报告日期回填无限循环(keyset游标+去除no-op写)+ 补回填测试
+- 修复 ActivityControllerTest 参数列表(补 roles 参数,解除全量测试编译阻塞)
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+
+### 文档
+- 同步指标统一层 9 个新接口契约 + PROJECT-OVERVIEW 状态
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+### 其他
+- 未同步测试,导致 src/test 全量无法编译。补 null roles 恢复测试编译。
+- 
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- 
+- 
+
+### 重构
+- 管理端列表页表格改自适应高度布局
+
+
+## v1.0.1554 (2026-10-09)
+
+### 新功能
+- IndicatorMappingService exact→fuzzy→AI→惰性注册 映射解析
+- AiGateway.classifyIndicator + LangGraph /api/v1/indicator/classify
+- SpearmanUtil 秩相关+Fisher z 聚合(纯函数,含并列秩)
+- ReportDateExtractor 真实报告日期提取+历史回填(幂等分批)
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+
+### Bug 修复
+- 修复报告日期回填无限循环(keyset游标+去除no-op写)+ 补回填测试
+- 修复 ActivityControllerTest 参数列表(补 roles 参数,解除全量测试编译阻塞)
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+
+### 其他
+- 未同步测试,导致 src/test 全量无法编译。补 null roles 恢复测试编译。
+- 
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+- 采集指标补齐 实施计划(方案A,P1+P2)
+
+
+## v1.0.1553 (2026-10-09)
+
+### Bug 修复
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+- 修复家庭共餐食材持久化编译错误(selectCount 返回 Long、去除重复迁移方法、迁移354→356)
+- add store/user.js, wire App.vue store init, append fatloss API docs
+- 最近记录展示全家报告,报告列表默认选中本人
+- 基础会员(BASIC) 在会员等级映射表中缺失,导致显示为免费用户
+
+### 新功能
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- add all UI pages (weight/diet/exercise/ai-coach/profile/chart/query)
+- add remaining pages (ai-coach, profile/goal, weight-chart, food-query)
+- add api wrappers and format utils
+- init project scaffold
+- add controllers for weight/diet/exercise/goal
+- add service layer
+- add entities and mappers
+- 家庭共餐食材推荐持久化到数据库
+
+### 其他
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - 新增 DietFamilySelectedIngredient 实体和 Mapper
+- - DietIngredientService 改用数据库持久化替代内存 Map
+- - suggestIngredients 优先从 DB 加载已有选择
+- - refreshIngredients 清空并重新持久化推荐列表
+- - add/removeIngredient 直接操作 DB
+- - confirmIngredients 保留已选食材(不再清空)
+- 
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+- 采集指标 spec 改为方案A(沿既有 expected_indicators),补齐管理端/展示/驱动解析
+- mark completed tasks in fatloss-miniprogram-plan
+- add fatloss mini-program implementation plan
+- 报告类型采集指标定义与驱动解析设计(方案2 分层,P1+P2 本期)
+
+
+## v1.0.1552 (2026-10-09)
+
+### 新功能
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 财富中心移除推广入口并统一 CF 值显示
+- 我的团队入口合并至推广团队页
+- add psychological assessment module (PHQ-9, RSES-7) - New pages: pages/psych-assessment/index & quiz - pages.json registers psych-assessment routes - Dimensions: phq9_score, phq4_score, reses_score
+
+### Bug 修复
+- AIService 舌诊 JSON 序列化捕获受检异常
+- 家庭收益成员贡献榜使用真实家庭成员
+
+### 其他
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - getFamilyId() 通过 userMapper.selectById 查询用户真实 familyId
+- - isFamilyAdmin() 检查 user.isFamilyAdmin 字段
+- - 修复成员贡献榜展示非本家庭用户的问题
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- - 移除 SharePoster 组件及其相关死代码(import/注册/数据字段/方法)
+- - 移除 fenToYuan/cfToYuan 辅助函数,统一替换为 cfVal 直接展示 CF 值
+- - 更新所有金额标签为 CF 单位(累计推荐CF/可支配CF/今日CF 等)
+- - 分配弹窗提示文字同步更新
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- # Conflicts:
+- #	cfc-frontend/pages/promotion/index.vue
+- 
+- - pages.json 移除 pages/profile/team-tree 页面注册
+- - 删除 pages/profile/team-tree.vue(与推广团队功能重复)
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+
+## v1.0.1551 (2026-10-09)
+
+### Bug 修复
+- AIService 舌诊 JSON 序列化捕获受检异常
+
+### 其他
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+
+
+## v1.0.1550 (2026-10-09)
+
+### 新功能
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+
+
+## v1.0.1549 (2026-10-09)
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+
+### 其他
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+
+
+## v1.0.1548 (2026-10-09)
+
+### 文档
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+
+
+## v1.0.1547 (2026-10-09)
+
+### 文档
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+
+## v1.0.1546 (2026-10-08)
+
+### 新功能
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 六个维度页传入dimension-code按域筛选推荐商品
+- DimensionProducts组件新增dimensionCode按维度取推荐
+
+### 其他
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- 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>
+- 
+- 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>
+- 
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### Bug 修复
+- 购买态订单查询改用paid等真实状态枚举
+- 维度商品推荐修复订单状态匹配与实物库存口径
+- 迁移354补齐product_recommendation_log缺失列并同步schema.sql
+
+
+## v1.0.1545 (2026-10-08)
+
+### 新功能
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+
+### 其他
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+
+
+## v1.0.1544 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+- 每类报告定义采集指标项并接入采集完整性校验
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - 幂等补注册 dan_a1/b2/b3/b4/b5/b6/c1 与 gut_flora_beijing 类型行(parser_path 空,不干扰指纹路由)
+- - ReportCollectService 采集完成后按定义校验(归一化+包含+CJK二元组重叠匹配),结果写入 health_report_drafts.collect_validation(typeId/expected/matched/pass/missing)
+- - schema.sql 同步两处新列
+- 
+
+
+## v1.0.1543 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- 修复B4报告解析——自我概念按「维度 分数」提取6维、自驱力按维度顺序映射我的得分,去除错误兜底
+
+
+## v1.0.1542 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- add fallback from product.domain when candidates empty
+
+
+## v1.0.1541 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+- DAN报告新增按维度重解析接口,修复历史误解析并刷新结果/展示块/汇总
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+
+## v1.0.1540 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+- 我的画像页迁移五维画像并支持全屏编辑,后端新增每日自动更新任务
+- 引入企业级设计系统(Ant Design 5 令牌)并应用 flex 撑满布局
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - OrderManage.vue: 表格改用 .adm-table-wrap 弹性撑满(height=100%),移除 JS 计算的 tableHeight
+- 
+
+
+## v1.0.1539 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- dan报告维度映射支持类型编码(a1/b2/b4等),前端dan_*前缀统一跳转DAN报告页
+
+
+## v1.0.1538 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - getScoreClass/getStatusText/buildFamilyOverview 等状态判定全部改为 >= 0 边界
+- - onLoad 从报告入口进入时默认 sortType='asc',setFilter('unsuitable') 时同步重置 sortType
+- - 分类 tab key 从英文 (vegetable/fruit/meat/seafood/grain/dairy) 改为中文 (蔬菜/水果/肉禽/水产/谷物/蛋奶),并新增 getCategoryKeywords() 关键词映射覆盖 PDF/ LangGraph 两套数据源分类命名
+- - 修复分类点击无效问题,确保前端过滤能匹配 DB 中存储的中文分类
+- closes related category filter bug, aligns with backend semantics
+- 
+
+### Bug 修复
+- ingredient query page - 戒备阈值 <50→<0, 默认正序, 分类点击生效
+
+
+## v1.0.1537 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - 将 SUM(points) 修正为 SUM(amount),与 points_log 表结构一致
+- - 修复任务完成接口 /api/tasks/{id}/complete 在 calculateLatePenalty 路径抛 BadSqlGrammarException
+- 
+
+### Bug 修复
+- 修复 PointsLogMapper.selectSum SQL 占位符转义及字段名错误
+
+
+## v1.0.1536 (2026-10-07)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- 注册/绑定推荐人不再发放CF值,新增首次报告上传任务(300 CF)
+
+
+## v1.0.1535 (2026-10-07)
+
+### Bug 修复
+- 健康首页最近记录只显示当前用户自己的报告
+- 商品管理列表撑满视口并消除多级滚动条
+
+### 其他
+- getFamilyReports 返回全家全部报告),改回传入当前视图成员 memberId,
+- 符合"只有两种情况"的语义:
+- - 未切换视图 = 当前登录用户自己的报告(currentChildId/currentMemberId
+-   未写入 storage 时回退 userId,后端 getMemberReports 按成员严格过滤)
+- - 已切换成员 = 被切换成员的报告
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- - 表格改用 height=100% + flex:1,仅保留表格自身滚动条
+- - 移除 JS 计算 tableHeight 及 window.resize 监听
+- 
+
+### 新功能
+- admin supply-manage auto-set activityProviderStatus for activity_provider
+
+
+## v1.0.1534 (2026-10-07)
+
+### 新功能
+- integrate article recommendation into dimension pages
+- include vendorType/activityProviderStatus in login response for frontend permission check
+- allow activity_provider to create activities + scene referral binding
+- 小程序新增任务提醒配置页(渠道/时机/偏移/开关)
+- 任务打卡提醒升级为可配置提醒模块
+- 每日任务打卡超时 webhook 提醒
+- 新增迁移352移除报告上传权益与配额残留并同步 schema.sql
+- 移除报告上传配额,对所有登录用户免费无限
+- implement product recommendation engine with persona + association relations (P3) add recommendation rules DB + service + UI ab-test tracking
+
+### 其他
+- - 知识库:wiki/raw 原始资料、wiki 页面、结构化知识、构建脚本及 memory 等知识资产
+- - 新增 知识库/.gitignore,排除中间产物(_kb_work/.wiki-creator/__pycache__/*.pyc/.obsidian 缓存)
+- 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/reminder-config/index.vue 提醒设置页(渠道多选含未开通态/时机单选/偏移分钟/启用开关)
+- - pages.json 注册 reminder-config 分包
+- - profile 设置 actionSheet 增加"提醒设置"入口
+- 
+- - 新增 TaskReminderConfigService/Controller(/api/task/reminder-config get/save)
+- - 重写 TaskCheckinWebhookReminderTask: 按配置支持的 before_deadline/after_timeout 双窗口, 多渠道分发
+- - 新增 WebhookNotificationChannel(wechat) 接入微信待办 webhook; Email 通道骨架(未启用)
+- - 站内信(in_app)恒兜底并作幂等标记, 兼容旧 type 判重避免重复推送
+- - 无配置用户走默认: wechat+超时60分钟(与线上行为一致)
+- - 新增 7 个单测覆盖窗口/渠道/判重/停用场景
+- 
+- - 新增 TaskCheckinWebhookReminderTask:每分钟扫描家长执行型待打卡任务,提醒时间(deadline)过 1 小时未完成则推送 webhook
+- - 幂等:user_notifications 标记,同任务同日仅推一次;失败下一分钟自动重试
+- 模板任务数据(9 条健康打卡)一次性直接落库,不写入代码。
+- 
+- 表示该order_id在微信订单库中从未创建成功(并非临时查询失败)。
+- 原逻辑将所有errcode!=0一律return null, 导致超时任务永远跳过不关单,
+- 死单永不清理且每单每分钟刷2条WARN(今日已5200+条)。
+- - queryOrder: 单独识别268490002返回status=-1(本地扩展状态) + INFO日志
+- - VirtualPayTimeoutTask三个handler: status=-1归入明确未支付置cancelled分支
+- - 已用真实paid单(ORD1785990942621001DCC2)实测接口正常, 无误杀风险
+- 
+- 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>
+- 
+- 
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- add: care_family 运营资料 + cfContent 微信贴图话题发布 skill
+
+### Bug 修复
+- 健康首页最近记录默认展示全家报告
+- query_order返回268490002数据不存在视为未支付关单
+- 移除会员对比表与升级弹窗中的报告上传配额文案
+- 微信支付 v3 回调通知加入白名单并修正 notify-url
+- 报告列表默认显示当前登录用户而非全部
+- body-detail navigation to unregistered pages; resolve action-detail merge conflict
+
+### 文档
+- add activity share referral design spec
+
+
 ## v1.0.1533 (2026-10-07)
 
 ### Bug 修复

+ 689 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 
-> 当前版本: v1.0.1533
+> 当前版本: v1.0.1556
 
 ## 历史版本
 
@@ -8,6 +8,694 @@
 
 ---
 
+## v1.0.1556 (2026-10-09)
+
+### 新功能
+- pages.json 注册 indicator-curve / indicator-quicklook
+- 指标变化曲线页(筛选 + TrendChart + 变化排名 Tab/排序/着色)
+- 指标变化展示规则纯函数 resolveChangeStyle/formatDelta
+- TrendChart 通用折线组件(canvas 2d + DPR,参照 RadarChart 模式)
+- 指标 API 封装 getIndicatorTrend/ChangeRanking/QuickLookup/CorrelationList
+- 视图+管理控制器(4+5接口) + 每日校准Job
+- IndicatorCorrelationService 关联CRUD+对序强制+Spearman校准
+- IndicatorTrendService 曲线/变化排名/速查(含维度评分小节)
+- NormalizeIndicatorPipeline 单一写者+三钩子(入库/编辑/食材快照)
+- IndicatorMappingService exact→fuzzy→AI→惰性注册 映射解析
+- AiGateway.classifyIndicator + LangGraph /api/v1/indicator/classify
+- SpearmanUtil 秩相关+Fisher z 聚合(纯函数,含并列秩)
+- ReportDateExtractor 真实报告日期提取+历史回填(幂等分批)
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 报告管理展示采集完整度列与明细
+- 报告类型管理支持编辑采集指标
+- /report/parse 支持 indicators 采集指标约束注入
+- 非 DAN 解析下传 expected_indicators 驱动 LangGraph LLM
+- 报告管理列表/详情回填采集完整度 collect_validation
+- /types/save 校验 expectedIndicators 为 JSON 字符串数组
+
+### Bug 修复
+- 以 @Lazy 打破 IndicatorMappingService↔AiGateway 循环依赖,修复应用上下文启动失败
+- 修复报告日期回填无限循环(keyset游标+去除no-op写)+ 补回填测试
+- 修复 ActivityControllerTest 参数列表(补 roles 参数,解除全量测试编译阻塞)
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+- 恢复 PromotionManagement 路由缺失的 path/name(构建阻断回归)
+- 采集指标种子改为仅空时写入,保留管理员编辑
+
+### 文档
+- 同步指标统一层 9 个新接口契约 + PROJECT-OVERVIEW 状态
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+### 其他
+- 未同步测试,导致 src/test 全量无法编译。补 null roles 恢复测试编译。
+- 
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+
+## v1.0.1555 (2026-10-09)
+
+### 新功能
+- 指标 API 封装 getIndicatorTrend/ChangeRanking/QuickLookup/CorrelationList
+- 视图+管理控制器(4+5接口) + 每日校准Job
+- IndicatorCorrelationService 关联CRUD+对序强制+Spearman校准
+- IndicatorTrendService 曲线/变化排名/速查(含维度评分小节)
+- NormalizeIndicatorPipeline 单一写者+三钩子(入库/编辑/食材快照)
+- IndicatorMappingService exact→fuzzy→AI→惰性注册 映射解析
+- AiGateway.classifyIndicator + LangGraph /api/v1/indicator/classify
+- SpearmanUtil 秩相关+Fisher z 聚合(纯函数,含并列秩)
+- ReportDateExtractor 真实报告日期提取+历史回填(幂等分批)
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 接入图片识别食材 + 语音自动填入食物清单
+- 跨小程序单点登录 sso_ticket 换票与双向免登
+
+### Bug 修复
+- 以 @Lazy 打破 IndicatorMappingService↔AiGateway 循环依赖,修复应用上下文启动失败
+- 修复报告日期回填无限循环(keyset游标+去除no-op写)+ 补回填测试
+- 修复 ActivityControllerTest 参数列表(补 roles 参数,解除全量测试编译阻塞)
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+
+### 文档
+- 同步指标统一层 9 个新接口契约 + PROJECT-OVERVIEW 状态
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+### 其他
+- 未同步测试,导致 src/test 全量无法编译。补 null roles 恢复测试编译。
+- 
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- 
+- 
+
+### 重构
+- 管理端列表页表格改自适应高度布局
+
+
+## v1.0.1554 (2026-10-09)
+
+### 新功能
+- IndicatorMappingService exact→fuzzy→AI→惰性注册 映射解析
+- AiGateway.classifyIndicator + LangGraph /api/v1/indicator/classify
+- SpearmanUtil 秩相关+Fisher z 聚合(纯函数,含并列秩)
+- ReportDateExtractor 真实报告日期提取+历史回填(幂等分批)
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+
+### Bug 修复
+- 修复报告日期回填无限循环(keyset游标+去除no-op写)+ 补回填测试
+- 修复 ActivityControllerTest 参数列表(补 roles 参数,解除全量测试编译阻塞)
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+
+### 其他
+- 未同步测试,导致 src/test 全量无法编译。补 null roles 恢复测试编译。
+- 
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+- 采集指标补齐 实施计划(方案A,P1+P2)
+
+
+## v1.0.1553 (2026-10-09)
+
+### Bug 修复
+- IndicatorValueMapper 恢复 @Mapper 注解(与既有 mapper 约定一致;@MapperScan 兜底但保持统一风格)
+- AIService 舌诊 JSON 序列化捕获受检异常
+- 修复家庭共餐食材持久化编译错误(selectCount 返回 Long、去除重复迁移方法、迁移354→356)
+- add store/user.js, wire App.vue store init, append fatloss API docs
+- 最近记录展示全家报告,报告列表默认选中本人
+- 基础会员(BASIC) 在会员等级映射表中缺失,导致显示为免费用户
+
+### 新功能
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- add all UI pages (weight/diet/exercise/ai-coach/profile/chart/query)
+- add remaining pages (ai-coach, profile/goal, weight-chart, food-query)
+- add api wrappers and format utils
+- init project scaffold
+- add controllers for weight/diet/exercise/goal
+- add service layer
+- add entities and mappers
+- 家庭共餐食材推荐持久化到数据库
+
+### 其他
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - 新增 DietFamilySelectedIngredient 实体和 Mapper
+- - DietIngredientService 改用数据库持久化替代内存 Map
+- - suggestIngredients 优先从 DB 加载已有选择
+- - refreshIngredients 清空并重新持久化推荐列表
+- - add/removeIngredient 直接操作 DB
+- - confirmIngredients 保留已选食材(不再清空)
+- 
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+- 采集指标 spec 改为方案A(沿既有 expected_indicators),补齐管理端/展示/驱动解析
+- mark completed tasks in fatloss-miniprogram-plan
+- add fatloss mini-program implementation plan
+- 报告类型采集指标定义与驱动解析设计(方案2 分层,P1+P2 本期)
+
+
+## v1.0.1552 (2026-10-09)
+
+### 新功能
+- 实体/Mapper 支持统一指标层(cols/新表/幂等upsert)
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 财富中心移除推广入口并统一 CF 值显示
+- 我的团队入口合并至推广团队页
+- add psychological assessment module (PHQ-9, RSES-7) - New pages: pages/psych-assessment/index & quiz - pages.json registers psych-assessment routes - Dimensions: phq9_score, phq4_score, reses_score
+
+### Bug 修复
+- AIService 舌诊 JSON 序列化捕获受检异常
+- 家庭收益成员贡献榜使用真实家庭成员
+
+### 其他
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - getFamilyId() 通过 userMapper.selectById 查询用户真实 familyId
+- - isFamilyAdmin() 检查 user.isFamilyAdmin 字段
+- - 修复成员贡献榜展示非本家庭用户的问题
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- - 移除 SharePoster 组件及其相关死代码(import/注册/数据字段/方法)
+- - 移除 fenToYuan/cfToYuan 辅助函数,统一替换为 cfVal 直接展示 CF 值
+- - 更新所有金额标签为 CF 单位(累计推荐CF/可支配CF/今日CF 等)
+- - 分配弹窗提示文字同步更新
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- # Conflicts:
+- #	cfc-frontend/pages/promotion/index.vue
+- 
+- - pages.json 移除 pages/profile/team-tree 页面注册
+- - 删除 pages/profile/team-tree.vue(与推广团队功能重复)
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+
+## v1.0.1551 (2026-10-09)
+
+### Bug 修复
+- AIService 舌诊 JSON 序列化捕获受检异常
+
+### 其他
+- mvn clean compile 验证门。最小修复:writeValueAsString 包 try/catch,失败返回 null。
+- 
+
+
+## v1.0.1550 (2026-10-09)
+
+### 新功能
+- 迁移356-362 升级统一指标层(列/键/两新表/维度种子)
+
+
+## v1.0.1549 (2026-10-09)
+
+### 文档
+- 指标变化曲线·指标速查·关联 - backend/miniapp/webadmin 三份实施计划 + PROJECT-OVERVIEW 同步
+
+### 其他
+- - miniapp: TrendChart canvas 组件 + 指标曲线页 + 指标速查页 + 菌群详情变化区块 + pages.json 注册 + utils/api.js 4封装 + 单测
+- - webadmin: src/api/indicator.js 6封装 + IndicatorCorrelations/IndicatorMappings 两页 + indicatorSeeds 解析 + 路由注册 + jest 单测 + build 门禁
+- - PROJECT-OVERVIEW v2.16 同步:3 份计划索引 + 状态行更新
+- 
+
+
+## v1.0.1548 (2026-10-09)
+
+### 文档
+- 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范
+- 修正 indicator_values.source_type 注释与五维/七维不入统一时序的决策一致
+
+
+## v1.0.1547 (2026-10-09)
+
+### 文档
+- 指标变化曲线·指标速查·指标关联设计规范 v1.0
+
+
+## v1.0.1546 (2026-10-08)
+
+### 新功能
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- enhance activity poster with template selection and smaller QR code
+- 六个维度页传入dimension-code按域筛选推荐商品
+- DimensionProducts组件新增dimensionCode按维度取推荐
+
+### 其他
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- 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>
+- 
+- 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>
+- 
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+
+### Bug 修复
+- 购买态订单查询改用paid等真实状态枚举
+- 维度商品推荐修复订单状态匹配与实物库存口径
+- 迁移354补齐product_recommendation_log缺失列并同步schema.sql
+
+
+## v1.0.1545 (2026-10-08)
+
+### 新功能
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+- 舌诊 AI 集成 - aikanshe.com 优先,LangGraph 兜底
+
+### 其他
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 验证: mvn spring-boot:run → POST /api/health/report/parse-preview?type=tongue
+- 
+- 2. application.yml:新增 aikanshe 配置块(6参数)
+- 3. API_REFERENCE.md:新增 4.36.2 节「舌诊 AI 集成」
+- 4. specs/2026-10-08-tongue-diagnosis-aikanshe-integration.md:完整设计规格
+- 无需改动 TongueDiagnosisService/HealthReportController,接口契约兼容。
+- 配置: export AIKANSHE_APPKEY="your_appkey_here"
+- 
+
+
+## v1.0.1544 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+- 每类报告定义采集指标项并接入采集完整性校验
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - 幂等补注册 dan_a1/b2/b3/b4/b5/b6/c1 与 gut_flora_beijing 类型行(parser_path 空,不干扰指纹路由)
+- - ReportCollectService 采集完成后按定义校验(归一化+包含+CJK二元组重叠匹配),结果写入 health_report_drafts.collect_validation(typeId/expected/matched/pass/missing)
+- - schema.sql 同步两处新列
+- 
+
+
+## v1.0.1543 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- 修复B4报告解析——自我概念按「维度 分数」提取6维、自驱力按维度顺序映射我的得分,去除错误兜底
+
+
+## v1.0.1542 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- add fallback from product.domain when candidates empty
+
+
+## v1.0.1541 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+- DAN报告新增按维度重解析接口,修复历史误解析并刷新结果/展示块/汇总
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+
+## v1.0.1540 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+- 我的画像页迁移五维画像并支持全屏编辑,后端新增每日自动更新任务
+- 引入企业级设计系统(Ant Design 5 令牌)并应用 flex 撑满布局
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - OrderManage.vue: 表格改用 .adm-table-wrap 弹性撑满(height=100%),移除 JS 计算的 tableHeight
+- 
+
+
+## v1.0.1539 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- dan报告维度映射支持类型编码(a1/b2/b4等),前端dan_*前缀统一跳转DAN报告页
+
+
+## v1.0.1538 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - getScoreClass/getStatusText/buildFamilyOverview 等状态判定全部改为 >= 0 边界
+- - onLoad 从报告入口进入时默认 sortType='asc',setFilter('unsuitable') 时同步重置 sortType
+- - 分类 tab key 从英文 (vegetable/fruit/meat/seafood/grain/dairy) 改为中文 (蔬菜/水果/肉禽/水产/谷物/蛋奶),并新增 getCategoryKeywords() 关键词映射覆盖 PDF/ LangGraph 两套数据源分类命名
+- - 修复分类点击无效问题,确保前端过滤能匹配 DB 中存储的中文分类
+- closes related category filter bug, aligns with backend semantics
+- 
+
+### Bug 修复
+- ingredient query page - 戒备阈值 <50→<0, 默认正序, 分类点击生效
+
+
+## v1.0.1537 (2026-10-08)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+- - 将 SUM(points) 修正为 SUM(amount),与 points_log 表结构一致
+- - 修复任务完成接口 /api/tasks/{id}/complete 在 calculateLatePenalty 路径抛 BadSqlGrammarException
+- 
+
+### Bug 修复
+- 修复 PointsLogMapper.selectSum SQL 占位符转义及字段名错误
+
+
+## v1.0.1536 (2026-10-07)
+
+### 新功能
+- enhance activity poster with template selection and smaller QR code
+
+### 其他
+- - Add background color selector for gradient template
+- - Reduce QR code size from 150 to 100rpx for activities
+- - Auto-detect background color from activity dimension
+- - Pass template/bgColor as writable props via event updates
+- 
+
+### Bug 修复
+- 注册/绑定推荐人不再发放CF值,新增首次报告上传任务(300 CF)
+
+
+## v1.0.1535 (2026-10-07)
+
+### Bug 修复
+- 健康首页最近记录只显示当前用户自己的报告
+- 商品管理列表撑满视口并消除多级滚动条
+
+### 其他
+- getFamilyReports 返回全家全部报告),改回传入当前视图成员 memberId,
+- 符合"只有两种情况"的语义:
+- - 未切换视图 = 当前登录用户自己的报告(currentChildId/currentMemberId
+-   未写入 storage 时回退 userId,后端 getMemberReports 按成员严格过滤)
+- - 已切换成员 = 被切换成员的报告
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- - 表格改用 height=100% + flex:1,仅保留表格自身滚动条
+- - 移除 JS 计算 tableHeight 及 window.resize 监听
+- 
+
+### 新功能
+- admin supply-manage auto-set activityProviderStatus for activity_provider
+
+
+## v1.0.1534 (2026-10-07)
+
+### 新功能
+- integrate article recommendation into dimension pages
+- include vendorType/activityProviderStatus in login response for frontend permission check
+- allow activity_provider to create activities + scene referral binding
+- 小程序新增任务提醒配置页(渠道/时机/偏移/开关)
+- 任务打卡提醒升级为可配置提醒模块
+- 每日任务打卡超时 webhook 提醒
+- 新增迁移352移除报告上传权益与配额残留并同步 schema.sql
+- 移除报告上传配额,对所有登录用户免费无限
+- implement product recommendation engine with persona + association relations (P3) add recommendation rules DB + service + UI ab-test tracking
+
+### 其他
+- - 知识库:wiki/raw 原始资料、wiki 页面、结构化知识、构建脚本及 memory 等知识资产
+- - 新增 知识库/.gitignore,排除中间产物(_kb_work/.wiki-creator/__pycache__/*.pyc/.obsidian 缓存)
+- 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/reminder-config/index.vue 提醒设置页(渠道多选含未开通态/时机单选/偏移分钟/启用开关)
+- - pages.json 注册 reminder-config 分包
+- - profile 设置 actionSheet 增加"提醒设置"入口
+- 
+- - 新增 TaskReminderConfigService/Controller(/api/task/reminder-config get/save)
+- - 重写 TaskCheckinWebhookReminderTask: 按配置支持的 before_deadline/after_timeout 双窗口, 多渠道分发
+- - 新增 WebhookNotificationChannel(wechat) 接入微信待办 webhook; Email 通道骨架(未启用)
+- - 站内信(in_app)恒兜底并作幂等标记, 兼容旧 type 判重避免重复推送
+- - 无配置用户走默认: wechat+超时60分钟(与线上行为一致)
+- - 新增 7 个单测覆盖窗口/渠道/判重/停用场景
+- 
+- - 新增 TaskCheckinWebhookReminderTask:每分钟扫描家长执行型待打卡任务,提醒时间(deadline)过 1 小时未完成则推送 webhook
+- - 幂等:user_notifications 标记,同任务同日仅推一次;失败下一分钟自动重试
+- 模板任务数据(9 条健康打卡)一次性直接落库,不写入代码。
+- 
+- 表示该order_id在微信订单库中从未创建成功(并非临时查询失败)。
+- 原逻辑将所有errcode!=0一律return null, 导致超时任务永远跳过不关单,
+- 死单永不清理且每单每分钟刷2条WARN(今日已5200+条)。
+- - queryOrder: 单独识别268490002返回status=-1(本地扩展状态) + INFO日志
+- - VirtualPayTimeoutTask三个handler: status=-1归入明确未支付置cancelled分支
+- - 已用真实paid单(ORD1785990942621001DCC2)实测接口正常, 无误杀风险
+- 
+- 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>
+- 
+- 
+- Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
+- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
+- 
+- add: care_family 运营资料 + cfContent 微信贴图话题发布 skill
+
+### Bug 修复
+- 健康首页最近记录默认展示全家报告
+- query_order返回268490002数据不存在视为未支付关单
+- 移除会员对比表与升级弹窗中的报告上传配额文案
+- 微信支付 v3 回调通知加入白名单并修正 notify-url
+- 报告列表默认显示当前登录用户而非全部
+- body-detail navigation to unregistered pages; resolve action-detail merge conflict
+
+### 文档
+- add activity share referral design spec
+
+
 ## v1.0.1533 (2026-10-07)
 
 ### Bug 修复