12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { constantRoutes } from '@/router'
- import { getRouters } from '@/api/menu'
- import Layout from '@/layout/index'
- const permission = {
- state: {
- routes: [],
- sidebarRouters: []
- },
- mutations: {
- SET_ROUTES: (state, routes) => {
- state.routes = routes
- },
- SET_SIDEBAR_ROUTERS: (state, routes) => {
- state.sidebarRouters = routes
- }
- },
- actions: {
- // 生成路由
- GenerateRoutes({ commit }) {
- return new Promise(resolve => {
- // 向后端请求路由数据
- getRouters().then(res => {
- const data = JSON.parse(JSON.stringify(res.data))
- const sidebarRouters = filterSideBarRouters(data)
- const rewriteRoutes = filterAsyncRouter(data)
- rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
- sidebarRouters.unshift({ menuName: '风险办公', menuType: 'M', path: 'index' })
- commit(
- 'SET_ROUTES',
- data.filter(item => item.menuType === 'C')
- )
- commit('SET_SIDEBAR_ROUTERS', sidebarRouters)
- resolve(rewriteRoutes)
- })
- })
- }
- }
- }
- // 遍历后台传来的路由字符串,转换为组件对象
- function filterAsyncRouter(data) {
- return data
- .filter(item => item.menuType === 'C')
- .map(item => {
- return {
- path: '/' + item.path,
- component: Layout,
- hidden: true,
- children: [
- {
- path: '',
- component: loadView(item.component),
- name: item.path,
- meta: {
- title: item.menuName,
- icon: item.icon,
- menuId: item.menuId,
- parentId: item.parentId
- }
- }
- ]
- }
- })
- }
- function filterSideBarRouters(data) {
- return data.filter(item => item.menuType === 'M')
- }
- export const loadView = view => {
- if (process.env.NODE_ENV === 'development') {
- return resolve => require([`@/views/${view}`], resolve)
- } else {
- return () => import(`@/views/${view}`)
- }
- }
- export default permission
|