diff --git a/miniprogram/components/exercise-card/index.js b/miniprogram/components/exercise-card/index.js index 472dcb2..9fe33d0 100644 --- a/miniprogram/components/exercise-card/index.js +++ b/miniprogram/components/exercise-card/index.js @@ -21,6 +21,8 @@ Component({ }, onTap() { const ex = this.data.exercise || {}; + // 防御:id 缺失时绝不跳转(避免 navigate 到 /api/exercises/undefined 触发 404) + if (!ex || !ex.id) return; this.triggerEvent('tap', { id: ex.id, exercise: ex }); } } diff --git a/miniprogram/pages/category/category.js b/miniprogram/pages/category/category.js index aee0e3e..0a046d8 100644 --- a/miniprogram/pages/category/category.js +++ b/miniprogram/pages/category/category.js @@ -84,6 +84,7 @@ Page({ }, onExercise(e) { + if (!e || !e.detail || !e.detail.id) return; wx.navigateTo({ url: '/pages/detail/detail?id=' + encodeURIComponent(e.detail.id) }); } }); diff --git a/miniprogram/pages/category/category.wxml b/miniprogram/pages/category/category.wxml index bb7fae2..c752f85 100644 --- a/miniprogram/pages/category/category.wxml +++ b/miniprogram/pages/category/category.wxml @@ -17,7 +17,7 @@ - + 暂无数据 diff --git a/miniprogram/pages/collection-detail/collection-detail.js b/miniprogram/pages/collection-detail/collection-detail.js index 6df5867..3f7f035 100644 --- a/miniprogram/pages/collection-detail/collection-detail.js +++ b/miniprogram/pages/collection-detail/collection-detail.js @@ -69,6 +69,7 @@ Page({ }, onExercise(e) { + if (!e || !e.detail || !e.detail.id) return; wx.navigateTo({ url: '/pages/detail/detail?from=collection&slug=' + encodeURIComponent(this.data.slug) + '&id=' + encodeURIComponent(e.detail.id) diff --git a/miniprogram/pages/collection-detail/collection-detail.wxml b/miniprogram/pages/collection-detail/collection-detail.wxml index 583c246..9b1c8dd 100644 --- a/miniprogram/pages/collection-detail/collection-detail.wxml +++ b/miniprogram/pages/collection-detail/collection-detail.wxml @@ -22,7 +22,7 @@ - + 该计划暂无动作 diff --git a/miniprogram/pages/detail/detail.js b/miniprogram/pages/detail/detail.js index 07010fb..99c650f 100644 --- a/miniprogram/pages/detail/detail.js +++ b/miniprogram/pages/detail/detail.js @@ -21,6 +21,11 @@ Page({ const id = query.id || ''; const planId = query.planId || ''; this.setData({ statusBarHeight: app.globalData.statusBarHeight || 20, id, planId }); + // 防御:id 缺失直接显示空态,避免请求 /api/exercises/ 导致错乱或 404 + if (!id) { + this.setData({ loading: false }); + return; + } this.load(); if (auth.isLogin()) { favSvc.exerciseStatus(id).then((r) => { @@ -117,6 +122,7 @@ Page({ }, onExercise(e) { + if (!e || !e.detail || !e.detail.id) return; wx.navigateTo({ url: '/pages/detail/detail?id=' + encodeURIComponent(e.detail.id) }); }, diff --git a/miniprogram/pages/detail/detail.wxml b/miniprogram/pages/detail/detail.wxml index 5bb3219..3983032 100644 --- a/miniprogram/pages/detail/detail.wxml +++ b/miniprogram/pages/detail/detail.wxml @@ -60,7 +60,7 @@ 相关推荐 - + diff --git a/miniprogram/pages/favorites/favorites.js b/miniprogram/pages/favorites/favorites.js index 7f69ddd..b4d00dc 100644 --- a/miniprogram/pages/favorites/favorites.js +++ b/miniprogram/pages/favorites/favorites.js @@ -45,6 +45,7 @@ Page({ }, onExercise(e) { + if (!e || !e.detail || !e.detail.id) return; if (this.data.managing) return; wx.navigateTo({ url: '/pages/detail/detail?id=' + encodeURIComponent(e.detail.id) }); }, diff --git a/miniprogram/pages/favorites/favorites.wxml b/miniprogram/pages/favorites/favorites.wxml index 4f43ecd..1d44673 100644 --- a/miniprogram/pages/favorites/favorites.wxml +++ b/miniprogram/pages/favorites/favorites.wxml @@ -10,7 +10,7 @@ - + 移除 diff --git a/miniprogram/pages/index/index.js b/miniprogram/pages/index/index.js index f1b122d..0a226d9 100644 --- a/miniprogram/pages/index/index.js +++ b/miniprogram/pages/index/index.js @@ -81,6 +81,7 @@ Page({ }, onExercise(e) { + if (!e || !e.detail || !e.detail.id) return; wx.navigateTo({ url: '/pages/detail/detail?id=' + encodeURIComponent(e.detail.id) }); diff --git a/miniprogram/pages/index/index.wxml b/miniprogram/pages/index/index.wxml index ffb40c8..b4669a1 100644 --- a/miniprogram/pages/index/index.wxml +++ b/miniprogram/pages/index/index.wxml @@ -37,7 +37,7 @@ - + 暂无数据 diff --git a/miniprogram/pages/plan-detail/plan-detail.js b/miniprogram/pages/plan-detail/plan-detail.js index 99be52e..982f4dc 100644 --- a/miniprogram/pages/plan-detail/plan-detail.js +++ b/miniprogram/pages/plan-detail/plan-detail.js @@ -42,6 +42,7 @@ Page({ }, onExercise(e) { + if (!e || !e.detail || !e.detail.id) return; wx.navigateTo({ url: '/pages/detail/detail?planId=' + encodeURIComponent(this.data.id) + '&id=' + encodeURIComponent(e.detail.id) diff --git a/miniprogram/pages/plan-detail/plan-detail.wxml b/miniprogram/pages/plan-detail/plan-detail.wxml index b4fbbc2..f70c746 100644 --- a/miniprogram/pages/plan-detail/plan-detail.wxml +++ b/miniprogram/pages/plan-detail/plan-detail.wxml @@ -14,7 +14,7 @@ - + 移除 diff --git a/miniprogram/pages/recommend/recommend.js b/miniprogram/pages/recommend/recommend.js index a517338..8bec1cb 100644 --- a/miniprogram/pages/recommend/recommend.js +++ b/miniprogram/pages/recommend/recommend.js @@ -86,6 +86,7 @@ Page({ }, onExercise(e) { + if (!e || !e.detail || !e.detail.id) return; wx.navigateTo({ url: '/pages/detail/detail?id=' + encodeURIComponent(e.detail.id) }); } }); diff --git a/miniprogram/pages/recommend/recommend.wxml b/miniprogram/pages/recommend/recommend.wxml index 7eb67da..3c03109 100644 --- a/miniprogram/pages/recommend/recommend.wxml +++ b/miniprogram/pages/recommend/recommend.wxml @@ -71,7 +71,7 @@ exercise="{{item}}" score="{{item.score}}" reason="{{item.reason}}" - bind:tap="onExercise" /> + catch:tap="onExercise" /> {{ loading ? '匹配中…' : '暂无匹配结果' }} diff --git a/miniprogram/pages/search/search.js b/miniprogram/pages/search/search.js index 855b1ce..946bc33 100644 --- a/miniprogram/pages/search/search.js +++ b/miniprogram/pages/search/search.js @@ -57,7 +57,8 @@ Page({ }, onExercise(e) { - const id = e.detail.id; + const id = e.detail && e.detail.id; + if (!id) return; if (this.data.selectMode && this.data.planId) { planSvc.addExercise(this.data.planId, id).then(() => { wx.showToast({ title: '已添加', icon: 'success' }); diff --git a/miniprogram/pages/search/search.wxml b/miniprogram/pages/search/search.wxml index b8b100a..6e8f85a 100644 --- a/miniprogram/pages/search/search.wxml +++ b/miniprogram/pages/search/search.wxml @@ -17,7 +17,7 @@ - + 搜索中…