Files
scrq-hd/.svn/pristine/a2/a20352692d0bf5f8d7587665cae5740a24db4df9.svn-base
2025-07-03 10:34:04 +08:00

225 lines
6.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from 'axios'
import { Notification, MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams } from "@/utils/ruoyi";
import qs from 'qs'
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 10000
})
//url白名单
function checkUrl(url){
let baseUrl=['/system/attachment/upload','/basic/basic/material/exportExcel', '/basic/basic/material/updateMaterialBind',
'/basic/basic/bom/add','/basic/basic/bom/update','/basic/basic/materialGroup/updateMaterials','/basic/basic/material/updateMaterialAlternate'
,'/basic/basic/material/updateMaterialGroups']
return baseUrl.includes(url);
}
// request拦截器
service.interceptors.request.use(config => {
// console.log('typess', config.headers['Content-Type'], config)
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
if (checkUrl(config.url)){ //如果
return config;
}
// //put请求映射参数
// if (config.method === 'put' )
// {
// config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
// config.data = qs.stringify(config.data)//序列化参数
// }
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?';
for (const propName of Object.keys(config.params)) {
const value = config.params[propName];
var part = encodeURIComponent(propName) + "=";
if (value !== null && typeof(value) !== "undefined") {
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
let params = propName + '[' + key + ']';
var subPart = encodeURIComponent(params) + "=";
url += subPart + encodeURIComponent(value[key]) + "&";
console.log(propName,params,subPart,'1510',url)
}
} else {
url += part + encodeURIComponent(value) + "&";
}
}
}
url = url.slice(0, -1);
config.params = {};
config.url = url;
}
if (config.data != undefined && (config.data.type == undefined || config.data.EscapeType != undefined )) //EscapeType 代表转义 当需要传type并且又要用x-www-form-urlencoded时使用,只要EscapeType有值 视为type为undefined
{
config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
// 在发送请求之前做些什么
config.data = qs.stringify(config.data)//序列化参数
}
return config
}, error => {
Promise.reject(error)
})
// 响应拦截器
service.interceptors.response.use(res => {
if(res.code === 401)
{
MessageBox.confirm('登录状态已过期,您可以重新登录', '系统提示', {
confirmButtonText: '重新登录',
showCancelButton:false,
type: 'warning'
}
).then(() => {
store.dispatch('LogOut').then(() => {
location.href = '/login';
})
})
}
const code = res.data.code || 200;
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 401) {
console.log("啊哈哈哈哈啊哈哈快乐",res.data.msg) // 未设置状态码则默认成功状态
MessageBox.confirm(res.data.msg || '登录状态已过期'+',您可以重新登录', '系统提示', {
confirmButtonText: '重新登录',
showCancelButton:false,
type: 'warning'
}
).then(() => {
console.log(store,"啊很好看")
store.dispatch('LogOut').then(() => {
location.href = '/login';
})
})
} else if (code === 500) {
// return Promise.reject(new Error(msg)).catch(err=>{
// console.log(err)
return res
// })
}else if(code===10000){
return res
}
else {
return res
}
},
error => {
let { message,name,description,number,fileName,lineNumber,columnNumber,stack,config} = error;
if (message == "Network Error") {
message = "后端接口连接异常";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if(message.includes("401"))
{
MessageBox.confirm('登录状态过期,您可以重新登录', '系统提示', {
confirmButtonText: '重新登录',
showCancelButton:false,
type: 'warning'
}
).then(() => {
store.dispatch('LogOut').then(() => {
location.href = '/login';
})
})
return Promise.reject(error)
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 2 * 1000
})
return Promise.reject(error)
}
)
// 通用下载方法
export function download(url, params, filename) {
return service.post(url, params, {
transformRequest: [(params) => {
return tansParams(params)
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
responseType: 'blob'
}).then((data) => {
const content = data
const blob = new Blob([content])
if ('download' in document.createElement('a')) {
const elink = document.createElement('a')
elink.download = filename
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href)
document.body.removeChild(elink)
} else {
navigator.msSaveBlob(blob, filename)
}
}).catch((r) => {
console.error(r)
})
}
//get下载方法
export function downloadGet(url, params, filename) {
return service.get(url, params, {
transformRequest: [(params) => {
return tansParams(params)
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
responseType: 'blob'
}).then((data) => {
const content = data
const blob = new Blob([content])
if ('download' in document.createElement('a')) {
const elink = document.createElement('a')
elink.download = filename
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href)
document.body.removeChild(elink)
} else {
navigator.msSaveBlob(blob, filename)
}
}).catch((r) => {
console.error(r)
})
}
export default service