| | |
| | | import Vue from 'vue' |
| | | import axios from 'axios' |
| | | import Vue from "vue"; |
| | | import axios from "axios"; |
| | | import { |
| | | baseURL, |
| | | contentType, |
| | |
| | | successCode, |
| | | tokenName, |
| | | loginInterception, |
| | | } from '@/config' |
| | | import store from '@/store' |
| | | import qs from 'qs' |
| | | import router from '@/router' |
| | | import { isArray } from '@/utils/validate' |
| | | } from "@/config"; |
| | | import store from "@/store"; |
| | | import qs from "qs"; |
| | | import router from "@/router"; |
| | | import { isArray } from "@/utils/validate"; |
| | | |
| | | let loadingInstance |
| | | let loadingInstance; |
| | | |
| | | /** |
| | | * @author chuzhixin 1204505056@qq.com (不想保留author可删除) |
| | | * @description 处理code异常 |
| | | * @param {*} code |
| | | * @param {*} msg |
| | | */ |
| | | const handleCode = (code, msg) => { |
| | | console.log(code, msg); |
| | | switch (code) { |
| | | case invalidCode: |
| | | Vue.prototype.$baseMessage(msg || `后端接口${code}异常`, 'error') |
| | | store.dispatch('user/resetAccessToken').catch(() => {}) |
| | | Vue.prototype.$baseMessage(msg || `后端接口${code}异常`, "error"); |
| | | store.dispatch("user/resetAccessToken").catch(() => {}); |
| | | if (loginInterception) { |
| | | location.reload() |
| | | location.reload(); |
| | | } |
| | | break |
| | | break; |
| | | case noPermissionCode: |
| | | router.push({ path: '/401' }).catch(() => {}) |
| | | break |
| | | router.push({ path: "/login" }).catch(() => {}); |
| | | break; |
| | | default: |
| | | Vue.prototype.$baseMessage(msg || `后端接口${code}异常`, 'error') |
| | | break |
| | | Vue.prototype.$baseMessage(msg || `后端接口${code}异常`, "error"); |
| | | break; |
| | | } |
| | | } |
| | | }; |
| | | |
| | | const instance = axios.create({ |
| | | baseURL, |
| | | timeout: requestTimeout, |
| | | headers: { |
| | | 'Content-Type': contentType, |
| | | "Content-Type": contentType, |
| | | }, |
| | | }) |
| | | }); |
| | | |
| | | instance.interceptors.request.use( |
| | | (config) => { |
| | | if (store.getters['user/accessToken']) { |
| | | config.headers[tokenName] = store.getters['user/accessToken'] |
| | | if (store.getters["user/accessToken"]) { |
| | | config.headers["Authorization"] = |
| | | "Bearer " + store.getters["user/accessToken"]; |
| | | } |
| | | //这里会过滤所有为空、0、false的key,如果不需要请自行注释 |
| | | if (config.data) |
| | | config.data = Vue.prototype.$baseLodash.pickBy( |
| | | config.data, |
| | | Vue.prototype.$baseLodash.identity |
| | | ) |
| | | ); |
| | | if ( |
| | | config.data && |
| | | config.headers['Content-Type'] === |
| | | 'application/x-www-form-urlencoded;charset=UTF-8' |
| | | config.headers["Content-Type"] === |
| | | "application/x-www-form-urlencoded;charset=UTF-8" |
| | | ) |
| | | config.data = qs.stringify(config.data) |
| | | config.data = qs.stringify(config.data); |
| | | if (debounce.some((item) => config.url.includes(item))) |
| | | loadingInstance = Vue.prototype.$baseLoading() |
| | | return config |
| | | loadingInstance = Vue.prototype.$baseLoading(); |
| | | return config; |
| | | }, |
| | | (error) => { |
| | | return Promise.reject(error) |
| | | return Promise.reject(error); |
| | | } |
| | | ) |
| | | ); |
| | | |
| | | instance.interceptors.response.use( |
| | | (response) => { |
| | | if (loadingInstance) loadingInstance.close() |
| | | if (loadingInstance) loadingInstance.close(); |
| | | |
| | | const { data, config } = response |
| | | const { code, msg } = data |
| | | const { data, config } = response; |
| | | const { code, msg } = data; |
| | | |
| | | // 操作正常Code数组 |
| | | const codeVerificationArray = isArray(successCode) |
| | | ? [...successCode] |
| | | : [...[successCode]] |
| | | : [...[successCode]]; |
| | | // 是否操作正常 |
| | | if (codeVerificationArray.includes(code)) { |
| | | return data |
| | | return data; |
| | | } else { |
| | | handleCode(code, msg) |
| | | handleCode(code, msg); |
| | | return Promise.reject( |
| | | 'vue-admin-beautiful请求异常拦截:' + |
| | | JSON.stringify({ url: config.url, code, msg }) || 'Error' |
| | | ) |
| | | "请求异常拦截:" + JSON.stringify({ url: config.url, code, msg }) || |
| | | "Error" |
| | | ); |
| | | } |
| | | }, |
| | | (error) => { |
| | | if (loadingInstance) loadingInstance.close() |
| | | const { response, message } = error |
| | | if (loadingInstance) loadingInstance.close(); |
| | | const { response, message } = error; |
| | | if (error.response && error.response.data) { |
| | | const { status, data } = response |
| | | handleCode(status, data.msg || message) |
| | | return Promise.reject(error) |
| | | const { status, data } = response; |
| | | handleCode(status, data.msg || message); |
| | | return Promise.reject(error); |
| | | } else { |
| | | let { message } = error |
| | | if (message === 'Network Error') { |
| | | message = '后端接口连接异常' |
| | | let { message } = error; |
| | | if (message === "Network Error") { |
| | | message = "后端接口连接异常"; |
| | | } |
| | | if (message.includes('timeout')) { |
| | | message = '后端接口请求超时' |
| | | if (message.includes("timeout")) { |
| | | message = "后端接口请求超时"; |
| | | } |
| | | if (message.includes('Request failed with status code')) { |
| | | const code = message.substr(message.length - 3) |
| | | message = '后端接口' + code + '异常' |
| | | if (message.includes("Request failed with status code")) { |
| | | const code = message.substr(message.length - 3); |
| | | message = "后端接口" + code + "异常"; |
| | | } |
| | | Vue.prototype.$baseMessage(message || `后端接口未知异常`, 'error') |
| | | return Promise.reject(error) |
| | | Vue.prototype.$baseMessage(message || `后端接口未知异常`, "error"); |
| | | return Promise.reject(error); |
| | | } |
| | | } |
| | | ) |
| | | ); |
| | | |
| | | export default instance |
| | | export default instance; |