吉安感知网项目-前端
shuishen
2026-02-03 89380e6260a75d1d3b94de687ebcc2f50d50659d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import Request from "uview-plus/libs/luch-request/index"
import configEnv from "@/config/env.js";
import {getEnvObj} from "@/utils/index.js";
import { useUserStore } from "@/store/index.js";
import website from '@/config/website'
import { Base64} from 'js-base64'
 
const httpGd = new Request()
 
export function request (config) {
  return new Promise((resolve, reject) => {
    httpGd
      .request(config)
      .then(res => {
        resolve(res)
      })
      .catch(err => {
        reject(err)
      })
  })
}
 
 
// 请求拦截器
function requestInterceptors(httpGd) {
 
  httpGd.interceptors.request.use((config) => {
    const {detail} = useUserStore().$state?.userInfo || {}
    // 假设有token值需要在头部需要携带
    let accessToken = useUserStore()?.$state?.userInfo?.gd_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 responseInterceptors(httpGd) {
    httpGd.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) => {
        let res = response
        const message = res?.data?.msg || res?.data?.error_description || res?.data?.message || '系统错误'
        /*  对响应错误做点什么 (statusCode !== 200)*/
        uni.showToast({title: message, icon: 'none'});
        if (response.statusCode === 401) {
            const pages = getCurrentPages()
            const currentPage = pages[pages.length - 1]
            uni.reLaunch({
                url: `/pages/login/index?redirect=/${currentPage.route}`
            })
        }
        return Promise.reject(response)
    })
}
 
// 引入拦截器配置
export function setupRequest () {
  httpGd.setConfig(defaultConfig => {
 
    /* defaultConfig 为默认全局配置 */
    defaultConfig.baseURL = getEnvObj().VITE_API_BASE_URL_GD
    // #ifdef H5
    if (import.meta.env.VITE_APP_PROXY === "true") {
      defaultConfig.baseURL = import.meta.env.VITE_API_PREFIX_GD
    }
    // #endif
    return defaultConfig
  })
  requestInterceptors(httpGd)
  responseInterceptors(httpGd)
}
 
 
 
 
export function get (url, config) {
  return request({ ...config, url, method: "GET" })
}
 
export function post (url, config) {
  return request({ ...config, url, method: "POST" })
}
 
export function upload (url, config) {
  return request({ ...config, url, method: "UPLOAD" })
}
 
export function download (url, config) {
  return request({ ...config, url, method: "DOWNLOAD" })
}
 
export default setupRequest