Houjie
2025-05-21 63b2432286110be1f270672a223c8fb9ddc24233
common/service/service.js
@@ -1,5 +1,7 @@
import Request from '@/common/luch-request/index.js'
import {ACCESS_TOKEN} from '@/common/util/constants.js'
import {
   ACCESS_TOKEN
} from '@/common/util/constants.js'
import configService from './config.service.js'
import tip from '@/common/util/tip.js';
import store from '@/store/index.js';
@@ -8,11 +10,11 @@
const getTokenStorage = () => {
   let token = ''
   try{
   try {
      token = uni.getStorageSync(ACCESS_TOKEN)
   }catch(e){
   } catch (e) {
      //TODO handle the exception
      console.log("getTokenStorage",token)
      console.log("getTokenStorage", token)
   }
   return token
}
@@ -20,12 +22,13 @@
const http = new Request()
http.setConfig((config) => { /* 设置全局配置 */
  config.baseUrl = apiUrl /* 根域名不同 */
  config.header = {
    ...config.header
  }
  return config
http.setConfig((config) => {
   /* 设置全局配置 */
   config.baseUrl = apiUrl /* 根域名不同 */
   config.header = {
      ...config.header
   }
   return config
})
/**
@@ -35,80 +38,90 @@
 */
// 有默认,非必写
http.validateStatus = (statusCode) => {
  return statusCode === 200
   return statusCode === 200
}
http.interceptor.request((config, cancel) => { /* 请求之前拦截器 */
  config.header = {
    ...config.header,
     'X-Access-Token':getTokenStorage()
  }
  /*
  if (!token) { // 如果token不存在,调用cancel 会取消本次请求,但是该函数的catch() 仍会执行
    cancel('token 不存在') // 接收一个参数,会传给catch((err) => {}) err.errMsg === 'token 不存在'
  }
  */
  return config
http.interceptor.request((config, cancel) => {
   /* 请求之前拦截器 */
   config.header = {
      ...config.header,
      'X-Access-Token': getTokenStorage()
   }
   /*
   if (!token) { // 如果token不存在,调用cancel 会取消本次请求,但是该函数的catch() 仍会执行
     cancel('token 不存在') // 接收一个参数,会传给catch((err) => {}) err.errMsg === 'token 不存在'
   }
   */
   return config
})
// 必须使用异步函数,注意
http.interceptor.response(async (response) => { /* 请求之后拦截器 */
  // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
  //   return Promise.reject(response)
  // }
  return response
http.interceptor.response(async (response) => {
   /* 请求之后拦截器 */
   // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
   //   return Promise.reject(response)
   // }
   return response
}, (response) => {
   // 请求错误做点什么
  console.log("请求错误做点什么",response);
  if (response) {
      let data = response.data
      const token = uni.getStorageSync(ACCESS_TOKEN)
      console.log("------异常响应------",token)
      console.log("------异常响应------",data.status)
      switch (data.status) {
        case 403:
          tip.error('拒绝访问');
          break
        case 500:
      this.$tip.alert('服务器遇到一个错误,暂时无法处理您的请求');
    //       if(!token || data.message=="Token失效,请重新登录"){
    //         let timeout=setTimeout(tip.alert('登录已过期'), 1000);
    //         store.dispatch('Logout').then(() => {
            // clearTimeout(timeout)
    //             window.location.reload()
    //         })
    //       }
          break
        case 404:
          break
        case 504:
         break
        case 401:
          uni.showModal({
             title: '提示',
             content: '登录超时,需要重新登录!',
             showCancel:false,
             success: (res)=> {
                if (res.confirm) {
                   uni.reLaunch({
                      url: '/pages/login/login'
                   })
                }
             }
          });
          break
        default:
          tip.error({
            duration: 0,
            forbidClick: true,
            message: data.message
          });
          break
      }
    }
  return response
   console.log("请求错误做点什么", response);
   if (response) {
      let data = response.data
      const token = uni.getStorageSync(ACCESS_TOKEN)
      console.log("------异常响应------", token)
      console.log("------异常响应------", data.status)
      switch (data.code) {
         case 403:
            tip.error('拒绝访问');
            break
         case 500:
            if (!token || data.message === "Token失效,请重新登录") {
               // 先提示用户
               tip.alert('登录已过期');
               // 延迟执行登出并刷新页面,避免提示被中断
               const timeout = setTimeout(() => {
                  store.dispatch('Logout')
                     .then(() => {
                        window.location.reload();
                     })
                     .catch((error) => {
                        console.error('Logout failed:', error);
                        window.location.reload(); // 出错时也强制刷新
                     });
               }, 1000);
            }
            break
         case 404:
            break
         case 504:
            break
         case 401:
            uni.showModal({
               title: '提示',
               content: '登录超时,需要重新登录!',
               showCancel: false,
               success: (res) => {
                  if (res.confirm) {
                     uni.reLaunch({
                        url: '/pages/login/login'
                     })
                  }
               }
            });
            break
         default:
            tip.error({
               duration: 0,
               forbidClick: true,
               message: data.message
            });
            break
      }
   }
   return response
})
export {
  http
}
   http
}