18 Commits

Author SHA1 Message Date
wm
16621d9c07 feat(category): 主分类(按器械/按部位)改为多选; filter-bar 内联默认展示几个分类其余收进"全部类型"面板 2026-08-02 22:40:09 +08:00
wm
5744a9a166 fix(gif-player): 循环回到首帧重置缓冲区修复冻结 + 模块级双缓存避免重复下载; bump MEDIA_CACHE_BUST 以拉取压缩后动图(1.8G->856M) 2026-08-02 21:44:58 +08:00
wm
2117225cbb fix: 分类页顶部穿透 + 筛选条收起为「几个选中 + 全部类型」
- navbar 背景由半透明渐变(rgba 0.55~0.92)改为实色不透明渐变(#0B0F0E→#0E1412),杜绝 sticky 滚动时内容透视
- filter-bar 内联取消横滑铺全部:收起态只展示最多 3 个选中 chip + 末尾『全部类型』按钮,点击才展开面板陈列全部(选中置顶)
- 单选点已选 chip 打开面板切换;多选点已选 chip 直接移除;超出 3 个显示 +N
2026-07-26 13:10:42 +08:00
wm
b6e2093c82 feat: 分类浏览体验优化
- 后端 CategoryItem 新增 sample 字段,每个器械/部位分类附首条动作代表图(720 JPG 海报),前端网格无需点进详情即可预览
- 首页『按器械浏览』『按部位浏览』网格 tile 改为图文卡片,展示分类代表图
- filter-bar 内联改为一行可横滑的分类 chips + 末尾『全部类型』入口;点开面板展开全部,选中项自动置顶
2026-07-26 12:45:28 +08:00
wm
8d584129ec fix: gif-player 加 cache-bust 击穿微信 GET 缓存
- config.js 新增 MEDIA_CACHE_BUST 常量,换媒体后改此值即可强制客户端重下
- gif-player _load 给 src 追加 cb 参数,避免覆盖 720 动图后仍显示微信缓存的旧 180 图
2026-07-24 16:31:12 +08:00
wm
8cf962f662 fix(plan-card): 根视图补 bindtap="onTap",修复点击计划卡片无法进入详情
- 根因:此前重写 my-plans 时改为由 plan-card 自身的 target/onTap 负责跳转,
  但 plan-card/index.wxml 根视图漏绑 bindtap="onTap",onTap 方法虽写好却从未触发,
  导致『我的训练计划』页点击卡片无任何反应、进不去计划详情。
- 修复:plan-card 根 <view class="pc"> 加 bindtap="onTap" 与 hover-class="pc--hover"。
- 体验:新增 .pc--hover 按压反馈(轻微缩放 + Volt 绿描边 var(--gold-line)),token 均在 app.wxss 已定义。
2026-07-23 07:52:16 +08:00
wm
956ad3c3bc fix(my-plans): 修复计划列表页因 plan-card 漏声明 fc-icon 导致编译失败进不去
- 根因:c4639d0 给 plan-card 换上 <fc-icon> 但 plan-card.json 的 usingComponents 留空,
  微信要求组件自行声明所引用的自定义组件,导致任何使用 plan-card 的页面编译报错、无法进入。
- 修复:plan-card/index.json 补上 fc-icon 声明(与 exercise-card/avatar/bottom-nav 一致)。
- 整体优化 my-plans:
  * 新增 status 四态(loading/list/empty/error),请求失败显示具体错误 + 『重新加载』按钮,杜绝静默进不去
  * 加载态用 refresh-cw 旋转图标替代纯文字
  * 遗留金色主按钮(新建计划/空态按钮/官方计划链接)统一到 Kinetic Dark 的 Volt 绿强调色,去除旧主题不一致
2026-07-23 00:20:01 +08:00
wm
c4639d0703 fix(plan-card): 计划卡片图标改用 fc-icon 渲染
- plan-card 仍用 {{plan.emoji}} 文本渲染,导致创建计划后显示 person-standing 等字面量
- 改为 require iconName 计算 icon,wxml 使用 <fc-icon> 渲染
- 同步清理 badge/emoji 的字体样式
2026-07-22 23:39:49 +08:00
wm
d74aae02b0 fix: 分类筛选切换无效 —— chip 自定义事件名 tap 与微信原生触摸事件冲突,改 select
- chip 组件 triggerEvent 原为 'tap'(微信原生触摸事件名),嵌在 scroll-view scroll-x 内时手势可能被当滚动消费,导致 onValue 收不到 e.detail.value -> 不筛选 -> 仍显示全部动作
- 改为非原生事件名 'select',category.wxml 绑定同步改 bind:select
- 选中态配色从旧金色(gold-soft/gold-2/gold-line)换成 Volt 绿(accent-soft/accent/accent-ring)+加粗,当前分类一眼可见
- 前端筛选逻辑与后端筛选均经沙箱+真机 API 验证正确(bodyPart=chest/back 返回不同数据)
2026-07-22 23:34:04 +08:00
wm
a0894837bd ux: 动作收藏按钮从顶部浮窗移到底部,与加入计划并排 + 图标美化
- detail 顶部 favbtn 浮窗(需避让胶囊、丑)移除,改为底部 addbar 内与 CTA 并排的方形按钮
- fc-icon 新增 filled 属性:收藏态实心心形(Lucide 描边图标默认 fill=none,filled=true 时 fill=stroke 变实心)
- 收藏按钮美化:圆角 24rpx 方形 + 发丝边框,未收藏描边(text-2)、已收藏实心(accent)+ accent-soft 底色 + accent-ring 边框 + 点按 scale 反馈
- detail.js 清理 favRight/favTop 胶囊避让逻辑(不再需要)
2026-07-22 23:25:17 +08:00
wm
c98758e61b fix: fc-icon 改用 SVG 矢量图 + image 渲染,彻底解决微信 text 自定义字体不显示导致图标变字符
- 微信小程序 <text> 对 @font-face 自定义字体支持不可靠(开发者工具/真机均可能不渲染),图标回退成字符
- 改用 <image> 渲染 Lucide SVG 矢量图(data:image/svg+xml),彻底绕开字体加载限制,矢量/可上色
- 新增 utils/icon-svg.js(49 图标内层 SVG,stroke/fill 用 __C__ 占位),fc-icon 按 color 动态拼色
- 内置设计 token→色值映射,调用方传 var(--xxx) 自动解析为具体色值
- 移除 app.wxss 中已无用的 @font-face(字体方案废弃)
2026-07-22 23:09:56 +08:00
wm
b94eb706ff feat: Kinetic Dark 设计语言 + Lucide 图标迁移 + 首页轻量个性化
- 建立 Lucide 子集 iconfont(49 字形),全站 emoji 替换为 fc-icon 组件
- 重塑 Design Token(冷中性近黑底 + Volt 荧光绿 #B6F24E),消除硬编码颜色
- 首页登录后个性化:我的计划 / 我的收藏 / 今日推荐(纯前端复用现有 API)
- 后端 DEFAULT_EMOJI→Lucide 名,PALETTE 对齐 Kinetic Dark 语义色板
- 修复 person-standing 缺失字形;14 个官方组合 seed emoji 全部映射到现有字形
2026-07-22 21:38:56 +08:00
wm
ca0af6f7d2 fix: gif-player 修复_abort误杀异步回调导致彻底不播放 + 加载中提示 2026-07-22 17:01:53 +08:00
wm
f0f5c915d4 fix: gif-player 真实播放(observer+画布重试) + 帧延迟单位修正(1/100s→ms) 2026-07-22 16:38:07 +08:00
wm
47c4801f34 fix: 动作详情GIF动图播放 + 收藏按钮避让胶囊 2026-07-22 16:02:04 +08:00
wm
06bd96a473 fix: 修复动作卡片点击双触发导致跳 404
- 8 个页面 exercise-card 由 bind:tap 改为 catch:tap,拦截原生 tap 冒泡
  避免一次点击被『自定义事件 + 原生冒泡』触发两次,
  第二次 e.detail 无 id → navigateTo detail?id=undefined → 404
- 所有 onExercise 顶部加 id 守卫,无 id 直接 return
- exercise-card 点击前校验 exercise.id,缺失不触发
- detail onLoad 的 id 为空时直接显示空态,不再发起错误请求
2026-07-22 15:30:28 +08:00
wm
70ff806042 feat: 小程序连接服务器IP + 同步未提交开发
- miniprogram/config.js: BASE_URL 指向 http://192.227.237.8:3001
- 动作标题中文化(nameZh),搜索匹配 name/nameZh/nameEn
- 新增计划/收藏/我的 等页面与组件
- 后端 Docker 化(Dockerfile/.dockerignore)与翻译脚本
- .gitignore 补充 .DS_Store
2026-07-22 14:05:30 +08:00
wm
b3b58e66fb feat: init fitness-coach (backend + miniprogram)
- backend: NestJS service with exercise/plan data
- miniprogram: WeChat mini program client
- exclude node_modules, dist, runtime data-store, local env
2026-07-22 00:35:40 +08:00