From d20e5ef1397b5422871161ad489a71334c55890c Mon Sep 17 00:00:00 2001 From: "271556543@qq.com" <271556543@qq.com> Date: Thu, 4 Aug 2022 10:26:44 +0800 Subject: [PATCH] 2022-8-4 --- src/store/modules/permission.js | 316 ++++++++++++++++---------------- 1 file changed, 158 insertions(+), 158 deletions(-) diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index 146b041..921250b 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -1,160 +1,160 @@ -import { - asyncRoutes, - constantRoutes -} from '@/router' -import Layout from '@/layout' -import { - getAuthMenu -} from '@/api/user.js' -/** - * Use meta.role to determine if the current user has permission - * @param roles - * @param route - */ -function hasPermission(roles, route) { - if (route.meta && route.meta.roles) { - return roles.some(role => route.meta.roles.includes(role)) - } else { - return true - } -} -/** - * 静态路由懒加载 - * @param view 格式必须为 xxx/xxx 开头不要加斜杠 - * @returns - */ -export const loadView = (view) => { - return (resolve) => require([`@/views${view}`], resolve); -} - - -/** - * Filter asynchronous routing tables by recursion - * @param routes asyncRoutes - * @param roles - */ -export function filterAsyncRoutes(routes, roles) { - const res = [] - - routes.forEach(route => { - const tmp = { - ...route - } - if (hasPermission(roles, tmp)) { - if (tmp.children) { - tmp.children = filterAsyncRoutes(tmp.children, roles) - } - res.push(tmp) - } - }) - - return res -} - -const state = { - routes: [], - addRoutes: [] -} - -/** - * 后台查询的菜单数据拼装成路由格式的数据 - * @param routes - */ -export function generaMenu(routes, data) { - data.forEach(item => { - if (item.url === "/") { - - } else { - const menu = { - path: item.url === '#' ? item.id + '_key' : item.url, - component: item.url === '#' ? Layout : loadView(item.url), - // hidden: true, - children: [], - name: 'menu_' + item.id, - meta: { - title: item.name, - id: item.id, - roles: ['admin'], - - icon: item.icon - } - } - if (item.children) { - generaMenu(menu.children, item.children) - } - routes.push(menu) - } - }) -} - -const mutations = { - SET_ROUTES: (state, routes) => { - state.addRoutes = routes - state.routes = constantRoutes.concat(routes) - } -} - - - -// const actions = { -// generateRoutes({ -// commit -// }, roles) { -// const loadMenuData = [] -// return new Promise(resolve => { -// let accessedRoutes -// let data = _routes2; -// Object.assign(loadMenuData, data) -// generaMenu(asyncRoutes, loadMenuData) -// if (roles.includes('admin')) { -// // alert(JSON.stringify(asyncRoutes)) -// accessedRoutes = asyncRoutes || [] -// } else { -// accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) -// } -// commit('SET_ROUTES', accessedRoutes) -// resolve(accessedRoutes) -// }) -// } -// } - -const actions = { - generateRoutes({ - commit - }, roles) { - return new Promise(resolve => { - const loadMenuData = [] - // 先查询后台并返回左侧菜单数据并把数据添加到路由 - getAuthMenu(state.token).then(response => { - let data = response - - //console.log(JSON.stringify(data)) - +import { + asyncRoutes, + constantRoutes +} from '@/router' +import Layout from '@/layout' +import { + getAuthMenu +} from '@/api/user.js' +/** + * Use meta.role to determine if the current user has permission + * @param roles + * @param route + */ +function hasPermission(roles, route) { + if (route.meta && route.meta.roles) { + return roles.some(role => route.meta.roles.includes(role)) + } else { + return true + } +} +/** + * 静态路由懒加载 + * @param view 格式必须为 xxx/xxx 开头不要加斜杠 + * @returns + */ +export const loadView = (view) => { + return (resolve) => require([`@/views${view}`], resolve); +} + + +/** + * Filter asynchronous routing tables by recursion + * @param routes asyncRoutes + * @param roles + */ +export function filterAsyncRoutes(routes, roles) { + const res = [] + + routes.forEach(route => { + const tmp = { + ...route + } + if (hasPermission(roles, tmp)) { + if (tmp.children) { + tmp.children = filterAsyncRoutes(tmp.children, roles) + } + res.push(tmp) + } + }) + + return res +} + +const state = { + routes: [], + addRoutes: [] +} + +/** + * 后台查询的菜单数据拼装成路由格式的数据 + * @param routes + */ +export function generaMenu(routes, data) { + data.forEach(item => { + if (item.url === "/") { + + } else { + const menu = { + path: item.url === '#' ? item.id + '_key' : item.url, + component: item.path === '#' ? Layout : loadView(item.path), + // hidden: true, + children: [], + name: 'menu_' + item.id, + meta: { + title: item.name, + id: item.id, + roles: ['admin'], + + icon: item.icon + } + } + if (item.children) { + generaMenu(menu.children, item.children) + } + routes.push(menu) + } + }) +} + +const mutations = { + SET_ROUTES: (state, routes) => { + state.addRoutes = routes + state.routes = constantRoutes.concat(routes) + } +} + + + +// const actions = { +// generateRoutes({ +// commit +// }, roles) { +// const loadMenuData = [] +// return new Promise(resolve => { +// let accessedRoutes +// let data = _routes2; +// Object.assign(loadMenuData, data) +// generaMenu(asyncRoutes, loadMenuData) +// if (roles.includes('admin')) { +// // alert(JSON.stringify(asyncRoutes)) +// accessedRoutes = asyncRoutes || [] +// } else { +// accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) +// } +// commit('SET_ROUTES', accessedRoutes) +// resolve(accessedRoutes) +// }) +// } +// } + +const actions = { + generateRoutes({ + commit + }, roles) { + return new Promise(resolve => { + const loadMenuData = [] + // 先查询后台并返回左侧菜单数据并把数据添加到路由 + getAuthMenu(state.token).then(response => { + let data = response + + //console.log(JSON.stringify(data)) + Object.assign(loadMenuData, data) - asyncRoutes.length=0; - generaMenu(asyncRoutes, loadMenuData) - let accessedRoutes - if (roles.includes('admin')) { - // alert(JSON.stringify(asyncRoutes)) - accessedRoutes = asyncRoutes || [] - } else { - accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) - } - commit('SET_ROUTES', accessedRoutes) - resolve(accessedRoutes) - - // generaMenu(asyncRoutes, data) - }).catch(error => { - console.log(error) - }) - }) - } -} - - -export default { - namespaced: true, - state, - mutations, - actions + asyncRoutes.length=0; + generaMenu(asyncRoutes, loadMenuData) + let accessedRoutes + if (roles.includes('admin')) { + // alert(JSON.stringify(asyncRoutes)) + accessedRoutes = asyncRoutes || [] + } else { + accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) + } + commit('SET_ROUTES', accessedRoutes) + resolve(accessedRoutes) + + // generaMenu(asyncRoutes, data) + }).catch(error => { + console.log(error) + }) + }) + } +} + + +export default { + namespaced: true, + state, + mutations, + actions }