提交版本1.0.3

This commit is contained in:
RuoYi 2018-03-07 22:19:19 +08:00
parent dbb792c46c
commit 83921c6033
17 changed files with 385 additions and 75 deletions

View File

@ -5,7 +5,7 @@
<groupId>com.ruoyi</groupId>
<artifactId>RuoYi</artifactId>
<version>1.0.2</version>
<version>1.0.3</version>
<packaging>jar</packaging>
<name>RuoYi</name>

View File

@ -28,4 +28,11 @@ public interface IRoleService
*/
public List<Role> selectRolesByUserId(Long userId);
/**
* 查询所有角色
*
* @return 权限列表
*/
public List<Role> selectRoleAll();
}

View File

@ -67,4 +67,14 @@ public class RoleServiceImpl implements IRoleService
return roles;
}
/**
* 查询所有角色
*
* @return 权限列表
*/
public List<Role> selectRoleAll()
{
return roleDao.selectRolesAll();
}
}

View File

@ -75,8 +75,10 @@ public class UserController extends BaseController
*/
@Log(title = "系统管理", action = "用户管理-新增用户")
@GetMapping("/add")
public String add()
public String add(Model model)
{
List<Role> roles = roleService.selectRoleAll();
model.addAttribute("roles", roles);
return prefix + "/add";
}

View File

@ -71,6 +71,14 @@ public interface IUserDao
*/
public int updateUser(User user);
/**
* 新增用户信息
*
* @param user 用户信息
* @return 结果
*/
public int insertUser(User user);
/**
* 批量新增用户角色信息
*

View File

@ -97,7 +97,18 @@ public class UserDaoImpl extends DynamicObjectBaseDao implements IUserDao
*/
public int updateUser(User user)
{
return this.save("SystemUserMapper.updateUser", user);
return this.update("SystemUserMapper.updateUser", user);
}
/**
* 新增用户信息
*
* @param user 用户信息
* @return 结果
*/
public int insertUser(User user)
{
return this.save("SystemUserMapper.insertUser", user);
}
/**

View File

@ -6,6 +6,7 @@ import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.page.PageUtilEntity;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.project.system.user.dao.IUserDao;
@ -91,21 +92,41 @@ public class UserServiceImpl implements IUserService
public int saveUser(User user)
{
Long userId = user.getUserId();
// 删除用户与角色关联
userDao.deleteUserRoleByUserId(userId);
if (StringUtils.isNotNull(userId))
{
// 删除用户与角色关联
userDao.deleteUserRoleByUserId(userId);
}
else
{
// 新增用户信息
userDao.insertUser(user);
}
insertUserRole(user);
return userDao.updateUser(user);
}
/**
* 新增用户角色信息
*
* @param user 用户对象
*/
public void insertUserRole(User user)
{
// 新增用户与角色管理
List<UserRole> list = new ArrayList<>();
for (Long roleId : user.getRoleIds())
{
UserRole ur = new UserRole();
ur.setUserId(userId);
ur.setUserId(user.getUserId());
ur.setRoleId(roleId);
list.add(ur);
}
if (list.size() > 0) {
if (list.size() > 0)
{
userDao.batchUserRole(list);
}
return userDao.updateUser(user);
}
}

View File

