|
@@ -0,0 +1,118 @@
|
|
|
+import axios from 'axios'
|
|
|
+import { blobToJson } from '@/utils'
|
|
|
+import { getToken } from '@/utils/auth'
|
|
|
+import qs from 'qs'
|
|
|
+
|
|
|
+// create an axios instance
|
|
|
+const service = axios.create({
|
|
|
+ baseURL: import.meta.env.VUE_APP_BASE_API,
|
|
|
+ timeout: 120000 // request timeout
|
|
|
+})
|
|
|
+
|
|
|
+// request interceptor
|
|
|
+// 发送请求拦截器
|
|
|
+service.interceptors.request.use(
|
|
|
+ config => {
|
|
|
+ if (getToken()) {
|
|
|
+ config.headers.token = getToken()
|
|
|
+ }
|
|
|
+ config.headers.token = getToken()
|
|
|
+ return config
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ console.error(error)
|
|
|
+ return Promise.reject(error)
|
|
|
+ }
|
|
|
+)
|
|
|
+
|
|
|
+// 请求返回之后的拦截器
|
|
|
+service.interceptors.response.use(
|
|
|
+ async response => {
|
|
|
+ const res = response.data
|
|
|
+
|
|
|
+ if (response.request.responseType === 'blob') {
|
|
|
+ // 返回的文件流当报错时转化成json
|
|
|
+ if (response.headers['content-type'] === 'application/json') {
|
|
|
+ try {
|
|
|
+ const result = await blobToJson(res)
|
|
|
+ return Promise.reject(result.msg)
|
|
|
+ } catch (error) {
|
|
|
+ return Promise.reject(error)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const name = response.headers['content-disposition']
|
|
|
+ return {
|
|
|
+ data: res,
|
|
|
+ name: name ? decodeURI(name.replace('attachment;filename=', '')) : '未命名'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ([50008, 50012, 50014, 402000, 401].includes(res.code)) {
|
|
|
+ // 登录过期
|
|
|
+ return Promise.reject(res.msg)
|
|
|
+ }
|
|
|
+ // 登录验证码过期
|
|
|
+ if (res.code === 60902) {
|
|
|
+ return Promise.reject(res)
|
|
|
+ }
|
|
|
+ if (res.code !== 20000) {
|
|
|
+ if (res.data) {
|
|
|
+ return Promise.reject(res)
|
|
|
+ }
|
|
|
+ return Promise.reject(res.msg)
|
|
|
+ }
|
|
|
+ return res
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ console.error(error)
|
|
|
+ return Promise.reject(error)
|
|
|
+ }
|
|
|
+)
|
|
|
+
|
|
|
+// 请求方法
|
|
|
+const http = {
|
|
|
+ post (url, params) {
|
|
|
+ return service.post(url, params, {
|
|
|
+ transformRequest: [(params) => {
|
|
|
+ return JSON.stringify(params)
|
|
|
+ }],
|
|
|
+ headers: {
|
|
|
+ 'Content-Type': 'application/json'
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ get (url, params) {
|
|
|
+ return service.get(url, {
|
|
|
+ params: params,
|
|
|
+ paramsSerializer: (params) => {
|
|
|
+ return qs.stringify(params)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ formData (url, params) {
|
|
|
+ return service.post(url, params, {
|
|
|
+ timeout: 600000,
|
|
|
+ headers: {
|
|
|
+ 'Content-Type': 'application/x-www-form-urlencoded'
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ upload (url, params) {
|
|
|
+ return service.post(url, params, {
|
|
|
+ timeout: 600000,
|
|
|
+ headers: {
|
|
|
+ 'Content-Type': 'multipart/form-data'
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ download (url, params) {
|
|
|
+ return service.post(url, params, {
|
|
|
+ timeout: 10000,
|
|
|
+ headers: {
|
|
|
+ 'Content-Type': 'application/json'
|
|
|
+ },
|
|
|
+ responseType: 'blob'
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+export default http
|