From a2f30f670f4a805eecfca45468efbe40be18631f Mon Sep 17 00:00:00 2001 From: xy <271556543@qq.com> Date: Mon, 18 Dec 2023 15:11:02 +0800 Subject: [PATCH] 2023-12-18 --- src/permission.js | 178 +++++++++--------- .../contract/components/editorContract.vue | 21 ++- src/views/contract/contractList.vue | 32 +++- .../statisticalReport/budgetProgress.vue | 2 +- 4 files changed, 138 insertions(+), 95 deletions(-) diff --git a/src/permission.js b/src/permission.js index febdc42..593029a 100644 --- a/src/permission.js +++ b/src/permission.js @@ -1,92 +1,92 @@ -import router from './router' -import store from './store' -import { - Message -} from 'element-ui' -import NProgress from 'nprogress' // progress bar -import 'nprogress/nprogress.css' // progress bar style -import { - getToken -} from '@/utils/auth' // get token from cookie -import getPageTitle from '@/utils/get-page-title' - -NProgress.configure({ - showSpinner: false -}) // NProgress Configuration - -const whiteList = ['/login'] // no redirect whitelist - -router.beforeEach(async (to, from, next) => { - // start progress bar - NProgress.start() - - // set page title - document.title = getPageTitle(to.meta.title) - - // determine whether the user has logged in - const hasToken = getToken() - - if (hasToken) { - if (to.path === '/login') { - // if is logged in, redirect to the home page - console.log(to.fullPath) +import router from './router' +import store from './store' +import { + Message +} from 'element-ui' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { + getToken +} from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' + +NProgress.configure({ + showSpinner: false +}) // NProgress Configuration + +const whiteList = ['/login'] // no redirect whitelist + +router.beforeEach(async (to, from, next) => { + // start progress bar + NProgress.start() + + // set page title + document.title = getPageTitle(to.meta.title) + + // determine whether the user has logged in + const hasToken = getToken() + + if (hasToken) { + if (to.path === '/login') { + // if is logged in, redirect to the home page + console.log(to.fullPath) await store.dispatch('user/resetToken') - next(to.fullPath) - // next({ - // path: '/' - // }) - NProgress.done() - } else { - // determine whether the user has obtained his permission roles through getInfo - const hasRoles = store.getters.roles && store.getters.roles.length > 0 - if (hasRoles) { - next() - } else { - try { - // get user info - // note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] - const { - roles - } = await store.dispatch('user/getInfo') - - // generate accessible routes map based on roles - const accessRoutes = await store.dispatch('permission/generateRoutes', roles) - - // dynamically add accessible routes - router.addRoutes(accessRoutes) - - // hack method to ensure that addRoutes is complete - // set the replace: true, so the navigation will not leave a history record - next({ - ...to, - replace: true - }) - } catch (error) { - console.log(error) - // remove token and go to login page to re-login - await store.dispatch('user/resetToken') - Message.error(error || 'Has Error') - next(`/login?redirect=${to.path}`) - NProgress.done() - } - } - } - } else { - /* has no token*/ - - if (whiteList.indexOf(to.path) !== -1) { - // in the free login whitelist, go directly - next() - } else { - // other pages that do not have permission to access are redirected to the login page. - next(`/login?redirect=${to.path}`) - NProgress.done() - } - } -}) - -router.afterEach(() => { - // finish progress bar - NProgress.done() + next(to.fullPath) + // next({ + // path: '/' + // }) + NProgress.done() + } else { + // determine whether the user has obtained his permission roles through getInfo + const hasRoles = store.getters.roles && store.getters.roles.length > 0 + if (hasRoles) { + next() + } else { + try { + // get user info + // note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] + const { + roles + } = await store.dispatch('user/getInfo') + + // generate accessible routes map based on roles + const accessRoutes = await store.dispatch('permission/generateRoutes', roles) + + // dynamically add accessible routes + router.addRoutes(accessRoutes) + + // hack method to ensure that addRoutes is complete + // set the replace: true, so the navigation will not leave a history record + next({ + ...to, + replace: true + }) + } catch (error) { + console.log(error) + // remove token and go to login page to re-login + await store.dispatch('user/resetToken') + Message.error(error || 'Has Error') + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } + } + } else { + /* has no token*/ + + if (whiteList.indexOf(to.path) !== -1) { + // in the free login whitelist, go directly + next() + } else { + // other pages that do not have permission to access are redirected to the login page. + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() }) diff --git a/src/views/contract/components/editorContract.vue b/src/views/contract/components/editorContract.vue index b0a3164..3689d4f 100644 --- a/src/views/contract/components/editorContract.vue +++ b/src/views/contract/components/editorContract.vue @@ -14,6 +14,18 @@ + +