动吧项目(权限管理子系统)学习-菜单管理

1. 页面数据呈现

1.1 设计说明

菜单管理又称为资源管理,是系统资源对外的表现形式。本模块主要是实现对菜
单进行添加、修改、查询、删除等操作

1.1.1 数据库说明

动吧项目(权限管理子系统)学习-菜单管理_第1张图片

1.1.2 多表关系结构图

动吧项目(权限管理子系统)学习-菜单管理_第2张图片
动吧项目(权限管理子系统)学习-菜单管理_第3张图片

1.2 原型设计图

1.2.1 首页

动吧项目(权限管理子系统)学习-菜单管理_第4张图片

1.2.1 添加页面

动吧项目(权限管理子系统)学习-菜单管理_第5张图片

1.2.2 编辑页面

动吧项目(权限管理子系统)学习-菜单管理_第6张图片

1.3 服务端实现

1.3.1 时序图分析

动吧项目(权限管理子系统)学习-菜单管理_第7张图片

1.3.2 编辑PageController

动吧项目(权限管理子系统)学习-菜单管理_第8张图片

@Controller
public class PageController {
	/*
		//该代码通用性不够强
        @GetMapping("/menu/menu_list")
	    public String doMenuUI(){
	       return "sys/menu_list";
	    }
	*/
    //通过rest风格的url处理客户端的ui请求
    @GetMapping("/{module}/{moduleUI}")
    public String doModuleUI(@PathVariable String moduleUI){
        return "sys/"+moduleUI;
    }

1.3.3 在start.html上编辑点击事件

说明:点击菜单按钮,回显menu_list页面的跳转


1.3.4 点击页面实现的效果展示

动吧项目(权限管理子系统)学习-菜单管理_第9张图片

1.4 菜单列表页面实现

1.4.1 时序图

动吧项目(权限管理子系统)学习-菜单管理_第10张图片

1.4.2 编辑数据层(SysMenuDao)

动吧项目(权限管理子系统)学习-菜单管理_第11张图片

package cn.tedu.dbadmin.dao;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;
@Mapper
public interface SysMenuDao {
    List> findObjects();
}

1.4.3 在Mapper.xml文件中编辑sql语句

动吧项目(权限管理子系统)学习-菜单管理_第12张图片




    
    
    
    

1.4.4 编辑业务层接口以及实现类(SysMenuServiceImpl)

动吧项目(权限管理子系统)学习-菜单管理_第13张图片

package cn.tedu.dbadmin.service;


import java.util.List;
import java.util.Map;
public interface SysMenuService {
    List> findObjects();
}

package cn.tedu.dbadmin.service;

import cn.tedu.dbadmin.dao.SysMenuDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
@Service
public class SysMenuServiceImpl implements SysMenuService {

    @Autowired
    private SysMenuDao sysMenuDao;

    @Override
    public List> findObjects() {
        return  sysMenuDao.findObjects();
    }
}

1.4.5 编辑控制层(Controller)

动吧项目(权限管理子系统)学习-菜单管理_第14张图片

@RestController
public class SysMenuController {
    @Autowired
    private SysMenuService sysMenuService;
    @GetMapping("/menu/doFindObjects")
    public JsonResult doFindObjects() throws InterruptedException {
        return new JsonResult(sysMenuService.findObjects());
    }
}

1.4.6 页面数据呈现

动吧项目(权限管理子系统)学习-菜单管理_第15张图片

1.5 实现JQuery中treeGrid

1.5.1 创建web项目,编辑menu-01.html,实现简单跨域访问

动吧项目(权限管理子系统)学习-菜单管理_第16张图片




    
    Title
    
    


  

The Menu Page

id name parentName
Data is loading ....

动吧项目(权限管理子系统)学习-菜单管理_第17张图片

1.5.2 引入libs相关js文件

动吧项目(权限管理子系统)学习-菜单管理_第18张图片

1.5.3 编辑menu-treegrid.html

