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 @@
-
+
搜索中…