Commit Graph

52 Commits

Author SHA1 Message Date
msh-agent
4cf763c3a5 chore: update visible branding 2026-05-21 09:26:47 +08:00
msh-agent
bddce0794f fix(user-tag): 用户标签放到手机号右侧(同行展示)
调整布局:标签从单独一行移到 .num(手机号)行内,靠右排开
- flex:1 + min-width:0 占满剩余宽度避免挤压编辑图标
- 仍保持半透明白胶囊样式
- 与会员等级胶囊在同一视觉层级,不破坏顶部信息区结构

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:56:54 +08:00
msh-agent
a9686c7d45 feat(user-tag): 后台用户列表展示标签 + 小程序用户中心会员等级下方展示标签
后台 msh_single_admin user/list/index.vue:
- 在「分组」「推荐人」之间新增「用户标签」列,用 el-tag 渲染(多标签 ',' 切分)
- 加入默认显示项 checkedCities / columnData

后端 UserCenterResponse + UserServiceImpl:
- UserCenterResponse 新增 tagName 字段
- getUserCenter 在已注入的 userTagService 基础上回填标签名(已存在 getGroupNameInId)

小程序 pages/user/index.vue:
- 用户名 + VIP 行下方新增 .user-tags 容器,按 ',' 切分多标签
- 半透明白底胶囊,与顶部渐变橙色背景协调

附带修复:
- pages/tool/calculator-history.vue formatTime 兼容 ISO/数组/数字/旧字符串四种来源
- 解决「NaN-NaN-NaN NaN:NaN」问题(ISO 字符串里的 'T' 被替换 / 后变非法日期)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:53:56 +08:00
msh-agent
560d4de275 fix(ui): 我的页继续瘦身 + 计算结果页客服按钮统一 + 历史页标题运行时回写
my-profile.vue:
- 整段移除「工具与服务」(邀请有礼当前未上线,剩它一项无意义)
- 同步清理 iconGift / goToInvite 残留

calculator-result.vue:
- 「联系专业营养师」按钮 MP-WEIXIN 端改用 <button open-type='contact'>
- 与 welcome-gift / customer-service 统一行为,零 JS API 依赖
- 非小程序端保留原 contactNutritionist 兜底
- contact-btn-mp 重置 button 默认 line-height/border 视觉一致

calculator-history.vue:
- onLoad 中 uni.setNavigationBarTitle 强制回写「我的计算记录」
- 兜底部分开发者工具/旧编译缓存把 UTF-8 标题渲染成乱码的场景

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:44:04 +08:00
msh-agent
1224ed328b feat(my-profile): 隐藏未开发功能项,新增食谱计算历史入口
- 移除统计卡片中的「关注」(功能未实现)
- 移除「我的健康」中的「健康档案」(未实现)
- 整段隐藏「我的内容」(点赞/收藏/食谱均未实现)
- 「工具与服务」仅保留「邀请有礼」(移除营养师/消息通知/营养指导/用药指导)
- 整段隐藏「设置」(账号/隐私/帮助/关于均未实现);版本号下沉到底部独立展示
- 新增「我的健康」分组下的「食谱计算历史」入口 → /pages/tool/calculator-history
- 同步清理未使用的 data 字段、icon 资源与方法

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:37:32 +08:00
msh-agent
4b8b391674 feat(checkin): P2 一键借鉴打卡功能落地(test-0415 反馈5-2)
最小修改方案,零 DB 表结构变动:

前端 checkin-publish.vue:
- onLoad 识别 sourcePostId + sourceType=learn → 调 getCommunityDetail 拉原帖
- 预填 selectedImages / selectedMealType / remark(带「[借鉴自 @xxx]」前缀)
- 顶部新增黄色徽章「借鉴自 @xxx」
- handlePublish 提交时透传 sourcePostId 到后端

