diff --git a/web/src/permission.js b/web/src/permission.js index d3f724fed..556b5c19c 100644 --- a/web/src/permission.js +++ b/web/src/permission.js @@ -6,70 +6,70 @@ let asyncRouterFlag = 0 const whiteList = ['Login', 'Init'] const getRouter = async() => { - await store.dispatch('router/SetAsyncRouter') - await store.dispatch('user/GetUserInfo') - const asyncRouters = store.getters['router/asyncRouters'] - asyncRouters.forEach(asyncRouter => { - router.addRoute(asyncRouter) - }) + await store.dispatch('router/SetAsyncRouter') + await store.dispatch('user/GetUserInfo') + const asyncRouters = store.getters['router/asyncRouters'] + asyncRouters.forEach(asyncRouter => { + router.addRoute(asyncRouter) + }) } async function handleKeepAlive(to) { - if (to.matched && to.matched.length > 2) { - for (let i = 1; i < to.matched.length; i++) { - const element = to.matched[i - 1] - if (element.name === 'layout') { - to.matched.splice(i, 1) - await handleKeepAlive(to) - } - // 如果没有按需加载完成则等待加载 - if (typeof element.components.default === 'function') { - await element.components.default() - await handleKeepAlive(to) - } - } + if (to.matched && to.matched.length > 2) { + for (let i = 1; i < to.matched.length; i++) { + const element = to.matched[i - 1] + if (element.name === 'layout') { + to.matched.splice(i, 1) + await handleKeepAlive(to) + } + // 如果没有按需加载完成则等待加载 + if (typeof element.components.default === 'function') { + await element.components.default() + await handleKeepAlive(to) + } } + } } router.beforeEach(async(to, from, next) => { - handleKeepAlive(to) - const token = store.getters['user/token'] - // 在白名单中的判断情况 - document.title = getPageTitle(to.meta.title) - if (whiteList.indexOf(to.name) > -1) { - if (token) { - if (!asyncRouterFlag && whiteList.indexOf(from.name) < 0) { - asyncRouterFlag++ - await getRouter() - } - next({ name: store.getters['user/userInfo'].authority.defaultRouter }) - } else { - next() - } + handleKeepAlive(to) + const token = store.getters['user/token'] + // 在白名单中的判断情况 + document.title = getPageTitle(to.meta.title) + if (whiteList.indexOf(to.name) > -1) { + if (token) { + if (!asyncRouterFlag && whiteList.indexOf(from.name) < 0) { + asyncRouterFlag++ + await getRouter() + } + next({ name: store.getters['user/userInfo'].authority.defaultRouter }) } else { - // 不在白名单中并且已经登陆的时候 - if (token) { - // 添加flag防止多次获取动态路由和栈溢出 - if (!asyncRouterFlag && whiteList.indexOf(from.name) < 0) { - asyncRouterFlag++ - await getRouter() - next({...to, replace: true }) - } else { - if (to.matched.length) { - next() - } else { - next({ path: '/layout/404' }) - } - } - } - // 不在白名单中并且未登陆的时候 - if (!token) { - next({ - name: 'Login', - query: { - redirect: document.location.hash - } - }) - } + next() } -}) \ No newline at end of file + } else { + // 不在白名单中并且已经登陆的时候 + if (token) { + // 添加flag防止多次获取动态路由和栈溢出 + if (!asyncRouterFlag && whiteList.indexOf(from.name) < 0) { + asyncRouterFlag++ + await getRouter() + next({ ...to, replace: true }) + } else { + if (to.matched.length) { + next() + } else { + next({ path: '/layout/404' }) + } + } + } + // 不在白名单中并且未登陆的时候 + if (!token) { + next({ + name: 'Login', + query: { + redirect: document.location.hash + } + }) + } + } +}) diff --git a/web/src/utils/request.js b/web/src/utils/request.js index ac607d9d1..7b5196bf3 100644 --- a/web/src/utils/request.js +++ b/web/src/utils/request.js @@ -4,113 +4,113 @@ import { store } from '@/store' import { emitter } from '@/utils/bus.js' const service = axios.create({ - baseURL: import.meta.env.VITE_BASE_API, - timeout: 99999 + baseURL: import.meta.env.VITE_BASE_API, + timeout: 99999 }) let acitveAxios = 0 let timer const showLoading = () => { - acitveAxios++ - if (timer) { - clearTimeout(timer) + acitveAxios++ + if (timer) { + clearTimeout(timer) + } + timer = setTimeout(() => { + if (acitveAxios > 0) { + emitter.emit('showLoading') } - timer = setTimeout(() => { - if (acitveAxios > 0) { - emitter.emit('showLoading') - } - }, 400) + }, 400) } const closeLoading = () => { - acitveAxios-- - if (acitveAxios <= 0) { - clearTimeout(timer) - emitter.emit('closeLoading') - } - } - // http request 拦截器 + acitveAxios-- + if (acitveAxios <= 0) { + clearTimeout(timer) + emitter.emit('closeLoading') + } +} +// http request 拦截器 service.interceptors.request.use( - config => { - if (!config.donNotShowLoading) { - showLoading() - } - const token = store.getters['user/token'] - const user = store.getters['user/userInfo'] - config.headers = { - 'Content-Type': 'application/json', - 'x-token': token, - 'x-user-id': user.ID, - ...config.headers - } - return config - }, - error => { - closeLoading() - ElMessage({ - showClose: true, - message: error, - type: 'error' - }) - return error + config => { + if (!config.donNotShowLoading) { + showLoading() } + const token = store.getters['user/token'] + const user = store.getters['user/userInfo'] + config.headers = { + 'Content-Type': 'application/json', + 'x-token': token, + 'x-user-id': user.ID, + ...config.headers + } + return config + }, + error => { + closeLoading() + ElMessage({ + showClose: true, + message: error, + type: 'error' + }) + return error + } ) // http response 拦截器 service.interceptors.response.use( - response => { - closeLoading() - if (response.headers['new-token']) { - store.commit('user/setToken', response.headers['new-token']) - } - if (response.data.code === 0 || response.headers.success === 'true') { - if (response.headers.msg) { - response.data.msg = decodeURI(response.headers.msg) - } - return response.data - } else { - ElMessage({ - showClose: true, - message: response.data.msg || decodeURI(response.headers.msg), - type: 'error' - }) - if (response.data.data && response.data.data.reload) { - store.commit('user/LoginOut') - } - return response.data.msg ? response.data : response - } - }, - error => { - closeLoading() - switch (error.response.status) { - case 500: - ElMessageBox.confirm(` + response => { + closeLoading() + if (response.headers['new-token']) { + store.commit('user/setToken', response.headers['new-token']) + } + if (response.data.code === 0 || response.headers.success === 'true') { + if (response.headers.msg) { + response.data.msg = decodeURI(response.headers.msg) + } + return response.data + } else { + ElMessage({ + showClose: true, + message: response.data.msg || decodeURI(response.headers.msg), + type: 'error' + }) + if (response.data.data && response.data.data.reload) { + store.commit('user/LoginOut') + } + return response.data.msg ? response.data : response + } + }, + error => { + closeLoading() + switch (error.response.status) { + case 500: + ElMessageBox.confirm(`
检测到接口错误${error}
错误码 500 :此类错误内容常见于后台panic,请先查看后台日志,如果影响您正常使用可强制登出清理缓存
`, '接口报错', { - dangerouslyUseHTMLString: true, - distinguishCancelAndClose: true, - confirmButtonText: '清理缓存', - cancelButtonText: '取消' - }) - .then(() => { - store.commit('user/LoginOut') - }) - break - case 404: - ElMessageBox.confirm(` + dangerouslyUseHTMLString: true, + distinguishCancelAndClose: true, + confirmButtonText: '清理缓存', + cancelButtonText: '取消' + }) + .then(() => { + store.commit('user/LoginOut') + }) + break + case 404: + ElMessageBox.confirm(`检测到接口错误${error}
错误码 404 :此类错误多为接口未注册(或未重启)或者请求路径(方法)与api路径(方法)不符--如果为自动化代码请检查是否存在空格
`, '接口报错', { - dangerouslyUseHTMLString: true, - distinguishCancelAndClose: true, - confirmButtonText: '我知道了', - cancelButtonText: '取消' - }) - break - } - - return error + dangerouslyUseHTMLString: true, + distinguishCancelAndClose: true, + confirmButtonText: '我知道了', + cancelButtonText: '取消' + }) + break } + + return error + } ) -export default service \ No newline at end of file +export default service