Merge pull request #2419 from dataease/pr@dev@feat_request-cancel

feat: 切换仪表板自动取消之前未完成的数据请求
This commit is contained in:
王嘉豪 2022-06-13 18:31:15 +08:00 committed by GitHub
commit 0254164857
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 0 deletions

View File

@ -173,6 +173,10 @@ export default {
}
},
created() {
//
this.$cancelRequest('/chart/view/getData/**')
this.$cancelRequest('/api/link/viewDetail/**')
this.$cancelRequest('/static-resource/**')
},
computed: {
mainActiveName() {

View File

@ -118,6 +118,20 @@ Vue.prototype.checkPermission = function(pers) {
return hasPermission
}
Vue.use(deWebsocket)
Vue.prototype.$currentHttpRequestList = new Map()
Vue.prototype.$cancelRequest = function(cancelkey) {
if (cancelkey) {
if (cancelkey.indexOf('/**') > -1) {
Vue.prototype.$currentHttpRequestList.forEach((item, key) => {
key.indexOf(cancelkey.split('/**')[0]) > -1 && item('Operation canceled by the user.')
})
} else {
Vue.prototype.$currentHttpRequestList.get(cancelkey) && Vue.prototype.$currentHttpRequestList.get(cancelkey)('Operation canceled by the user.')
}
}
}
new Vue({
router,

View File

@ -6,6 +6,7 @@ import Config from '@/settings'
import i18n from '@/lang'
import { tryShowLoading, tryHideLoading } from './loading'
import { getLinkToken, setLinkToken } from '@/utils/auth'
import Vue from 'vue'
const TokenKey = Config.TokenKey
const RefreshTokenKey = Config.RefreshTokenKey
@ -49,6 +50,7 @@ let service = axios.create({
// request interceptor
service.interceptors.request.use(
config => {
const CancelToken = axios.CancelToken
const idToken = getIdToken()
if (idToken) {
config.headers[Config.IdTokenKey] = idToken
@ -72,6 +74,10 @@ service.interceptors.request.use(
}
config.loading && tryShowLoading(store.getters.currentPath)
config.cancelToken = new CancelToken(function executor(c) {
Vue.prototype.$currentHttpRequestList.set(config.url, c)
})
return config
},
error => {
@ -91,6 +97,7 @@ service.setTimeOut = time => {
service.interceptors.response.use(response => {
response.config.loading && tryHideLoading(store.getters.currentPath)
checkAuth(response)
Vue.prototype.$currentHttpRequestList.delete(response.config.url)
return response.data
}, error => {
const config = error.response && error.response.config || error.config