一, 配置BaseUrl
/**
* {
* dev: '开发环境配置信息',
* test: '测试环境配置信息',
* prod: '线上环境配置信息'
* }
*/
function conf (base = {}) {
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'testing') { // 生产环境下
let env = process.env.ENV_CONFIG || 'dev'
return base[env] || base['dev']
}
// 开发环境
return base['dev']
}
// baseUrl
export const baseUrl = conf({
dev: 'http://`````',
test: 'http://`````',
prod: 'http://`````'
})
二, 配置axios , 创建axios.js
import axios from 'axios'
import {baseUrl} from './env'
var axiosBaseUrl = ''
export default async (url = '', data = {}, type = 'GET', headers = {}) => {
type = type.toLowerCase()
switch (type) {
case 'post':
return axios.post(baseUrl+ url, data, headers)
.then((res) => {
return res
})
.catch((error) => {
return error
})
case 'put':
return axios.put(baseUrl+ url, data)
.then((res) => {
return res
})
.catch((error) => {
return error
})
default:
return axios({
method: type,
baseUrl: baseUrl,
url: url,
data: data,
timeout: 10000,
headers: {
'X-Requested-With': 'XMLHttpRequest',
// 'X-Frame-Options': 'DENY', // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).then((res) => {
return res
}).catch((error) => {
return error
})
}
}
三, 配置拦截器 interceptors.js
/**
*
* @title 拦截器
* @Description 与后台接口对接前后做处理用的
* @Author 申
* @Date 2020-03-19
* @Version 1.0
*/
import Vue from 'vue'
import {
MessageBox
} from 'element-ui'
import store from '@/store'
import axios from 'axios'
import QS from 'qs'
import {
getStore
} from '@/utils/index'
var _bus = new Vue()
// 添加请求拦截器
let num = 0;
axios.interceptors.request.use(function (config) {
//url == queryPayState 不显示loading
if (config.url.indexOf('queryPayState') == -1) {
num++
// 打开加载框
_bus.$emit('showloading')
}
config.data = QS.stringify(config.data)
//header 中添加token
let store = JSON.parse(getStore('store'))
if (store && store.token)
config.headers.token = store.token
if (config.type === 'formData' || config.method !== 'post') {
return config
}
return config
}, function (error) {
return Promise.reject(error)
})
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
if (response.config.url.indexOf('queryPayState') == -1) {
num--
if (num <= 0) {
//关闭加载框
_bus.$emit('closeloading')
} else {
_bus.$emit('showloading')
}
}
if (response.data.msgCode) {
// 处理返回异常信息
if (response.data.msgCode === '10003') {
store.commit('SET_TOKEN', '')
if (num <= 0) {
MessageBox.alert('登录信息超时, 请重新登录!', '登录超时', {
confirmButtonText: '打开登录页面',
callback: action => {
// window.location.href = "/#/?islogin=false"
// window.history.back();
store.commit('SET_isloginModel', true)
}
})
}
}
if (response.data.msgCode !== '0') {
// MessageBox.alert(response.data.msg, '提示')
}
}
return response.data
}, function (error) {
// 关闭loading
_bus.$emit('showloading')
return Promise.reject(error)
})
export var bus = _bus
四, 使用api.js
import http from './axios'
/**
* 登录
*/
export const login = data => http('/weblogin/accountLogin.do', data, 'post')
//获取赛历
export const queryMatchCalendar = () => http('/matchInfo/queryMatchCalendar.do', {}, 'post')
五,在页面中使用 index.vue
<template>
<div>
<Header></Header>
<div class="container">
</div>
<Footer></Footer>
</div>
</template>
<script>
import { fileDownload } from '@/api/api'
export default {
data() {
return {
fileList: []
}
},
mounted() {
this.fileDownload()
},
methods: {
async fileDownload() {
const res = await fileDownload()
if(res.msgCode === '0') {
this.fileList = res.data.dataList
}else{
// 异常处理
}
}
}
}
</script>