Răsfoiți Sursa

chore: auto bump version and changelog [skip ci]

iwt 1 săptămână în urmă
părinte
comite
70899205df

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-f5b18b1624e55278ba779b248f8d1283f73d8fd4
+460f6946a4297845608f1e50ec511643051c7095

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

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

+ 1 - 1
cfc-web/package.json

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

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

@@ -4,6 +4,80 @@
 
 
 ---
 ---
 
 
+## v1.0.2006 (2026-11-03)
+
+### 文档
+- AI 会员门禁 开发/核验/合入 cfclub 全部 done 回填
+
+### 测试
+- 补全 user-scenarios 各角色叙事场景并对齐测试用例
+
+### 其他
+- - 五维专项 ED-1~17 保持独立于 07-five-dimension.md
+- - 用例编号规范化:TC-S-9→TC-S-09;admin 五维统一 SC-A-25/26
+- - 补写块关联用例按 SC 同号对齐(脚本修正 83 处)
+- 
+- feat(ui): 登录前首页热门商品移除收起切换,查看更多直达浠艾福商城
+- - T-B0 门禁核心:MembershipService 新增 isAiMemberGateEnabled/checkAiFeatureGate/
+-   getMemberGateInfo;新增 AiGateStatus 枚举与 AiGateResult DTO;判定用
+-   effectiveRank+isActive+everPaid 原始维度,区分「过期」与「从未付费」。
+- - T-B1 控制器接线:/chat/send、/nutrition/send、/health-coach/send(等级下限
+-   FAMILY/PREMIUM 收敛为 BASIC+)、/butler/send 前置门禁;新增 POST /api/ai/gate
+-   (含 features 明细);保留 /health-coach/gate 兼容;错误码 46003/46004。
+- - T-B2 ButlerController:/sessions/create 加门禁;list/detail/archive/delete/
+-   update-conversation 保持开放(过期可查看/删除/归档历史会话)。
+- - DatabaseInitializer 同步 ai.coach.member_gate_enabled 种子描述文案(不改键/值)。
+- - 不纳入门禁端点零改动:/report/analyze、情绪识别、舌诊、饮食识别;
+-   AiGateway.chat/consumeMemberQuota 配额链零改动。
+- - 测试:新增 MembershipServiceAiGateTest(12)、ButlerControllerGateTest(9)、
+-   更新 AIChatControllerGateTest(18)与 AIChatControllerTest(mock 门禁放行)。
+- 验证:mvn compile BUILD SUCCESS;上述 4 个测试类 56/56 通过。
+- 
+-   chat 页为自定义导航栏,遮罩会盖住唯一返回入口,不可关闭会把用户困住,
+-   过期会员也就看不到已加载的历史会话(DoD 未达成)
+- - buildLegacyGate: daysRemaining/isActive 置空,避免降级路径给所有有效会员
+-   展示「剩余 0 天」假数据
+- - applyMemberGate: status 缺失(空 data / 5001 兜底)时 fail-closed,
+-   不再默认放行
+- - 状态条日期改用 utils/format.js 的 parseDate() 拼 yyyy-MM-dd(兼容时间戳/
+-   ISO/Java 格式,iOS 安全);剩余天数向上取整
+- - sendMessage catch: 门禁错误回填输入、用新对象同步 memberGate(不直接改写
+-   接口返回体,避免污染 3 秒去重缓存);非门禁错误补 toast 显示后端原话
+- - 补 T-F0 单测 4 条:aiGateStatus 命中 /api/ai/gate、_noToast 不弹 toast 且
+-   reject 带 code、无 _noToast 仍 toast(回归)、aiSendMessage 门禁不叠加 toast
+- 
+- T-F0 utils/api.js
+- - 新增 aiGateStatus() -> POST /api/ai/gate,带 _noToast
+- - request() 支持 options._noToast:非 200/401/5001 时跳过 uni.showToast,
+-   直接 reject(res.data) 保留 code/message 供调用方路由
+- - _noToast 不再被误拼进 query(同时修复 indicator-favorite 静默降级失效)
+- - AI 发送类(chat/nutrition/health-coach/butler)统一 _noToast,避免 toast+弹窗叠加
+- T-F1 pages/ai/chat.vue + UpgradeGuideModal.vue
+- - onLoad 门禁由 getMyMembership 改为 aiGateStatus:
+-   ALLOW 正常加载;UPGRADE_REQUIRED 弹 hard 且不加载会话;
+-   MEMBER_EXPIRED 弹 expired、仍加载历史会话,但禁用输入/新建/发送
+- - 新增 data memberGate / gateStatus / gateBlocked;mascot 加载逻辑抽为 loadMascot() 保持不变
+- - sendMessage 开头拦截非 ALLOW;catch 识别 46003 -> hard、46004 -> expired,
+-   撤掉未落库的乐观消息;其它错误保留兜底文案
+- - 「+ 新会话」与语音输入同样受门禁拦截
+- - onShow 重新查门禁(从续费页返回后可恢复)
+- - aiGateStatus 不可用时回退 getMyMembership 旧口径,避免误伤有效会员
+- - 修复 chat 模式未调用 aiSendMessage 导致默认对话必然失败的历史缺陷
+- - UpgradeGuideModal 新增 type='expired'(会员已过期 / ⏰ / 去续费)
+- T-F2 会员状态条
+- - 导航栏下方:过期显示「会员已于 YYYY-MM-DD 到期」,临期(<=7天)显示剩余天数,
+-   点击跳 /pages/membership/upgrade
+- 不纳入门禁的页面(pages/mind、舌诊、pages/diet、pages/report)调用点零改动。
+- 
+
+### 新功能
+- AI 使用会员门禁后端 T-B0/T-B1/T-B2(任务书 85e93fb56)
+- 小程序 AI 使用会员门禁前端 T-F0/T-F1/T-F2
+
+### Bug 修复
+- 门禁交互审查修复(T-F1/T-F2)
+
+
 ## v1.0.2005 (2026-11-03)
 ## v1.0.2005 (2026-11-03)
 
 
 ### 测试
 ### 测试

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