@ -84,7 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null and userId != ''">and user_id = #{userId}</if>
</update>
<insert id="insertUser" parameterType="User">
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="userId">
insert into sys_user(
<if test="userId != null and userId != 0">user_id,</if>
<if test="deptId != null and deptId != 0">dept_id,</if>

View File

@ -212,7 +212,6 @@ $(function() {
return false;
}
});
// 选项卡菜单不存在
if (flag) {
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';

View File

@ -0,0 +1,82 @@
$("#form-user-add").validate({
rules:{
loginName:{
required:true,
},
userName:{
required:true,
},
password:{
required:true,
},
email:{
required:true,
},
phonenumber:{
required:true,
},
},
submitHandler:function(form){
add();
}
});
function getIsChecked(_name) {
var adIds = "";
$('input:checkbox[name="'+_name+'"]:checked').each(function(i) {
if (0 == i) {
adIds = $(this).val();
} else {
adIds += ("," + $(this).val());
}
});
return adIds;
}
function add() {
var userId = $("input[name='userId']").val();
var deptId = $("input[name='deptId']").val();
var loginName = $("input[name='loginName']").val();
var userName = $("input[name='userName']").val();
var password = $("input[name='password']").val();
var email = $("input[name='email']").val();
var phonenumber = $("input[name='phonenumber']").val();
var status = $("input[name='status']").is(':checked') == true ? 0 : 1;
var roleIds = getIsChecked("role");
$.ajax({
cache : true,
type : "POST",
url : "/system/user/save",
data : {
"userId": userId,
"deptId": deptId,
"loginName": loginName,
"userName": userName,
"password": password,
"email": email,
"phonenumber": phonenumber,
"status": status,
"roleIds": roleIds
},
async : false,
error : function(request) {
parent.layer.alert("系统错误");
},
success : function(data) {
if (data.code == 0) {
parent.layer.msg('修改成功',{icon:1,time:1000});
layer_close();
window.parent.location.reload();
} else {
parent.layer.alert(data.m , {icon: 2,title:"系统提示"});
}
}
});
}
/*用户管理-修改-选择部门树*/
function selectDeptTree() {
var url = "/system/user/selectDeptTree";
layer_show("选择部门", url, '400', '410');
}

View File

@ -70,8 +70,3 @@ function selectDeptTree() {
var url = "/system/user/selectDeptTree";
layer_show("选择部门", url, '400', '410');
}
function loadDept(deptId,deptName){
$("#deptId").val(deptId);
$("#deptName").val(deptName);
}

View File

@ -0,0 +1,128 @@
// 树结构初始化加载
var setting = {view:{selectedMulti:false},data:{key:{title:"title"},simpleData:{enable:true}},
callback:{onClick:function(event, treeId, treeNode){
var deptId = treeNode.id;
var deptName = treeNode.name;
$("#deptId").val(deptId);
$("#deptName").val(deptName);
}}
}, tree, loadTree = function(){
$.get("/system/dept/treeData", function(data) {
tree = $.fn.zTree.init($("#tree"), setting, data);
// 展开第一级节点
var nodes = tree.getNodesByParam("level", 0);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
}
// 展开第二级节点
nodes = tree.getNodesByParam("level", 1);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
}
}, null, null, "正在加载,请稍后...");
};loadTree();
$('#btnExpand').click(function() {
tree.expandAll(true);
});
$('#btnCollapse').click(function() {
tree.expandAll(false);
});
function loadUser(){
var deptId = $("#deptId").val();
var deptName = $("#deptName").val();
parent.$("#deptId").val(deptId);
parent.$("#deptName").val(deptName);
var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
parent.layer.close(index);
}
var lastValue = "", nodeList = [], key = $("#keyword");
key.bind("focus", focusKey).bind("blur", blurKey).bind("change cut input propertychange", searchNode);
key.bind("keydown", function (e){if(e.which == 13){searchNode();}});
function focusKey(e) {
if (key.hasClass("empty")) {
key.removeClass("empty");
}
}
function blurKey(e) {
if (key.get(0).value === "") {
key.addClass("empty");
}
searchNode(e);
}
function searchNode() {
var value = $.trim(key.get(0).value);
var keyType = "name";
if (lastValue === value) {
return;
}
lastValue = value;
var nodes = tree.getNodes();
if (value == "") {
showAllNode(nodes);
return;
}
hideAllNode(nodes);
nodeList = tree.getNodesByParamFuzzy(keyType, value);
updateNodes(nodeList);
}
function hideAllNode(nodes){
var tree = $.fn.zTree.getZTreeObj("tree");
nodes = tree.transformToArray(nodes);
for(var i=nodes.length-1; i>=0; i--) {
tree.hideNode(nodes[i]);
}
}
function showAllNode(nodes){
nodes = tree.transformToArray(nodes);
for(var i=nodes.length-1; i>=0; i--) {
if(nodes[i].getParentNode()!=null){
tree.expandNode(nodes[i],false,false,false,false);
}else{
tree.expandNode(nodes[i],true,true,false,false);
}
tree.showNode(nodes[i]);
showAllNode(nodes[i].children);
}
}
function updateNodes(nodeList) {
tree.showNodes(nodeList);
for(var i=0, l=nodeList.length; i<l; i++) {
var treeNode = nodeList[i];
showChildren(treeNode);
showParent(treeNode)
}
}
function showChildren(treeNode){
if (treeNode.isParent){
for(var idx in treeNode.children){
var node = treeNode.children[idx];
tree.showNode(node);
showChildren(node);
}
}
}
function showParent(treeNode){
var parentNode;
while((parentNode = treeNode.getParentNode()) != null){
tree.showNode(parentNode);
tree.expandNode(parentNode, true, false, false);
treeNode = parentNode;
}
}
function search($this) {
$('#search').slideToggle(200);
$('#btnShow').toggle();
$('#btnHide').toggle();
$('#keyword').focus();
}

View File

