ai_images/portal-ui/src/utils/request.js

117 lines
2.4 KiB
JavaScript

/* eslint-disable */
/**
* @desc axios数据API请求封装处理
*/
import axios from 'axios'
import Message from '@arco-design/web-vue/es/message/index'
import store from '@/store'
import {
getLang,
getHeaders
} from './auth'
import i18n from '@/lang/i18n.js';
const lang = i18n.global.locale;
const messages = i18n.global.messages[lang];
/**
* @constant
* @desc 创建axios实例
*/
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
withCredentials: import.meta.env.MODE === 'development',
timeout: 600 * 1000
})
// 登出
const logout = () => {
store.dispatch('user/logout2').then(() => {
store.dispatch('main/setShowLogin', true);
Message.error({
content: messages.common.loginless,
duration: 3000
})
})
}
/**
* axios接口请求入参
*/
service.interceptors.request.use(
(config) => {
if (config.url && config.url.includes('file/upload')) {
config.headers['Content-Type'] =
'multipart/form-data;boundary = ' + new Date().getTime()
}
config.headers = {
...getHeaders(),
...config.headers
}
if (config.url && config.url.indexOf('http') == -1) {
let prefix = config.url.startsWith('/') ? '/dev-api' : '/dev-api/'
if (import.meta.env.MODE == 'production') {
prefix = config.url.startsWith('/') ? '' : '/'
}
config.url = prefix + config.url
}
if (config.method.toUpperCase() === 'GET' || config.method.toUpperCase() === 'PUT') {
config.params = config.data
}
return config
},
(error) => {
return Promise.reject(error)
}
)
/**
* axios接口请求后返回结果
*/
service.interceptors.response.use(
(response) => {
const res = response.data
// 处理文件流下载
let responseType = response.config.responseType
if (responseType === 'blob') {
return res
}
if (res.code == 200 || res.code == -1 || res.code == -2) {
return res
} else if (res.code == 401) {
logout();
} else {
Message.error({
content: res.msg || 'Server error',
duration: 3000
})
return res
}
},
(error) => {
const {
response = {}
} = error
const {
data: {
message
} = {},
status
} = response
if (status == 401) {
logout()
return Promise.reject(error)
}
if (response.config?.showErrorMessage != false) {
Message.error({
content: message || 'Server error',
// closable: true,
duration: 3000
})
}
return Promise.reject(message)
}
)
export default service