From 3fc27febccd04e2fcffbd2cdd16d2daafd0b3ca3 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sat, 11 Oct 2025 17:23:27 +0800
Subject: [PATCH] feat:首页地图相关调整

---
 src/utils/request/interceptors.js |  189 ++++++++++++++---------------------------------
 1 files changed, 56 insertions(+), 133 deletions(-)

diff --git a/src/utils/request/interceptors.js b/src/utils/request/interceptors.js
index b66b5bc..22c8616 100644
--- a/src/utils/request/interceptors.js
+++ b/src/utils/request/interceptors.js
@@ -1,19 +1,21 @@
-import { useUserStore } from "@/store"
-import { getToken } from "@/utils/auth"
+import {
+  useUserStore
+} from "@/store"
 import storage from "@/utils/storage"
-import { showMessage } from "./status"
-
-// 重试队列,每一项将是一个待执行的函数形式
-let requestQueue = []
+import {
+  showMessage
+} from "./status"
+import website from '@/config/website'
+import {
+  Base64
+} from 'js-base64'
 
 // 防止重复提交
 const repeatSubmit = config => {
   const requestObj = {
     url: config.url,
-    data:
-      typeof config.data === "object"
-        ? JSON.stringify(config.data)
-        : config.data,
+    data: typeof config.data === "object" ?
+      JSON.stringify(config.data) : config.data,
     time: new Date().getTime()
   }
   const sessionObj = storage.getJSON("sessionObj")
@@ -38,134 +40,55 @@
   }
 }
 
-// 是否正在刷新token的标记
-let isRefreshing = false
+// 请求拦截器
+function requestInterceptors(http) {
 
-// 刷新token
-const refreshToken = async (http, config) => {
-  // 是否在获取token中,防止重复获取
-  if (!isRefreshing) {
-    // 修改登录状态为true
-    isRefreshing = true
-    // 等待登录完成
-    await useUserStore().authLogin()
-    // 登录完成之后,开始执行队列请求
-    requestQueue.forEach(cb => cb())
-    // 重试完了清空这个队列
-    requestQueue = []
-    isRefreshing = false
-    // 重新执行本次请求
-    return http.request(config)
-  }
-
-  return new Promise(resolve => {
-    // 将resolve放进队列,用一个函数形式来保存,等登录后直接执行
-    requestQueue.push(() => {
-      resolve(http.request(config))
-    })
+  http.interceptors.request.use((config) => {
+    const {detail} = useUserStore().$state?.userInfo || {}
+    // 假设有token值需要在头部需要携带
+    let accessToken = useUserStore()?.$state?.userInfo?.access_token;
+    if (accessToken) {
+      config.header['Blade-Auth'] = 'bearer ' + accessToken;
+    }
+    if (detail?.areaCode) {
+      config.header['areaCode'] = detail.areaCode
+    }
+    // 安全请求header
+    config.header['Blade-Requested-With'] = 'BladeHttpRequest';
+    // 客户端认证参数
+    config.header['Authorization'] = 'Basic ' + Base64.encode(website.clientId + ':' + website.clientSecret);
+    return config
+  }, config => { // 可使用async await 做异步操作
+    return Promise.reject(config)
   })
 }
 
-function requestInterceptors(http) {
-  /**
-   * 请求拦截
-   * @param {object} http
-   */
-  http.interceptors.request.use(
-    config => {
-      // 可使用async await 做异步操作
-      // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
-      config.data = config.data || {}
-      // 自定义参数
-      const custom = config?.custom
-
-      // 是否需要设置 token
-      const isToken = custom?.auth === false
-      if (getToken() && !isToken && config.header) {
-        // token设置
-        config.header.token = getToken()
-      }
-
-      // 是否显示 loading
-      if (custom?.loading) {
-        uni.showLoading({
-          title: "加载中",
-          mask: true
-        })
-      }
-
-      // 是否需要防止数据重复提交
-      const isRepeatSubmit = custom?.repeatSubmit === false
-      if (
-        !isRepeatSubmit &&
-        (config.method === "POST" || config.method === "UPLOAD")
-      ) {
-        repeatSubmit(config)
-      }
-      return config
-    },
-    (
-      config // 可使用async await 做异步操作
-    ) => Promise.reject(config)
-  )
-}
+// 响应拦截器
 function responseInterceptors(http) {
-  /**
-   * 响应拦截
-   * @param {object} http
-   */
-  http.interceptors.response.use(
-    response => {
-      /* 对响应成功做点什么 可使用async await 做异步操作 */
-      const data = response.data
-      // 配置参数
-      const config = response.config
-      // 自定义参数
-      const custom = config?.custom
-
-      // 登录状态失效,重新登录
-      if (data.code === 401) {
-        return refreshToken(http, config)
-      }
-
-      // 隐藏loading
-      if (custom?.loading) {
-        uni.hideLoading()
-      }
-
-      // 请求成功则返回结果
-      if (data.code === 200) {
-        return response || {}
-      }
-
-      // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
-      if (custom?.toast !== false) {
-        uni.$u.toast(data.message)
-      }
-
-      // 请求失败则抛出错误
-      return Promise.reject(data)
-    },
-    response => {
-      // 自定义参数
-      const custom = response.config?.custom
-
-      // 隐藏loading
-      if (custom?.loading !== false) {
-        uni.hideLoading()
-      }
-
-      // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
-      if (custom?.toast !== false) {
-        const message = response.statusCode
-          ? showMessage(response.statusCode)
-          : "网络连接异常,请稍后再试!"
-        uni.$u.toast(message)
-      }
-
-      return Promise.reject(response)
+  http.interceptors.response.use((response) => {
+    let res = response
+    const status = res.data.error_code || res.data.code || res.statusCode
+    const message = res?.data?.msg || res?.data?.error_description || res?.data?.message || '系统错误'
+    if (status !== 200) {
+      uni.showToast({title: message, icon: 'none'});
+      return Promise.reject(response);
     }
-  )
+    return response;
+  }, (response) => {
+    /*  对响应错误做点什么 (statusCode !== 200)*/
+    uni.showToast({title: response?.data?.msg, icon: 'none'});
+    if (response.statusCode === 401) {
+      const pages = getCurrentPages()
+      const currentPage = pages[pages.length - 1]
+      uni.redirectTo({
+        url: `/pages/login/index?redirect=/${currentPage.route}`
+      })
+    }
+    return Promise.reject(response)
+  })
 }
 
-export { requestInterceptors, responseInterceptors }
+export {
+  requestInterceptors,
+  responseInterceptors
+}

--
Gitblit v1.9.3