Ztree

引入css和js

<link rel="stylesheet" href="/${appName}/commons/jslib/ztreeV3.5.15/css/zTreeStyle/zTreeStyle.css" type="text/css"></link>
<script type="text/javascript" src="/${appName}/commons/jslib/ztreeV3.5.15/jquery.ztree.all-3.5.js"></script>

html

<ul id="treeModule" class="ztree" style="height:280px"></ul>

加载树

        /*配置*/var setting = {check: {   //显示多选框,节点中checked字段控制enable: true,autoCheckTrigger: true,chkStyle: "checkbox",chkboxType: { "Y": "ps", "N": "ps" }},data: {key:{name:"moduleName"   //显示节点字段
                },simpleData: {enable: true,idKey: "moduleCode",   //id字段pIdKey: "parentCode",  //父级id字段rootPId: 0   //根id值
                }}};/**菜单显示*/var roleCode_access;function accessShow(roleCode){roleCode_access = roleCode;$('#accesswin').modal('show');//
            $.ajax({url:'/${appName}/manager/moduleController/getAllModules',type:'post',async:'true',cache:false,data:{roleCode:roleCode_access},dataType:'json',success: function(data){$.fn.zTree.init($("#treeModule"), setting, data);}});}

获取勾选框的值

            var mids ='';var treeObj = $.fn.zTree.getZTreeObj("treeModule");var nodes = treeObj.getCheckedNodes(true);for(i=0;i<nodes.length;i++){mids = mids+nodes[i].moduleCode+',';}

后台代码

SysModule.java

public class SysModule {private String moduleCode;private String moduleName;private String modulePath;private String parentCode;private String isLeaf;private String sortNumber;private String checked;   //是否勾选private String open = "true";   //是否展开,默认展开
}

Controller层

    /*** 获取所有菜单* @return*/@RequestMapping("getAllModules")@ResponseBodypublic List<SysModule> getAllModules(String roleCode){List<SysModule> result = moduleService.getAllModules();List<SysModule> binded = moduleService.getModulesByRoleCode(roleCode);Iterator<SysModule> iterator = result.iterator();/*遍历所有菜单*/while (iterator.hasNext()){SysModule module= iterator.next();/*遍历所有已绑定的菜单*/Iterator<SysModule> iterator_binded = binded.iterator();while (iterator_binded.hasNext()){SysModule module_binded= iterator_binded.next();if (module.getModuleCode().equals(module_binded.getModuleCode())){module.setChecked("true");}}}return result;}

Service层

    /*** 获取所有菜单* @return*/public List<SysModule> getAllModules(){List<SysModule> modules = moduleMapper.getAllModules();return modules;}/*** 根据角色code获取绑定的菜单* @param roleCode* @return*/public List<SysModule> getModulesByRoleCode(String roleCode){List<SysModule> modules = moduleMapper.getModulesByRoleCode(roleCode);return modules;}

Mybatis层

    /*** 获取所有菜单* @return*/List<SysModule> getAllModules();/*** 根据角色编码获取绑定的菜单* @param roleCode* @return*/public List<SysModule> getModulesByRoleCode(String roleCode);<!--获取所有菜单--><select id="getAllModules" resultType="com.autumn.pojo.SysModule">select * from sys_module</select><!--根据rolecode获取绑定的菜单--><select id="getModulesByRoleCode" resultType="com.autumn.pojo.SysModule">select sm.* from sys_module smleft join sys_role_module srm on sm.moduleCode = srm.moduleCodewhere srm.roleCode= #{roleCode}</select>

数据库 

