zhaoxiaoqiang1
2026-01-04 f1d30d03186c79ca2cbcfe60d6d2ce7d73fba97b
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import axios from "axios"
 
// 根据域名上下文的区别,设置不同的请求地址
if (process.env.NODE_ENV === 'development') {
    axios.defaults.baseURL = `${window.location.origin}/pp-adm/`
    //     axios.defaults.baseURL = `http://192.168.34.236:20020/pp-adm/`  //测试
//     // axios.defaults.baseURL = `http://10.0.22.54:20020/pp-adm/`  //后端开发本地
} else {
    let baseUrl = ''
    if (location.hostname === "fin.pengyouph.com") {
        baseUrl = process.env.BASE_API;
      } else {
        baseUrl = window.location.origin + "/pp-adm";
      }
    axios.defaults.baseURL = baseUrl  //process.env.BASE_API
}
 
axios.interceptors.request.use(config => {
    // config.url = 'api/' + config.url  // 开发时,使用api/ 上下文指代代理域名
    return config;
}, err => {
    return Promise.reject(err);
});
 
 
// 响应拦截器
axios.interceptors.response.use(function (response) {
    // 登录失效情况
    if (response.data.errorCode && response.data.errorCode === '003' && process.env.NODE_ENV !== 'development') {
        window.parent.location.href = response.data.data.loginUrl
        return;
    }
    // 下载
    if (response.headers && response.headers['content-type'] === 'application/vnd.ms-excel') {
        let url = response.request.responseURL
        window.location.href = url
    } else {
        return response
    }
 
}, function (error) {
    return Promise.reject(error);
})
 
 
function checkStatus(response) {
    // 如果http状态码正常,则直接返回数据
    if (response && (response.status === 200 || response.status === 304 ||
        response.status === 400)) {
        return response
    }
    // 异常状态下,把错误信息返回去
    return {
        status: -404,
        msg: '网络异常'
    }
}
 
 
function checkCode(res) {
    // 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户
    if (res.status === 404) {
        alert(res.msg)
    }
    if (res.data && (!res.data.success)) {
        // alert(res.data.error_msg)
    }
    return res
}
 
 
// post请求数据配置
const requestConfig = (url, data, headerType = 'json') => {
    switch (headerType) {
        case 'formData':
            return axios({
                method: 'post',
                url,
                data,
                timeout: 20000,
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            })
            break
 
        case 'json':
            return axios({
                method: 'post',
                url,
                data,
                timeout: 20000,
                headers: {
                    'Content-Type': 'application/json;charset=UTF-8'
                }
            })
            break
 
        case 'qs':
            return axios({
                method: 'post',
                url,
                params: data,
                timeout: 20000,
                headers: {
                    'Content-Type': 'application/json;charset=UTF-8'
                }
            })
        default:
    }
}
 
export default {
    post(url, data, headerType) { //  post
        return new Promise((resolve, reject) => {
            requestConfig(url, data, headerType).then(res => {
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    },
    get(url, params) { // get
 
        return axios({
            method: 'get',
            url,
            params, // get 请求时带的参数
            timeout: 50000,
            // headers: {'Content-Type':'application/json'}
        }).then(
            (response) => {
                return checkStatus(response)
            }
        ).then(
            (res) => {
                return checkCode(res)
            }
        )
    },
    download(url, data, fileName) {
        return new Promise((resolve, reject) => {
          axios.defaults.headers['content-type'] = 'application/json;charset=UTF-8'
          axios({
            method: 'post',
            timeout: 20000,
            url: url, // 请求地址
            data: data, // 参数
            responseType: 'blob' // 表明返回服务器返回的数据类型
          }).then(
            response => {
              resolve(response.data)
              const blob = new Blob([response.data], {
                type: 'application/download'
              })
              // IE下载
              if (window.navigator.msSaveOrOpenBlob) {
                navigator.msSaveBlob(blob, fileName)
              } else {
                // 非IE下载
                var link = document.createElement('a')
                link.href = window.URL.createObjectURL(blob)
                link.download = fileName
                link.click()
                // 释放内存
                window.URL.revokeObjectURL(link.href)
              }
            },
            err => {
              reject(err)
            }
          ).catch(error => {
              console.log(error)
          })
        })
      }
}