博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态菜单树加载过程
阅读量:7087 次
发布时间:2019-06-28

本文共 6331 字,大约阅读时间需要 21 分钟。

根据登录的userID查询出角色绑定的menucode,再查出所有菜单List<Module>

去除List<Module>中没有绑定的菜单

再将List<Module>建立成树形机构

在将list转为json格式字符串返回到前端

SysModule.java

public class SysModule {    private String moduleCode;    private String moduleName;    private String modulePath;    private String parentCode;    private String isLeaf;    private String sortNumber;    private List
children = new ArrayList
(); //子菜单 public String getModuleCode() { return moduleCode; } public void setModuleCode(String moduleCode) { this.moduleCode = moduleCode; } public String getModuleName() { return moduleName; } public void setModuleName(String moduleName) { this.moduleName = moduleName; } public String getModulePath() { return modulePath; } public void setModulePath(String modulePath) { this.modulePath = modulePath; } public String getParentCode() { return parentCode; } public void setParentCode(String parentCode) { this.parentCode = parentCode; } public String getIsLeaf() { return isLeaf; } public void setIsLeaf(String isLeaf) { this.isLeaf = isLeaf; } public String getSortNumber() { return sortNumber; } public void setSortNumber(String sortNumber) { this.sortNumber = sortNumber; }}

逻辑层

/**     * 根据用户id获取module列表     * @param userId     * @return     * List
*/ public List
selectModuleByUserId(String userId){ //最终的List
集合 List
result=new ArrayList
(); //查询所有的List
List
modules=dao.queryForObjectList("select * from sys_module order by sortNumber asc", null,SysModule.class); if(modules==null){ modules=new ArrayList
(); } //查询用户可以操作的模块编号String集合 List
mids=dao.queryOneColumnForMoreRows("select distinct moduleCode from sys_role_module where roleCode in (select roleCode from sys_user_role where userCode=?)", new Object[]{userId}, String.class); if(mids==null){ mids=new ArrayList
(); } //去除没有权限的叶子节点 clear(modules,mids); //建立模块层次结构 for(int i=0;i
modules,List
mids){ for(int i=0;i
ms){ for(int i=0;i
0){ //如果module的子菜单大于0时 m.getChildren().add(c); //把这个二级菜单c加入到m中 } }else if(c.getModulePath()!=null&&!c.getModulePath().trim().equals("")){ //当路径不为空时,即是m的子菜单. m.getChildren().add(c); //直接加入到m } } } } }

前端

//递归菜单  function RecMenu(m){      var result = '';            result +="
  • "; if(m.children!=null&&m.children.length>0){ //当菜单有子集时 //菜单为文件夹 result +=' '+m.moduleName+' '; result +='
  •  2018-07-17更新

    SysModule.java

    public class SysModule {    private String moduleCode;    private String moduleName;    private String modulePath;    private String parentCode;    private String isLeaf;    private String sortNumber;    private List
    children = new ArrayList
    (); //子菜单 /*Getter & Setter方法*/}

    Mybatis层

    接口层

    /**     * 根据用户id获取菜单权限(包括所有一级菜单)     * @param uid 用户id     * @return     */    List
    getModuleByUid(String uid);

    xml配置

    数据库中初始化数据

    Service层

    @Autowired    public UsersMapper usersMapper;    /**     * 根据用户id获取菜单权限(包括所有一级菜单)     * @param uid  用户id     * @return     */    public List
    getModuleByUid(String uid){ List
    modules = usersMapper.getModuleByUid(uid); return modules; }

    Controller层

    /**     * 根据用户id获取菜单权限     * @return     */    @RequestMapping("/loadpermissions")    @ResponseBody    List
    getModuleByUid(String uid, HttpServletRequest request, HttpServletResponse response){ //所有绑定的菜单,以及包括 List
    modules = loginService.getModuleByUid(uid); //最终的List
    集合,存储一级菜单 List
    result=new ArrayList
    (); //建立模块层次结构 for(int i=0;i
    0){ //当一级目录中存在子菜单时 result.add(m); //将一级目录添加到list中 } }else if(m.getParentCode()!=null&&m.getParentCode().equals("0")&&m.getModulePath()!=null&&!m.getModulePath().isEmpty()){ //当一级为菜单,不是目录时,直接添加 result.add(m); } } return result; }

    调用接口返回结果

    前端

    静态样式示例

    动态添加菜单

    //递归菜单function RecMenu(m){var result = '';result +="
  • ";if(m.children!=null&&m.children.length>0){ //当有子菜单时 result +=' '+m.moduleName+' '; //一级目录 result +='
  •  

    转载于:https://www.cnblogs.com/aeolian/p/9204524.html

    你可能感兴趣的文章
    一八年第三天晚上十点半的thinking
    查看>>
    ksh和bash区别
    查看>>
    keepalived 组播的配置
    查看>>
    华为路由器交换机配置相关功能
    查看>>
    谷歌收购眼球追踪技术公司Eyefluence,眼动关注度将成为VR的新视角
    查看>>
    【蜕变之路】第32天 使用STS创建SpringBoot项目 (2019年3月22日)
    查看>>
    Oracle之数据挖掘的更新介绍
    查看>>
    NFS
    查看>>
    Exception异常处理
    查看>>
    第二十讲 任务的挂起和恢复
    查看>>
    emmm算是来了
    查看>>
    do…while语句
    查看>>
    网络工程师成长日记413-长安大学交换机项目
    查看>>
    jenkins
    查看>>
    设置中奖概率
    查看>>
    第4章 类名作为形参和返回值
    查看>>
    Java 正则表达式
    查看>>
    CentOS6启动过程超详解分析
    查看>>
    日本互联网巨头Line和Mercari联手打造移动支付服务
    查看>>
    Rsync远程同步,实现下行 ,上行异地备份。配置rsync+inotify实时备份。
    查看>>