若依框架学习之获取菜单下拉树

思路

  • 获取完整菜单列表,构建下拉树
  • 构建前端下拉树列表:
    1. 构建树结构,如果是顶级节点,遍历该父节点的所有子节点
    2. 递归获取子节点列表

代码

controller层

 /**
     * 获取菜单下拉树列表
     */
    @GetMapping("/treeselect")
    public AjaxResult treeselect(SysMenu menu) {
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        Long userId = loginUser.getUser().getUserId();
        List<SysMenu> menus = menuService.selectMenuList(menu, userId);
        return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
    }

service层

    /**
     * 构建前端所需下拉树列表
     *
     * @param menus
     * @return
     */
    @Override
    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) {
        List<SysMenu> menuTrees=buildMenuTree(menus);
        return menuTrees.stream().map(TreeSelect::new).collect((Collectors.toList()));
    }

    /**
     * 构建前端所需要树结构
     *
     * @param menus 菜单列表
     * @return 树结构列表
     */
    @Override
    public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
        List<SysMenu> returnList = new ArrayList<SysMenu>();
        List<Long> tempList = new ArrayList<Long>();
        for (SysMenu dept : menus) {
            tempList.add(dept.getMenuId());
        }
        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext(); ) {
            SysMenu menu = (SysMenu) iterator.next();
            // 如果是顶级节点, 遍历该父节点的所有子节点
            if (!tempList.contains(menu.getParentId())) {
                recursionFn(menus, menu);
                returnList.add(menu);
            }
        }
        if (returnList.isEmpty()) {
            returnList = menus;
        }
        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 List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) {
        List<SysMenu> tlist = new ArrayList<SysMenu>();
        Iterator<SysMenu> it = list.iterator();
        while (it.hasNext()) {
            SysMenu n = (SysMenu) it.next();
            if (n.getParentId().longValue() == t.getMenuId().longValue()) {
                tlist.add(n);
            }
        }
        return tlist;
    }

    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<SysMenu> list, SysMenu t) {
        return getChildList(list, t).size() > 0 ? true : false;
    }

treeselect

public class TreeSelect implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 节点ID */
    private Long id;

    /** 节点名称 */
    private String label;

    /** 子节点 */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<TreeSelect> children;

    public TreeSelect()
    {

    }

    public TreeSelect(SysMenu menu)
    {
        this.id = menu.getMenuId();
        this.label = menu.getMenuName();
        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getLabel()
    {
        return label;
    }

    public void setLabel(String label)
    {
        this.label = label;
    }

    public List<TreeSelect> getChildren()
    {
        return children;
    }

    public void setChildren(List<TreeSelect> children)
    {
        this.children = children;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bootstrap是一个流行的开源前端框架,用于快速构建响应式和移动设备优先的网站和Web应用程序。***插件,可以帮助开发人员轻松地创建各种各样的界面组件和布局。 以下是Bootstrap的一些主要特点和功能: 1. 响应式设计:Bootstrap支持响应式布局,可以根据设备的屏幕大小自动调整页面布局和元素的大小,以适应不同的屏幕分辨率。 2. 网格系统:Bootstrap提供了一个灵活的网格系统,可以将页面划分为12个等宽的列,方便进行页面布局和排版。 3. CSS样式:Bootstrap提供了一套现成的CSS样式,包括按钮、表单、导航、标签、表格等常用组件,可以通过简单的类名来应用这些样式。 4. 组件:Bootstrap还提供了一些常用的UI组件,如模态框、轮播图、下拉菜单、进度条等,可以通过简单的HTML结构和JavaScript插件来使用这些组件。 5. JavaScript插件:Bootstrap内置了一些常用的JavaScript插件,如弹出框、滚动监听、标签页等,可以增强页面的交互和功能。 6. 主题定制:Bootstrap提供了一些预定义的主题样式,同时也支持自定义主题,开发人员可以根据自己的需求进行样式定制。 7. 社区支持:由于Bootstrap是一个开源项目,拥有庞大的开发者社区,可以获取到大量的文档、教程和示例代码,方便学习和使用。 总的来说,Bootstrap是一个功能强大、易于使用的前端框架,可以帮助开发人员快速构建现代化的网站和Web应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值