maven与layUI的权限设计
项目介绍
这次项目主要做的就是学会使用layUI做一个权限,可以适应于多个权限的使用,这里主要是3个角色,用户,角色,和菜单,实现多对多的关系,有两个中间的媒介,直接将表展示出来吧!
/*
MySQL Data Transfer
Source Host: localhost
Source Database: t_hgy
Target Host: localhost
Target Database: t_hgy
Date: 2019/7/10 ������ 23:27:12
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for part
-- ----------------------------
DROP TABLE IF EXISTS `part`;
CREATE TABLE `part` (
`part_id` int(20) NOT NULL AUTO_INCREMENT COMMENT '标识列,自增',
`part_name` varchar(150) NOT NULL COMMENT '角色名',
`description` varchar(255) DEFAULT NULL COMMENT '说明',
`statu` int(255) DEFAULT '1' COMMENT '角色状态(1可以2不可用)',
PRIMARY KEY (`part_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for part_and_permission
-- ----------------------------
DROP TABLE IF EXISTS `part_and_permission`;
CREATE TABLE `part_and_permission` (
`part_id` bigint(20) NOT NULL COMMENT '角色id',
`permission_id` bigint(20) NOT NULL COMMENT '菜单id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for permission
-- ----------------------------
DROP TABLE IF EXISTS `permission`;
CREATE TABLE `permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单id',
`name` varchar(255) DEFAULT NULL COMMENT '菜单名',
`url` varchar(255) DEFAULT NULL COMMENT '跳转路径',
`pId` bigint(20) DEFAULT NULL COMMENT '父节点id',
`type` int(255) DEFAULT NULL COMMENT '菜单类型 1菜单 2按钮',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for t_clazz
-- ----------------------------
DROP TABLE IF EXISTS `t_clazz`;
CREATE TABLE `t_clazz` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(255) DEFAULT NULL,
`cteachar` varchar(255) DEFAULT NULL,
`pic` varchar(255) DEFAULT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标识列,自增',
`user_name` varchar(255) NOT NULL COMMENT '名称',
`pwd` varchar(255) NOT NULL COMMENT '密码',
`statu` bigint(255) NOT NULL DEFAULT '1' COMMENT '默认为1即可用,0为不可用',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for user_and_part
-- ----------------------------
DROP TABLE IF EXISTS `user_and_part`;
CREATE TABLE `user_and_part` (
`user_id` bigint(20) NOT NULL COMMENT '管理人员id',
`part_id` bigint(20) NOT NULL COMMENT '角色id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `part` VALUES ('15', '普通用户', '只能进行普通数据的管理,不能进行用户和角色的管理', '1');
INSERT INTO `part` VALUES ('17', '超级管理员', '角色,用户,普通数据的管理', '1');
INSERT INTO `part` VALUES ('19', '胡桂云123', '爱的色放三', '0');
INSERT INTO `part_and_permission` VALUES ('17', '1');
INSERT INTO `part_and_permission` VALUES ('17', '2');
INSERT INTO `part_and_permission` VALUES ('17', '3');
INSERT INTO `part_and_permission` VALUES ('17', '4');
INSERT INTO `part_and_permission` VALUES ('17', '5');
INSERT INTO `part_and_permission` VALUES ('19', '4');
INSERT INTO `part_and_permission` VALUES ('19', '5');
INSERT INTO `part_and_permission` VALUES ('15', '4');
INSERT INTO `part_and_permission` VALUES ('15', '5');
INSERT INTO `permission` VALUES ('1', '权限管理', null, '0', '1');
INSERT INTO `permission` VALUES ('2', '用户管理', '/userManagement.jsp', '1', '1');
INSERT INTO `permission` VALUES ('3', '角色管理', '/partManagement.jsp', '1', '1');
INSERT INTO `permission` VALUES ('4', '普通数据', null, '0', '1');
INSERT INTO `permission` VALUES ('5', '普通数据管理', '/Clazz.jsp', '4', '1');
INSERT INTO `t_clazz` VALUES ('1', 'T224', '李晓', '东方故事');
INSERT INTO `t_clazz` VALUES ('2', 'T225', '小四', '阿斯蒂芬');
INSERT INTO `t_clazz` VALUES ('3', 'T226', '李晓', '散打');
INSERT INTO `user` VALUES ('38', 'admin', '123', '1');
INSERT INTO `user` VALUES ('39', '胡桂云', '123', '1');
INSERT INTO `user_and_part` VALUES ('38', '17');
INSERT INTO `user_and_part` VALUES ('39', '15');
目录结构
这里需要说一下那个formSelects-v3.js是layUI的一个插件,用户界面角色下拉框

文件配置
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hu</groupId>
<artifactId>T224</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>T224 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- mySql 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!-- 引用struts2框架核心依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.16</version>
</dependency>
<!-- hutoll工具包 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
<build>
<finalName>T224</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
wab.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
<filter>
<filter-name>EncodingFiter</filter-name>
<filter-class>com.crud.util.EncodingFiter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFiter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
前台代码
登录的login.jsp 与login.js
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/js/layui/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/css/login.css">
<script src="${pageContext.request.contextPath }/static/js/layui/layui.all.js"></script>
<style>
video {
object-fit: fill;
width: 1420px;
height: 700px;
}
</style>
</head>
<body>
<input type="hidden" id="path" value="${pageContext.request.contextPath}">
<video class="video-player" preload="auto" autoplay="autoplay" loop="loop" data-height="1080"
width="1920">
<!---->
<source src="${pageContext.request.contextPath }/static/admin/mv.mp4" type="video/mp4">
</video>
<div class="video_mask"></div>
<div class="login">
<h1>管理员登录</h1>
<form class="layui-form">
<div class="layui-form-item">
<input class="layui-input" id="user_name" name="user_name" placeholder="用户名" value=""
lay-verify="required" lay-verType="tips" type="text" autocomplete="off">
</div>
<div class="layui-form-item">
<input class="layui-input" id="pwd" name="pwd" placeholder="密码" value=""
lay-verify="required" lay-verType="tips" type="password" autocomplete="off">
</div>
<button class="layui-btn login_btn" lay-submit="" lay-filter="login">登录</button>
</form>
</div>
<script src="${pageContext.request.contextPath }/static/js/login.js"></script>
</body>
</html>
login.js
layui.config({
base: "static/js/"
}).use(['form', 'layer'], function () {
var form = layui.form,
layer = parent.layer === undefined ? layui.layer : parent.layer,
$ = layui.jquery;
//获取绝对路径
var path = $("#path").val();
//登录按钮事件
form.on("submit(login)", function (data) {
// $.ajaxSettings.async = false;
$.post(path + "/sy/userAction_login.action", {
user_name: $('#user_name').val(),
pwd: $('#pwd').val()
}, function (data) {
console.log(data);
if (data > 0) {//登录成功
layer.msg("登录成功", {icon:1,time: 1000}, function () {
parent.location.href = path + '/index.jsp';
})
} else {
layer.msg("登录失败,帐号或密码错误或帐号不可用", {icon:2,time: 1000}, function () {
})
}
})
return false;
})
});
function refreshCode() {
var captcha = document.getElementById("captcha");
captcha.src = "/captcha.jpg?t=" + new Date().getTime();
}
用户管理和js
usermanagement.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet"
href="${pageContext.request.contextPath}/static/js/layui/css/layui.css"
media="all">
<script type="text/javascript"
src="${pageContext.request.contextPath}/static/js/jquery-3.3.1.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/static/js/layui/layui.js"></script>
</head>
<body>
<input type="hidden" id="path"
value="${pageContext.request.contextPath}" />
<!--搜索维度-->
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-inline">
<input type="text" id='user_name' name="user_name"
lay-verify="required" placeholder="请输入用户名" autocomplete="true"
class="layui-input">
</div>
<label class="layui-form-label">角色</label>
<div class="layui-input-inline">
<select xm-select="user_part_id" xm-select-type="2"
id="user_part_id" xm-select-skin="primary">
</select>
</div>
<button class="layui-btn" data-type="reload">查询</button>
<button class="layui-btn layui-btn-danger" data-type="add">新建</button>
</div>
</div>
<!--显示数据的表格-->
<div class="demoTable">
<div class=layui-form>
<table class="layui-table" id="LAY_table_user" lay-filter="user"
lay-data="{id: 'idTest'}">
</table>
</div>
</div>
<!--弹出层-->
<div class="site-text" style="margin: 5%; display: none" id="box1"
target="test123">
<form method="post" class="layui-form layui-form-pane"
onsubmit="return false" id="users">
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-block">
<input type="text" class="layui-input text_add" id="user_names"
name=user_names>
</div>
<br> <label class="layui-form-label"> 用户密码</label>
<div class="layui-input-block">
<input type="password" class="layui-input" id="pwd" name=pwd><br>
</div>
</div>
<label class="layui-form-label">选择角色</label>
<div class="layui-input-block">
<select xm-select="user_part_ids" xm-select-type="2"
id="user_part_ids" xm-select-skin="primary">
</select>
</div>
</form>
</div>
<!--按钮菜单-->
<script type="text/html" id="barDemo">
{{# if(d.statu==0){ }}
<a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="begin">启用</a>
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
{{# }else{ }}
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="end">禁用</a>
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
{{# } }}
</script>
<script src="${pageContext.request.contextPath}/static/js/userManagement.js"></script>
</body>
</HTML>
usermanagement.js
var path = document.getElementById("path").value;
layui.config({
base : path + '/static/js/' // 此处写的相对路径, 实际以项目中的路径为准
}).extend({
formSelects : 'formSelects-v3'
});
// 用户管理
layui
.use(
[ 'table', 'form', 'jquery', 'formSelects' ],
// , 'from'
function() {
var table = layui.table, form = layui.form, formSelects = layui.formSelects;
// 第一个实例
table.render({
elem : '#LAY_table_user',
// height: 300,
url : path + '/sy/userAction_query.action'// 数据接口
,
// defaultToolbar : [ 'filter', 'print', 'exports' ],
page : true // 开启分页
,
limit : 10,
limits : [ 5, 10, 15 ],
cellMinWidth : 80,
cols : [ [ {
field : 'user_id',
title : '编号',
sort : true,
// width: 80,
}, {
field : 'user_name',
title : '用户名',
// width: 80,
}, {
field : 'part_names',
title : '角色',
// width: 180,
}, {
fixed : 'right',
title : '操作',
align : 'center',
toolbar : '#barDemo'
} ] ],
id : 'testReload',
});
table.on('checkbox(user)', function(obj) {
console.log(obj)
});
// 上方菜单
var $ = layui.$, active = {
// 查询
reload : function() {
// 执行重载
table.reload('testReload', {
page : {
curr : 1
// 重新从第 1 页开始
},
where : {
user_name : $('#user_name').val(),
part_ids : formSelects.value(
'user_part_id', 'valStr')
}
});
},
add : function() { // 添加
$('#user_names').prop('disabled', false)// 设置可用
$('#user_names').removeClass('layui-disabled')
layer.open({
type : 1,
title : '添加用户',
maxmin : true,
shadeClose : true, // 点击遮罩关闭层
area : [ '80%', '80%' ],
content : $('#box1'),
btn : [ '确定', '取消' ],
success : function(layero, index) {// 弹出后执行的函数
formSelects.value('user_part_ids', []);
},
yes : function(index, layero) {// 确定执行函数
// 执行添加方法
$.post(path
+ '/sy/userAction_add.action', {
user_name : $('#user_names').val(),// 用户名
pwd : $('#pwd').val(),// 密码
part_ids : formSelects.value(
"user_part_ids", 'valStr')
}, function(data) {
if (data > 0) {
layer.alert('添加成功', {
icon : 1,
title : '提示'
}, function(i) {
layer.close(i);
layer.close(index);// 关闭弹出层
$("#users")[0].reset()// 重置form
})
table.reload('testReload', {// 重载表格
page : {
curr : 1
// 重新从第 1 页开始
}
})
} else if (data == -2) {
layer.msg('添加失败,用户名不能重复')
} else {
layer.msg('添加失败')
}
})
},
cancel : function(index, layero) {
$("#users")[0].reset()// 重置form
layer.close(index)
}
});
}
}
$('.layui-form .layui-btn').on('click', function() {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
// table菜单
table.on('tool(user)', function(obj) {
var data = obj.data;// 获得当前行数据
var layEvent = obj.event; // 获得 lay-event
// 对应的值(也可以是表头的event参数对应的值)
var tr = obj.tr; // 获得当前行 tr 的DOM对象
if (layEvent == 'edit') {// 编辑
layer.open({
type : 1,
title : '编辑用户',
maxmin : true,
shadeClose : true, // 点击遮罩关闭层
area : [ '80%', '80%' ],
content : $('#box1'),
btn : [ '确定', '取消' ],
success : function(layero, index) {// 弹出后执行的函数
$('#pwd').val(data.pwd);
$('#user_names').val(data.user_name);
formSelects.value('user_part_ids', []);
formSelects.value('user_part_ids',
data.part_ids.split(","));
},
yes : function(index, layero) {// 确定回调函数
$.ajaxSettings.async = false;
$.post(path
+ '/sy/userAction_edit.action', {
pwd : $('#pwd').val(),
user_id : data.user_id,
user_name : $("#user_names").val(),
part_ids : formSelects.value(
"user_part_ids", 'valStr')
}, function(data) {
if (data > 0) {
layer.alert('编辑成功', {
icon : 1,
title : '提示'
}, function(i) {
layer.close(i);
layer.close(index);// 关闭弹出层
$("#users")[0].reset()// 重置form
})
table.reload('testReload', {// 重载表格
page : {
curr : 1
// 重新从第 1 页开始
}
})
} else if (data = -2) {
layer.msg('用户名重复')
} else {
layer.msg('编辑失败')
}
})
},
cancel : function(index, layero) {
$("#users")[0].reset()// 重置form
layer.close(index)
}
})
} else if (layEvent == 'begin') {// 启用
layer.confirm('确定启用吗???', {
icon : 3,
title : '提示'
}, function(index) {
$.post(path
+ '/sy/userAction_eidtStatu.action', {
user_id : data.user_id,
statu : 1
}, function(data) {
layer.close(index);
table.reload('testReload', {
page : {
curr : 1
// 重新从第 1 页开始
}
})
});
})
} else if (layEvent == 'end') {// end//禁用
layer.confirm('确定禁用吗???', {
icon : 3,
title : '提示'
}, function(index) {
$.post(path
+ '/sy/userAction_eidtStatu.action', {
user_id : data.user_id,
statu : 0
}, function(data) {
layer.close(index);
table.reload('testReload', {
page : {
curr : 1
// 重新从第 1 页开始
}
})
});
})
} else if (layEvent == 'del') {// 删除
layer.confirm('确定删除吗???', {
icon : 3,
title : '提示'
}, function(index) {
$.post(
path + '/sy/userAction_remove.action',
{
user_id : data.user_id
}, function(data) {
layer.close(index);
table.reload('testReload', {
page : {
curr : 1
// 重新从第 1 页开始
}
})
});
})
}
});
});
/**
* 搜索下拉框角色加载
*/
function part() {
$.ajaxSettings.async = false
$.getJSON(path + '/sy/partAction_select.action', {}, function(data) {
var html = "<option value=''>直接选择或搜索选择</option>";
// 返回处理的方法
$.each(data, function(index, item) {
html += "<option value=" + item.part_id + ">" + item.part_name
+ "</option>";
});
$('#user_part_id').html(html);
$('#user_part_ids').html(html);
})
}
part();
角色管理和js
partmanagement.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>角色管理</title>
<link rel="stylesheet"
href="${pageContext.request.contextPath}/static/js/layui/css/layui.css"
media="all">
<script type="text/javascript"
src="${pageContext.request.contextPath}/static/js/jquery-3.3.1.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/static/js/layui/layui.js"></script>
<link rel="stylesheet"
href="${pageContext.request.contextPath}/static/zTree/css/metroStyle/metroStyle.css"
type="text/css">
<script type="text/javascript"
src="${pageContext.request.contextPath}/static/zTree/js/jquery.ztree.core.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/static/zTree/js/jquery.ztree.excheck.js"></script>
</head>
<body>
<input type="hidden" id="path"
value="${pageContext.request.contextPath}">
<!--搜索维度-->
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">角色名</label>
<div class="layui-input-inline">
<input type="text" id='part_name' name="part_name"
lay-verify="required" placeholder="请输入角色名" autocomplete="true"
class="layui-input">
</div>
<button class="layui-btn" data-type="reload">查询</button>
<button class="layui-btn layui-btn-danger" data-type="add">新建</button>
</div>
</div>
<!--显示数据的表格-->
<div class="demoTable">
<div class=layui-form>
<table class="layui-table" id="LAY_table_user" lay-filter="user"
lay-data="{id: 'idTest'}">
</table>
</div>
</div>
<!--弹出层-->
<div class="site-text" style="margin: 5%; display: none" id="box1"
target="test123">
<form class="layui-form layui-form-pane" onsubmit="return false"
id="users">
<div class="layui-form-item">
<label class="layui-form-label">角色名</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="part_names"
name=part_names>
</div>
<br> <label class="layui-form-label"> 角色说明</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="description"
name=description><br>
</div>
</div>
</form>
</div>
<!--权限-->
<div class="site-text layui-form" style="margin: 5%; display: none"
id="box3" target="test1232">
<div class="content_wrap">
<div class="zTreeDemoBackground left">
<ul id="treeDemo" class="ztree"></ul>
</div>
<div class="right" style="display: none;">
<ul class="info">
<li class="title">
<ul class="list">
<li><input type="checkbox" id="py" class="checkbox first"
checked /> <input type="checkbox" id="sy"
class="checkbox first" checked /> <input type="checkbox"
id="pn" class="checkbox first" checked /> <input
type="checkbox" id="sn" class="checkbox first" checked /></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<!--按钮菜单-->
<script type="text/html" id="barDemo">
{{# if(d.statu==0){ }}
<a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="begin">启用</a>
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
{{# }else{ }}
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="end">禁用</a>
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
<a class="layui-btn layui-btn-xs" lay-event="right">角色权限</a>
{{# } }}
</script>
<script src="${pageContext.request.contextPath}/static/js/partManagement.js"></script>
</body>
</html>
partmanagement.js
var path = document.getElementById("path").value;
// 角色管理
layui.use([ 'table', 'form' ],
// , 'from'
function() {
var table = layui.table;
// 第一个实例
table.render({
elem : '#LAY_table_user',
// height: 300,
url : path + '/sy/partAction_query.action',// 数据接口
// defaultToolbar : [ 'filter', 'print', 'exports' ],
page : true // 开启分页
,
limit : 10,
limits : [ 5, 10, 15 ],
cellMinWidth : 80,
cols : [ [ {
field : 'part_id',
title : '编号',
sort : true,
// width: 80,
}, {
field : 'part_name',
title : '角色名',
// width: 80,
}, {
field : 'description',
title : '角色说明',
}, {
fixed : 'right',
title : '操作',
align : 'center',
toolbar : '#barDemo'
} ] ],
id : 'testReload',
});
table.on('checkbox(user)', function(obj) {
console.log(obj)
});
// 上方菜单
var $ = layui.$, active = {
// 查询
reload : function() {
var part_name = $('#part_name');// 角色名
// 执行重载
table.reload('testReload', {
page : {
curr : 1 // 重新从第 1 页开始
},
where : {
key : 'part_name',
part_name : part_name.val(),
}
});
},
add : function() { // 添加
layer.open({
type : 1,
title : '添加角色',
maxmin : true,
shadeClose : true, // 点击遮罩关闭层
area : [ '80%', '80%' ],
content : $('#box1'),
btn : [ '确定', '取消' ],
yes : function(index, layero) {// 确定执行函数
// 执行添加方法
$.post(path + '/sy/partAction_add.action', {
part_name : $('#part_names').val(),// 角色名
description : $('#description').val(),// 角色说明
}, function(data) {
if (data > 0) {
layer.alert('添加成功', {
icon : 1,
title : '提示'
}, function(i) {
layer.close(i);
layer.close(index);// 关闭弹出层
$("#users")[0].reset()// 重置form
})
table.reload('testReload', {// 重载表格
page : {
curr : 1
// 重新从第 1 页开始
}
})
} else {
layer.msg('添加失败')
}
})
},
cancel : function(index, layero) {
$("#users")[0].reset()// 重置form
layer.close(index)
}
});
}
}
$('.layui-form .layui-btn').on('click', function() {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
// table菜单
table.on('tool(user)', function(obj) {
var data = obj.data;// 获得当前行数据
var layEvent = obj.event; // 获得 lay-event 对应的值(也可以是表头的event参数对应的值)
var tr = obj.tr; // 获得当前行 tr 的DOM对象
if (layEvent == 'edit') {// 编辑
layer.open({
type : 1,
title : '编辑角色',
maxmin : true,
shadeClose : true, // 点击遮罩关闭层
area : [ '80%', '80%' ],
content : $('#box1'),
btn : [ '确定', '取消' ],
success : function(layero, index) {// 弹出后执行的函数
$('#part_names').val(data.part_name);
$('#description').val(data.description);
layui.form.render('select');
},
yes : function(index, layero) {// 确定回调函数
$.ajaxSettings.async = false;
$.post(path + '/sy/partAction_eidt.action', {
part_name : $('#part_names').val(),
description : $('#description').val(),
part_id : data.part_id
}, function(data) {
if (data > 0) {
layer.alert('编辑成功', {
icon : 1,
title : '提示'
}, function(i) {
layer.close(i);
layer.close(index);// 关闭弹出层
$("#users")[0].reset()// 重置form
})
table.reload('testReload', {// 重载表格
page : {
curr : 1 // 重新从第 1 页开始
}
})
} else if (data == -2) {
layer.msg('角色名称重复')
} else {
layer.msg('编辑失败')
}
})
},
cancel : function(index, layero) {
$("#users")[0].reset()// 重置form
layer.close(index)
}
})
} else if (layEvent == 'begin') {// 启用
layer.confirm('确定启用吗???', {
icon : 3,
title : '提示'
}, function(index) {
$.getJSON(path + '/sy/partAction_eidtStatu.action', {
part_id:data.part_id,
statu:1
}, function(data) {
layer.close(index);
table.reload('testReload', {
page : {
curr : 1
// 重新从第 1 页开始
}
})
});
})
} else if (layEvent == 'end') {// end//禁用
layer.confirm('确定禁用吗???', {
icon : 3,
title : '提示'
}, function(index) {
$.getJSON(path + '/sy/partAction_eidtStatu.action', {
part_id:data.part_id,
statu:0
}, function(data) {
layer.close(index);
table.reload('testReload', {
page : {
curr : 1 // 重新从第 1 页开始
}
})
});
})
} else if (layEvent == 'del') {// 删除
layer.confirm('确定删除吗???', {
icon : 3,
title : '提示'
}, function(index) {
$.getJSON(path + '/sy/partAction_remove.action', {
part_id : data.part_id
}, function(data) {
layer.close(index);
table.reload('testReload', {
page : {
curr : 1
// 重新从第 1 页开始
}
})
});
})
} else if (layEvent == 'right') {// 角色权限
layer.open({
type : 1,
title : '角色权限',
maxmin : true,
shadeClose : true, // 点击遮罩关闭层
area : [ '60%', '95%' ],
content : $('#box3'),
btn : [ '确定', '取消' ],
success : function(layero, index) {
$.getJSON(path + '/sy/permissionAction_getPartTree.action', {
part_id : data.part_id
}, function(data) {
zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, data);
setCheck();
$("#py").bind("change", setCheck);
$("#sy").bind("change", setCheck);
$("#pn").bind("change", setCheck);
$("#sn").bind("change", setCheck);
});
},
yes : function(index, layero) {
nodes = zTreeObj.getCheckedNodes(true);
var permissionIds = "";
for (var i = 0; i < nodes.length; i++) {
permissionIds += "," + nodes[i].id;
}
if(permissionIds.length > 0){
permissionIds = permissionIds.substring(1);
}
$.getJSON(path + '/sy/permissionAction_partPermissionBinding.action', {
part_id : data.part_id,
permissionIds:permissionIds
}, function(data) {
layer.close(index);
table.reload('testReload', {
page : {
curr : 1 // 重新从第 1 页开始
}
})
});
}
});
}
});
});
var setting = {
check : {
enable : true
},
data : {
simpleData : {
enable : true
}
}
};
var code;
function setCheck() {
var zTree = $.fn.zTree.getZTreeObj("treeDemo"), py = $("#py").attr(
"checked") ? "p" : "", sy = $("#sy").attr("checked") ? "s" : "", pn = $(
"#pn").attr("checked") ? "p" : "", sn = $("#sn").attr("checked") ? "s"
: "", type = {
"Y" : py + sy,
"N" : pn + sn
};
zTree.setting.check.chkboxType = type;
}
数据管理和js
Clazz.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts 实现CURD</title>
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/layui/css/layui.css"/>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/js/layui/layui.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/js/Clazz.js"></script>
</head>
<body class="child-body">
<!--隐藏域传值 -->
<input type="hidden" id="path"
value="${pageContext.request.contextPath}">
<blockquote class="layui-elem-quote">
<!--搜索框-->
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">名字:</label>
<div class="layui-input-inline">
<input type="text" id='searchName' name="searchName"
lay-verify="required" placeholder="请输入名字" autocomplete="true"
class="layui-input">
</div>
<button class="layui-btn layui-btn-normal layui-btn-radius"
data-type="reload">
<i class="layui-icon"></i>查询
</button>
<button class="layui-btn layui-btn-normal" data-type="add">新建</button>
</div>
</div>
</blockquote>
<!--根据table id 来展示表格数据 -->
<table class="layui-hide" id="strutsClassTable" lay-filter="test"></table>
<!--行内样式按钮 -->
<script type="text/html" id="lineBtns">
<a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon"></i>编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<!--弹出层 增改通用-->
<div class="site-text" style="margin: 5%; display: none" id="box1" target="test123">
<form class="layui-form layui-form-pane" method="post" onsubmit="return false" id="myFrom">
<div class="layui-form-item">
<label class="layui-form-label"> 名字</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="cname" name=cname><br>
</div>
<label class="layui-form-label">信息</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="cteachar" name=cteachar><br>
</div>
<label class="layui-form-label">图片</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="pic" name=pic><br>
</div>
</div>
</form>
</div>
</body>
</html>
Clazz.js
//执行渲染
layui.use(['table','layer','form'],function(){
//定义通用全局变量
var path=document.getElementById("path").value;
var table =layui.table;
var layer=layui.layer;
var form = layui.form;
var $ = layui.$;
//展示数据表格(数据表格初始化)
table.render({
elem:'#strutsClassTable'//表格id
,url:path+'/sy/strutsClassAction_query.action'//所对应调用的接口
,method:'post' //提交方式
,cols:[[
/*根据数据库的表格所对应的名称 */
{field:'cid',height:80, width:300, title: '编号'}
,{field:'cname', height:80,width:300, title: '名字'}
,{field:'cteachar',height:80, width:300, title: '信息'}
,{field:'pic',height:80, width:300, title: '图片'}
,{field:'right',height:80, width:300, title: '操作', toolbar:'#lineBtns'}//操作栏
]]
,page:'true'//分页
, id: 'testReload'
});
//查询和新增事件触发
var active = {
//查询
reload: function () {
var cname = $('#searchName').val();//获取查询内容
// 执行重载
table.reload('testReload', {
page: {
curr: 1// 从第1页开始展示查询结果
},
where: {
key: 'cname',
cname: cname
}
});
},
add: function () { //添加
layer.open({//弹出框
type: 1,
title: '添加信息',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['60%', '55%'],
content: $('#box1'),
btn: ['确定', '取消'],
//当点击确定触发回掉
yes: function (index, layero) {//确定执行函数
//通过向后台返回ajax请求来添加数据
$.post(path+"/sy/strutsClassAction_add.action", {
//携带参数
cname:$("#cname").val(),
cteachar:$("#cteachar").val(),
pic:$("#pic").val()
}, function (data) {
/*根据后台返回的参数来进行判断是否添加成功 */
if (data > 0) {
//弹出提示层
layer.alert('添加成功', {icon: 1, title: '提示'}, function (i) {
layer.close(i);
layer.close(index);//关闭弹出层
$("#myFrom")[0].reset()//重置form
})
//重载表格
table.reload('testReload', {
page: {
curr: 1// 重新从第 1 页开始
}
})
} else{
//提示添加失败
layer.msg('添加失败')
}
})
}, cancel: function (index, layero) {//取消
//当点击取消按钮
$("#myFrom")[0].reset()//重置form 根据id
layer.close(index)
}
});
}
}
//这是事件的通用触发
$('.layui-form .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/*表格 行内操作(编辑 以及 删除 按钮操作) */
table.on('tool(test)', function(obj){
var data = obj.data; //获得当前行数据
var tr=obj.tr//活动当前行tr 的 DOM对象
var layEvent = obj.event; //获取操作状态 修改和删除
if(layEvent === 'del'){ //删除
layer.confirm('确定删除吗?',{title:'删除'}, function(index){
//向服务端发送删除指令og
$.post(path+'/sy/strutsClassAction_remove.action',{cid:data.cid}, function(ret){
layer.close(index);//关闭弹窗
table.reload('testReload', {//重载表格
page: {
curr: 1// 重新从第 1 页开始
}
})
});
layer.close(index);
});
} else if(layEvent === 'edit'){ //编辑
layer.open({
type: 1,
title: '修改信息',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['60%', '55%'],
content: $('#box1'),
btn: ['确定', '取消']
,content:$('#box1') //弹窗id
,success:function(layero,index){
//数据绑定
$('#cname').val(data.cname);
$('#cteachar').val(data.cteachar);
$("#pic").val(data.pic);
},yes:function(index,layero){
//确定修改回掉
$.post(path+'/sy/strutsClassAction_eidt.action',{
//携带参数
cname:$("#cname").val(),
cteachar:$("#cteachar").val(),
pic:$("#pic").val(),
cid:data.cid
},function(data){
//根据后台返回的参数,来进行判断
if(data>0){
layer.alert('编辑成功',{icon:1,title:'提示'},function(i){
layer.close(i);
layer.close(index);//关闭弹出层
$("#myFrom")[0].reset()//重置form
})
table.reload('testReload',{//重载表格
page:{
curr:1
}
})
}
});
}
});
}
});
});
后台代码
在这里我就没有展示实体类了,
dao
普通数据dao
package com.crud.dao;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import com.crud.entity.Clazz;
import com.crud.util.BaseDao;
import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;
/**
* 普通数据
* @author Administrator
*
*/
public class dao extends JsonBaseDao {
/**
*查询
* @param paMap
* @param pageBean
* @return
* @throws Exception
*/
public List<Map<String, Object>> query(Map<String, String[]> paMap, PageBean pageBean) throws Exception {
String sql = "select * from t_clazz where true ";
String cname = JsonUtils.getParamVal(paMap, "cname");
// 是否带名称查询
if (StringUtils.isNotBlank(cname)) {
sql = sql + " and cname like '%" + cname + "%'";
}
String cid = JsonUtils.getParamVal(paMap, "cid");
// 带id查询
if (StringUtils.isNotBlank(cid)) {
sql = sql + " and cid = " + cid ;
}
return super.executeQuery(sql, pageBean);
}
/**
*修改
*
* @param paMap
* @return
* @throws Exception
*/
public int eidt(Map<String, String[]> paMap) throws Exception {
String sql = "update t_clazz set cname = ?, cteachar = ?, pic = ? where cid = ?";
return super.executeUpdate(sql, new String[] {"cname", "cteachar", "pic", "cid"}, paMap);
}
/**
*删除
* @param paMap
* @return
* @throws Exception
*/
public int remove(Map<String, String[]> paMap) throws Exception {
// 删除sql
String sql = "delete from t_clazz where cid = ?";
return super.executeUpdate(sql, new String[] { "cid" }, paMap);
}
/**
* 添加
*
* @param paMap
* @return
* @throws Exception
*/
public int add(Map<String, String[]> paMap) throws Exception {
String sql = "insert into t_clazz (cname, cteachar, pic)values (?,?,?)";
return super.executeUpdate(sql, new String[] { "cname", "cteachar", "pic"}, paMap);
}
}
用户dao方法 userdao
package com.crud.dao;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import com.crud.entity.Clazz;
import com.crud.util.BaseDao;
import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;
/**
* 普通数据
* @author Administrator
*
*/
public class dao extends JsonBaseDao {
/**
*查询
* @param paMap
* @param pageBean
* @return
* @throws Exception
*/
public List<Map<String, Object>> query(Map<String, String[]> paMap, PageBean pageBean) throws Exception {
String sql = "select * from t_clazz where true ";
String cname = JsonUtils.getParamVal(paMap, "cname");
// 是否带名称查询
if (StringUtils.isNotBlank(cname)) {
sql = sql + " and cname like '%" + cname + "%'";
}
String cid = JsonUtils.getParamVal(paMap, "cid");
// 带id查询
if (StringUtils.isNotBlank(cid)) {
sql = sql + " and cid = " + cid ;
}
return super.executeQuery(sql, pageBean);
}
/**
*修改
*
* @param paMap
* @return
* @throws Exception
*/
public int eidt(Map<String, String[]> paMap) throws Exception {
String sql = "update t_clazz set cname = ?, cteachar = ?, pic = ? where cid = ?";
return super.executeUpdate(sql, new String[] {"cname", "cteachar", "pic", "cid"}, paMap);
}
/**
*删除
* @param paMap
* @return
* @throws Exception
*/
public int remove(Map<String, String[]> paMap) throws Exception {
// 删除sql
String sql = "delete from t_clazz where cid = ?";
return super.executeUpdate(sql, new String[] { "cid" }, paMap);
}
/**
* 添加
*
* @param paMap
* @return
* @throws Exception
*/
public int add(Map<String, String[]> paMap) throws Exception {
String sql = "insert into t_clazz (cname, cteachar, pic)values (?,?,?)";
return super.executeUpdate(sql, new String[] { "cname", "cteachar", "pic"}, paMap);
}
}
角色dao方法partdao
package com.crud.dao;
import java.util.List;
import java.util.Map;
import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;
/**
* 角色
*
* @author 201900514
*
*/
public class PartDao extends JsonBaseDao {
/**
* 添加
*
* @param paramMap
* @return
* @throws Exception
*/
public int add(Map<String, String[]> paramMap) throws Exception {
String sql = "insert into part(part_name,description, statu) values (?, ?, 1)";
return super.executeUpdate(sql, new String[] { "part_name", "description" }, paramMap);
}
/**
* 移除
*
* @param paramMap
* @return
* @throws Exception
*/
public int remove(Map<String, String[]> paramMap) throws Exception {
//移除用户角色的中间表
super.executeUpdate("delete from user_and_part where part_id =" + JsonUtils.getParamVal(paramMap, "part_id"));
//移除角色菜单的中间表
super.executeUpdate(
"delete from part_and_permission where part_id = " + JsonUtils.getParamVal(paramMap, "part_id"));
return super.executeUpdate("delete from part where part_id = ?", new String[] { "part_id" }, paramMap);
}
/**
* 修改
*
* @param paramMap
* @return
* @throws Exception
*/
public int eidt(Map<String, String[]> paramMap) throws Exception {
String sql = "update part set part_name = ?, description = ? where part_id = ?";
return super.executeUpdate(sql, new String[] { "part_name", "description", "part_id" }, paramMap);
}
/**
* 修改状态
*
* @param paramMap
* @return
* @throws Exception
*/
public int eidtStatu(Map<String, String[]> paramMap) throws Exception {
String sql = "update part set statu = ? where part_id = ?";
return super.executeUpdate(sql, new String[] { "statu", "part_id" }, paramMap);
}
/**
* 角色名是否存在
*
* @return
*/
public boolean isName(Map<String, String[]> paramMap) throws Exception {
List<Map<String, Object>> list = null;
if(StringUtils.isNotBlank(JsonUtils.getParamVal(paramMap, "part_id"))) {
String sql = "select part_id from part where part_id != ? and part_name = ?";
list = super.executeQuery(sql, new String[] { "part_id", "part_name" }, paramMap, null);
}else {
String sql = "select part_id from part where part_name = ?";
list = super.executeQuery(sql, new String[] {"part_name" }, paramMap, null);
}
return list != null && list.size() > 0;
}
/**
* 查询
*
* @param paramMap
* @param pageBean
* @return
* @throws Exception
*/
public List<Map<String, Object>> query(Map<String, String[]> paramMap, PageBean pageBean) throws Exception {
String sql = "select part_id, part_name, description, statu from part where true ";
//模糊查
String part_name = JsonUtils.getParamVal(paramMap, "part_name");
if (StringUtils.isNotBlank(part_name)) {
sql += " and part_name like '%" + part_name + "%' ";
}
// ID查
String part_id = JsonUtils.getParamVal(paramMap, "part_id");
if (StringUtils.isNotBlank(part_id)) {
sql += " and user_id = " + part_id;
}
return super.executeQuery(sql, pageBean);
}
/**
*获取角色下拉 只有可用的返回
* @return
* @throws Exception
*/
public List<Map<String, Object>> select() throws Exception {
String sql = "select part_id, part_name from part where statu = 1";
return super.executeQuery(sql, null);
}
}
菜单dao方法 permissiondao
package com.crud.dao;
import java.util.List;
import java.util.Map;
import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;
/**
* 角色
*
* @author 20190313
*
*/
public class PartDao extends JsonBaseDao {
/**
* 添加
*
* @param paramMap
* @return
* @throws Exception
*/
public int add(Map<String, String[]> paramMap) throws Exception {
String sql = "insert into part(part_name,description, statu) values (?, ?, 1)";
return super.executeUpdate(sql, new String[] { "part_name", "description" }, paramMap);
}
/**
* 移除
*
* @param paramMap
* @return
* @throws Exception
*/
public int remove(Map<String, String[]> paramMap) throws Exception {
//移除用户角色的中间表
super.executeUpdate("delete from user_and_part where part_id =" + JsonUtils.getParamVal(paramMap, "part_id"));
//移除角色菜单的中间表
super.executeUpdate(
"delete from part_and_permission where part_id = " + JsonUtils.getParamVal(paramMap, "part_id"));
return super.executeUpdate("delete from part where part_id = ?", new String[] { "part_id" }, paramMap);
}
/**
* 修改
*
* @param paramMap
* @return
* @throws Exception
*/
public int eidt(Map<String, String[]> paramMap) throws Exception {
String sql = "update part set part_name = ?, description = ? where part_id = ?";
return super.executeUpdate(sql, new String[] { "part_name", "description", "part_id" }, paramMap);
}
/**
* 修改状态
*
* @param paramMap
* @return
* @throws Exception
*/
public int eidtStatu(Map<String, String[]> paramMap) throws Exception {
String sql = "update part set statu = ? where part_id = ?";
return super.executeUpdate(sql, new String[] { "statu", "part_id" }, paramMap);
}
/**
* 角色名是否存在
*
* @return
*/
public boolean isName(Map<String, String[]> paramMap) throws Exception {
List<Map<String, Object>> list = null;
if(StringUtils.isNotBlank(JsonUtils.getParamVal(paramMap, "part_id"))) {
String sql = "select part_id from part where part_id != ? and part_name = ?";
list = super.executeQuery(sql, new String[] { "part_id", "part_name" }, paramMap, null);
}else {
String sql = "select part_id from part where part_name = ?";
list = super.executeQuery(sql, new String[] {"part_name" }, paramMap, null);
}
return list != null && list.size() > 0;
}
/**
* 查询
*
* @param paramMap
* @param pageBean
* @return
* @throws Exception
*/
public List<Map<String, Object>> query(Map<String, String[]> paramMap, PageBean pageBean) throws Exception {
String sql = "select part_id, part_name, description, statu from part where true ";
//模糊查
String part_name = JsonUtils.getParamVal(paramMap, "part_name");
if (StringUtils.isNotBlank(part_name)) {
sql += " and part_name like '%" + part_name + "%' ";
}
// ID查
String part_id = JsonUtils.getParamVal(paramMap, "part_id");
if (StringUtils.isNotBlank(part_id)) {
sql += " and user_id = " + part_id;
}
return super.executeQuery(sql, pageBean);
}
/**
*获取角色下拉 只有可用的返回
* @return
* @throws Exception
*/
public List<Map<String, Object>> select() throws Exception {
String sql = "select part_id, part_name from part where statu = 1";
return super.executeQuery(sql, null);
}
}
util
这是util包里的类

basetdao
package com.crud.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
* 閫氱敤鐨勬煡璇㈡柟娉� 23绉嶈璁℃ā寮忎箣绛栫暐妯″紡 浣滅敤锛氬湪鏂规硶鎴栫被涓凡缁忓畬鎴愪簡瀵瑰簲鐨勫姛鑳斤紝鐒跺悗鍦ㄨ皟鐢ㄦ柟鍘绘牴鎹嚜宸辩殑闇�姹傚幓澶勭悊缁撴灉銆� 浣垮緱浠g爜鏇村姞鐏垫椿銆�
*
* @author Administrator
*
* @param <T>
*/
public class BaseDao<T> {
// $.ajax
protected interface Callback<T> {
public List<T> foreach(ResultSet rs) throws SQLException, InstantiationException, IllegalAccessException;
}
public List<T> executeQuery(String sql, PageBean pageBean, Callback<T> callback)
throws SQLException, InstantiationException, IllegalAccessException {
if (pageBean != null && pageBean.isPagination()) {
Connection con = DBAccess.getConnection();
String countSql = getCountSql(sql);
PreparedStatement countPst = con.prepareStatement(countSql);
ResultSet countRs = countPst.executeQuery();
if (countRs.next()) {
pageBean.setTotal(countRs.getObject(1).toString());
}
DBAccess.close(null, countPst, countRs);
String pageSql = getPageSql(sql, pageBean);
PreparedStatement pagePst = con.prepareStatement(pageSql);
ResultSet pageRs = pagePst.executeQuery();
try {
return callback.foreach(pageRs);
} finally {
DBAccess.close(con);
}
} else {
Connection con = DBAccess.getConnection();
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
try {
return callback.foreach(rs);
} finally {
DBAccess.close(con);
}
}
}
/**
* 鍙敤浣跨敤鏁扮粍杩涜璧嬪��
* @param sql
* @param pageBean
* @param callback
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
*/
public List<T> executeQueryToarray(String sql,String[] attrs, Map<String, String[]> paMap, PageBean pageBean, Callback<T> callback)
throws SQLException, InstantiationException, IllegalAccessException {
if (pageBean != null && pageBean.isPagination()) {
Connection con = DBAccess.getConnection();
String countSql = getCountSql(sql);
PreparedStatement countPst = con.prepareStatement(countSql);
for (int i = 0; i < attrs.length; i++) {
countPst.setObject(i + 1, JsonUtils.getParamVal(paMap, attrs[i]));
}
ResultSet countRs = countPst.executeQuery();
if (countRs.next()) {
pageBean.setTotal(countRs.getObject(1).toString());
}
DBAccess.close(null, countPst, countRs);
String pageSql = getPageSql(sql, pageBean);
PreparedStatement pagePst = con.prepareStatement(pageSql);
for (int i = 0; i < attrs.length; i++) {
pagePst.setObject(i + 1, JsonUtils.getParamVal(paMap, attrs[i]));
}
ResultSet pageRs = pagePst.executeQuery();
try {
return callback.foreach(pageRs);
} finally {
DBAccess.close(con);
}
} else {
Connection con = DBAccess.getConnection();
PreparedStatement pst = con.prepareStatement(sql);
for (int i = 0; i < attrs.length; i++) {
pst.setObject(i + 1, JsonUtils.getParamVal(paMap, attrs[i]));
}
ResultSet rs = pst.executeQuery();
try {
return callback.foreach(rs);
} finally {
DBAccess.close(con);
}
}
}
/**
* 灏嗗師鐢熸�佺殑sql璇彞杞崲鎴愭煡瀵瑰簲鐨勫綋椤佃褰曟暟sql璇彞
*
* @param sql
* @param pageBean
* @return
*/
private String getPageSql(String sql, PageBean pageBean) {
return sql + " limit " + pageBean.getStartIndex() + "," + pageBean.getRows();
}
/**
* 灏嗗師鐢熸�佺殑sql璇彞杞崲鎴愭煡鎬昏褰曡緭鐨剆ql璇彞
*
* @param sql
* @return
*/
private String getCountSql(String sql) {
return "select count(1) from (" + sql + " ) t";
}
}
jsonbasedao
package com.cpc.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JsonBaseDao extends BaseDao<Map<String, Object>> {
public List<Map<String, Object>> executeQuery(String sql, PageBean pageBean)
throws SQLException, InstantiationException, IllegalAccessException {
return super.executeQuery(sql, pageBean, new Callback<Map<String, Object>>() {
@Override
public List<Map<String, Object>> foreach(ResultSet rs)
throws SQLException, InstantiationException, IllegalAccessException {
/*
* 1銆佸垱寤轰竴涓疄浣撶被鐨勫疄渚� 2銆佺粰鍒涘缓鐨勫疄渚嬪睘鎬ц祴鍊� 3銆佸皢娣诲姞瀹岀被瀹圭殑瀹炰綋绫绘坊鍔犲埌list闆嗗悎涓�
*/
// list.add(new Book(rs.getInt("bid"), rs.getString("bname"),
// rs.getFloat("price")));
List<Map<String, Object>> list = new ArrayList<>();
// 鑾峰彇婧愭暟鎹�
ResultSetMetaData md = rs.getMetaData();
int count = md.getColumnCount();
Map<String, Object> map = null;
while (rs.next()) {
map = new HashMap<>();
for (int i = 1; i <= count; i++) {
map.put(md.getColumnName(i), rs.getObject(i));
}
list.add(map);
}
return list;
}
});
}
public List<Map<String, Object>> executeQuery(String sql, String[] attrs, Map<String, String[]> paMap,
PageBean pageBean) throws Exception {
return super.executeQueryToarray(sql, attrs, paMap, pageBean, new Callback<Map<String, Object>>() {
@Override
public List<Map<String, Object>> foreach(ResultSet rs)
throws SQLException, InstantiationException, IllegalAccessException {
/*
* 1銆佸垱寤轰竴涓疄浣撶被鐨勫疄渚� 2銆佺粰鍒涘缓鐨勫疄渚嬪睘鎬ц祴鍊� 3銆佸皢娣诲姞瀹岀被瀹圭殑瀹炰綋绫绘坊鍔犲埌list闆嗗悎涓�
*/
// list.add(new Book(rs.getInt("bid"), rs.getString("bname"),
// rs.getFloat("price")));
List<Map<String, Object>> list = new ArrayList<>();
// 鑾峰彇婧愭暟鎹�
ResultSetMetaData md = rs.getMetaData();
int count = md.getColumnCount();
Map<String, Object> map = null;
while (rs.next()) {
map = new HashMap<>();
for (int i = 1; i <= count; i++) {
map.put(md.getColumnName(i), rs.getObject(i));
}
list.add(map);
}
return list;
}
});
}
/**
* 根据sql语句查询,查出第一位
* 数据库中只返回一位
* @param sql
* @return
* @throws Exception
*/
public Object executeByObject(String sql) throws Exception {
Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
Object o = 0;
try {
con = DBAccess.getConnection();
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
if(rs.next()) {
o = rs.getObject(1);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
DBAccess.close(con, pst, rs);
}
return o;
}
/**
* 根据sql语句查询,查第一位(只返回一条),并且返回类型是Integer的
* @param sql
* @return
* @throws Exception
*/
public Integer executeByInteger(String sql) throws Exception {
return Integer.parseInt(executeByObject(sql).toString());
}
/**
* 根据sql语句查询,查出Set<Integer>
* 注意:第一位必须是int类型(数据库中)
* @param sql
* @return
* @throws Exception
*/
public Set<Integer> executeByIntegers(String sql) throws Exception {
Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
Set<Integer> set = new HashSet<Integer>();
try {
con = DBAccess.getConnection();
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next()) {
set.add(rs.getInt(1));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
DBAccess.close(con, pst, rs);
}
return set;
}
/**
*
* @param sql
* @param attrs
* map涓殑key
* @param paMap
* jsp鍚戝悗鍙颁紶閫掔殑鍙傛暟闆嗗悎
* @return
* @throws SQLException
* @throws NoSuchFieldException
* @throws SecurityException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public int executeUpdate(String sql, String[] attrs, Map<String, String[]> paramMap) throws SQLException,
NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
Connection con = null;
PreparedStatement pst = null;
int n = 0;
try {
con = DBAccess.getConnection();
pst = con.prepareStatement(sql);
for (int i = 0; i < attrs.length; i++) {
pst.setObject(i + 1, JsonUtils.getParamVal(paramMap, attrs[i]));
}
n = pst.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
DBAccess.close(con, pst, null);
}
return n;
}
/**
* 閫氱敤澧炲垹鏀�
*
* @param sql
* @return
* @throws Exception
*/
public int executeUpdate(String sql){
Connection con = null;
PreparedStatement pst = null;
int n = 0;
try {
con = DBAccess.getConnection();
pst = con.prepareStatement(sql);
n = pst.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
} finally {
DBAccess.close(con, pst, null);
}
return n;
}
}
responseutil
package com.crud.util;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import cn.hutool.json.JSONUtil;
public class ResponseUtil {
/**
* 閫氱敤鐨勫疄鐜�
*
* @param response
* @param o
* @throws Exception
*/
public static void write(HttpServletResponse response, Object o) throws Exception {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println(o.toString());
out.flush();
out.close();
}
/**
* 转json格式输出到页面
* @param response
* @param o
* @throws Exception
*/
public static void writeJSON(HttpServletResponse response, Object o) throws Exception {
write(response, JSON.toJSONString(o));
}
}
web
useraction
package com.crud.web;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.crud.dao.UserDao;
import com.crud.entity.User;
import com.crud.util.PageBean;
import com.crud.util.ResponseUtil;
/**
* 用户请求啊action
*
* @author 20190313
*
*/
public class UserAction extends BaseAction {
private UserDao userDao = new UserDao();
/**
* 查询
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String query() throws Exception {
PageBean pageBean = new PageBean();
pageBean.setPageBean(request);
List<Map<String, Object>> list = userDao.query(request.getParameterMap(), pageBean);
Map<String, Object> map = new HashMap<>();
map.put("code", 0);
map.put("count", pageBean.getTotal());
map.put("data", list);
// 以json格式返回
ResponseUtil.writeJSON(response, map);
return null;
}
/**
* 删除
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String remove() throws Exception {
// 以json格式输出
ResponseUtil.writeJSON(response, userDao.remove(request.getParameterMap()));
return null;
}
/**
* 登录 1登录成功,-1登录失败
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String login() throws Exception {
User user = userDao.login(request.getParameterMap());
// 判断
if (user != null) {
//将user对象放入sesion中
request.getSession().setAttribute("user", user);
ResponseUtil.writeJSON(response, 1);
return null;
}
ResponseUtil.writeJSON(response, -1);
return null;
}
/**
* 增加
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String add() throws Exception {
// 判断用户名是重复
if (userDao.isName(request.getParameterMap())) {
// 用户名重复返回-2
ResponseUtil.writeJSON(response, -2);
return null;
}
// 以json格式返回
ResponseUtil.writeJSON(response, userDao.add(request.getParameterMap()));
return null;
}
/**
* 修改
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String edit() throws Exception {
// 判断用户名是重复
if (userDao.isName(request.getParameterMap())) {
// 用户名重复返回-2
ResponseUtil.writeJSON(response, -2);
return null;
}
ResponseUtil.writeJSON(response, userDao.edit(request.getParameterMap()));
return null;
}
/**
* ̬修改用户状态
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String eidtStatu() throws Exception {
ResponseUtil.writeJSON(response, userDao.eidtStatu(request.getParameterMap()));
return null;
}
/**
*用户退出登录
* @return
* @throws Exception
*/
public String exit() throws Exception {
//退出登录
request.getSession().removeAttribute("user");
ResponseUtil.writeJSON(response, 1);
return null;
}
}
Clazzaction
package com.crud.web;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.crud.dao.dao;
import com.crud.util.BaseAction;
import com.crud.util.PageBean;
import com.crud.util.ResponseUtil;
public class ClazzAction extends BaseAction{
private dao clzDao = new dao();
/**
* 添加
* @return
* @throws Exception
*/
public String add() throws Exception {
int n = clzDao.add(request.getParameterMap());
ResponseUtil.writeJSON(response, n);
return null;
}
/**
* 查询
* @return
* @throws Exception
*/
public String query() throws Exception {
PageBean pageBean = new PageBean();
List<Map<String, Object>> list = clzDao.query(request.getParameterMap(), pageBean);
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", 0);
map.put("count", pageBean.getTotal());
map.put("data", list);
//以JSON格式返回
ResponseUtil.writeJSON(response, map);
return null;
}
/**
*修改
* @return
* @throws Exception
*/
public String eidt() throws Exception {
int n = clzDao.eidt(request.getParameterMap());
ResponseUtil.writeJSON(response, n);
return null;
}
/**
* 删除
* @return
* @throws Exception
*/
public String remove() throws Exception {
int n = clzDao.remove(request.getParameterMap());
ResponseUtil.write(response, n);
return null;
}
}
partaction
package com.crud.web;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.crud.dao.PartDao;
import com.crud.util.PageBean;
import com.crud.util.ResponseUtil;
public class PartAction extends BaseAction {
private PartDao partDao = new PartDao();
/**
* 查询
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String query() throws Exception {
PageBean pageBean = new PageBean();
pageBean.setPageBean(request);
List<Map<String, Object>> list = partDao.query(request.getParameterMap(), pageBean);
Map<String, Object> map = new HashMap<>();
//要与layui的格式保持一致
map.put("code", 0);
map.put("count", pageBean.getTotal());
map.put("data", list);
// json
ResponseUtil.writeJSON(response, map);
return null;
}
/**
* 获取角色下拉 只有可用的返回
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String select() throws Exception {
// json
ResponseUtil.writeJSON(response, partDao.select());
return null;
}
/**
* 删除
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String remove() throws Exception {
// json
ResponseUtil.writeJSON(response, partDao.remove(request.getParameterMap()));
return null;
}
/**
* 添加
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String add() throws Exception {
// 判断角色名是重复
if (partDao.isName(request.getParameterMap())) {
// 返回-1
ResponseUtil.writeJSON(response, -1);
return null;
}
//json
ResponseUtil.writeJSON(response, partDao.add(request.getParameterMap()));
return null;
}
/**
*修改
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String eidt() throws Exception {
// 判断角色名是重复
if (partDao.isName(request.getParameterMap())) {
// 返回-2
ResponseUtil.writeJSON(response, -2);
return null;
}
// json
ResponseUtil.writeJSON(response, partDao.eidt(request.getParameterMap()));
return null;
}
/**
* 修改角色状态״̬
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String eidtStatu() throws Exception {
// json
ResponseUtil.writeJSON(response, partDao.eidtStatu(request.getParameterMap()));
return null;
}
}
permissionaction
package com.crud.web;
import java.sql.SQLException;
import com.crud.dao.PermissionDao;
import com.crud.util.ResponseUtil;
/**
* 权限请求Action
* @author 20190313
*
*/
public class PermissionAction extends BaseAction{
PermissionDao permissionDao = new PermissionDao();
/**
* 获取角色权限赋值tree
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String getPartTree() throws Exception {
// 以json格式返回
ResponseUtil.writeJSON(response, permissionDao.getPartTree(request.getParameterMap()));
return null;
}
/**
*角色授权
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String partPermissionBinding() throws Exception {
permissionDao.partPermissionBinding(request.getParameterMap());
ResponseUtil.writeJSON(response, 1);
return null;
}
/**
*获取用户权限菜单,根据用户ID
*
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public String getUserTree() throws Exception {
ResponseUtil.writeJSON(response, permissionDao.getUserTree(request.getParameterMap()));
return null;
}
}
效果展示
登录界面

主界面

角色管理

用户管理

普通数据管理(测试用)


该项目展示了如何利用layUI框架构建一个权限管理系统,包括用户、角色和菜单的多对多关系管理。通过登录界面、用户管理、角色管理和数据管理等功能,实现了后台DAO、Util和Web层的交互。系统包含formSelects-v3.js插件以增强界面交互。

715

被折叠的 条评论
为什么被折叠?