@@ -1,6 +1,6 @@
 # 更新日志
 # 更新日志
 
 
-> 当前版本: v1.0.2005
+> 当前版本: v1.0.2006
 
 
 ## 历史版本
 ## 历史版本
 
 
@@ -8,6 +8,80 @@
 
 
 ---
 ---
 
 
+## v1.0.2006 (2026-11-03)
+
+### 文档
+- AI 会员门禁 开发/核验/合入 cfclub 全部 done 回填
+
+### 测试
+- 补全 user-scenarios 各角色叙事场景并对齐测试用例
+
+### 其他
+- - 五维专项 ED-1~17 保持独立于 07-five-dimension.md
+- - 用例编号规范化:TC-S-9→TC-S-09;admin 五维统一 SC-A-25/26
+- - 补写块关联用例按 SC 同号对齐(脚本修正 83 处)
+- 
+- feat(ui): 登录前首页热门商品移除收起切换,查看更多直达浠艾福商城
+- - T-B0 门禁核心:MembershipService 新增 isAiMemberGateEnabled/checkAiFeatureGate/
+-   getMemberGateInfo;新增 AiGateStatus 枚举与 AiGateResult DTO;判定用
+-   effectiveRank+isActive+everPaid 原始维度,区分「过期」与「从未付费」。
+- - T-B1 控制器接线:/chat/send、/nutrition/send、/health-coach/send(等级下限
+-   FAMILY/PREMIUM 收敛为 BASIC+)、/butler/send 前置门禁;新增 POST /api/ai/gate
+-   (含 features 明细);保留 /health-coach/gate 兼容;错误码 46003/46004。
+- - T-B2 ButlerController:/sessions/create 加门禁;list/detail/archive/delete/
+-   update-conversation 保持开放(过期可查看/删除/归档历史会话)。
+- - DatabaseInitializer 同步 ai.coach.member_gate_enabled 种子描述文案(不改键/值)。
+- - 不纳入门禁端点零改动:/report/analyze、情绪识别、舌诊、饮食识别;
+-   AiGateway.chat/consumeMemberQuota 配额链零改动。
+- - 测试:新增 MembershipServiceAiGateTest(12)、ButlerControllerGateTest(9)、
+-   更新 AIChatControllerGateTest(18)与 AIChatControllerTest(mock 门禁放行)。
+- 验证:mvn compile BUILD SUCCESS;上述 4 个测试类 56/56 通过。
+- 
+-   chat 页为自定义导航栏,遮罩会盖住唯一返回入口,不可关闭会把用户困住,
+-   过期会员也就看不到已加载的历史会话(DoD 未达成)
+- - buildLegacyGate: daysRemaining/isActive 置空,避免降级路径给所有有效会员
+-   展示「剩余 0 天」假数据
+- - applyMemberGate: status 缺失(空 data / 5001 兜底)时 fail-closed,
+-   不再默认放行
+- - 状态条日期改用 utils/format.js 的 parseDate() 拼 yyyy-MM-dd(兼容时间戳/
+-   ISO/Java 格式,iOS 安全);剩余天数向上取整
+- - sendMessage catch: 门禁错误回填输入、用新对象同步 memberGate(不直接改写
+-   接口返回体,避免污染 3 秒去重缓存);非门禁错误补 toast 显示后端原话
+- - 补 T-F0 单测 4 条:aiGateStatus 命中 /api/ai/gate、_noToast 不弹 toast 且
+-   reject 带 code、无 _noToast 仍 toast(回归)、aiSendMessage 门禁不叠加 toast
+- 
+- T-F0 utils/api.js
+- - 新增 aiGateStatus() -> POST /api/ai/gate,带 _noToast
+- - request() 支持 options._noToast:非 200/401/5001 时跳过 uni.showToast,
+-   直接 reject(res.data) 保留 code/message 供调用方路由
+- - _noToast 不再被误拼进 query(同时修复 indicator-favorite 静默降级失效)
+- - AI 发送类(chat/nutrition/health-coach/butler)统一 _noToast,避免 toast+弹窗叠加
+- T-F1 pages/ai/chat.vue + UpgradeGuideModal.vue
+- - onLoad 门禁由 getMyMembership 改为 aiGateStatus:
+-   ALLOW 正常加载;UPGRADE_REQUIRED 弹 hard 且不加载会话;
+-   MEMBER_EXPIRED 弹 expired、仍加载历史会话,但禁用输入/新建/发送
+- - 新增 data memberGate / gateStatus / gateBlocked;mascot 加载逻辑抽为 loadMascot() 保持不变
+- - sendMessage 开头拦截非 ALLOW;catch 识别 46003 -> hard、46004 -> expired,
+-   撤掉未落库的乐观消息;其它错误保留兜底文案
+- - 「+ 新会话」与语音输入同样受门禁拦截
+- - onShow 重新查门禁(从续费页返回后可恢复)
+- - aiGateStatus 不可用时回退 getMyMembership 旧口径,避免误伤有效会员
+- - 修复 chat 模式未调用 aiSendMessage 导致默认对话必然失败的历史缺陷
+- - UpgradeGuideModal 新增 type='expired'(会员已过期 / ⏰ / 去续费)
+- T-F2 会员状态条
+- - 导航栏下方:过期显示「会员已于 YYYY-MM-DD 到期」,临期(<=7天)显示剩余天数,
+-   点击跳 /pages/membership/upgrade
+- 不纳入门禁的页面(pages/mind、舌诊、pages/diet、pages/report)调用点零改动。
+- 
+
+### 新功能
+- AI 使用会员门禁后端 T-B0/T-B1/T-B2(任务书 85e93fb56)
+- 小程序 AI 使用会员门禁前端 T-F0/T-F1/T-F2
+
+### Bug 修复
+- 门禁交互审查修复(T-F1/T-F2)
+
+
 ## v1.0.2005 (2026-11-03)
 ## v1.0.2005 (2026-11-03)
 
 
 ### 测试
 ### 测试