SSM整合ProjectDay02-菜单管理:菜单模块-添加-操作【zTree插件使用】

一、Controller-加载菜单编辑页面SysMenuController

//添加菜单编辑页面
    @RequestMapping("doMenuEditUI")
    public String doMenuEditUI(){
       return "sys/menu_edit";//为什么是string类型?因为是绑定页面,传递一个url
    }

二、页面
1.menu_list
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

$(function(){
		doGetObjects();
	//	按钮事件注册--删除按钮
		$(".input-group-btn")
				.on("click",".btn-delete",doDeleteObject)  //删除
				.on("click",".btn-add",doLoadEditUI)    //添加菜单
		
	});

	//菜单添加操作
	function doLoadEditUI() {
	    var title;
	    if($(this).hasClass("btn-add")){
	    	title="添加菜单信息";
		}

	//    2.加载异步编辑页面
		var url="menu/doMenuEditUI";
		$("#mainContentId").load(url,function () {
			            $(".box-title").html(title);

		}); //假如mainContentId上有内容,则移除,变为新内容

	}

由 menu_edit.html中的添加按钮,得知名称,使用方法 $(".box-title").html(title);

结果:
在这里插入图片描述

2.menu_edit

var zTree; 
  //初始化zTree时会用到
  var setting = {
  	data : {
  		simpleData : {
  			enable : true,
  			idKey : "id",  //节点数据中保存唯一标识的属性名称
  			pIdKey : "parentId",  //节点数据中保存其父节点唯一标识的属性名称
  			rootPId : null  //根节点id
  		}//json 格式javascript对象
  	}
  }//json 格式的javascript对象
  
 $(document).ready(function(){
	 $(".form-horizontal")
	 .on("click",".load-sys-menu",doLoadZtreeNodes);
	 
	 $(".box-footer")
	 .on("click",".btn-cancel",doCancel)
	 .on("click",".btn-save",doSaveOrUpdate);
	 
	 
	 $("#menuLayer")
     .on("click",".btn-cancel",doHideTree)
     .on("click",".btn-confirm",doSetSelectNode)
     
     //获取#mainContentId上绑定的数据
     var rowData=$("#mainContentId").data("rowData");
	 if(rowData)doInitEditFormData(rowData);
 });
  
  function doInitEditFormData(data){
		/*   $("input[type='radio']").each(function(){
			  if($(this).val()==data.type){
				  $(this).prop("checked",true);
			  }
		  }) */
		  $(".typeRadio input[value='"+data.type+"']").prop("checked",true);
		  $("#nameId").val(data.name);
		  $("#sortId").val(data.sort);
		  $("#urlId").val(data.url);
		  $("#permissionId").val(data.permission);
		  $("#parentId").val(data.parentName);
		  $("#parentId").data("parentId",data.parentId);
  }

  function doCancel(){
	  var url="menu/doMenuListUI.do";
	  $("#mainContentId").load(url,function(){
		  $("#mainContentId").removeData();
		  $("#parentId").removeData("parentId"); 
	  });
  }
  
  function doSaveOrUpdate(){//insert or update
	  //1.获取表单数据
	  var data=doGetEditFormData();
	  var rowData=$("#mainContentId").data("rowData");
	  if(rowData)data.id=rowData.id;
	  //2.异步提交表单数据
	  var insertUrl="menu/doSaveObject.do";
	  var updateUrl="menu/doUpdateObject.do";
	  var url=rowData?updateUrl:insertUrl;
	  $.post(url,data,function(result){
		  if(result.state==1){
			  alert(result.message);
			  doCancel();
		  }else{
			  alert(result.message);
		  }
	  })
  }
  function doGetEditFormData(){
	  var params={
	    type:$("form input[name='typeId']:checked").val(),
		name:$("#nameId").val(),
		url:$("#urlId").val(),
		sort:$("#sortId").val(),
		permission:$("#permissionId").val(),
		parentId:$("#parentId").data("parentId")
	  }
	  return params;
  }
  function doSetSelectNode(){
	  //1.获取选中的节点对象
	  var nodes=zTree.getSelectedNodes();
	  if(nodes.length==0){
		  alert("请先选中");
		  return;
	  }
	  var node=nodes[0];
	  console.log(node);
	  //2.将对象中内容,填充到表单
	  $("#parentId").data("parentId",node.id);
	  $("#parentId").val(node.name);
	  //3.隐藏树对象
	  doHideTree();
  }

function doHideTree(){
	 $("#menuLayer").css("display","none");
}
function doLoadZtreeNodes(){
	  //显示div
	  $("#menuLayer").css("display","block");
	  var url="menu/doFindZtreeMenuNodes.do";
	  //异步加载数据,并初始化数据
	  $.getJSON(url,function(result){
		  if(result.state==1){
			  //使用init函数需要先引入ztree对应的js文件
			  zTree=$.fn.zTree.init(
					  $("#menuTree"),
					  setting,
					  result.data);
		  }else{
			  alert(result.message);
		  }
	  })
  }

三、Node类。 封装信息。 菜单的id 菜单的name 菜单的parentId

package com.jt.common.vo;

import java.io.Serializable;

/**
 * @author : zhenzhen
 * @date : 2019/3/17 0:45
 */

public class Node implements Serializable {

    private static final long serialVersionUID = -6577397050669133046L;

    private Integer id;
    private String name;
    private Integer parentId;
    
    @Override
    public String toString() {
        return "Node{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", parentId=" + parentId +
                '}';
    }
    
    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }
}

四、DAO-sysMenuDao

//    查询ztree呈现数据时需要的菜单信息 用List封装
    List<Node> findZtreeMenuNodes();

