Commit 9eff5a70 authored by smallwei's avatar smallwei

增加axios防止重复请求

parent 8b2e43fe
export default { export default {
'000': '操作太频繁,请勿重复请求',
'401': '当前操作没有权限', '401': '当前操作没有权限',
'403': '当前操作没有权限', '403': '当前操作没有权限',
'404': '资源不存在', '404': '资源不存在',
......
...@@ -57,6 +57,7 @@ RouterPlugin.install = function(router, store) { ...@@ -57,6 +57,7 @@ RouterPlugin.install = function(router, store) {
}, },
//动态路由 //动态路由
formatRoutes: function(aMenu, first) { formatRoutes: function(aMenu, first) {
if (!aMenu) return;
const aRouter = [] const aRouter = []
const propsConfig = this.$website.menu.props; const propsConfig = this.$website.menu.props;
const propsDefault = { const propsDefault = {
...@@ -71,48 +72,48 @@ RouterPlugin.install = function(router, store) { ...@@ -71,48 +72,48 @@ RouterPlugin.install = function(router, store) {
name = oMenu[propsDefault.label], name = oMenu[propsDefault.label],
icon = oMenu[propsDefault.icon], icon = oMenu[propsDefault.icon],
children = oMenu[propsDefault.children]; children = oMenu[propsDefault.children];
if (component) {
const isChild = children.length !== 0; const isChild = children.length !== 0;
const oRouter = { const oRouter = {
path: path, path: path,
component(resolve) { component(resolve) {
// 判断是否为首路由 // 判断是否为首路由
if (first) { if (first) {
require(['../page/index'], resolve) require(['../page/index'], resolve)
return return
// 判断是否为多层路由 // 判断是否为多层路由
} else if (isChild && !first) { } else if (isChild && !first) {
require(['../page/index/layout'], resolve) require(['../page/index/layout'], resolve)
return return
// 判断是否为最终的页面视图 // 判断是否为最终的页面视图
} else { } else {
require([`../${component}.vue`], resolve) require([`../${component}.vue`], resolve)
} }
}, },
name: name, name: name,
icon: icon, icon: icon,
redirect: (() => { redirect: (() => {
if (!isChild && first) return `${path}/index` if (!isChild && first) return `${path}/index`
else return ''; else return '';
})(), })(),
// 处理是否为一级路由 // 处理是否为一级路由
children: !isChild ? (() => { children: !isChild ? (() => {
if (first) { if (first) {
oMenu[propsDefault.path] = `${path}/index`; oMenu[propsDefault.path] = `${path}/index`;
return [{ return [{
component(resolve) { require([`../${component}.vue`], resolve) }, component(resolve) { require([`../${component}.vue`], resolve) },
icon: icon, icon: icon,
name: name, name: name,
path: 'index' path: 'index'
}] }]
} }
return []; return [];
})() : (() => { })() : (() => {
return this.formatRoutes(children, false) return this.formatRoutes(children, false)
})() })()
}
aRouter.push(oRouter)
} }
aRouter.push(oRouter)
}) })
return aRouter return aRouter
} }
......
...@@ -20,15 +20,22 @@ axios.defaults.timeout = 30000; ...@@ -20,15 +20,22 @@ axios.defaults.timeout = 30000;
//跨域请求,允许保存cookie //跨域请求,允许保存cookie
axios.defaults.withCredentials = true; axios.defaults.withCredentials = true;
NProgress.configure({ showSpinner: false }) // NProgress Configuration NProgress.configure({ showSpinner: false }) // NProgress Configuration
//HTTPrequest拦截 const requestMap = new Map();
//HTTPrequest拦截
axios.interceptors.request.use(config => { axios.interceptors.request.use(config => {
const keyString = JSON.stringify(Object.assign({}, { url: config.url, method: config.method }, config.data));
if (requestMap.get(keyString)) {
return Promise.reject('code:000')
}
requestMap.set(keyString, true);
config = Object.assign(config, { _keyString: keyString });
NProgress.start() // start progress bar NProgress.start() // start progress bar
if (store.getters.access_token) { if (store.getters.access_token) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改 config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
} }
if (sessionStorage.getItem('tenantId')){ if (sessionStorage.getItem('tenantId')) {
config.headers['TENANT_ID'] = sessionStorage.getItem('tenantId') // 租户ID config.headers['TENANT_ID'] = sessionStorage.getItem('tenantId') // 租户ID
} }
return config return config
}, error => { }, error => {
...@@ -36,9 +43,12 @@ axios.interceptors.request.use(config => { ...@@ -36,9 +43,12 @@ axios.interceptors.request.use(config => {
return Promise.reject(error) return Promise.reject(error)
}) })
//HTTPresponse拦截 //HTTPresponse拦截
axios.interceptors.response.use(data => { axios.interceptors.response.use(res => {
NProgress.done(); NProgress.done();
return data // 重置requestMap
const config = Object.assign(res.config);
requestMap.set(config._keyString, false);
return res
}, error => { }, error => {
NProgress.done() NProgress.done()
let errMsg = error.toString() let errMsg = error.toString()
...@@ -47,7 +57,7 @@ axios.interceptors.response.use(data => { ...@@ -47,7 +57,7 @@ axios.interceptors.response.use(data => {
message: errorCode[code] || errorCode['default'], message: errorCode[code] || errorCode['default'],
type: 'error' type: 'error'
}) })
if(parseInt(code) === 401 || parseInt(code) === 403){ if (parseInt(code) === 401 || parseInt(code) === 403) {
store.dispatch('FedLogOut').then(() => { store.dispatch('FedLogOut').then(() => {
router.push({ path: '/login' }); router.push({ path: '/login' });
}) })
...@@ -56,4 +66,4 @@ axios.interceptors.response.use(data => { ...@@ -56,4 +66,4 @@ axios.interceptors.response.use(data => {
}) })
export default axios export default axios
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment