当前位置:   article > 正文

若依框架:动态路由_若依框架动态路由

若依框架动态路由

permisstion.js

          store.dispatch('GenerateRoutes').then(accessRoutes => {

根据当前用户的权限获取动态路由

  actions: {

    // 生成路由

    GenerateRoutes({ commit }) {

      return new Promise(resolve => {

        // 向后端请求路由数据

        getRouters().then(res => {

          const sdata = JSON.parse(JSON.stringify(res.data))

          const rdata = JSON.parse(JSON.stringify(res.data))

          const sidebarRoutes = filterAsyncRouter(sdata)

          const rewriteRoutes = filterAsyncRouter(rdata, false, true)

          const asyncRoutes = filterDynamicRoutes(dynamicRoutes);

          rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })

          router.addRoutes(asyncRoutes);

          commit('SET_ROUTES', rewriteRoutes)

          commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))

          commit('SET_DEFAULT_ROUTES', sidebarRoutes)

          commit('SET_TOPBAR_ROUTES', sidebarRoutes)

          resolve(rewriteRoutes)

        })

      })

    }

// 获取路由

export const getRouters = () => {

  return request({

    url: '/getRouters',

    method: 'get'

  })

}

    /**

    * 获取路由信息

    *

    * @return 路由信息

    */

    @GetMapping("getRouters")

    public AjaxResult getRouters()

    {

        Long userId = SecurityUtils.getUserId();

        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);

        return AjaxResult.success(menuService.buildMenus(menus));

    }

    /**

    * 根据用户ID查询菜单

    *

    * @param userId 用户名称

    * @return 菜单列表

    */

    @Override

    public List<SysMenu> selectMenuTreeByUserId(Long userId)

    {

        List<SysMenu> menus = null;

        if (SecurityUtils.isAdmin(userId))

        {

            menus = menuMapper.selectMenuTreeAll();

        }

        else

        {

            menus = menuMapper.selectMenuTreeByUserId(userId);

        }

        return getChildPerms(menus, 0);

    }

sys_menu表

    /**

    * 根据父节点的ID获取所有子节点

    *

    * @param list 分类表

    * @param parentId 传入的父节点ID

    * @return String

    */

    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)

    {

        List<SysMenu> returnList = new ArrayList<SysMenu>();

        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)

        {

            SysMenu t = (SysMenu) iterator.next();

            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点

            if (t.getParentId() == parentId)

            {

                recursionFn(list, t);

                returnList.add(t);

            }

        }

        return returnList;

    }

    /**

    * 递归列表

    *

    * @param list 分类表

    * @param t 子节点

    */

    private void recursionFn(List<SysMenu> list, SysMenu t)

    {

        // 得到子节点列表

        List<SysMenu> childList = getChildList(list, t);

        t.setChildren(childList);

        for (SysMenu tChild : childList)

        {

            if (hasChild(list, tChild))

            {

                recursionFn(list, tChild);

            }

        }

    }

递归退出条件

    /**

    * 判断是否有子节点

    */

    private boolean hasChild(List<SysMenu> list, SysMenu t)

    {

        return getChildList(list, t).size() > 0;

    }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/948660
推荐阅读
相关标签
  

闽ICP备14008679号