From 956ad3c3bc60112903093cb74a0e9e0ee12327a3 Mon Sep 17 00:00:00 2001 From: wm <2747639460@qq.com> Date: Thu, 23 Jul 2026 00:20:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(my-plans):=20=E4=BF=AE=E5=A4=8D=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=88=97=E8=A1=A8=E9=A1=B5=E5=9B=A0=20plan-card=20?= =?UTF-8?q?=E6=BC=8F=E5=A3=B0=E6=98=8E=20fc-icon=20=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E5=A4=B1=E8=B4=A5=E8=BF=9B=E4=B8=8D=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 根因:c4639d0 给 plan-card 换上 但 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 绿强调色,去除旧主题不一致 --- miniprogram/components/plan-card/index.json | 4 +++- miniprogram/pages/my-plans/my-plans.js | 19 ++++++++++++++----- miniprogram/pages/my-plans/my-plans.wxml | 16 +++++++++++++--- miniprogram/pages/my-plans/my-plans.wxss | 16 ++++++++++++---- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/miniprogram/components/plan-card/index.json b/miniprogram/components/plan-card/index.json index a89ef4d..a18bb03 100644 --- a/miniprogram/components/plan-card/index.json +++ b/miniprogram/components/plan-card/index.json @@ -1,4 +1,6 @@ { "component": true, - "usingComponents": {} + "usingComponents": { + "fc-icon": "/components/fc-icon/index" + } } diff --git a/miniprogram/pages/my-plans/my-plans.js b/miniprogram/pages/my-plans/my-plans.js index 0a0b547..82d3c6d 100644 --- a/miniprogram/pages/my-plans/my-plans.js +++ b/miniprogram/pages/my-plans/my-plans.js @@ -6,7 +6,8 @@ Page({ data: { statusBarHeight: 20, plans: [], - loading: true + status: 'loading', // 'loading' | 'list' | 'empty' | 'error' + errorMsg: '' }, onLoad() { @@ -22,11 +23,19 @@ Page({ }, load() { - this.setData({ loading: true }); + this.setData({ status: 'loading', errorMsg: '' }); planSvc.listMine().then((plans) => { - this.setData({ plans: plans || [], loading: false }); - }).catch(() => { - this.setData({ plans: [], loading: false }); + const list = plans || []; + this.setData({ + plans: list, + status: list.length ? 'list' : 'empty' + }); + }).catch((err) => { + this.setData({ + plans: [], + status: 'error', + errorMsg: (err && err.message) ? err.message : '加载失败,请稍后重试' + }); }); }, diff --git a/miniprogram/pages/my-plans/my-plans.wxml b/miniprogram/pages/my-plans/my-plans.wxml index 683c787..8dbec22 100644 --- a/miniprogram/pages/my-plans/my-plans.wxml +++ b/miniprogram/pages/my-plans/my-plans.wxml @@ -6,7 +6,7 @@ - + - + + + {{errorMsg}} + 重新加载 + + + 还没有计划,创建一个开始训练吧 + 新建计划 或浏览官方训练计划 › - 加载中… + + + + 加载中… + diff --git a/miniprogram/pages/my-plans/my-plans.wxss b/miniprogram/pages/my-plans/my-plans.wxss index a69f47a..95aad0c 100644 --- a/miniprogram/pages/my-plans/my-plans.wxss +++ b/miniprogram/pages/my-plans/my-plans.wxss @@ -2,13 +2,16 @@ .newbar { padding: 16rpx 32rpx; } .newbar__btn { display: flex; align-items: center; justify-content: center; - background: linear-gradient(135deg, var(--gold) 0%, var(--gold-2) 100%); + background: var(--accent); color: var(--accent-on); font-weight: 700; font-size: 32rpx; border-radius: 999rpx; padding: 26rpx; + transition: background 0.15s var(--ease, ease); } +.newbar__btn:active { background: var(--accent-hover); } .grid { display: flex; flex-wrap: wrap; gap: 18rpx; } .grid__item { width: calc((100% - 18rpx) / 2); } -.empty { color: var(--text-3); font-size: 26rpx; text-align: center; padding: 120rpx 0; } +.empty { color: var(--text-3); font-size: 26rpx; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 120rpx 0; } +.empty__t { margin-top: 24rpx; } .empty-box { display: flex; flex-direction: column; align-items: center; padding: 120rpx 40rpx; } .empty-box__emoji { @@ -19,7 +22,12 @@ .empty-box__t { font-size: 30rpx; color: var(--text-2); margin-top: 36rpx; text-align: center; } .empty-box__btn { margin-top: 44rpx; padding: 24rpx 88rpx; border-radius: 999rpx; - background: linear-gradient(135deg, var(--gold) 0%, var(--gold-2) 100%); + background: var(--accent); color: var(--accent-on); font-weight: 700; font-size: 30rpx; + transition: background 0.15s var(--ease, ease); } -.empty-box__link { margin-top: 28rpx; font-size: 26rpx; color: var(--gold); } +.empty-box__btn:active { background: var(--accent-hover); } +.empty-box__link { margin-top: 28rpx; font-size: 26rpx; color: var(--accent); } + +.spin { animation: mp-spin 0.9s linear infinite; } +@keyframes mp-spin { from { transform: rotate(0); } to { transform: rotate(360deg); } }