  • 使用Bootstrap



    
    Title
    
    
    
    


  

The Menu Page

动吧项目(权限管理子系统)学习-菜单管理_第19张图片

2. 删除操作实现

2.1 业务说明

基于用户在列表页面上选择的的菜单记录 ID,执行删除操作,本次删除业务实现中,首先
要基于 id 判断当前菜单是否有子菜单,假如有子菜单则不允许删除,没有则先删除菜单角
色关系数据,然后再删除菜单自身信息。

2.2 时序图

动吧项目(权限管理子系统)学习-菜单管理_第20张图片

2.3 实现过程

2.3.1 编辑SysRoleMenuDao

package cn.tedu.dbadmin.dao;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface SysRoleMenuDao {
    //基于菜单id删除角色菜单关系
    int deleteObjectsByMenuId(Integer id);
}

2.3.2 编辑SysMenuDao

package cn.tedu.dbadmin.dao;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;
@Mapper
public interface SysMenuDao {
    List> findObjects();

    //根据菜单查询子菜单数量
    int getChildCount(Integer id);
    //基于菜单id删除菜单
    int deleteObject(Integer id);
}

2.3.3 编辑SysRoleMenuMapper




    
        delete from sys_role_menus
        where #{id} = menu_id
    

2.3.4 编辑SysMenuMapper

    

    
        delete from sys_menus
        where id = #{id};
    

2.3.5 编辑业务接口和实现类

package cn.tedu.dbadmin.service;


import java.util.List;
import java.util.Map;
public interface SysMenuService {
    List> findObjects();

    int deleteObject(Integer id);
}

package cn.tedu.dbadmin.service;

import cn.tedu.dbadmin.dao.SysMenuDao;
import cn.tedu.dbadmin.dao.SysRoleMenuDao;
import cn.tedu.dbcommon.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
@Service
public class SysMenuServiceImpl implements SysMenuService {

    @Autowired
    private SysMenuDao sysMenuDao;

    @Autowired
    private SysRoleMenuDao sysRoleMenuDao;

    @Override
    public List> findObjects() {
//        List> list = sysMenuDao.findObjects();
//        return list;
        return sysMenuDao.findObjects();
    }

    @Override
    public int deleteObject(Integer id) {
        if(id == null || id < 1){
            throw new IllegalArgumentException("请先选择");
        }
        //查询子菜单数量
        int rows = sysMenuDao.getChildCount(id);
        if(rows > 1){
            throw new ServiceException("请先删除子菜单");
        }
        //删除角色菜单关系
        sysRoleMenuDao.deleteObjectsByMenuId(id);
        //删除菜单
        int row = sysMenuDao.deleteObject(id);

        return row;
    }
}

2.3.5 编辑SysMenuController

package cn.tedu.dbadmin.controller;

import cn.tedu.dbadmin.service.SysMenuService;
import cn.tedu.dbcommon.pojo.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/menu/")
@RestController
public class SysMenuController {

    @Autowired
    private SysMenuService sysMenuService;

    @RequestMapping("doFindObjects")
    public JsonResult doFindObjects(){
        return new JsonResult(sysMenuService.findObjects());

    }

    @RequestMapping("doDeleteObject")
    public JsonResult doDeleteObject(Integer id){
        sysMenuService.deleteObject(id);
        return new JsonResult("删除成功");
    }
}

3. 添加操作实现

3.1 上级菜单数据加载以及实现

动吧项目(权限管理子系统)学习-菜单管理_第21张图片

3.1.1 定义pojo对象封装查询到的菜单信息

动吧项目(权限管理子系统)学习-菜单管理_第22张图片

package com.cy.pj.common.pojo;

import lombok.Data;

import java.io.Serializable;

@Data
public class Node implements Serializable {
    private static final long serialVersionUID = -7022202313802285223L;
    private Integer id;
    private String name;
    private Integer parentId;
}

3.1.2 编辑SysMenuDao

@Select("select id,name,parentId from sys_menus")
       public List findZtreeMenuNodes();

3.1.3 编辑SysMenuServiceImpl

public List findZtreeMenuNodes(){
        return sysMenuDao.findZtreeMenuNodes();
    }

3.1.4 编辑SysMenuController

@GetMapping("/menu/doFindZtreeMenuNodes")
    public JsonResult doFindZtreeMenuNodes(){
        return new JsonResult(sysMenuService.findZtreeMenuNodes());
    }

3.2 客户端树结构呈现shou

3.2.1 框架来源

动吧项目(权限管理子系统)学习-菜单管理_第23张图片

3.2.2 在web项目中创建menu-ztree.html

说明: 实现树结构菜单的页面呈现




    
    Title
    



