vue动态加载路由,动态加载菜单,找不到module

做的功能是根据用户登录,来动态加载当前用户所拥有的菜单有哪些,所用模板是vue-admin-template,这块自己也不是很理解,暂时做个记录。
 

 

1.路由导入的时候有很多坑,网上看了很多资料说用require,结果都不行,最后用import方式实现的
2.data是后台返回的数据,data_是自己写死的模拟数据,后台返回data_这种结构


3.  Object.assign(loadMenuData, data_),对象赋值一定要用深拷贝Object.assign(),不然赋值不成功

下面的文本自行选看,有的参数是其他页面的这个页面没有用到

import { asyncRoutes, constantRoutes } from '@/router'

import { getAuthMenu } from '@/api/menu'

import Layout from '@/layout'

import { setStore, getStore, removeStore } from '@/utils/storage'

/**

 * Use meta.role to determine if the current user has permission

 * 使用 meta.role 确定当前用户是否具有权限

 * @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 routes

 * @param data

 * @param is_children

 */

export function generaMenu(routes, data, is_children = false) {

    data.forEach(item => {

        const menu = {

            path: item.path,

            component: item.component === 'Layout' ? Layout : loadview(item.component),

            name: item.name,

            meta: item.meta

        }

        if (is_children === false) {

            menu.children = []

            menu.alwaysShow = item.alwaysShow

            menu.redirect = item.redirect

        }

        // if (item.children) {

        //     menu.children = [];

        // }

        if (item.children && is_children === false) {

            generaMenu(menu.children, item.children, false)

        }

        routes.push(menu)

    })

}

// 路由跳转

export const loadview = (param) => {

    // console.log('menu-ABC-------' + `@/views/${param}`);

    // return (resolve) => require([`@/views/permission/role`], resolve)

    // return (resolve) => require([`@${path}`], resolve)

    return () =>

        import (`@/views/${param}`)

}

/**

 * 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: []

}

const mutations = {

    SET_ROUTES: (state, routes) => {

        state.addRoutes = routes

        state.routes = constantRoutes.concat(routes)

    }

}

const actions = {

    generateRoutes({ commit }, roles) {

        return new Promise(resolve => {

            const loadMenuData = []

                // 先查询后台返回左侧菜单数据并将数据添加到路由

            let id = getStore('storageSystemId') //his.getters.id;

                // console.log('路由系统id:------------' + id);

            let obj = {

                id: id

            }

            getAuthMenu(obj).then(response => {

                let { data } = response;

                data.forEach(item => {

                        item.children.forEach(item1 => {

                            let lastIndexOf = item1.component.lastIndexOf("/");

                            item1.path = item1.component.substring(lastIndexOf + 1, item1.component.length);

                            item1.name = item1.component.substring(lastIndexOf + 1, item1.component.length);

                            // console.log(item1.component.substring(lastIndexOf + 1, item1.component.length));

                            // console.log(lastIndexOf);

                        })

                    })

                    // console.log(data);

                let data_ = [{

                        "path": "/permission",

                        "component": "Layout",

                        "redirect": "/permission/role",

                        "name": "系统管理",

                        "alwaysShow": true,

                        "meta": {

                            "title": "系统管理",

                            "icon": "lock"

                        },

                        "children": [{

                                "path": "role",

                                "name": "role",

                                "component": "permission/role",

                                "meta": {

                                    "title": "角色权限",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "postManagement",

                                "name": "postManagement",

                                "component": "permission/postManagement",

                                "meta": {

                                    "title": "岗位管理",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "organization",

                                "name": "organization",

                                "component": "permission/organization",

                                "meta": {

                                    "title": "组织",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "menu",

                                "name": "menu",

                                "component": "permission/menu",

                                "meta": {

                                    "title": "WEB菜单",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "menu_app",

                                "name": "menu_app",

                                "component": "permission/menu_app",

                                "meta": {

                                    "title": "APP菜单",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "menu_applet",

                                "name": "menu_applet",

                                "component": "permission/menu_applet",

                                "meta": {

                                    "title": "小程序菜单",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "subSystemTable",

                                "name": "subSystemTable",

                                "component": "permission/subSystemTable",

                                "meta": {

                                    "title": "子系统表",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "users",

                                "name": "users",

                                "component": "permission/users",

                                "meta": {

                                    "title": "用户",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "dataDictionary",

                                "name": "dataDictionary",

                                "component": "permission/dataDictionary",

                                "meta": {

                                    "title": "数据字典",

                                    "icon": "table"

                                }

                            },

                            {

                                "path": "orginals",

                                "name": "orginals",

                                "component": "permission/orginals",

                                "meta": {

                                    "title": "通讯源码",

                                    "icon": "table"

                                }

                            }

                        ]

                    },

                    {

                        "path": "/log",

                        "component": "Layout",

                        "redirect": "/",

                        "name": "日志中心",

                        "alwaysShow": true,

                        "meta": {

                            "title": "日志中心",

                            "icon": "lock"

                        },

                        "children": [{

                            "path": "loginlog",

                            "name": "loginlog",

                            "component": "log/login",

                            "meta": {

                                "title": "登录日志",

                                "icon": "table"

                            }

                        }, {

                            "path": "operlog",

                            "name": "operlog",

                            "component": "log/oper",

                            "meta": {

                                "title": "操作日志",

                                "icon": "table"

                            }

                        }]

                    },

                ]

                roles = ['admin'];

                if (response.code != 200) {

                    // alert(JSON.stringify(response.message))

                } else {

                    // data = response.data

                    // console.log(data);

                    console.log('---------09999--');

                    Object.assign(loadMenuData, data_)

                    const tempAsyncRoutes = Object.assign([], asyncRoutes)

                    generaMenu(tempAsyncRoutes, loadMenuData)

                    let accessedRoutes

                    if (roles.includes('admin')) {

                        accessedRoutes = tempAsyncRoutes || []

                    } else {

                        accessedRoutes = filterAsyncRoutes(tempAsyncRoutes, roles)

                    }

                    commit('SET_ROUTES', accessedRoutes)

                    resolve(accessedRoutes)

                }

            }).catch(error => {

                console.log(error)

            })

        })

    }

}

export default {

    namespaced: true,

    state,

    mutations,

    actions

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值