From b2275c26365ad542c469226cb2bb1b438f10cfef Mon Sep 17 00:00:00 2001 From: RuicyWu <1063154311@qq.com> Date: Wed, 3 Jun 2026 16:02:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E4=BF=AE=E5=A4=8D=E7=99=BD?= =?UTF-8?q?=E5=B1=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/http.interceptor.js | 42 ++++++++++++++++------ pages-assets/discharge/leaseCancel.vue | 11 ++++-- pages-assets/discharge/leaseCancelList.vue | 15 +++++--- pages-assets/fallback/fallback.vue | 15 +++++--- pages-assets/fallback/fallbackDetail.vue | 2 +- pages-biz/bill/bill.vue | 2 +- pages-biz/bill/billDetail.vue | 2 +- pages-biz/bill/payHistory.vue | 13 ++++--- pages-biz/contract/contract.vue | 15 +++++--- pages-biz/contract/contractDetail.vue | 10 ++++-- pages-biz/message/message.vue | 13 ++++--- pages-biz/message/messageDetail.vue | 2 +- pages-biz/myrent/myLease.vue | 13 ++++--- pages-biz/reserve/reserveRecords.vue | 11 ++++-- pages-biz/unpaid/unpaid.vue | 13 ++++--- pages-biz/unpaid/unpaidMargin.vue | 13 ++++--- pages-biz/wae/wae.vue | 13 ++++--- pages-biz/wae/waeRecords.vue | 2 +- pages/center/center.vue | 22 +++++++----- 19 files changed, 158 insertions(+), 71 deletions(-) diff --git a/common/http.interceptor.js b/common/http.interceptor.js index a3fbd4c..a0f74f3 100644 --- a/common/http.interceptor.js +++ b/common/http.interceptor.js @@ -23,26 +23,48 @@ const install = (Vue, vm) => { return config; }; // 响应拦截,判断状态码是否通过 + // 防止多次跳转登录页 + let isRedirectingToLogin = false; + Vue.prototype.$u.http.interceptor.response = (res) => { // 如果把originalData设置为了true,这里得到将会是服务器返回的所有的原始数据 // 判断可能变成了res.statueCode,或者res.data.code之类的,请打印查看结果 if(res.statusCode == 200) { - return res.data; + return res.data; } else if(res.statusCode == 301) { vm.$u.toast('警告:' + res.msg); return false; } else if(res.statusCode == 401 || res.statusCode == 403) { - const currentPage = vm.$route.path; + // 防止多次跳转 + if (isRedirectingToLogin) { + return false; + } + // 判断当前页面是否为登录页 - // 登录成功修改token与用户信息 - vm.$u.vuex('vuex_token', ''); - vm.$u.vuex('vuex_user', {}); - uni.removeStorageSync('userInfo'); - if (currentPage !== '/pages-biz/login/login') { - uni.navigateTo({ - url: '/pages-biz/login/login' - }); + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + const currentPath = currentPage ? currentPage.route : ''; + + if (currentPath !== 'pages-biz/login/login') { + isRedirectingToLogin = true; + + // 清除 token 和用户信息 + vm.$u.vuex('vuex_token', ''); + vm.$u.vuex('vuex_user', {}); + uni.removeStorageSync('userInfo'); + vm.$u.toast('认证失败,请重新登录'); + + // 使用 reLaunch 清空页面栈,避免返回时出现问题 + uni.reLaunch({ + url: '/pages-biz/login/login', + complete: () => { + // 跳转完成后重置标记 + setTimeout(() => { + isRedirectingToLogin = false; + }, 1000) + } + }); } return false; } else if(res.statusCode == 500) { diff --git a/pages-assets/discharge/leaseCancel.vue b/pages-assets/discharge/leaseCancel.vue index 6d70898..590659f 100644 --- a/pages-assets/discharge/leaseCancel.vue +++ b/pages-assets/discharge/leaseCancel.vue @@ -82,10 +82,15 @@ }; }, onLoad() { - this.fetchContractList(); + // fetchContractList 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()); + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.fetchContractList() + } catch (e) { + return + } }, computed: { filteredAssets() { diff --git a/pages-assets/discharge/leaseCancelList.vue b/pages-assets/discharge/leaseCancelList.vue index 63fac3b..085e6f5 100644 --- a/pages-assets/discharge/leaseCancelList.vue +++ b/pages-assets/discharge/leaseCancelList.vue @@ -175,12 +175,17 @@ }) } }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() - }, onLoad() { - this.fetchApplys() + // fetchApplys 移到 onShow 中,等 token 校验通过后再加载 + }, + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.fetchApplys() + } catch (e) { + return + } } }; diff --git a/pages-assets/fallback/fallback.vue b/pages-assets/fallback/fallback.vue index 0e33087..965c049 100644 --- a/pages-assets/fallback/fallback.vue +++ b/pages-assets/fallback/fallback.vue @@ -78,12 +78,17 @@ this.scrollTop = e.scrollTop; this.updateNavbarStyle(e.scrollTop); }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() - }, onLoad() { - this.fetchFallback(); + // fetchFallback 移到 onShow 中,等 token 校验通过后再加载 + }, + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.fetchFallback() + } catch (e) { + return + } }, methods: { checkOaAuth() { diff --git a/pages-assets/fallback/fallbackDetail.vue b/pages-assets/fallback/fallbackDetail.vue index 4bc3ee2..6c61fe5 100644 --- a/pages-assets/fallback/fallbackDetail.vue +++ b/pages-assets/fallback/fallbackDetail.vue @@ -54,7 +54,7 @@ this.updateNavbarStyle(e.scrollTop); }, onShow(){ - this.$checkToken(this.$getToken()) + this.$checkToken(this.$getToken()).catch(() => {}) }, onLoad(options) { // 从路由参数中获取留言ID diff --git a/pages-biz/bill/bill.vue b/pages-biz/bill/bill.vue index 5ba7bb0..f5cdfb8 100644 --- a/pages-biz/bill/bill.vue +++ b/pages-biz/bill/bill.vue @@ -92,7 +92,7 @@ this.loadBills(); }, onShow(){ - this.$checkToken(this.$getToken()) + this.$checkToken(this.$getToken()).catch(() => {}) }, methods: { // 切换年份选择器显示 diff --git a/pages-biz/bill/billDetail.vue b/pages-biz/bill/billDetail.vue index d09c75a..1ea12d8 100644 --- a/pages-biz/bill/billDetail.vue +++ b/pages-biz/bill/billDetail.vue @@ -55,7 +55,7 @@ export default { this.loadBillDetail(id); }, onShow() { - this.$checkToken(this.$getToken()) + this.$checkToken(this.$getToken()).catch(() => {}) }, methods: { loadBillDetail(id) { diff --git a/pages-biz/bill/payHistory.vue b/pages-biz/bill/payHistory.vue index 7396dd1..1067b97 100644 --- a/pages-biz/bill/payHistory.vue +++ b/pages-biz/bill/payHistory.vue @@ -96,11 +96,16 @@ for (let i = 5; i >= 1; i--) { this.years.push(year - i); } - this.fetchPayRecord(); + // fetchPayRecord 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.fetchPayRecord() + } catch (e) { + return + } }, // ✅ 删除和 scroll-view 冲突的 onReachBottom watch: { diff --git a/pages-biz/contract/contract.vue b/pages-biz/contract/contract.vue index 4917b89..f0b4969 100644 --- a/pages-biz/contract/contract.vue +++ b/pages-biz/contract/contract.vue @@ -70,11 +70,18 @@ export default { }; }, onLoad(options) { - this.loadContracts(); + // loadContracts 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + // token 有效,继续执行 + this.checkOaAuth() + this.loadContracts() + } catch (e) { + // token 无效,$checkToken 内部已处理跳转登录页 + return + } }, // ✅ 删除和 scroll-view 冲突的 onReachBottom computed: { diff --git a/pages-biz/contract/contractDetail.vue b/pages-biz/contract/contractDetail.vue index 8cbe447..5e07393 100644 --- a/pages-biz/contract/contractDetail.vue +++ b/pages-biz/contract/contractDetail.vue @@ -92,9 +92,13 @@ export default { } }, - onShow() { - this.$checkToken(this.$getToken()) - this.getContractDetail() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.getContractDetail() + } catch (e) { + return + } }, onLoad(options) { diff --git a/pages-biz/message/message.vue b/pages-biz/message/message.vue index c774f48..fafa5b4 100644 --- a/pages-biz/message/message.vue +++ b/pages-biz/message/message.vue @@ -43,11 +43,16 @@ export default { } }, onLoad() { // ✅ 修复生命周期拼写 - this.fetchMessageList(); + // fetchMessageList 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.fetchMessageList() + } catch (e) { + return + } }, // ✅ 删除和 scroll-view 冲突的 onReachBottom computed: { diff --git a/pages-biz/message/messageDetail.vue b/pages-biz/message/messageDetail.vue index ebb5176..704f315 100644 --- a/pages-biz/message/messageDetail.vue +++ b/pages-biz/message/messageDetail.vue @@ -23,7 +23,7 @@ export default { } }, onShow() { - this.$checkToken(this.$getToken()) + this.$checkToken(this.$getToken()).catch(() => {}) }, onLoad(e) { this.id = e.id diff --git a/pages-biz/myrent/myLease.vue b/pages-biz/myrent/myLease.vue index e13c70b..724de5d 100644 --- a/pages-biz/myrent/myLease.vue +++ b/pages-biz/myrent/myLease.vue @@ -36,11 +36,16 @@ export default { }, onLoad(options) { this.cusNo = options.cusNo; - this.loadAssets(); + // loadAssets 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.loadAssets() + } catch (e) { + return + } }, // ✅ 删除和 scroll-view 冲突的 onReachBottom computed: { diff --git a/pages-biz/reserve/reserveRecords.vue b/pages-biz/reserve/reserveRecords.vue index 540a5d8..db5a371 100644 --- a/pages-biz/reserve/reserveRecords.vue +++ b/pages-biz/reserve/reserveRecords.vue @@ -96,10 +96,15 @@ export default { } }, onLoad(options){ - this.fetchReserve() + // fetchReserve 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.fetchReserve() + } catch (e) { + return + } }, // ✅ 删除 scroll-view 冲突的 onReachBottom methods: { diff --git a/pages-biz/unpaid/unpaid.vue b/pages-biz/unpaid/unpaid.vue index 550aa19..c44e04d 100644 --- a/pages-biz/unpaid/unpaid.vue +++ b/pages-biz/unpaid/unpaid.vue @@ -82,11 +82,16 @@ }; }, onLoad(options) { - this.loadBills(); + // loadBills 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.loadBills() + } catch (e) { + return + } }, methods: { checkOaAuth() { diff --git a/pages-biz/unpaid/unpaidMargin.vue b/pages-biz/unpaid/unpaidMargin.vue index b7498af..eda82d8 100644 --- a/pages-biz/unpaid/unpaidMargin.vue +++ b/pages-biz/unpaid/unpaidMargin.vue @@ -80,11 +80,16 @@ }; }, onLoad(options) { - this.loadBills(); + // loadBills 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.loadBills() + } catch (e) { + return + } }, // ❌ 已删除冲突的 onReachBottom methods: { diff --git a/pages-biz/wae/wae.vue b/pages-biz/wae/wae.vue index ed0af91..e0d3754 100644 --- a/pages-biz/wae/wae.vue +++ b/pages-biz/wae/wae.vue @@ -77,11 +77,16 @@ }; }, onLoad(options) { - this.loadBills(); + // loadBills 移到 onShow 中,等 token 校验通过后再加载 }, - onShow() { - this.$checkToken(this.$getToken()) - this.checkOaAuth() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.checkOaAuth() + this.loadBills() + } catch (e) { + return + } }, // ❌ 已删除冲突的 onReachBottom methods: { diff --git a/pages-biz/wae/waeRecords.vue b/pages-biz/wae/waeRecords.vue index b96a7b7..4ee9065 100644 --- a/pages-biz/wae/waeRecords.vue +++ b/pages-biz/wae/waeRecords.vue @@ -54,7 +54,7 @@ export default { }; }, onShow() { - this.$checkToken(this.$getToken()) + this.$checkToken(this.$getToken()).catch(() => {}) }, onLoad() { this.fetchDataList(); diff --git a/pages/center/center.vue b/pages/center/center.vue index 2f7b11f..9aa445a 100644 --- a/pages/center/center.vue +++ b/pages/center/center.vue @@ -179,15 +179,19 @@ onUnload() { uni.$off('updateAvatar') }, - onShow() { - this.$checkToken(this.$getToken()) - this.loadUserInfo() - this.countHandlingReserve() - this.countUnHandleContract() - this.countUnpayRentBills() - this.countUnpayWaeBills() - this.countUnreadMsg() - this.countUnpaidRentMargin() + async onShow() { + try { + await this.$checkToken(this.$getToken()) + this.loadUserInfo() + this.countHandlingReserve() + this.countUnHandleContract() + this.countUnpayRentBills() + this.countUnpayWaeBills() + this.countUnreadMsg() + this.countUnpaidRentMargin() + } catch (e) { + return + } }, methods: {