后端 ToolCheckinServiceImpl.submit:
- 检测 data.sourcePostId,若 notes 没有「借鉴自」字样则追加 [借鉴自 post#id] 标记
- 不新增 UserSign 列,引用关系记录在 notes,便于后续查询展示

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:34:28 +08:00
msh-agent
df0273de36 feat(checkin): P2-1 打卡任务/福利/邀请最小化方案(test-0415 反馈1-1)
按 PRD 简化版落地,零后端改动:

checkin.vue:
- 任务「内容分享」→ switchTab 到社区 /pages/tool_main/community
- 积分兑换列表 handleExchange → 一律 switchTab 到商城首页 /pages/index/index

welcome-gift.vue:
- 福利大礼包卡片可点击 → 跳商品详情页 /pages/goods/goods_details/index?id=
  · welfareProductId 从 storage 读,运营在 admin 配置后缓存
  · 缺省退化到商城首页
- 去除「步骤1 长按识别二维码」整段及对应 qrCode 资源
- 「立即添加」按钮改用 button open-type='contact' 唤起小程序客服
- H5/APP 兜底走 chatUrl web_page;无配置弹 toast

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:30:04 +08:00
msh-agent
fde0d555fa feat(calculator): 食谱计算器历史记录功能(test-0415 反馈2-2)
后端:
- GET /api/front/tool/calculator/history 倒序分页返回当前用户记录摘要
- ToolCalculatorService.getHistory(PageParamRequest) 实现
- 摘要含 id / createdAt / bmi / ckdStage / proteinIntake / energyIntake / isAdopted / hasDialysis

前端:
- api/tool.js 新增 getCalculatorHistory(params)
- pages/tool/calculator-history.vue 历史列表页(下拉刷新 + 触底加载)
- 点击行跳转 calculator-result?id=xxx 复用结果页,自然支持「重新载入参数」
- pages.json 注册路由

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:24:30 +08:00
msh-agent
31f909247e fix(ai-nutritionist): 图文问答注入营养师 system prompt(test-0415 反馈3-4)
- 旧版多模态消息仅有用户 parts,模型无领域上下文,常回退到通用客套话
- 新增 SYSTEM_NUTRITIONIST:专业中文营养师人设 + 慢病饮食知识 + 非食物兜底
- 仅在含 image_url 时注入,避免影响纯文字流式(3-2)回归
- image 类型用户提示从「请分析这张图片」改为「识别食物,给营养成分与饮食建议」

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:18:27 +08:00
msh-agent
8868d6f948 perf(ai-nutritionist): 文字流式 + TTS 分句首播(test-0415 反馈3-2/3-3)
3-2 文字回复响应速度:
- _sendViaGemini 由 stream:false 改为 kieaiGeminiChatStream(SSE)
- 首包到达即停 loading 圈、aiMsg.streaming=true 显示打字光标
- 逐 delta 累加到 aiMsg.content,TTFB 由全量等待降至首字节

3-3 TTS 朗读延迟:
- splitTTSSentences 按 [。!?!?;;\n] 切分,超长 80 字硬切
- 首句独立合成立即播放;播放期间预合成下一句形成流水线
- innerAudioContext.onEnded 链式触发 _playNextTTSChunk
- stopTTS 清队列,避免后台残留预合成

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:17:00 +08:00
msh-agent
2c91cfe544 fix(order): 提交订单与拉起支付分离,支持取消后二次支付(test-0415 反馈6-3)
- onCreate 旧逻辑:orderCreate 后直接 getOrderPay → requestPayment,强制弹支付
- 现行:orderCreate 成功后 redirectTo /pages/order/order_payment,由用户主动「去支付」
- payment() else 分支同步纠正,避免重复点击「提交订单」时还会绕过支付页直接拉起
- order_payment 自带重试/取消处理,二次支付链路顺畅

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:35:54 +08:00
msh-agent
f36f8ff495 fix(customer-service): 客服 chatUrl 在小程序也存储;空值兜底提示(test-0415 反馈6-2)
- 旧版 SET_CHATURL 套了 #ifdef H5 || APP-PLUS,小程序拿不到 chatUrl
- wxChatService 在 chatUrl 为空时弹 toast 提示「客服暂未配置」,避免跳到空白 web 页
- chatConfig 缓存为 null 时回退默认值,防止模板 v-if 取属性报错

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:34:34 +08:00
msh-agent
33602ea013 fix(cart): 购物车入口由 switchTab 改为 navigate(test-0415 反馈6-1)
- order_addcart 未注册在 tabBar,旧代码 switchTab 静默失败 → 用户点购物车按钮无反应
- goods_details 商品详情页底部购物车 navigator 改 open-type='navigate'
- user/index switchTab/navigateTo 黑名单逻辑反向纠正

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:32:17 +08:00
msh-agent
82735a52b9 fix(ai-nutritionist): 语音录入跳过 OSS 上传,改用一句话识别 base64 直传(test-0415 反馈3-1)
- 旧链路把 mp3 上传到 /api/front/upload/imageOuter,被图片扩展名校验拒绝
- 改为本地读 base64 直接走 /api/front/tencent/asr/sentence-recognition(sourceType=1)
- 适用 ≤60s 短音频场景,命中 ai-nutritionist 限时录音上限 60s 的设计

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:27:27 +08:00
msh-agent
6187a92029 feat(food-encyclopedia): 按分类配置兜底占位图(test-0415 反馈4-2)
- 按 categoryType / category 文案映射到 8 个分类(grain/vegetable/fruit/meat/seafood/dairy/bean/nut)
- 占位图使用对应 emoji + 浅色背景,零新增图片资源
- 远程图加载失败/为空时自动回退到分类占位

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:19:05 +08:00
msh-agent
c089e8c2be fix(food-encyclopedia): 解决列表页首屏闪烁(test-0415 反馈4-3)
- foodList 初始化由 figma mock 数据改为空数组,加 foodLoaded 标记 API 完成态
- 首屏未拿到数据时显示骨架占位,避免短暂展示无效 figma 图片造成闪烁
- 同步收纳已存在的 scroll-view 高度修复(BUG-003)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:11:01 +08:00
msh-agent
77632510cf fix: 修复Tool模块相关问题 - 优化签到、社区、食物和AI服务功能 2026-04-12 09:31:00 +08:00
msh-agent
b164d8ba11 feat(ai-chat): 新增豆包API + AI模型配置项支持动态切换
- 后端新增豆包(火山引擎Ark)API集成:DoubaoController、ToolDoubaoServiceImpl,
  使用OkHttp3 SSE流式对话,兼容OpenAI Chat Completions格式
- 新增DoubaoConfig配置类,读取doubao.api.*配置
- 在eb_system_config表新增ai_chat_model配置项,支持doubao/coze/gemini三种模型切换
- 新增GET /api/front/doubao/ai-model-config接口供前端读取当前模型配置
- 前端ai-nutritionist.vue的sendToAI按系统配置分发到_sendViaDoubao/_sendViaCoze/_sendViaGemini
- 前端models-api.js新增doubaoChatStream/doubaoChat/getAiModelConfig函数
- 附带豆包API测试脚本和数据库初始化SQL

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 18:03:21 +08:00
msh-agent
58ea76498f fix(streaming): 修正流式输出的端点URL和防缓冲header
前端:
- kieaiGeminiChatStream URL 从 /gemini/chat 改为 /gemini/chat/stream
  (后者声明了 produces=text/event-stream,nginx 不会缓冲)
- 请求 header 增加 Accept: text/event-stream

后端:
- KieAIController.geminiChatStream 补充防缓冲 header:
  X-Accel-Buffering: no + Cache-Control: no-cache
  (与 CozeController.chatStream 对齐,防止 nginx 缓冲 SSE)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 15:51:32 +08:00
msh-agent
19b6dc1d2b fix(food-encyclopedia): 修复点击食物卡片 item 为 undefined 的根因
根因:小程序编译时 @click="goToFoodDetail(item)" 通过 dataset 传递
复杂对象,scroll-view 内 DOM 回收或列表异步刷新后 dataset 序列化
丢失,导致 item 变为 undefined。

修复:
1. 模板改为 @click="handleFoodItemClick(index)" 传递基本类型
2. 新增 handleFoodItemClick 方法,从 filteredFoodList 实时取 item
3. foodRowKey 始终拼接 index 避免重复 id 导致 Vue DOM 复用错乱

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 15:46:06 +08:00
msh-agent
5b08211fa2 style(ai-nutritionist): emoji按钮替换为iconfont图标
将消息操作按钮从emoji替换为项目iconfont图标:
- 复制:icon-fuzhi
- 重新生成:icon-shuaxin
- 语音朗读:icon-laba(播放中高亮)
- 删除:icon-shanchu

按钮样式优化:圆角方形背景、统一灰色调、hover反馈

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 15:42:28 +08:00
msh-agent
dce899f655 fix: 测试反馈0403修改 — 百科Bug修复/份数→克数/AI对话增强/流式输出
1. [P0] food-encyclopedia: 修复 goToFoodDetail TypeError 报错
   - 增加 item 空值防御性校验
   - 加固 filteredFoodList 过滤无效项

2. [P1] calculator-result: 食物份数建议改为克数
   - 模板展示从"X份"改为"X克"
   - applyResult 数据适配:优先读 gram 字段,兜底 portion * gramPerServing 换算

3. [P2] ai-nutritionist: 新增消息操作按钮(复制/重新生成/删除)
   - AI消息气泡下方新增 msg-actions 按钮组
   - 复制到剪贴板、删除单条消息、重新生成最后一条AI回复

4. [P2] ai-nutritionist + models-api: 启用流式输出改善响应速度
   - 新增 kieaiGeminiChatStream 函数(SSE + enableChunked)
   - sendToAI 优先走流式,失败自动降级为非流式

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 15:20:10 +08:00
msh-agent
2facd355ab feat(ai-nutritionist): Coze TTS and streaming robustness
- Add Coze TTS endpoint and service; expose binary MP3 from controller.
- Bypass ResponseFilter for /audio/speech so MP3 bodies are not UTF-8 wrapped.
- UniApp: cozeTextToSpeech, TTS UI and play flow; SSE HTTP errors and diagnostics.
- Document TTS in docs/features.md; extend test-0325-1 with curl verification.

Made-with: Cursor
2026-03-31 07:07:21 +08:00
panchengyong
3023115bb0 fix: 移除损坏的 Claude gitlink 并同步业务与文档更新
- 从索引移除误记录的 .claude/worktrees gitlink(旧绝对路径会导致 git 命令失败)
- 新增根目录 .gitignore 忽略 .claude/worktrees 与 .DS_Store
- 后端:Coze/知识库、ResultAdvice、应用配置
- 前端 uniapp:AI 营养、食物百科等页面与 API
- 更新 README、测试文档与 shop-msh.sql

Made-with: Cursor
2026-03-30 12:46:24 +08:00
panchengyong
3329a2b296 fix(ai-nutritionist): unwrap double-layer Coze API responses
CRMEB wraps CozeBaseResponse again, so chat/retrieve/message payloads live at response.data.data. Added unwrapCozeResponse() and applied it to sendToAI, pollChatStatus, and getChatMessages. Updated test log.

Made-with: Cursor
2026-03-25 17:21:12 +08:00
Developer
6ec9487597 feat: 营养素AI生成落库 + AI营养师消息级loading占位(设计文档对齐)
后端:
- ToolKnowledgeService/Impl 新增 generateNutrientContent()
  调用 Coze AI 批量生成6种营养素(蛋白质/钾/磷/钠/钙/水分)
  科普内容并写入 v2_knowledge,已存在的自动跳过
- ToolController 新增 POST /tool/knowledge/generate-nutrients
  端点(管理端一次性调用后自动补充封面图)
- 新增 SQL 备用脚本 migration_2026-03-25_nutrient_knowledge.sql
  含6种营养素完整JSON,直接执行可跳过AI生成

前端(ai-nutritionist.vue,对齐功能开发详细设计文档任务3-2):
- 新增 sleep(ms) 工具方法
- sendToAI 发起前先推入 {loading:true} 占位气泡
- pollChatStatus 轮询间隔由 1000ms 调整为 1500ms
- getChatMessages 回调填充占位气泡(不再 push 新消息)
- 所有错误/超时/失败路径统一更新 aiMsg.loading=false

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 15:32:53 +08:00
Developer
24f75d198c fix: 营养素详情页修复 API 空响应未走本地兜底的问题
- loadNutrientData() 判断由 if(res.data) 改为
  if(res.data && Object.keys(res.data).length > 0 && res.data.name)
- 当后端 v2_knowledge 表无该营养素记录时(返回{})
  自动降级到本地 nutrientMap 展示内置数据
- 不影响正常有数据时的 API 优先逻辑

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 15:14:14 +08:00
Developer
355895dba2 fix: 修复手动测试发现的3项问题
1. food-encyclopedia: 修复 v-for key id:index TypeError
   - :key 改为 :key="index",避免 WeChat 小程序 key 表达式异常
   - filteredFoodList 加本地搜索过滤 + null item 过滤
   - normalizeFoodItem 新增英文→中文分类名映射(grain→谷薯类等)
   - loadFoodList/handleSearch 过滤 null 条目

2. ToolKnowledgeServiceImpl: 修复 TooManyResultsException
   - getNutrientDetail 查询新增 LIMIT 1 + ORDER BY knowledge_id DESC
   - 防止 DB 中同名营养素存在多条导致 selectOne 异常

3. ai-nutritionist: 统一走 Coze API,移除 KieAI Gemini 路径
   - sendToAI 文本/多模态均改为 api.cozeChat + pollChatStatus
   - 支持 type='text'/'multimodal'/图片 三种消息类型构建

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 14:54:31 +08:00
Developer
ba08abd374 fix: 修复6项测试问题并补全配套资源
- 修复油脂类食物推荐量系数 (5.7→2.5) [ToolCalculatorServiceImpl]
- AI营养师接入真实Coze API,替换Mock回复 [ToolAiNutritionistServiceImpl]
- 食物百科详情新增钙/铁/维C/嘌呤/重量基准字段返回 [ToolFoodServiceImpl]
- V2Food模型新增purine、servingSize字段 [V2Food.java]
- 食物百科详情页动态重量标注+新增4项营养展示+替换Figma URL [food-detail.vue]
- 修复营养素列表dataset传参Bug(WeChat camelCase) [nutrition-knowledge.vue]
- 营养素详情页接入后端API+兜底本地数据+替换Figma URL [nutrient-detail.vue]
- 新增数据库迁移脚本及参考初始化数据 [docs/sql/]
- 新增前端占位图标5个 [static/images/]
- 新增开发任务完成报告 [docs/]

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 14:18:00 +08:00
msh-agent
c1857ce852 fix: 修复关注按钮相关问题
- 食谱详情页: 修复 applyDefaultData 中未定义变量 id 的问题
- 帖子详情页: 优化 toggleFollow 方法,提前校验 author.id,兼容多种后端字段
- 为帖子详情页已关注状态添加灰色样式
2026-03-09 18:56:53 +08:00
panchengyong
eaa9c8fe75 change deploy.conf 2026-03-09 16:57:46 +08:00
panchengyong
6529793a93 fix bug 2026-03-09 15:45:36 +08:00
panchengyong
c69ce2891f feat: 帖子详情页 - 当前登录用户不显示关注按钮
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 15:39:09 +08:00
314a29ea70 feat: 打卡详情页一键分享到社区功能
- 新增后端接口 POST /api/front/tool/checkin/{checkinId}/share-to-community
- 实现 shareCheckinToCommunity 方法,复制打卡数据到社区帖子表
- 前端修改 handleCopyCheckin 方法,直接调用后端接口创建帖子
- 支持将打卡图片、描述、营养分析数据复制到社区
- 添加重复分享检查,防止重复创建帖子
- 创建成功后显示提示并可跳转到社区详情页
2026-03-08 00:40:01 +08:00
f692c75f7b feat: 更新前端多个页面和后端服务
- 前端: 更新AI营养师、计算器、打卡、食物详情等页面
- 前端: 更新食物百科、知识详情、营养知识页面
- 前端: 更新社区首页
- 后端: 更新ToolKieAIServiceImpl服务
- API: 更新models-api.js和user.js
2026-03-07 22:26:37 +08:00
1632801880 ui: 将「AI 补充营养」按钮文字改为「分析营养成分」 2026-03-07 16:40:52 +08:00
8f94035703 feat: 使用Coze工作流自动补齐帖子营养数据
- 后端: fillNutrition()改用Coze工作流7613879935811354687分析营养成分
- 后端: 新增parseWorkflowResponse/nestedToFlat解析工作流响应
- 前端: 页面加载时自动检测并补齐不完整的营养统计
- 修复: ToolKnowledgeServiceImpl编译错误(Integer转Long)

工作流输出格式: output.{calories,protein,potassium,phosphorus}.{value,unit}
2026-03-07 12:36:56 +08:00
3dc1a24706 fix: 修复帖子详情营养数据为占位符 '-' 时无法从打卡记录补充的问题
根本原因:
- buildNutritionStatsFromDetailData 返回 [{value: '-'}, ...] 而非 []
- loadPostData 用 length===0 判断,但 4 个 '-' 时 length=4,不会走打卡补数据

修复内容:
- 增加 hasValidNutritionStats() 判断,检测是否有至少一项非占位符
- rawStats 映射后若全为 '-' 则返回 []
- formatPostData 中若 nutritionStats 全为占位符则强制设为 []
- 只有无有效营养数据时才调用 fillNutritionStatsFromCheckin 和 fillNutritionFromServer

由 Cursor CLI 检测并修复
2026-03-05 12:16:45 +08:00
cd7b3f6b40 fix: 修复帖子详情营养统计显示全为 "-" 的问题
问题原因:
1. fillNutritionStatsFromCheckin 即使全为 "-" 也会更新视图
2. buildNutritionStatsFromCheckinDetail 钾、磷被写死为 "-"
3. 字段解析不兼容(下划线命名、嵌套对象)

修复内容:
- 仅当至少一项有效值时才更新 nutritionStats
- 兼容多种字段命名(驼峰/下划线/别名)
- 支持从嵌套对象解析(nutrition/dietaryData/mealData/aiResult)
- 补全钾、磷字段解析
- 计算属性保护:全为 "-" 时视为空数组

由 Cursor CLI 检测并修复
2026-03-05 12:08:59 +08:00
cb05cf1044 fix: 修复帖子详情营养数据为空时无法从打卡记录补充的问题
问题原因:
- nutritionDataJson 为 "{}" 时生成 4 项都是 "-" 的数组
- 因为 length===4 而非 0,未触发从打卡详情补数据逻辑

修复内容:
- 空对象 {} 返回 [],触发后续补数据逻辑
- 全为 "-" 的无效数据也返回 []
- 兼容 check_in_record_id 下划线命名
- 当 checkInRecordId 存在且营养数据为空时,自动从打卡详情补充

由 Cursor CLI 检测并修复
2026-03-05 11:28:38 +08:00
9dcb58f056 fix: 修复社区帖子详情页营养统计数据为空的问题
- 修复数据解包逻辑,正确处理 CommonResult 响应
- 新增对 data.nutrition 对象的支持
- 扩展字段映射,支持下划线命名(energy_kcal, protein_g 等)
- 使用 Vue. 保证营养数据响应式更新
- 改进营养 AI 回填的稳定性

由 Cursor CLI 检测并修复
2026-03-05 11:19:03 +08:00
a02529acba fix: Cursor CLI 优化微信小程序兼容性和健壮性
- 添加 scrollViewHeight 明确 scroll-view 高度,修复部分机型滚动失效
- 跳转营养素详情时使用 encodeURIComponent 编码中文参数
- 修复代码风格(补充分号)

由 Cursor CLI (agent) 自动检测并修复
2026-03-05 11:02:09 +08:00
50d5b7ebf9 fix: 修复 Vue 模板 data-* 属性绑定语法错误
- 将 data-nutrient-index/data-item-id/data-item-kid 的 {{ }} 插值语法
  改为 v-bind (:) 简写语法
- 适配 Vue 2 模板编译规范

Error: Interpolation inside attributes has been removed.
Use v-bind or the colon shorthand instead.
2026-03-05 10:54:10 +08:00
15ad15b501 fix: 修复微信小程序 v-for 事件绑定兼容性问题
- 修复 v-for 循环中 @click 直接传递 item 导致的错误
- 使用 data- 属性传递数据,通过 event.currentTarget.dataset 获取
- 适配微信小程序模板编译限制

Error: v-for 暂不支持循环数据 (env: macOS,mp,1.06.2307250)
2026-03-05 10:47:45 +08:00
d8d2025543 feat: T10 回归测试 Bug 修复与功能完善
修复 BUG-001 至 BUG-009 及 T10-1 至 T10-6 相关问题:
- 打卡积分显示与累加逻辑优化
- 食谱计算器 Tab 选中样式修复
- 食物百科列表图片与简介展示修复
- 食物详情页数据加载修复
- AI营养师差异化回复优化
- 健康知识/营养知识名称统一
- 饮食指南/科普文章详情页内容展示修复
- 帖子营养统计数据展示修复
- 社区帖子类型中文命名统一
- 帖子详情标签中文显示修复
- 食谱营养AI填充功能完善
- 食谱收藏/点赞功能修复

新增:
- ToolNutritionFillService 营养填充服务
- T10 回归测试用例 (Playwright)
- 知识文章数据 SQL 脚本

涉及模块:
- crmeb-common: VO/Request/Response 优化
- crmeb-service: 业务逻辑完善
- crmeb-front: API 接口扩展
- msh_single_uniapp: 前端页面修复
- tests/e2e: 回归测试用例
2026-03-05 09:35:00 +08:00
6f2dc27fbc chore: update pom.xml Lombok config and deploy settings
- Update Maven compiler plugin to support Lombok annotation processing
- Add deploy.conf for automated deployment
- Update backend models and controllers
- Update frontend pages and API
2026-03-04 12:21:29 +08:00
4be53dcd1b feat: 集成 KieAI 服务,移除 models-integration 子项目
- 添加 Gemini 2.5 Flash 对话接口(流式+非流式)
- 添加 NanoBanana 图像生成/编辑接口
- 添加 Sora2 视频生成接口(文生视频、图生视频、去水印)
- 移除 models-integration 子项目(功能已迁移至主后端)
- 新增测试文档和 Playwright E2E 配置
- 更新前端页面和 API 接口
- 更新后端配置和日志处理
2026-03-03 15:33:50 +08:00
1ddb051977 feat(ai-nutritionist): 图片与文字合并为一次 KieAI 多模态请求
- 后端: buildGeminiRequestBody 支持 content[] 中 Map 形式的多模态项
- 前端: sendMessage 将多图+文字合并为一条 content 数组,一次 sendToAI(multimodal)
- 仅发图时补默认文案「请描述或分析这张图片」,统一走 KieAI

Made-with: Cursor
2026-03-03 00:36:28 +08:00
8ba027b194 FIX-001: 移除 AI 营养师页面初始假数据
- 将 messageList 初始值从示例消息改为空数组 []
- 保留 welcomeMessage 和页面其他功能
- 用户首次进入时只显示欢迎语,无假对话记录

Fixes: FIX-001-remove-fake-data
2026-02-28 21:12:03 +08:00
aae96b15be Add automation rules and cron configuration
- Add Rule 1: All coding work must use Cursor CLI with agent login
- Add Rule 2: Automated fix task checking (5min progress check, 30min auto-start)
- Configure cron jobs in ~/.openclaw/cron/jobs.json
- Add check-progress.sh script for manual/automated checks
- Update AGENTS.md with mandatory task execution rules
- Update .fixes/README.md with automation documentation

Rules:
1. Coding tasks -> Cursor CLI (agent --model auto --trust)
2. Every 5min -> Check progress
3. Every 30min -> Auto-start next fix task
2026-02-28 07:05:40 +08:00