From 06bd96a473480385764c23e3c00d0f22f24f40d4 Mon Sep 17 00:00:00 2001 From: wm <2747639460@qq.com> Date: Wed, 22 Jul 2026 15:30:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8A=A8=E4=BD=9C?= =?UTF-8?q?=E5=8D=A1=E7=89=87=E7=82=B9=E5=87=BB=E5=8F=8C=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=B7=B3=20404?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 为空时直接显示空态,不再发起错误请求 --- miniprogram/components/exercise-card/index.js | 2 ++ miniprogram/pages/category/category.js | 1 + miniprogram/pages/category/category.wxml | 2 +- miniprogram/pages/collection-detail/collection-detail.js | 1 + miniprogram/pages/collection-detail/collection-detail.wxml | 2 +- miniprogram/pages/detail/detail.js | 6 ++++++ miniprogram/pages/detail/detail.wxml | 2 +- miniprogram/pages/favorites/favorites.js | 1 + miniprogram/pages/favorites/favorites.wxml | 2 +- miniprogram/pages/index/index.js | 1 + miniprogram/pages/index/index.wxml | 2 +- miniprogram/pages/plan-detail/plan-detail.js | 1 + miniprogram/pages/plan-detail/plan-detail.wxml | 2 +- miniprogram/pages/recommend/recommend.js | 1 + miniprogram/pages/recommend/recommend.wxml | 2 +- miniprogram/pages/search/search.js | 3 ++- miniprogram/pages/search/search.wxml | 2 +- 17 files changed, 24 insertions(+), 9 deletions(-) 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 @@ - + 搜索中…