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
54a5ae858d
fix(plan-detail): 增加加载/错误/重试/未找到四态,杜绝静默空白
...
- 此前详情页请求失败时仅 setData(loading:false),plan 仍为 null,
整页只显示一行小字,用户感知为「空白」且无法定位原因。
- 现明确区分 loading / error(带重试按钮) / not-found 三种空态;
request 失败时按 statusCode 给具体提示(401 登录失效 / 404 未找到 / 其他网络错误)。
- onLoad 对 getApp().globalData 取值加防御;缺失 id 直接报错不发起请求。
2026-07-22 23:58:48 +08:00
60ba0625b5
fix(input): 修复计划名称输入框文字被遮挡问题
...
- plan-edit 的 input 增加显式 height/line-height/box-sizing,避免中文被底部截断
- feedback 的联系方式 input 同步增加高度与行高,防止同类裁剪
2026-07-22 23:36:52 +08:00
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
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
4dba91a16e
fix: 首页我的计划点击跳转错页 + feat: 新增留言反馈功能
...
fix:
- 首页'我的计划'卡片误绑 onExercise(跳动作详情),改为 onPlanTap 正确跳训练计划详情页
- 修复后点击计划可正常打开 plan-detail
feat(留言反馈):
- 后端新增 feedback 模块:POST /api/feedback(AuthGuard,content 必填/contact 选填),JsonStore 持久化
- 前端新增 pages/feedback 页面(留言内容 textarea + 联系方式选填 + 提交),profile 菜单新增'意见反馈'入口
- icon-svg 新增 message-circle 图标(反馈页用)
2026-07-22 23:21:18 +08:00
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
47c4801f34
fix: 动作详情GIF动图播放 + 收藏按钮避让胶囊
2026-07-22 16:02:04 +08:00
98126c62ec
feat: 自托管超分媒体 + 详情页优先清晰JPG
...
- 后端 main.ts: 新增 /media 静态服务(指向容器内 /app/media,由卷挂载)
配合 MEDIA_BASE_URL 指向本服务 /media,彻底脱离 jsDelivr 依赖
- 详情页 hero 优先用超分 JPG(720px),GIF/JPG 互为降级兜底
2026-07-22 15:33:29 +08:00
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
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
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