@ -87,12 +87,12 @@ function queryDeptTreeDaTa()
};loadTree();
$('#btnExpand').click(function() {
zTree.expandAll(true);
tree.expandAll(true);
$(this).hide();
$('#btnCollapse').show();
});
$('#btnCollapse').click(function() {
zTree.expandAll(false);
tree.expandAll(false);
$(this).hide();
$('#btnExpand').show();
});
@ -117,7 +117,7 @@ function edit(deptId) {
/*用户管理-新增*/
function add() {
var url = prefix + '/add';
layer_show("新增用户", url, '800', '500');
layer_show("新增用户", url, '800', '550');
}
// 批量强退

View File

@ -35,7 +35,7 @@
<h2>若依后台管理框架</h2>
<p>一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统。她可以用于所有的Web应用程序<b>网站管理后台</b><b>网站会员中心</b><b>CMS</b><b>CRM</b><b>OA</b>等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错效率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。</p>
<p>
<b>当前版本:</b>v1.0.2
<b>当前版本:</b>v1.0.3
</p>
<p>
<span class="label label-warning">&yen;免费开源</span>
@ -94,13 +94,27 @@
<div class="ibox-content no-padding">
<div class="panel-body">
<div class="panel-group" id="version">
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">
<a data-toggle="collapse" data-parent="#version" href="#v03">v1.0.3</a><code class="pull-right">2018.03.08</code>
</h5>
</div>
<div id="v03" class="panel-collapse collapse in">
<div class="panel-body">
<ol>
<li>新增用户管理(新增、删除、修改、查询、部门选择)</li>
</ol>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">
<a data-toggle="collapse" data-parent="#version" href="#v02">v1.0.2</a><code class="pull-right">2018.03.04</code>
</h5>
</div>
<div id="v02" class="panel-collapse collapse in">
<div id="v02" class="panel-collapse collapse">
<div class="panel-body">
<ol>
<li>新增部门管理 (新增、删除、修改、查询)</li>

View File

@ -1 +1,85 @@
test
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head th:include="include :: header"></head>
<link href="/ajax/libs/iCheck/custom.css" rel="stylesheet">
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-user-add">
<input name="deptId" type="hidden" id="deptId"/>
<div class="form-group">
<label class="col-sm-3 control-label ">登录名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="loginName" name="loginName"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" onclick="selectDeptTree()" readonly="true" name="deptName" id="deptName">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">用户名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="userName" id="userName">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">密码:</label>
<div class="col-sm-8">
<input class="form-control" type="password" name="password" id="password">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">邮箱:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="email" name="email">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">手机:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="phonenumber" id="phonenumber">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">状态:</label>
<div class="col-sm-8">
<div class="onoffswitch">
<input type="checkbox" th:checked="true" class="onoffswitch-checkbox" id="status" name="status">
<label class="onoffswitch-label" for="status">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">角色</label>
<div class="col-sm-8">
<div class="checkbox i-checks">
<label th:each="role:${roles}" class="checkbox-inline">
<input name="role" type="checkbox" th:value="${role.roleId}" th:text="${role.roleName}">
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="form-control-static col-sm-offset-9">
<button type="submit" class="btn btn-primary">提交</button>
<button th:onclick="'javascript:layer_close()'" class="btn btn-danger" type="button">关闭</button>
</div>
</div>
</form>
</div>
<div th:include="include::footer"></div>
<script type="text/javascript" src="/ruoyi/system/user/add.js">
</script>
<script src="/ajax/libs/iCheck/icheck.min.js"></script>
<script>
$(document).ready(function(){$(".i-checks").iCheck({checkboxClass:"icheckbox_square-green",radioClass:"iradio_square-green",})});
</script>
</body>
</html>

View File

@ -31,57 +31,6 @@ button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</div>
<div th:include="include::footer"></div>
<script src="/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js"></script>
<script>
$(document).ready(function(){
queryDeptTreeDaTa();
});
function search($this) {
$('#search').slideToggle(200);
$('#btnShow').toggle();
$('#btnHide').toggle();
$('#keyword').focus();
}
function queryDeptTreeDaTa()
{
// 树结构初始化加载
var setting = {view:{selectedMulti:false},data:{key:{title:"title"},simpleData:{enable:true}},
callback:{onClick:function(event, treeId, treeNode){
var deptId = treeNode.id;
var deptName = treeNode.name;
$("#deptId").val(deptId);
$("#deptName").val(deptName);
}}
}, tree, loadTree = function(){
$.get("/system/dept/treeData", function(data) {
tree = $.fn.zTree.init($("#tree"), setting, data); //.expandAll(true);
// 展开第一级节点
var nodes = tree.getNodesByParam("level", 0);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
}
// 展开第二级节点
nodes = tree.getNodesByParam("level", 1);
for (var i = 0; i < nodes.length; i++) {
tree.expandNode(nodes[i], true, false, false);
}
}, null, null, "正在加载,请稍后...");
};loadTree();
$('#btnExpand').click(function() {
tree.expandAll(true);
});
$('#btnCollapse').click(function() {
tree.expandAll(false);
});
}
function loadUser(){
var deptId = $("#deptId").val();
var deptName = $("#deptName").val();
parent.loadDept(deptId, deptName);
var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
parent.layer.close(index);
}
</script>
<script type="text/javascript" src="/ruoyi/system/user/tree.js"></script>
</body>
</html>

View File

@ -16,7 +16,7 @@
<i class="fa icon-grid"></i> 组织机构
</div>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool addTabPage" data-href="/sys/office/list" title="管理机构"><i class="fa fa-edit"></i></button>
<a type="button" class="btn btn-box-tool menuItem" href="/system/dept" title="管理机构"><i class="fa fa-edit"></i></a>
<button type="button" class="btn btn-box-tool" id="btnExpand" title="展开" style="display:none;"><i class="fa fa-chevron-up"></i></button>
<button type="button" class="btn btn-box-tool" id="btnCollapse" title="折叠"><i class="fa fa-chevron-down"></i></button>
<button type="button" class="btn btn-box-tool" id="btnRefresh" title="刷新机构"><i class="fa fa-refresh"></i></button>