From e0309bcf4da93a031b676eda62bcef79cbc3ae44 Mon Sep 17 00:00:00 2001 From: toesbieya <1647775459@qq.com> Date: Sun, 9 Aug 2020 13:40:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=AF=E7=94=B1=E5=AE=9A=E4=B9=89=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue/src/router/authority/index.js | 9 ---- vue/src/router/constant/index.js | 23 ---------- vue/src/router/define.js | 45 +++++++++++++++++++ vue/src/router/index.js | 9 +--- vue/src/router/{constant => }/module/app.js | 34 ++------------ .../router/{constant => }/module/example.js | 2 +- .../router/{authority => }/module/message.js | 0 .../router/{authority => }/module/purchase.js | 0 vue/src/router/{authority => }/module/sell.js | 0 .../router/{authority => }/module/stock.js | 0 .../router/{authority => }/module/system.js | 0 vue/src/store/module/resource.js | 26 ++++------- vue/src/util/auth.js | 6 ++- vue/src/view/example/icon/indexPage.vue | 20 ++------- 14 files changed, 69 insertions(+), 105 deletions(-) delete mode 100644 vue/src/router/authority/index.js delete mode 100644 vue/src/router/constant/index.js create mode 100644 vue/src/router/define.js rename vue/src/router/{constant => }/module/app.js (51%) rename vue/src/router/{constant => }/module/example.js (97%) rename vue/src/router/{authority => }/module/message.js (100%) rename vue/src/router/{authority => }/module/purchase.js (100%) rename vue/src/router/{authority => }/module/sell.js (100%) rename vue/src/router/{authority => }/module/stock.js (100%) rename vue/src/router/{authority => }/module/system.js (100%) diff --git a/vue/src/router/authority/index.js b/vue/src/router/authority/index.js deleted file mode 100644 index a20473c..0000000 --- a/vue/src/router/authority/index.js +++ /dev/null @@ -1,9 +0,0 @@ -/*需要权限控制的路由表*/ -const modulesFiles = require.context('./module', false, /\.js$/) -const modules = modulesFiles.keys().reduce((modules, modulePath) => { - const value = modulesFiles(modulePath).default - Array.isArray(value) ? modules.push(...value) : modules.push(value) - return modules -}, []) - -export default modules diff --git a/vue/src/router/constant/index.js b/vue/src/router/constant/index.js deleted file mode 100644 index f34b062..0000000 --- a/vue/src/router/constant/index.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * 不需要权限控制的路由表 - * constant/module下的所有route都会加上noAuth:true - */ - -const modulesFiles = require.context('./module', false, /\.js$/) -const modules = modulesFiles.keys().reduce((modules, modulePath) => { - const value = modulesFiles(modulePath).default - Array.isArray(value) ? modules.push(...value) : modules.push(value) - return modules -}, []) - -function addNoAuth(routes) { - routes.forEach(route => { - if (!route.meta) route.meta = {} - route.meta.noAuth = true - if (Array.isArray(route.children)) addNoAuth(route.children) - }) -} - -addNoAuth(modules) - -export default modules diff --git a/vue/src/router/define.js b/vue/src/router/define.js new file mode 100644 index 0000000..6b20a0a --- /dev/null +++ b/vue/src/router/define.js @@ -0,0 +1,45 @@ +import Layout from "@/layout/index" +import Redirect from "@/view/app/redirect" +import Login from "@/view/app/login/index" +import Page404 from "@/view/app/404" +import Page403 from "@/view/app/403" +import {metaExtend} from "@/router/util" + +const modulesFiles = require.context('./module', false, /\.js$/) +const dynamicRoutes = modulesFiles.keys().reduce((modules, modulePath) => { + const value = modulesFiles(modulePath).default + Array.isArray(value) ? modules.push(...value) : modules.push(value) + return modules +}, []) + +metaExtend(dynamicRoutes) + +export {dynamicRoutes} + +//系统自有路由 +export default [ + { + path: '/redirect', + component: Layout, + children: [ + { + path: ':path(.*)', + props: true, + component: Redirect + } + ] + }, + { + path: '/login', + alias: '/register', + component: Login + }, + { + path: '/404', + component: Page404 + }, + { + path: '/403', + component: Page403 + } +] diff --git a/vue/src/router/index.js b/vue/src/router/index.js index 9d402f9..c435e01 100644 --- a/vue/src/router/index.js +++ b/vue/src/router/index.js @@ -15,15 +15,13 @@ import Vue from 'vue' import Router from 'vue-router' import NProgress from 'nprogress' import {contextPath, routerMode} from '@/config' -import constantRoutes from '@/router/constant' -import authorityRoutes from '@/router/authority' +import defaultRoutes, {dynamicRoutes} from '@/router/define' import {auth, needAuth} from "@/util/auth" import {isUserExist} from "@/util/storage" import { setPageTitle, specifyRouteTitle, transformWhiteList, - metaExtend, needExtraRedirect, initMenuAndResource, iframeControl @@ -33,9 +31,6 @@ Vue.use(Router) NProgress.configure({showSpinner: false}) -metaExtend(constantRoutes) -metaExtend(authorityRoutes) - const endRoute = [{path: '*', redirect: '/404'}] const whiteList = transformWhiteList(['/login', '/register', '/404', '/403']) @@ -44,7 +39,7 @@ const router = new Router({ base: contextPath, mode: routerMode, scrollBehavior: () => ({y: 0}), - routes: constantRoutes.concat(authorityRoutes, endRoute) + routes: defaultRoutes.concat(dynamicRoutes, endRoute) }) router.beforeEach(async (to, from, next) => { diff --git a/vue/src/router/constant/module/app.js b/vue/src/router/module/app.js similarity index 51% rename from vue/src/router/constant/module/app.js rename to vue/src/router/module/app.js index 80aaddd..abad9ec 100644 --- a/vue/src/router/constant/module/app.js +++ b/vue/src/router/module/app.js @@ -1,9 +1,5 @@ //路由表:系统页面 import Layout from '@/layout' -import Redirect from '@/view/app/redirect' -import Login from '@/view/app/login' -import Page404 from '@/view/app/404' -import Page403 from '@/view/app/403' import {lazyLoadView} from "@/router/util" const router = [ @@ -16,43 +12,19 @@ const router = [ path: 'index', component: lazyLoadView('index/'), name: 'index', - meta: {title: '首页', affix: true, icon: 'home', sort: 0} + meta: {title: '首页', affix: true, icon: 'home', noAuth: true, sort: 0} }, { path: 'user', name: 'userCenter', component: lazyLoadView('userCenter/'), - meta: {title: '个人中心', noCache: true, icon: 'user', hidden: true}, + meta: {title: '个人中心', noCache: true, icon: 'user', noAuth: true, hidden: true}, } ] }, { path: 'https://doc.toesbieya.cn', - meta: {title: '文档', icon: 'documentation', sort: 1} - }, - { - path: '/redirect', - component: Layout, - children: [ - { - path: ':path(.*)', - props: true, - component: Redirect - } - ] - }, - { - path: '/login', - alias: '/register', - component: Login - }, - { - path: '/404', - component: Page404 - }, - { - path: '/403', - component: Page403 + meta: {title: '文档', icon: 'documentation', noAuth: true, sort: 1} } ] diff --git a/vue/src/router/constant/module/example.js b/vue/src/router/module/example.js similarity index 97% rename from vue/src/router/constant/module/example.js rename to vue/src/router/module/example.js index e683ec4..251058d 100644 --- a/vue/src/router/constant/module/example.js +++ b/vue/src/router/module/example.js @@ -5,7 +5,7 @@ import {lazyLoadView} from "@/router/util" const router = { path: '/example', component: Layout, - meta: {title: '演示用例', icon: 'show', noCache: true}, + meta: {title: '演示用例', icon: 'show', noAuth: true, noCache: true}, children: [ { path: 'stylePage', diff --git a/vue/src/router/authority/module/message.js b/vue/src/router/module/message.js similarity index 100% rename from vue/src/router/authority/module/message.js rename to vue/src/router/module/message.js diff --git a/vue/src/router/authority/module/purchase.js b/vue/src/router/module/purchase.js similarity index 100% rename from vue/src/router/authority/module/purchase.js rename to vue/src/router/module/purchase.js diff --git a/vue/src/router/authority/module/sell.js b/vue/src/router/module/sell.js similarity index 100% rename from vue/src/router/authority/module/sell.js rename to vue/src/router/module/sell.js diff --git a/vue/src/router/authority/module/stock.js b/vue/src/router/module/stock.js similarity index 100% rename from vue/src/router/authority/module/stock.js rename to vue/src/router/module/stock.js diff --git a/vue/src/router/authority/module/system.js b/vue/src/router/module/system.js similarity index 100% rename from vue/src/router/authority/module/system.js rename to vue/src/router/module/system.js diff --git a/vue/src/store/module/resource.js b/vue/src/store/module/resource.js index dc1339d..7fc5b4a 100644 --- a/vue/src/store/module/resource.js +++ b/vue/src/store/module/resource.js @@ -1,16 +1,13 @@ import path from 'path' -import constantRoutes from '@/router/constant' -import authorityRoutes from '@/router/authority' +import {dynamicRoutes} from '@/router/define' import {needAuth} from "@/util/auth" import {createTree} from "@/util/tree" import {getAllResources} from "@/api/system/resource" import {isEmpty} from "@/util" import {isExternal} from "@/util/validate" -const finalConstantRoutes = transformOriginRoutes(constantRoutes) -const finalAuthorityRoutes = transformOriginRoutes(authorityRoutes) -clean(finalConstantRoutes, false) -clean(finalAuthorityRoutes, false) +const finalRoutes = transformOriginRoutes(dynamicRoutes) +clean(finalRoutes, false) const state = { routes: [], @@ -22,15 +19,10 @@ const state = { const mutations = { routes(state, routes) { - const tempConstantRoutes = JSON.parse(JSON.stringify(finalConstantRoutes)) - const tempAuthorityRoutes = JSON.parse(JSON.stringify(routes)) + clean(routes) + state.routes = routes - clean(tempConstantRoutes) - clean(tempAuthorityRoutes) - - state.routes = finalConstantRoutes.concat(routes) - - const sidebarMenus = tempConstantRoutes.concat(tempAuthorityRoutes) + const sidebarMenus = routes sort(sidebarMenus) state.sidebarMenus = sidebarMenus }, @@ -114,10 +106,10 @@ function addFullPath(routes, basePath = '/') { //获取经过权限控制后的路由 function getAuthorizedRoutes({resources, admin}) { - if (admin === true) return finalAuthorityRoutes + if (admin === true) return finalRoutes if (!resources) return [] - filter(finalAuthorityRoutes, i => !needAuth(i) || i.fullPath in resources) - return finalAuthorityRoutes + filter(finalRoutes, i => !needAuth(i) || i.fullPath in resources) + return finalRoutes } //若没有children且未通过,则删除,若有,当children长度为0时删除 diff --git a/vue/src/util/auth.js b/vue/src/util/auth.js index e4b6e72..b38b68f 100644 --- a/vue/src/util/auth.js +++ b/vue/src/util/auth.js @@ -1,10 +1,14 @@ import store from '@/store' +import {isEmpty} from "@/util/index" +//判断路由是否需要鉴权 export function needAuth(route) { if (route.path.startsWith('/redirect')) return false - return !route.meta || !route.meta.noAuth + const {meta} = route + return !meta || !meta.noAuth || isEmpty(meta.title) && isEmpty(meta.dynamicTitle) } +//接口权限判断,有权限则返回true export function auth(path) { if (store.state.user.admin === true) return true diff --git a/vue/src/view/example/icon/indexPage.vue b/vue/src/view/example/icon/indexPage.vue index ea463ed..46030fa 100644 --- a/vue/src/view/example/icon/indexPage.vue +++ b/vue/src/view/example/icon/indexPage.vue @@ -7,13 +7,13 @@ -
+
{{ item }}
-
+
{{ item.replace('el-icon-', '') }}
@@ -28,20 +28,8 @@ import elementIcons from './element-icon' export default { name: "icons", - data() { - return { - svgIcons, - elementIcons - } - }, - methods: { - generateIconCode(symbol) { - return `` - }, - generateElementIconCode(symbol) { - return `` - }, - } + + data: () => ({svgIcons, elementIcons}) }