Kaynağa Gözat

优化:未登录提示框重复显示问题

萤火科技 4 yıl önce
ebeveyn
işleme
c4a4d5c55f
1 değiştirilmiş dosya ile 33 ekleme ve 18 silme
  1. 33 18
      utils/request/index.js

+ 33 - 18
utils/request/index.js

@@ -82,6 +82,9 @@ $http.requestEnd = options => {
   }
 }
 
+// 当前是否显示modal
+let loginModal = false
+
 // 所有接口数据处理(可在接口里设置不调用此方法)
 // 此方法需要开发者根据各自的接口返回类型修改,以下只是模板
 $http.dataFactory = async res => {
@@ -97,7 +100,6 @@ $http.dataFactory = async res => {
     // 返回错误的结果(catch接受数据)
     return Promise.reject({
       statusCode: res.response.statusCode,
-      // errMsg: "数据工厂验证不通过"
       errMsg: 'http状态码错误'
     })
   }
@@ -114,7 +116,7 @@ $http.dataFactory = async res => {
     // 返回错误的结果(catch接受数据)
     return Promise.reject({
       statusCode: res.response.statusCode,
-      errMsg: "数据工厂验证不通过"
+      errMsg: "请检查api地址能否访问正常"
     })
   }
 
@@ -131,25 +133,38 @@ $http.dataFactory = async res => {
   if (httpData.status == 401) {
     // 401也有可能是后端登录态到期, 所以要清空本地的登录状态
     store.dispatch('Logout')
-    // 弹窗告诉用户去登录
-    uni.showModal({
-      title: '温馨提示',
-      content: '此时此刻需要您登录喔~',
-      // showCancel: false,
-      confirmText: "去登录",
-      cancelText: "再逛会",
-      success: res => {
-        if (res.confirm) {
-          uni.navigateTo({
-            url: "/pages/login/index"
-          })
-        }
-        if (res.cancel && getCurrentPages().length > 1) {
-          uni.navigateBack()
+
+    // 防止重复弹窗
+    if (!loginModal) {
+      loginModal = true
+      // 弹窗告诉用户去登录
+      uni.showModal({
+        title: '温馨提示',
+        content: '此时此刻需要您登录喔~',
+        // showCancel: false,
+        confirmText: "去登录",
+        cancelText: "再逛会",
+        success: res => {
+          if (res.confirm) {
+            uni.navigateTo({
+              url: "/pages/login/index"
+            })
+          }
+          if (res.cancel && getCurrentPages().length > 1) {
+            uni.navigateBack()
+          }
+          loginModal = false
         }
-      }
+      })
+    }
+    // 返回错误的结果(catch接受数据)
+    return Promise.reject({
+      statusCode: 0,
+      errMsg: httpData.message,
+      result: httpData
     })
   }
+
   // 其他错误提示
   if (httpData.status == 500) {
     if (res.isPrompt) {