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); } }