    3.2.3 页面呈现效果

    动吧项目(权限管理子系统)学习-菜单管理_第24张图片

    3.3 添加操作具体实现

    3.3.1 时序图

    动吧项目(权限管理子系统)学习-菜单管理_第25张图片

    3.3.2 定义SysMenu的pojo类封装添加数据

    动吧项目(权限管理子系统)学习-菜单管理_第26张图片

    package cn.tedu.dbcommon.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    import java.util.Date;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class SysMenu implements Serializable {
        private static final long serialVersionUID = 8049305945150183138L;
    
        private Integer id;//菜单id
        private String name;//菜单名称
        private String url;//菜单URL
        private Integer type = 1;
        private Integer sort;//菜单序号
        private String note;//菜单备注
        private Integer parentId;//上级菜单id
        private String permission;//授权标识
        private String createdUser;//创建用户
        private String modifiedUser;//修改用户
        private Date createdTime;//创建时间
        private Date modifiedTime;//修改时间
    
    }
    
    

    3.3.3 编辑SysMenuDao

    int insertObject(SysMenu menu);
    

    3.3.4 编辑SysMenuMapper

    
            insert into sys_menus
                (name,url,type,sort,note,parentId,permission,
                createdTime,modifiedTime,createdUser,modifiedUser)
            values
                (#{name},#{url},#{type},#{sort},#{note},#{parentId},
                #{permission},now(),now(),#{createdUser},#{modifiedUser})
          
    

    3.3.5 编辑SysMenuService

    int saveObject(SysMenu entity);
    

    3.3.6 编辑SysMenuServiceImpl

    @Override
        public int saveObject(SysMenu entity) {
            if(entity==null)
                throw new IllegalArgumentException("保存对象不能为空");
            if(entity.getName()==null||"".equals(entity.getName()))
                throw new IllegalArgumentException("菜单名不允许为空");
            //........
            int rows=sysMenuDao.insertObject(entity);
            return rows;
        }
    

    3.3.7 编辑SysMenuController

    @PostMapping("/menu/doSaveObject")
        public JsonResult doSaveObject(SysMenu entity){
            sysMenuService.saveObject(entity);
            return new JsonResult("save ok");
        }
    

    3.3.7 实现效果图

    动吧项目(权限管理子系统)学习-菜单管理_第27张图片

    4. 修改操作实现

    4.1 时序图

    动吧项目(权限管理子系统)学习-菜单管理_第28张图片

    4.2 点击修改实现页面数据呈现

    动吧项目(权限管理子系统)学习-菜单管理_第29张图片
    动吧项目(权限管理子系统)学习-菜单管理_第30张图片

    4.3 修改操作实现

    4.3.1 SysMenuDao

    int updateObject(SysMenu menu);
    

    4.3.2 SysMenuMapper

    
    update sys_menus
     set
     name=#{name},
     type=#{type},
     sort=#{sort},
     url=#{url},
     parentId=#{parentId},
     permission=#{permission},
     modifiedUser=#{modifiedUser},
     modifiedTime=now()
     where id=#{id}
          
    

    4.3.3 SysMenuService

    int updateObject(SysMenu entity);
    

    4.3.4 SysMenuServiceImpl

     @Override
        public int updateObject(SysMenu entity) {
            if(entity==null)
                throw new IllegalArgumentException("保存对象不能为空");
            if(entity.getName()==null||"".equals(entity.getName()))
                throw new IllegalArgumentException("菜单名不允许为空");
            //........
            int rows=sysMenuDao.updateObject(entity);
            return rows;
        }
    

    4.3.5 SysMenuController

    @PostMapping("/menu/doUpdateObject")
        public JsonResult doUpateObject(SysMenu entity){
            sysMenuService.updateObject(entity);
            return new JsonResult("update ok");
        }
    

    5. Bug总结

    在这里插入图片描述

    • 根据日志提示,在红色框内添加返回结果类型:
      动吧项目(权限管理子系统)学习-菜单管理_第31张图片
    • 查看POJO类JsonResult对象是否没有添加@Data注解,即没有get/set/toString方法
      在这里插入图片描述

    你可能感兴趣的:(java)