需要的js插件
bootstrap-select.min.js
bootstrap-select.min.css
jquery-ui.min.js
jquery-ui.min.css
toastr.min.js
toastr.min.css
jquery-ui.min.js/css下载地址
toastr.min.js/css下载地址
user-mgmt.jsp
......
<!-- 添加弹出层 modal -->
<div class="modal right fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="addModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myModalLabel">添加用户</h4>
</div>
<div class="modal-body">
<div class="form-group">
<div class="row">
<label class="control-label col-sm-2">用户名</label>
<input id="user-name" class="form-control col-sm-9" placeholder="输入用户名..." />
<p class="name-img"></p>
</div>
</div>
<div class="form-group">
<div class="row">
<label class="control-label col-sm-3">管理员</label>
<label class="radio-inline col-xs-4 col-sm-4">
<input type="radio" name="is-admin" value="1" checked>是
</label>
<label class="radio-inline col-xs-4 col-sm-4">
<input type="radio" name="is-admin" value="0">否
</label>
</div>
</div>
<div class="form-group">
<div class="row">
<label class="control-label col-sm-2">邮箱</label>
<input type="email" id="user-email" class="form-control col-sm-9"/>
<p class="email-img"></p>
</div>
</div>
<div class="form-group">
<div class="row">
<label class="control-label col-sm-3">用户状态</label>
<label class="radio-inline col-xs-4 col-sm-4">
<input type="radio" name="user-status" value="1" checked>有效
</label>
<label class="radio-inline col-xs-4 col-sm-4">
<input type="radio" name="user-status" value="0">无效
</label>
</div>
</div>
<div class="form-group">
<div class="row set-role">
<label class="control-label col-sm-3">设置角色</label>
<select id="role-select-1" class="col-sm-8 form-control selectpicker show-tick" data-live-search="true">
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary add-user">确定</button>
</div>
</div>
</div>
</div>
......
user-mgmt.js
//添加用户,是否通过所有校验(用户名、邮箱唯一性等等),false代表没有通过校验
var insertCheck = true;
//存储角色信息
var roles = {};
//获取所有角色信息
function initRoles() {
$.ajax({
type: 'GET' ,
url: '/role/getAll' ,
dataType: 'json' ,
success: function (res) {
if (res.code != 200) {
toastr.error(res.msg);
} else {
var roles = res.data;
$('#role-select-1').append('<option value="0">请选择</option>');
$('#role-select-2').append('<option value="0">请选择</option>');
for (var index in roles) {
var role = roles[index];
var id = role.id;
var name = role.name;
$('#role-select-1').append("<option value='" + id + "'>" + name + "</option>");
$('#role-select-2').append("<option value='" + id + "'>" + name + "</option>");
}
$('.selectpicker').selectpicker('refresh');
}
}
});
}
//初始化toastr插件
function initToastr() {
toastr.options = {
"closeButton": false , //是否显示关闭按钮
"debug": false , //是否使用debug模式
"positionClass": "toast-top-center" , //弹出窗的位置
"showDuration": "300" , //显示的动画时间
"hideDuration": "1000" , //消失的动画时间
"timeOut": "2000" , //展现时间
"extendedTimeOut": "1000" , //加长展示时间
"showEasing": "swing" , //显示时的动画缓冲方式
"hideEasing": "linear" , //消失时的动画缓冲方式
"showMethod": "fadeIn" , //显示时的动画方式
"hideMethod": "fadeOut" //消失时的动画方式
};
}
$('.add-user').click(function () {
if (!insertCheck) {
toastr.warning('参数校验不通过!');
return;
}
var userName = $('#user-name').val();
var isAdmin = $("input[name='is-admin']:checked").val();
var status = $("input[name='user-status']:checked").val();
var email = $('#user-email').val();
if (userName == undefined || userName == "") {
toastr.warning('用户名不能为空!');
return;
}
if (email == undefined || email == "") {
toastr.warning('用户邮箱不能为空!');
return;
}
$('#addModal').modal('hide');
var user = {
name : userName ,
status : status == 1 ? true : false ,
email : email ,
isAdmin : isAdmin == 1 ? true : false
};
var roleId = $('button[data-id=role-select-1] .filter-option').attr("value");
if (roleId == "0" || roleId == undefined || roleId == null) {
toastr.warning('请选择用户角色!');
return;
}
$.ajax({
type: 'POST' ,
url: '/user/add' ,
data: JSON.stringify({
user : user ,
roleId : roleId
}) ,
contentType: "application/json" ,
dataType: 'json' ,
success: function (res) {
if (res.code != 200) {
toastr.error(res.msg);
} else {
toastr.info(res.msg);
$table.bootstrapTable('refresh');
}
}
});
});
//校验邮箱
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
return true;
}
return false;
}
//校验用户名的唯一性
$('#user-name').blur(function () {
$('.name-img').empty();
var name = $('#user-name').val();
if (name == undefined || name == null || name == '') {
return;
}
$.ajax({
type: 'POST' ,
url: '/user/getByName' ,
data: {name : name},
dataType: 'json' ,
success: function (res) {
if (res.code != 200) {
insertCheck = false;
$('.name-img').append('<img src="/resources/images/wrong.png" width="20px" height="20px"/>');
toastr.error(res.msg);
} else {
insertCheck = true;
$('.name-img').append('<img src="/resources/images/right.png" width="20px" height="20px"/>');
}
}
});
});
//校验邮箱的唯一性
$('#user-email').blur(function () {
$('.email-img').empty();
var email = $('#user-email').val();
if (email == undefined || email == null || email == '') {
return;
}
if (!isEmail(email)) {
toastr.warning("邮箱格式不正确!");
return;
}
$.ajax({
type: 'POST' ,
url: '/user/getByEmail' ,
data: {email : email},
dataType: 'json' ,
success: function (res) {
if (res.code != 200) {
insertCheck = false;
$('.email-img').append('<img src="/resources/images/wrong.png" width="20px" height="20px"/>');
toastr.error(res.msg);
} else {
insertCheck = true;
$('.email-img').append('<img src="/resources/images/right.png" width="20px" height="20px"/>');
}
}
});
});
//下拉列表选中
$('#role-select-1 , #role-select-2').on('changed.bs.select ' , function (event, clickedIndex) {
var roleId = event.delegateTarget.options[clickedIndex].value;
//设置属性
$('button[data-id=role-select-1] .filter-option').attr("value" , roleId);
$('button[data-id=role-select-2] .filter-option').attr("value" , roleId);
});
//拖拽modal-header,modal移动
$('#addModal').draggable({
cursor: "move",
handle: '.modal-header'
});
GeneralResponse.java
package com.xll.util;
/**
* 一个统一返回的类,封装了返回给前端页面的信息
* @author lonely.xia
* @date 2017/10/17
*/
public class GeneralResponse<T> {
/** 返回给页面的数据 */
T data;
/** 返回操作执行的结果 */
String msg;
/** 返回执行的状态码,操作执行成功一律返回200 */
int code;
public GeneralResponse(String msg , int code) {
this.msg = msg;
this.code = code;
}
public GeneralResponse() {}
public void setData(T data) {
this.data = data;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void setCode(int code) {
this.code = code;
}
public T getData() {
return data;
}
public String getMsg() {
return msg;
}
public int getCode() {
return code;
}
}
ResponseEnum.java
package com.xll.enums;
/**
* 响应状态码枚举
* Created by lonely.xia on 2017/10/17.
*/
public enum ResponseEnum {
INSERT_SUCCESS("插入成功" , 200) ,
INSERT_FAIL("插入失败" , -101) ,
INSERT_OR_UPDATE_ROLE_NAME_DUPLICATION("插入或更新重复角色名" , -102) ,
UPDATE_SUCCESS("更新成功" , 200) ,
UPDATE_FAIL("更新失败" , -201) ,
SELECT_SUCCESS("查询成功" , 200) ,
SELECT_FAIL("查询失败" , -301) ,
DELETE_SUCCESS("删除成功" , 200) ,
DELETE_FAIL("删除失败" , -401) ,
INSERT_NAME_OR_EMAIL_DUPLICATION("插入重复用户名或邮箱" , -501) ,
UPDATE_NAME_DUPLICATION("更新的用户名已存在" , -601) ,
UPDATE_EMAIL_DUPLICATION("更新的用户邮箱已存在" , -701) ,
INSERT_OR_UPDATE_TITLE_DUPLICATION("插入或更新重复的权限TITLE" , -502) ,
OK("成功" , 200);
private String name;
private int code;
private ResponseEnum(String name , int code) {
this.name = name;
this.code = code;
}
public String getName() {
return name;
}
public int getCode() {
return code;
}
}
UserController.java
@ResponseBody
@RequestMapping(value = "/getByName" , method = RequestMethod.POST)
public GeneralResponse<Integer> getByName(HttpServletRequest request , @RequestParam String name) {
User result = userService.getByName(name);
if (result != null) {
return new GeneralResponse<>(ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getName()
, ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getCode());
}
return new GeneralResponse<>(ResponseEnum.OK.getName() , ResponseEnum.OK.getCode());
}
@ResponseBody
@RequestMapping(value = "/getByEmail" , method = RequestMethod.POST)
public GeneralResponse<Integer> getByEmail(HttpServletRequest request , @RequestParam String email) {
User result = userService.getByEmail(email);
if (result != null) {
return new GeneralResponse<>(ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getName()
, ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getCode());
}
return new GeneralResponse<>(ResponseEnum.OK.getName() , ResponseEnum.OK.getCode());
}
@SystemLog(description = "添加用户")
@ResponseBody
@RequestMapping(value = "/add" , method = RequestMethod.POST)
public GeneralResponse<Integer> add(HttpServletRequest request , @RequestBody UserDTO userDTO) {
User user = userDTO.getUser();
Integer roleId = userDTO.getRoleId();
LOG.info("插入用户数据为[用户名:{},用户邮箱:{},角色ID:{}]" , user.getName() , user.getEmail() , roleId);
User result = userService.getUserByNameOrEmail(user);
if (result != null) {
return new GeneralResponse<>(ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getName()
, ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getCode());
}
Integer count = userService.insert(user);
if (count == 0) {
return new GeneralResponse<>(ResponseEnum.INSERT_FAIL.getName() , ResponseEnum.INSERT_FAIL.getCode());
}
count = userRoleService.insert(user.getId() , roleId);
if (count == 0) {
return new GeneralResponse<>(ResponseEnum.INSERT_FAIL.getName() , ResponseEnum.INSERT_FAIL.getCode());
}
return new GeneralResponse<>(ResponseEnum.INSERT_SUCCESS.getName() , ResponseEnum.INSERT_SUCCESS.getCode());
}
UserServiceImpl.java
@Override
public User getUserByNameOrEmail(User user) {
UserExample userExample = new UserExample();
UserExample.Criteria nameCriteria = userExample.createCriteria();
nameCriteria.andNameEqualTo(user.getName());
UserExample.Criteria emailCriteria = userExample.createCriteria();
emailCriteria.andEmailEqualTo(user.getEmail());
userExample.or(emailCriteria);
List<User> userList = userDao.selectByExample(userExample);
if (userList == null || userList.size() == 0) {
return null;
}
return userList.get(0);
}
@Override
public Integer insert(User user) {
return userDao.insert(user);
}
@Override
public User getByName(String name) {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andNameEqualTo(name);
List<User> userList = userDao.selectByExample(userExample);
if (userList == null || userList.size() == 0) {
return null;
}
return userList.get(0);
}
@Override
public User getByEmail(String email) {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andEmailEqualTo(email);
List<User> userList = userDao.selectByExample(userExample);
if (userList == null || userList.size() == 0) {
return null;
}
return userList.get(0);
}