From 94be2739af73d8f9d4828a33aa88e72fc2f15e27 Mon Sep 17 00:00:00 2001 From: gyq <875626088@qq.com> Date: Thu, 22 Jan 2026 13:40:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=85=85=E5=80=BC=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/user/member/czzx.vue | 73 +++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/pages/user/member/czzx.vue b/pages/user/member/czzx.vue index 8314cfd..598a095 100644 --- a/pages/user/member/czzx.vue +++ b/pages/user/member/czzx.vue @@ -199,8 +199,79 @@ function toPwd() { } function back() { - uni.navigateBack(); + safeNavigateBack(); } + +/** + * 修复版:安全的页面返回方法 + * 彻底避免 "cannot navigate back at first page" 报错 + * @param {Number} delta 返回的页面数,默认1 + * @param {Function} fallback 失败时的降级处理函数 + */ +function safeNavigateBack(delta = 1, fallback) { + // 1. 立即获取页面栈,确保拿到最新状态(关键修复点) + const pages = getCurrentPages(); + // 2. 严谨判断:页面栈长度必须大于 delta 才能返回 + const canNavigateBack = pages.length > delta; + + console.log('页面栈信息:', { + pagesLength: pages.length, + delta: delta, + canNavigateBack: canNavigateBack + }); + + // 3. 如果不能返回,直接执行降级逻辑 + if (!canNavigateBack) { + console.warn('当前是首页/页面栈不足,无法返回'); + handleFallback(fallback); + return; // 终止后续执行,彻底避免调用 navigateBack + } + + // 4. 能返回时才执行 navigateBack + try { + uni.navigateBack({ + delta: delta, + success: () => { + console.log('页面返回成功'); + }, + fail: (err) => { + console.error('navigateBack 执行失败:', err); + handleFallback(fallback); + } + }); + } catch (error) { + console.error('页面返回异常:', error); + handleFallback(fallback); + } +} + +/** + * 统一处理降级逻辑 + * @param {Function} fallback 自定义降级函数 + */ +function handleFallback(fallback) { + if (typeof fallback === 'function') { + fallback(); // 执行自定义降级 + } else { + // 默认降级:返回首页(请替换为你的首页路径) + uni.showToast({ + title: '已到首页,无法返回', + icon: 'none', + duration: 1500 + }); + + // 如果需要强制跳首页,解开下面注释(根据你的业务选择) + uni.switchTab({ + url: '/pages/index/index', + fail: () => { + uni.redirectTo({ + url: '/pages/index/index' + }); + } + }); + } +} + const list = ref([]); const sel = ref(0); const money = ref(null);