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