import axios from 'axios'
import { Message } from 'element-ui'
import router from '../../router'
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 90000
})
// 请求方法处理
service.interceptors.request.use(
config => {
if (localStorage.getItem('token')) {
config.headers['Authorization'] = localStorage.getItem('token')
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
// 返回响应处理
service.interceptors.response.use(
response => {
const res = response.data
if (res.code !== 0) {
// 后台返回的报错
if(res.message && res.message.indexOf('用户名或密码')>-1){
router.replace('/')
}else{
Message({
message: res.message,
type: 'error',
duration: 5 * 1000
})
}
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
error => {
console.log('error' + error) // for debug
return Promise.reject(error)
}
)
export default service
使用:
import request from '@/utils/ai/request'
// 删除算法
export function deleteAlgorithm(params) {
return request({
url: 'algorithm/delete',
method: 'get',
params
})
}
way2:
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import { Loading } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
// 请求实例
const instance = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 60000
})
// 请求前置过滤器
instance.interceptors.request.use(
config => {
if (store.getters.token) { // 如果存在token话,会自动携带token 这里就不要做什么处理了
config.headers['token'] = getToken()
}
// 这里存在一些问题,如果出错了再修改,能跑就行
if (getToken()) {
config.headers['token'] = getToken()
}
return config
},
error => {
console.log(error)
return Promise.reject(error)
}
)
// 响应数据拦截并做通用处理
instance.interceptors.response.use(
response => {
const res = response.data
// 下载文件直接返回
if (res.type === 'application/octet-stream') {
return response
}
if (res.type === 'application/vnd.ms-excel') {
return response
}
// 0为正确响应码
if (res.code !== 0) {
Message({
message: res.msg || 'Error',
type: 'error',
duration: 5 * 1000
})
// 登录超时响应码
if (res.code === 10010002) {
// to re-login
MessageBox.confirm('登录超时,请重新登录!', '登录提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
return Promise.reject(new Error(res.msg || 'Error'))
} else {
return res
}
},
error => {
console.log('err' + error)
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
/**
* 上传
* @param url
* @param data
*/
export function upload(url, file, data) {
const formData = new FormData()
formData.append('file', file)
// 附加数据
if (data) {
Object.keys(data).forEach((key) => {
formData.append(key, data[key])
})
}
return new Promise((resolve, reject) => {
// 打开
const loading = Loading.service({
text: '正在上传数据...',
background: 'rgba(0, 0, 0, 0.7)'
})
instance.request({
url: url,
method: 'post',
data: formData,
timeout: 1200000
}).then(response => {
console.log(response)
loading.close()
resolve(response)
}).catch(err => {
loading.close()
reject(err)
})
})
}
/**
* 下载
* @param url
* @param data
*/
export function download(url, data, fileName) {
return new Promise((resolve, reject) => {
// 打开
const loading = Loading.service({
text: '正在下载数据...',
background: 'rgba(0, 0, 0, 0.7)'
})
instance.request({
url: url,
method: 'post',
data: data,
timeout: 1200000,
responseType: 'blob'
}).then(res => {
loading.close()
// 文件下载
const blob = new Blob([res.data], {
type: 'application/vnd.ms-excel'
})
// 获得文件名称
let link = document.createElement('a')
link.href = URL.createObjectURL(blob)
link.setAttribute('download', fileName)
link.click()
link = null
Message.success('下载导出成功!')
}).catch(err => {
loading.close()
reject(err)
})
})
}
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
export function post(url, data = {}) {
return new Promise((resolve, reject) => {
instance.post(url, data)
.then(response => {
resolve(response)
}, err => {
reject(err)
})
})
}
使用:
import { post } from '@/utils/request'
/**
* 考试详情
* @param data
*/
export function fetchDetail(id) {
return post('/exam/api/exam/exam/detail', { id: id })
}
/**
* 查询试卷的试题
* @param data
*/
export function findDatail(data) {
return post('/exam/api/user/wrong-book/paging', data)
}
/**
* 保存题库
* @param data
*/
export function saveData(data) {
return post('/exam/api/exam/exam/save', data)
}
/**
* 题库详情
* @param data
*/
export function fetchList() {
return post('/exam/api/exam/exam/paging', { current: 1, size: 100 })
}
// 获取试题详情
export function getDetail(data) {
return post('/exam/api/repo/detail', data)
}