From 175974b4384227b537b5cddc056b77662664c4b8 Mon Sep 17 00:00:00 2001 From: wx-jincw Date: Sun, 24 May 2026 12:54:27 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E7=99=BB=E5=BD=95=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/libs/login.js | 41 ++++++++++++++++++++++++++ app/pages/users/login/index.vue | 7 +++-- app/pages/users/wechat_login/index.vue | 16 +++++----- 3 files changed, 52 insertions(+), 12 deletions(-) diff --git a/app/libs/login.js b/app/libs/login.js index 2a56654..3442785 100644 --- a/app/libs/login.js +++ b/app/libs/login.js @@ -8,6 +8,47 @@ import auth from './wechat'; import { LOGIN_STATUS, USER_INFO, EXPIRES_TIME, STATE_R_KEY, BACK_URL} from './../config/cache'; +const LOGIN_PAGE_ROUTE = 'pages/users/login/index'; +const WECHAT_LOGIN_PAGE_ROUTE = 'pages/users/wechat_login/index'; + +function normalizeRoute(route) { + return (route || '').replace(/^\//, ''); +} + +function getPrevPageRoute() { + const pages = getCurrentPages(); + if (pages.length < 2) { + return ''; + } + return normalizeRoute(pages[pages.length - 2].route); +} + +/** + * 登录页 ⇄ 微信登录页切换:上一页已是目标页则返回,避免反复 navigateTo 堆栈 + */ +export function switchLoginPage(url) { + const targetRoute = normalizeRoute((url || '').split('?')[0].replace(/^\//, '')); + const prevRoute = getPrevPageRoute(); + if (prevRoute && prevRoute === targetRoute && url.indexOf('?') === -1) { + uni.navigateBack(); + return; + } + uni.navigateTo({ url }); +} + +/** + * 微信授权后进入账号绑定页(replace 当前页,避免栈里叠多层登录相关页面) + */ +export function openLoginBindPage(authKey) { + const url = `/pages/users/login/index?bindWechat=1&authKey=${encodeURIComponent(authKey)}`; + const prevRoute = getPrevPageRoute(); + if (prevRoute === LOGIN_PAGE_ROUTE) { + uni.redirectTo({ url }); + return; + } + uni.redirectTo({ url }); +} + function prePage(){ let pages = getCurrentPages(); let prePage = pages[pages.length - 1]; diff --git a/app/pages/users/login/index.vue b/app/pages/users/login/index.vue index 5889207..72d45e9 100644 --- a/app/pages/users/login/index.vue +++ b/app/pages/users/login/index.vue @@ -88,6 +88,9 @@ import { VUE_APP_API_URL } from "@/utils"; + import { + switchLoginPage + } from '@/libs/login'; // #ifdef MP-WEIXIN import { wxGZHAuth @@ -520,9 +523,7 @@ }); }, goWechatLogin() { - uni.navigateTo({ - url: "/pages/users/wechat_login/index" - }); + switchLoginPage('/pages/users/wechat_login/index'); }, getUserInfo(data){ this.$store.commit("SETUID", data.uid); diff --git a/app/pages/users/wechat_login/index.vue b/app/pages/users/wechat_login/index.vue index 0e35e5b..7701a34 100644 --- a/app/pages/users/wechat_login/index.vue +++ b/app/pages/users/wechat_login/index.vue @@ -63,6 +63,10 @@ } from '@/api/user.js' import Routine from '@/libs/routine'; import wechat from "@/libs/wechat"; + import { + switchLoginPage, + openLoginBindPage + } from '@/libs/login'; export default { data() { return { @@ -182,24 +186,18 @@ title: '请先点击上方「微信登录」完成授权' }); } - uni.navigateTo({ - url: '/pages/users/login/index?bindWechat=1&authKey=' + encodeURIComponent(this.pendingBindAuthKey) - }); + openLoginBindPage(this.pendingBindAuthKey); }, /** * 新微信用户且关闭强制手机号:跳转绑定页 */ goWechatBindLogin(authKey) { this.pendingBindAuthKey = authKey; - uni.navigateTo({ - url: '/pages/users/login/index?bindWechat=1&authKey=' + encodeURIComponent(authKey) - }); + openLoginBindPage(authKey); }, // #endif goAccountLogin() { - uni.navigateTo({ - url: '/pages/users/login/index' - }); + switchLoginPage('/pages/users/login/index'); }, back() { uni.navigateBack();