CREATE TABLE IF NOT EXISTS `sys_module` (`moduleCode` varchar(36) NOT NULL COMMENT '模块编号',`moduleName` varchar(50) DEFAULT NULL COMMENT '模块名称',`modulePath` varchar(1000) DEFAULT NULL COMMENT '模块访问路径',`parentCode` varchar(36) DEFAULT NULL COMMENT '父模块编号',`isLeaf` int(11) DEFAULT NULL COMMENT '是否叶子节点:0 否,1 是',`sortNumber` int(11) DEFAULT NULL COMMENT '排序号',PRIMARY KEY (`moduleCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模块表';CREATE TABLE IF NOT EXISTS `sys_role` (`roleCode` varchar(36) NOT NULL COMMENT '角色编号',`roleName` varchar(50) NOT NULL COMMENT '角色名称',PRIMARY KEY (`roleCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';CREATE TABLE IF NOT EXISTS `sys_role_module` (`rmId` varchar(36) NOT NULL COMMENT '唯一编号',`roleCode` varchar(36) NOT NULL COMMENT '角色编号',`moduleCode` varchar(50) NOT NULL COMMENT '模块编号',PRIMARY KEY (`rmId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户角色-模块关联表';

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过IDE生成和手动call调用webservice

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 通过IDE自动生成的代码调用webservice服务 我们的IDE一般来说都是能够通过各种各样的工具来支持我们的开发使我们的开发变得更加的便捷。…

前端性能优化之Lazyload

前端性能优化之Lazyload (Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中&#xff0c;界面和效果正在变得越来越狂拽炫酷&#xff0c;与此同时性能也是不得不提的问题。有些项目&#xff0c;页面长&#xff0c;图片多&#xff0c;内容丰富。像商城…

mysql查最大字符串

select MAX(comp_code0) from t_base_company字符串 0 把字符串转成数字转载于:https://www.cnblogs.com/feifeicui/p/9726401.html

中国联通被指乱扣费 返还金额限制用

摘要&#xff1a;宋先生的联通卡开通的是30G加100MB流量的套餐&#xff0c;宋先生上网认真核实了手机清单&#xff0c;发现近期上网流量从未超出。这回联通客服的解释是&#xff1a;“乱扣的费用已经在4月29日返还到你的卡里&#xff0c;这笔费用为‘隐藏扣费’&#xff0c;你是…

JAVA使用FTPClient类读写FTP

见&#xff1a;http://blog.csdn.net/kardelpeng/article/details/6588284 1.首先先导入相关jar包 2.创建一个连接FTP的工具类FTPUtil.Java [java] view plaincopy package com.metarnet.ftp.util; import java.io.IOException; import java.io.InputStream; import j…

揭秘一线互联网企业 前端JavaScript高级面试

第1章 课程介绍本章主要介绍课程的知识大纲&#xff0c;每个章节的解决顺序和主要内容。1-1 导学1-2 课程重要提示1-3 架构 第2章 ES6 语法本章主要讲解工作中最常用的 ES6 语法&#xff0c;包括 Module Class Promise 等语法&#xff0c;还会介绍使用 babel webpack rollup 来…

Java IO类库之ObjectInputStream和ObjectOutPutStream

2019独角兽企业重金招聘Python工程师标准>>> 一、ObjectOutputStream 1 - ObjectOuputStream介绍 ObjectOutputStream(对象字节输出流)&#xff0c;用于将一个序列化对象写入到创建ObjectOutputStream时传入的底层字节输入流中&#xff0c;通过源码可知该类继承Outp…

什么是覆盖索引?如何利用覆盖索引进行SQL语句优化?

如果你不知道什么是覆盖索引&#xff0c;那么SQL性能优化便无从谈起&#xff01; 什么是覆盖索引?如何利用索引进行SQL语句优化&#xff1f; 表结构 150多万的数据&#xff0c;这么一个简单的语句&#xff1a; 慢查询日志里居然很多用了1秒的&#xff0c;Explain的结果是&am…

ARM的商业模式是如何炼成的?

导读&#xff1a;保守、严谨&#xff0c;又有一些皇族气质&#xff0c;作为一家拥有纯正英国血统的公司&#xff0c;ARM看似呆板的作风却让其在移动互联网大潮中势如破竹&#xff0c;没有对手。也许过于看重产业链伙伴的声音&#xff0c;导致ARM的决策有些迟缓&#xff0c;比如…

java 将一段时间分割为两个连续的时间

eg: 20180901 -- 20180930 ->>>> 20180901-20180915 && 20180916-20180930 /*** 获取两日期相差天数** param beginDateStr 时间起点* param endDateStr 时间终点* param TimeType 时间类型 yyyy-MM-dd || yyyyMMdd || ....* return long /天数*/public …

java 中 FtpClient 实现 FTP 文件上传、下载

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 源代码大部分是网上找的&#xff0c;查来查去&#xff0c;找到几个可以用的例子&#xff0c;改来改去&#xff0c;揉合成现在这个样子。…

MongDB集合文档操作符

一、MongoDB - 连接1.启动 MongoDB 服务只需要在 MongoDB 安装目录的 bin 目录下执行 mongod 即可执行启动操作后&#xff0c;mongodb 在输出一些必要信息后不会输出任何信息&#xff0c;之后就等待连接的建立&#xff0c;当连接被建立后&#xff0c;就会开始打印日志信息。可以…

LIMIT M,N分页性能优化方案

利用子查询优化 说明: MySQL 并不是跳过 offset 行&#xff0c;而是取 offsetN 行&#xff0c;然后返回放弃前 offset 行&#xff0c;返回 N 行&#xff0c;那当 offset 特别大的时候&#xff0c;此时使用limit m,n效率就非常的低下。想要提升性能要么控制返回的总页数&#…

PHP获取文件后缀名

PHP获取文件后缀名是PHP学习者常见的一种操作&#xff0c;无论是在面试过程中还是PHP新手自学中。PHP获取文件后缀名都是很普遍的需要掌握的一个知识点。下面我们就给大家总结介绍PHP获取文件扩展名也就是后缀名的两种方法&#xff01;一、通过pathinfo首先大家应该知道pathinf…

Web Service 简单实例(java 版本) ,IDE自动生成客户端代码方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、客户端工程 jar 包 &#xff1a; 二、1. 服务端&#xff1a;( new 一个web service project ) package com;import javax.jws.…

最佳Linux服务器发行版

一款Linux发行版就如同一件衣服一样&#xff0c;适合自己的才是最好的选择。 对大型企业而言&#xff0c;当然首选Red Hat Enterprise Linux&#xff08;RHEL&#xff09;。Red Hat有完善的技术支持服务&#xff0c;而且在我们周围&#xff0c;非常容易找到持有Red Hat认证的技…

在线代码编辑器 Codemirror 的轻量级 React 组件

代码编辑器 CodeMirror 的轻量级 React 组件 demo uiw-react.github.io/react-codem… 特性: ? 自动根据 mode 配置加载 mode 文件。 ? 快速简单的配置 API。 安装 npm install uiw/react-codemirror --save 复制代码使用 import CodeMirror from uiw/react-codemirror; impo…

「机械」4大传动方式优劣对比:机械、电气、气压、液压

传动方式有很多种。目前应用比较多的四大类传动方式&#xff08;机械、电气、液压和气压&#xff09;中&#xff0c;没有一种动力传动是十全十美的。今天跟大家分享4种传动方式的优劣对比。 一. 机械传动 1. 齿轮传动 齿轮传动是机械传动中应用最广的一种传动形式。它的传动比较…

一次性获取多个oracle序列的值,实现关联表多数据的批量insert

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 业务 要求批量导入不小于10W条数据到 user 表&#xff0c;但是user表在 insert 每条数据的同时要 insert 一条对应数据到 customer表…