五、mapper.xml-SysMenuMapper.xml

    <!--查询菜单节点信息-->
    <select id="findZtreeMenuNodes" resultType="com.jt.common.vo.Node">
          select id,name,parentId
          from sys_menus
    </select>

六、service-SysMenuService

//    //    查询ztree呈现数据时需要的菜单信息 用List封装
//    List<Node> findZtreeMenuNodes();
      List<Node> findZtreeMenuNodes();

Impl:

//    查树中子节点
    @Override
    public List<Node> findZtreeMenuNodes() {
        return sysMenuDao.findZtreeMenuNodes();
    }

七、Controller-SysMenuController

//    查询菜单子节点树结构显示
    @RequestMapping("doFindZtreeMenuNodes")
    @ResponseBody
    public JsonResult doFindZtreeMenuNodes(){
        return new JsonResult(sysMenuService.findZtreeMenuNodes());
    }

在这里插入图片描述
取到 的信息在页面上呈现
在这里插入图片描述
一、menu_edit显示树结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拿到对象固定写法

 $(function () {
      $(".form-horizontal").on("click",".load-sys-menu",doLoadZtreeNodes);
  });

     
     function doLoadZtreeNodes() {
          //显示div
          $("#menuLayer").css("display","block");
          //     加载异步
          var url="menu/doFindZtreeMenuNodes";
          $.getJSON(url,function(result){
             if(result.state==1){
                zTree=$.fn.zTree.init(
                    $("#menuTree"),
                    setting,
                    result.data);
             }else{
                 alert(result.message);
             }
         })
          
     }

在这里插入图片描述
二、取消menu_edit显示的树结构【关闭】
在这里插入图片描述

  $(function () {
      $(".form-horizontal").on("click",".load-sys-menu",doLoadZtreeNodes);  //显示菜单树
      $("#menuLayer").on("click",".btn-cancel",doHideTree);   //给树取消显示函数
  });

     //给树取消显示函数
     function doHideTree() {
         $("#menuLayer").css("display","none");//树结构不显示
     }

在这里插入图片描述
在这里插入图片描述
三、修改选择的菜单:

$(function () {
      $(".form-horizontal").on("click",".load-sys-menu",doLoadZtreeNodes);  //显示菜单树
      $("#menuLayer").on("click",".btn-cancel",doHideTree)   //给树取消显示函数
          .on("click",".btn-confirm",doSetSelectNode)//   设置选中节点

  });

     //   设置选中节点
     function doSetSelectNode() {
     //   获取选中节点
         var nodes=zTree.getSelectedNodes();
         if(nodes.length==0){  //没有选中数据
             console.log("没选中啊");
             alert("请先选中");
             return;
         }
         var node=nodes[0];
         console.log("node:"+node);// 控制台打印nodes数据
     //    将选中内容 写入数据库
         $("#parentId").data("parentId",node.id);  //?  绑定id
         $("#parentId").val(node.name);         //?   呈现名字
     //    树隐藏对象
         doHideTree();
}

在这里插入图片描述
在这里插入图片描述
四、上传内容至数据库,要创建实体类。由POJO接收。
1.新建SysMenu类
在这里插入图片描述

public class SysMenu implements Serializable {

    private static final long serialVersionUID = -8113796482755464549L;
    private Integer id;
    private String name;
    private String url;
    private Integer type;
    private Integer sort;
    private String note;
    private Integer parentId;
    private String permission;
    private Date createdTime;
    private Date modifiedTime;
    private String createdUser;
    private String modifiedUser;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Integer getSort() {
        return sort;
    }

    public void setSort(Integer sort) {
        this.sort = sort;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    public String getPermission() {
        return permission;
    }

    public void setPermission(String permission) {
        this.permission = permission;
    }

    public Date getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }

    public Date getModifiedTime() {
        return modifiedTime;
    }

    public void setModifiedTime(Date modifiedTime) {
        this.modifiedTime = modifiedTime;
    }

    public String getCreatedUser() {
        return createdUser;
    }

    public void setCreatedUser(String createdUser) {
        this.createdUser = createdUser;
    }

    public String getModifiedUser() {
        return modifiedUser;
    }

    public void setModifiedUser(String modifiedUser) {
        this.modifiedUser = modifiedUser;
    }
}

二、Dao

//    菜单添加内容写入数据库 -按条写入
    int insertObject(SysMenu entity);

三、Mapper.xml

 <!--菜单操作中添加的信息-->
    <insert id="insertObject" parameterType="com.jt.sys.SysMenu">
        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})
    </insert>

四、service

//    添加菜单存入数据库
    int saveObject(SysMenu entity);

Impl:

//    保存菜单添加的数据存入数据库【增加】
    @Override
    public int saveObject(SysMenu entity) {
//        验证信息合法性
        if(entity==null){
            throw new IllegalArgumentException("保存的对象为空");
        }
//                  ①不允许重复
        if(StringUtils.isEmpty(entity.getPermission())) {
            throw new IllegalArgumentException("权限标识不能为空");
        }
        //             扩展     ②基于用户输入的Permission查询是否重复【很多】
        if(StringUtils.isEmpty(entity.getName())){
            throw new IllegalArgumentException("菜单名不能为空");
        }
//        保存数据
        int rows = sysMenuDao.insertObject(entity);    //按行数返回
//        返回结果
        return rows;
    }

五、Controller

//    添加菜单信息入库
    @RequestMapping("doSaveObjects")
    @ResponseBody
    public JsonResult doSaveObjects(SysMenu entity){
        sysMenuService.saveObject(entity);
        return new JsonResult("Save Ok!");
    }

六、页面响应。点击save按钮【绑定事件】,异步提交【url 】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_31416771/article/details/88610465
今日推荐