修改人员选择:统一更新 -> 单独更新新增、删除

This commit is contained in:
wanggeng 2022-02-09 09:55:00 +08:00
parent 0a693df6de
commit 4815194d2d
21 changed files with 291 additions and 116 deletions

View File

@ -7,7 +7,7 @@ import ink.wgink.pojo.dtos.department.DepartmentUserDTO;
import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.pojo.vos.IdsVO; import ink.wgink.pojo.vos.SaveAndDeleteIdsVO;
import ink.wgink.service.department.pojo.vos.DepartmentUserSortVO; import ink.wgink.service.department.pojo.vos.DepartmentUserSortVO;
import ink.wgink.service.department.service.IDepartmentUserService; import ink.wgink.service.department.service.IDepartmentUserService;
import io.swagger.annotations.*; import io.swagger.annotations.*;
@ -43,8 +43,8 @@ public class DepartmentUserController extends DefaultBaseController {
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PutMapping("update/{departmentId}") @PutMapping("update/{departmentId}")
public synchronized SuccessResult update(@PathVariable("departmentId") String departmentId, public synchronized SuccessResult update(@PathVariable("departmentId") String departmentId,
@RequestBody IdsVO idsVO) { @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) {
departmentUserService.update(departmentId, idsVO.getIds()); departmentUserService.update(departmentId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds());
return new SuccessResult(); return new SuccessResult();
} }

View File

@ -61,9 +61,10 @@ public interface IDepartmentUserService extends IDepartmentUserBaseService {
* 更新用户 * 更新用户
* *
* @param departmentId 部门ID * @param departmentId 部门ID
* @param userIds 用户ID * @param saveIds 新增ID
* @param deleteIds 删除ID
*/ */
void update(String departmentId, List<String> userIds); void update(String departmentId, List<String> saveIds, List<String> deleteIds);
/** /**
* 更新用户排序 * 更新用户排序
@ -74,7 +75,6 @@ public interface IDepartmentUserService extends IDepartmentUserBaseService {
void updateSort(String departmentId, DepartmentUserSortVO departmentUserSortVO); void updateSort(String departmentId, DepartmentUserSortVO departmentUserSortVO);
/** /**
*
* @param departmentId * @param departmentId
* @param userIds * @param userIds
* @return * @return

View File

@ -175,7 +175,7 @@ public class DepartmentServiceImpl extends DefaultBaseService implements IDepart
String newDepartmentId = saveReturnId(splitDepartmentInfoVO); String newDepartmentId = saveReturnId(splitDepartmentInfoVO);
departmentAdjustmentService.save(departmentId, departmentDTO.getDepartmentName(), newDepartmentId, splitDepartmentInfoVO.getDepartmentName(), DepartmentAdjustmentTypeEnum.SPLIT); departmentAdjustmentService.save(departmentId, departmentDTO.getDepartmentName(), newDepartmentId, splitDepartmentInfoVO.getDepartmentName(), DepartmentAdjustmentTypeEnum.SPLIT);
if (!StringUtils.isBlank(userIds)) { if (!StringUtils.isBlank(userIds)) {
departmentUserService.update(newDepartmentId, Arrays.asList(userIds.split("_"))); departmentUserService.update(newDepartmentId, Arrays.asList(userIds.split("_")), new ArrayList<>());
} }
} }
} }

View File

@ -97,37 +97,25 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe
} }
@Override @Override
public void update(String departmentId, List<String> userIds) { public void update(String departmentId, List<String> saveUserIds, List<String> deleteUserIds) {
if (userIds.isEmpty()) {
return;
}
DepartmentPO departmentPO = departmentService.getPO(departmentId); DepartmentPO departmentPO = departmentService.getPO(departmentId);
if (departmentPO == null) { if (departmentPO == null) {
throw new SearchException("部门不存在"); throw new SearchException("部门不存在");
} }
Map<String, Object> params = getHashMap(2); if (deleteUserIds != null && !deleteUserIds.isEmpty()) {
params.put("departmentId", departmentId); delete(departmentId, departmentPO.getDepartmentName(), deleteUserIds);
List<String> existUserIds = departmentUserDao.listUserId(params); }
List<String> newUserIds = new ArrayList<>(); if (saveUserIds != null && !saveUserIds.isEmpty()) {
for (String userId : userIds) { Map<String, Object> params = getHashMap(4);
boolean isNewUser = true; params.put("departmentId", departmentId);
for (String existUserId : existUserIds) { for (String userId : saveUserIds) {
if (StringUtils.equals(userId, existUserId)) {
isNewUser = false;
break;
}
}
if (isNewUser) {
params.put("userId", userId); params.put("userId", userId);
departmentUserDao.save(params); departmentUserDao.save(params);
newUserIds.add(userId);
} }
} }
List<String> removeUserIds = new ArrayList<>(); departmentAdjustmentService.save(saveUserIds, departmentId, departmentPO.getDepartmentName(), USER_DEPARTMENT_TYPE_JOIN);
departmentAdjustmentService.save(newUserIds, departmentId, departmentPO.getDepartmentName(), USER_DEPARTMENT_TYPE_JOIN);
if (departmentUserSaveAfterHandler != null) { if (departmentUserSaveAfterHandler != null) {
departmentUserSaveAfterHandler.handle(departmentId, userIds); departmentUserSaveAfterHandler.handle(departmentId, saveUserIds);
} }
} }

View File

@ -213,10 +213,12 @@
height: '500px', height: '500px',
closeBtn: 0, closeBtn: 0,
onClose: function() { onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; top.dialog.dialogData.selectedDepartmentUsers = null;
if(selectedUsers != null && selectedUsers.length > 0) { var insertUsers = top.dialog.dialogData.saveDepartmentUsers;
var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers;
if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) {
var ids = []; var ids = [];
for (var i = 0, item; item = selectedUsers[i++];) { for (var i = 0, item; item = insertUsers[i++];) {
ids.push(item.userId); ids.push(item.userId);
} }
top.dialog.msg(top.dataMessage.update, { top.dialog.msg(top.dataMessage.update, {
@ -226,7 +228,8 @@
top.dialog.close(index); top.dialog.close(index);
var loadLayerIndex; var loadLayerIndex;
top.restAjax.put(top.restAjax.path('api/department/user/update/{departmentId}', [departmentId]), { top.restAjax.put(top.restAjax.path('api/department/user/update/{departmentId}', [departmentId]), {
ids: ids saveIds: ids,
deleteIds: deleteUsers
}, null, function (code, data) { }, null, function (code, data) {
top.dialog.msg(top.dataMessage.updated); top.dialog.msg(top.dataMessage.updated);
initSelectUserIds(); initSelectUserIds();

View File

@ -109,11 +109,17 @@
var selectedUserIds = top.dialog.dialogData.selectedUserIds; var selectedUserIds = top.dialog.dialogData.selectedUserIds;
var selectDepartmentUserOldArray = []; var selectDepartmentUserOldArray = [];
var selectDepartmentUserArray = []; var selectDepartmentUserArray = [];
var selectDepartmentUserObject = {};
var saveDepartmentUserObject = {};
var deleteDepartmentUserObject = {};
var selectRoleId = 0; var selectRoleId = 0;
var selectedParentId = 0; var selectedParentId = -1;
var searchTimeout; var searchTimeout;
var hasRoleService = [[${hasRoleService}]]; var hasRoleService = [[${hasRoleService}]];
var LAZY_GET_USER_COUNT = 500;
top.dialog.dialogData.selectedDepartmentUsers = []; top.dialog.dialogData.selectedDepartmentUsers = [];
top.dialog.dialogData.saveDepartmentUsers = [];
top.dialog.dialogData.deleteDepartmentUsers = [];
function closeBox() { function closeBox() {
top.dialog.closeBox(); top.dialog.closeBox();
@ -293,20 +299,24 @@
} }
// 初始化人员列表 // 初始化人员列表
function initUsers(parentId) { function initUsers(parentId) {
if(selectedParentId == parentId) {
return;
}
$('#userWrapper').empty(); $('#userWrapper').empty();
$('.layui-flow-more').remove(); $('.layui-flow-more').remove();
selectedParentId = parentId; selectedParentId = parentId;
initUserFlowLoad(); initUserFlowLoad();
} }
// 初始化选择的人员 // 分页懒加载,数据量大(500为单位)
function initSelectedUsers(callback) { function lazyPageInitSelectedUsers(allSelectedUserIdsArray, page, totalPage, callback) {
if(!selectedUserIds) {
callback();
return;
}
var loadLayerIndex; var loadLayerIndex;
var startIndex = (page - 1) * LAZY_GET_USER_COUNT;
var endIndex = page * LAZY_GET_USER_COUNT;
var searchUserIds = allSelectedUserIdsArray.slice(startIndex, endIndex);
var hasMore = page < totalPage;
top.restAjax.post(top.restAjax.path('api/user/listbyids', []), { top.restAjax.post(top.restAjax.path('api/user/listbyids', []), {
ids: selectedUserIds.split('\_') ids: searchUserIds
}, null, function(code, data) { }, null, function(code, data) {
for(var i = 0, item; item = data[i++]; ) { for(var i = 0, item; item = data[i++]; ) {
selectUser(item.userId, item.userName, item.userUsername); selectUser(item.userId, item.userName, item.userUsername);
@ -316,15 +326,25 @@
username: item.userUsername username: item.userUsername
}); });
} }
if(hasMore) {
setTimeout(function() {
lazyPageInitSelectedUsers(allSelectedUserIdsArray, page + 1, totalPage, callback);
}, 100);
}
callback(); callback();
}, function(code, data) { }, function(code, data) {
top.dialog.msg(data.msg); top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
}); });
} }
// 初始化选择的人员
function initSelectedUsers(callback) {
if(!selectedUserIds) {
callback();
return;
}
var selectedUserIdsArray = selectedUserIds.split('\_');
lazyPageInitSelectedUsers(selectedUserIdsArray, 1, Math.ceil(selectedUserIdsArray.length / LAZY_GET_USER_COUNT), callback);
}
initFrame(); initFrame();
if(hasRoleService) { if(hasRoleService) {
initRoleTree(); initRoleTree();
@ -352,37 +372,62 @@
// 人员是否已经选择 // 人员是否已经选择
function isUserSelected(userId) { function isUserSelected(userId) {
var isSelected = false; var isSelected = false;
for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) { var obj = selectDepartmentUserObject[userId];
if(item.userId == userId) { if(obj) {
isSelected = true; isSelected = true;
break;
}
} }
// for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) {
// if(item.userId == userId) {
// isSelected = true;
// break;
// }
// }
return isSelected; return isSelected;
} }
// 删除已经选择的人员 // 删除已经选择的人员
function removeSelectedUser(userId) { function removeSelectedUser(userId) {
for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) { delete selectDepartmentUserObject[userId];
if(item.userId == userId) { var selectedUserDom = $('#selected_user_'+ userId);
selectDepartmentUserArray.splice(i, 1); selectedUserDom.focus();
var selectedUserDom = $('#selected_user_'+ userId); selectedUserDom.remove();
selectedUserDom.focus(); $('#user_'+ userId).removeClass('user-selected');
selectedUserDom.remove();
$('#user_'+ userId).removeClass('user-selected'); deleteDepartmentUserObject[userId] = userId;
break;
} // for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) {
} // if(item.userId == userId) {
// selectDepartmentUserArray.splice(i, 1);
// var selectedUserDom = $('#selected_user_'+ userId);
// selectedUserDom.focus();
// selectedUserDom.remove();
// $('#user_'+ userId).removeClass('user-selected');
// break;
// }
// }
} }
// 选择人员 // 选择人员
function selectUser(userId, userName, username, isOnlySelect) { function selectUser(userId, userName, username) {
$('#user_'+ userId).addClass('user-selected');
selectDepartmentUserObject[userId] = {
userId: userId,
userName: userName,
username: username
}
delete deleteDepartmentUserObject[userId];
// selectDepartmentUserArray.push({
// userId: userId,
// userName: userName,
// username: username
// });
$('#selectUsers').append('<a id="selected_user_'+ userId +'" href="javascript:void(0);" class="layui-btn layui-btn-xs">'+ userName +' <i class="fa fa-close" lay-click-removeuser data-userid="'+ userId +'"></i></a>');
}
// 点击用户
function clickUser(userId, userName, username, isOnlySelect) {
if(!isUserSelected(userId)) { if(!isUserSelected(userId)) {
$('#user_'+ userId).addClass('user-selected'); selectUser(userId, userName, username);
selectDepartmentUserArray.push({
userId: userId,
userName: userName,
username: username
});
$('#selectUsers').append('<a id="selected_user_'+ userId +'" href="javascript:void(0);" class="layui-btn layui-btn-xs">'+ userName +' <i class="fa fa-close" lay-click-removeuser data-userid="'+ userId +'"></i></a>');
$('#selected_user_'+ userId).focus(); $('#selected_user_'+ userId).focus();
} else { } else {
if(!isOnlySelect) { if(!isOnlySelect) {
@ -392,7 +437,7 @@
} }
$(document.body).on('click', '*[lay-click-user]', null, function() { $(document.body).on('click', '*[lay-click-user]', null, function() {
var data = this.dataset; var data = this.dataset;
selectUser(data.userid, data.username, data.userUsername); clickUser(data.userid, data.username, data.userUsername);
}); });
$(document.body).on('click', '*[lay-click-removeuser]', null, function() { $(document.body).on('click', '*[lay-click-removeuser]', null, function() {
var data = this.dataset; var data = this.dataset;
@ -401,7 +446,7 @@
$(document.body).on('click', '*[lay-click-select-all-user]', null, function() { $(document.body).on('click', '*[lay-click-select-all-user]', null, function() {
$('#userWrapper').children().each(function() { $('#userWrapper').children().each(function() {
var data = this.dataset; var data = this.dataset;
selectUser(data.userid, data.username, data.userUsername, true); clickUser(data.userid, data.username, data.userUsername, true);
}); });
}); });
$(document.body).on('click', '*[lay-click-clear-all-user]', null, function() { $(document.body).on('click', '*[lay-click-clear-all-user]', null, function() {
@ -417,7 +462,34 @@
closeBox(); closeBox();
}); });
$('.confirm').on('click', function() { $('.confirm').on('click', function() {
for(var key in selectDepartmentUserObject) {
selectDepartmentUserArray.push(selectDepartmentUserObject[key]);
}
top.dialog.dialogData.selectedDepartmentUsers = selectDepartmentUserArray; top.dialog.dialogData.selectedDepartmentUsers = selectDepartmentUserArray;
// 删除的用户
var deleteDepartmentUsersArray = [];
for(var key in deleteDepartmentUserObject) {
deleteDepartmentUsersArray.push(key);
}
top.dialog.dialogData.deleteDepartmentUsers = deleteDepartmentUsersArray;
// 新增的用户
var saveDepartmentUserArray = [];
for(var key in selectDepartmentUserObject) {
var exist = false;
for(var i = 0, item; item = selectDepartmentUserOldArray[i++];) {
if(key == item.userId) {
exist = true;
break;
}
}
if(!exist) {
saveDepartmentUserArray.push(selectDepartmentUserObject[key]);
}
}
top.dialog.dialogData.saveDepartmentUsers = saveDepartmentUserArray;
top.dialog.dialogData.selectedUserIds = null; top.dialog.dialogData.selectedUserIds = null;
closeBox(); closeBox();
}); });

View File

@ -7,7 +7,7 @@ import ink.wgink.pojo.dtos.group.GroupUserDTO;
import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.pojo.vos.IdsVO; import ink.wgink.pojo.vos.SaveAndDeleteIdsVO;
import ink.wgink.service.group.service.IGroupUserService; import ink.wgink.service.group.service.IGroupUserService;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -42,8 +42,8 @@ public class GroupUserController extends DefaultBaseController {
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PutMapping("update/{groupId}") @PutMapping("update/{groupId}")
public synchronized SuccessResult update(@PathVariable("groupId") String groupId, public synchronized SuccessResult update(@PathVariable("groupId") String groupId,
@RequestBody IdsVO idsVO) { @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) {
groupUserService.update(groupId, idsVO.getIds()); groupUserService.update(groupId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds());
return new SuccessResult(); return new SuccessResult();
} }

View File

@ -19,10 +19,11 @@ public interface IGroupUserService extends IGroupUserBaseService {
/** /**
* 更新用户组人员列表 * 更新用户组人员列表
* *
* @param groupId 用户组ID * @param groupId 用户组ID
* @param userIds 用户ID列表 * @param saveUserIds 保存用户ID列表
* @param deleteUserIds 删除用户ID列表
*/ */
void update(String groupId, List<String> userIds); void update(String groupId, List<String> saveUserIds, List<String> deleteUserIds);
/** /**
* 用户组人员删除 * 用户组人员删除

View File

@ -42,12 +42,14 @@ public class GroupUserServiceImpl extends DefaultBaseService implements IGroupUs
private IGroupService groupService; private IGroupService groupService;
@Override @Override
public void update(String groupId, List<String> userIds) { public void update(String groupId, List<String> saveUserIds, List<String> deleteUserIds) {
delete(groupId, userIds); if (deleteUserIds != null && !deleteUserIds.isEmpty()) {
if (!userIds.isEmpty()) { delete(groupId, deleteUserIds);
}
if (saveUserIds != null && !saveUserIds.isEmpty()) {
Map<String, Object> params = getHashMap(4); Map<String, Object> params = getHashMap(4);
params.put("groupId", groupId); params.put("groupId", groupId);
for (String userId : userIds) { for (String userId : saveUserIds) {
params.put("userId", userId); params.put("userId", userId);
groupUserDao.save(params); groupUserDao.save(params);
} }

View File

@ -212,10 +212,12 @@
height: '500px', height: '500px',
closeBtn: 0, closeBtn: 0,
onClose: function() { onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; top.dialog.dialogData.selectedDepartmentUsers = null;
if(selectedUsers != null && selectedUsers.length > 0) { var insertUsers = top.dialog.dialogData.saveDepartmentUsers;
var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers;
if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) {
var ids = []; var ids = [];
for (var i = 0, item; item = selectedUsers[i++];) { for (var i = 0, item; item = insertUsers[i++];) {
ids.push(item.userId); ids.push(item.userId);
} }
top.dialog.msg(top.dataMessage.update, { top.dialog.msg(top.dataMessage.update, {
@ -225,7 +227,8 @@
top.dialog.close(index); top.dialog.close(index);
var loadLayerIndex; var loadLayerIndex;
top.restAjax.put(top.restAjax.path('api/group/user/update/{groupId}', [groupId]), { top.restAjax.put(top.restAjax.path('api/group/user/update/{groupId}', [groupId]), {
ids: ids saveIds: ids,
deleteIds: deleteUsers
}, null, function (code, data) { }, null, function (code, data) {
top.dialog.msg(top.dataMessage.updated); top.dialog.msg(top.dataMessage.updated);
initSelectUserIds(); initSelectUserIds();

View File

@ -7,7 +7,7 @@ import ink.wgink.pojo.dtos.position.PositionUserDTO;
import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.pojo.vos.IdsVO; import ink.wgink.pojo.vos.SaveAndDeleteIdsVO;
import ink.wgink.service.position.service.IPositionUserService; import ink.wgink.service.position.service.IPositionUserService;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -42,8 +42,8 @@ public class PositionUserController extends DefaultBaseController {
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PutMapping("update/{positionId}") @PutMapping("update/{positionId}")
public synchronized SuccessResult update(@PathVariable("positionId") String positionId, public synchronized SuccessResult update(@PathVariable("positionId") String positionId,
@RequestBody IdsVO idsVO) { @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) {
positionUserService.update(positionId, idsVO.getIds()); positionUserService.update(positionId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds());
return new SuccessResult(); return new SuccessResult();
} }

View File

@ -19,10 +19,11 @@ public interface IPositionUserService extends IPositionUserBaseService {
/** /**
* 更新职位人员列表 * 更新职位人员列表
* *
* @param positionId 职位ID * @param positionId 职位ID
* @param userIds 用户ID列表 * @param saveUserIds 新增用户ID列表
* @param deleteUserIds 删除用户ID列表
*/ */
void update(String positionId, List<String> userIds); void update(String positionId, List<String> saveUserIds, List<String> deleteUserIds);
/** /**
* 职位人员删除 * 职位人员删除

View File

@ -42,12 +42,14 @@ public class PositionUserServiceImpl extends DefaultBaseService implements IPosi
private IPositionService positionService; private IPositionService positionService;
@Override @Override
public void update(String positionId, List<String> userIds) { public void update(String positionId, List<String> saveUserIds, List<String> deleteUserIds) {
delete(positionId, userIds); if (deleteUserIds != null && !deleteUserIds.isEmpty()) {
if (!userIds.isEmpty()) { delete(positionId, deleteUserIds);
}
if (saveUserIds != null && !saveUserIds.isEmpty()) {
Map<String, Object> params = getHashMap(4); Map<String, Object> params = getHashMap(4);
params.put("positionId", positionId); params.put("positionId", positionId);
for (String userId : userIds) { for (String userId : saveUserIds) {
params.put("userId", userId); params.put("userId", userId);
positionUserDao.save(params); positionUserDao.save(params);
} }

View File

@ -212,10 +212,13 @@
height: '500px', height: '500px',
closeBtn: 0, closeBtn: 0,
onClose: function() { onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; top.dialog.dialogData.selectedDepartmentUsers = null;
if(selectedUsers != null && selectedUsers.length > 0) { var insertUsers = top.dialog.dialogData.saveDepartmentUsers;
var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers;
if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) {
var ids = []; var ids = [];
for (var i = 0, item; item = selectedUsers[i++];) { for (var i = 0, item; item = insertUsers[i++];) {
ids.push(item.userId); ids.push(item.userId);
} }
top.dialog.msg(top.dataMessage.update, { top.dialog.msg(top.dataMessage.update, {
@ -225,7 +228,8 @@
top.dialog.close(index); top.dialog.close(index);
var loadLayerIndex; var loadLayerIndex;
top.restAjax.put(top.restAjax.path('api/position/user/update/{positionId}', [positionId]), { top.restAjax.put(top.restAjax.path('api/position/user/update/{positionId}', [positionId]), {
ids: ids saveIds: ids,
deleteIds: deleteUsers
}, null, function (code, data) { }, null, function (code, data) {
top.dialog.msg(top.dataMessage.updated); top.dialog.msg(top.dataMessage.updated);
$('#selectedUserIds').val(ids.toString().replaceAll(',', '\_')); $('#selectedUserIds').val(ids.toString().replaceAll(',', '\_'));

View File

@ -4,10 +4,11 @@ import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.pojo.ListPage; import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.role.RoleUserDTO; import ink.wgink.pojo.dtos.role.RoleUserDTO;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.pojo.vos.IdsVO; import ink.wgink.pojo.vos.SaveAndDeleteIdsVO;
import ink.wgink.service.role.service.IRoleUserService; import ink.wgink.service.role.service.IRoleUserService;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -31,7 +32,7 @@ import java.util.Map;
@RestController @RestController
@RequestMapping(ISystemConstant.API_PREFIX + "/role/user") @RequestMapping(ISystemConstant.API_PREFIX + "/role/user")
public class RoleUserController extends DefaultBaseController { public class RoleUserController extends DefaultBaseController {
@Autowired @Autowired
private IRoleUserService roleUserService; private IRoleUserService roleUserService;
@ -42,8 +43,8 @@ public class RoleUserController extends DefaultBaseController {
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PutMapping("update/{roleId}") @PutMapping("update/{roleId}")
public synchronized SuccessResult update(@PathVariable("roleId") String roleId, public synchronized SuccessResult update(@PathVariable("roleId") String roleId,
@RequestBody IdsVO idsVO) { @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) {
roleUserService.update(roleId, idsVO.getIds()); roleUserService.update(roleId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds());
return new SuccessResult(); return new SuccessResult();
} }
@ -85,4 +86,25 @@ public class RoleUserController extends DefaultBaseController {
return roleUserService.listUserId(roleId); return roleUserService.listUserId(roleId);
} }
@ApiOperation(value = "用户列表", notes = "通过角色ID获取用户列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"),
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("list-user/role-id/{roleId}")
public List<UserDTO> listUserByRoleId(@PathVariable("roleId") String roleId) {
return roleUserService.listUserByRoleId(roleId);
}
@ApiOperation(value = "用户分页列表", notes = "通过角色ID获取用户分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"),
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("listpage-user/role-id/{roleId}")
public SuccessResultList<List<UserDTO>> listPageUserByRoleId(@PathVariable("roleId") String roleId, ListPage page) {
return roleUserService.listPageUserByRoleId(roleId, page);
}
} }

View File

@ -5,6 +5,7 @@ import ink.wgink.exceptions.ParamsException;
import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.pojo.ListPage; import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.role.RoleUserDTO; import ink.wgink.pojo.dtos.role.RoleUserDTO;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.pos.RolePO; import ink.wgink.pojo.pos.RolePO;
import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.pojo.result.SuccessResultList;
@ -93,4 +94,24 @@ public class RoleUserResourceController extends DefaultBaseController {
return roleUserService.listUserIdByRoleIdAndUserIds(roleId, idsVO.getIds()); return roleUserService.listUserIdByRoleIdAndUserIds(roleId, idsVO.getIds());
} }
@ApiOperation(value = "用户列表", notes = "通过角色ID获取用户列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"),
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("list-user/role-id/{roleId}")
public List<UserDTO> listUserByRoleId(@PathVariable("roleId") String roleId) {
return roleUserService.listUserByRoleId(roleId);
}
@ApiOperation(value = "用户分页列表", notes = "通过角色ID获取用户分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"),
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("listpage-user/role-id/{roleId}")
public SuccessResultList<List<UserDTO>> listPageUserByRoleId(@PathVariable("roleId") String roleId, ListPage page) {
return roleUserService.listPageUserByRoleId(roleId, page);
}
} }

View File

@ -4,6 +4,7 @@ import ink.wgink.exceptions.RemoveException;
import ink.wgink.exceptions.SaveException; import ink.wgink.exceptions.SaveException;
import ink.wgink.exceptions.SearchException; import ink.wgink.exceptions.SearchException;
import ink.wgink.interfaces.init.IInitBaseTable; import ink.wgink.interfaces.init.IInitBaseTable;
import ink.wgink.pojo.dtos.user.UserDTO;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@ -49,6 +50,7 @@ public interface IRoleUserDao extends IInitBaseTable {
/** /**
* 角色列表 * 角色列表
*
* @param params * @param params
* @return * @return
* @throws SearchException * @throws SearchException
@ -64,4 +66,12 @@ public interface IRoleUserDao extends IInitBaseTable {
*/ */
List<String> listGroupUserId(Map<String, Object> params) throws SearchException; List<String> listGroupUserId(Map<String, Object> params) throws SearchException;
/**
* 用户列表
*
* @param params
* @return
* @throws SearchException
*/
List<UserDTO> listUser(Map<String, Object> params) throws SearchException;
} }

View File

@ -19,17 +19,18 @@ public interface IRoleUserService extends IRoleUserBaseService {
/** /**
* 更新用户组人员列表 * 更新用户组人员列表
* *
* @param groupId 用户组ID * @param roleId 角色ID
* @param userIds 用户ID列表 * @param saveIds 新增ID列表
* @param deleteIds 删除ID列表
*/ */
void update(String groupId, List<String> userIds); void update(String roleId, List<String> saveIds, List<String> deleteIds);
/** /**
* 用户组人员删除 * 用户组人员删除
* *
* @param groupId 用户组ID * @param roleId 用户组ID
* @param userIds 用户ID列表 * @param userIds 用户ID列表
*/ */
void delete(String groupId, List<String> userIds); void delete(String roleId, List<String> userIds);
} }

View File

@ -1,5 +1,7 @@
package ink.wgink.service.role.service.impl; package ink.wgink.service.role.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import ink.wgink.common.base.DefaultBaseService; import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.interfaces.role.IRoleUserDeleteAfterHandler; import ink.wgink.interfaces.role.IRoleUserDeleteAfterHandler;
@ -48,18 +50,20 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser
private IRoleUserDeleteAfterHandler roleUserDeleteAfterHandler; private IRoleUserDeleteAfterHandler roleUserDeleteAfterHandler;
@Override @Override
public void update(String roleId, List<String> userIds) { public void update(String roleId, List<String> saveUserIds, List<String> deleteUserIds) {
delete(roleId, userIds); if (deleteUserIds != null && !deleteUserIds.isEmpty()) {
if (!userIds.isEmpty()) { delete(roleId, deleteUserIds);
}
if (saveUserIds != null && !saveUserIds.isEmpty()) {
Map<String, Object> params = getHashMap(4); Map<String, Object> params = getHashMap(4);
params.put("roleId", roleId); params.put("roleId", roleId);
for (String userId : userIds) { for (String userId : saveUserIds) {
params.put("userId", userId); params.put("userId", userId);
roleUserDao.save(params); roleUserDao.save(params);
} }
} }
if (roleUserSaveAfterHandler != null) { if (roleUserSaveAfterHandler != null) {
roleUserSaveAfterHandler.handle(roleId, userIds); roleUserSaveAfterHandler.handle(roleId, saveUserIds);
} }
} }
@ -148,6 +152,20 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser
return roleUserDao.listUserId(params); return roleUserDao.listUserId(params);
} }
@Override
public List<UserDTO> listUserByRoleId(String roleId) {
Map<String, Object> params = getHashMap(2);
params.put("roleId", roleId);
return roleUserDao.listUser(params);
}
@Override
public SuccessResultList<List<UserDTO>> listPageUserByRoleId(String roleId, ListPage page) {
PageHelper.startPage(page.getPage(), page.getRows());
List<UserDTO> userDTOs = listUserByRoleId(roleId);
PageInfo<UserDTO> pageInfo = new PageInfo<>(userDTOs);
return new SuccessResultList<>(userDTOs, pageInfo.getPageNum(), pageInfo.getTotal());
}
private List<String> listGroupUserId(Map<String, Object> params) { private List<String> listGroupUserId(Map<String, Object> params) {
return roleUserDao.listGroupUserId(params); return roleUserDao.listGroupUserId(params);

View File

@ -108,5 +108,28 @@
user_id user_id
</select> </select>
<!-- 用户列表 -->
<select id="listUser" parameterType="map" resultMap="ink.wgink.service.user.dao.IUserDao.userDTO" useCache="true">
SELECT
user_id,
user_username,
user_name,
user_phone,
user_email,
user_type,
user_state
FROM
sys_user t1
WHERE
user_id IN (
SELECT
user_id
FROM
sys_role_user st1
WHERE
role_id = #{roleId}
)
</select>
</mapper> </mapper>

View File

@ -220,10 +220,13 @@
height: '500px', height: '500px',
closeBtn: 0, closeBtn: 0,
onClose: function() { onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; top.dialog.dialogData.selectedDepartmentUsers = null;
if(selectedUsers != null && selectedUsers.length > 0) { var insertUsers = top.dialog.dialogData.saveDepartmentUsers;
var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers;
if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) {
var ids = []; var ids = [];
for (var i = 0, item; item = selectedUsers[i++];) { for (var i = 0, item; item = insertUsers[i++];) {
ids.push(item.userId); ids.push(item.userId);
} }
top.dialog.msg(top.dataMessage.update, { top.dialog.msg(top.dataMessage.update, {
@ -233,7 +236,8 @@
top.dialog.close(index); top.dialog.close(index);
var loadLayerIndex; var loadLayerIndex;
top.restAjax.put(top.restAjax.path('api/role/user/update/{roleId}', [roleId]), { top.restAjax.put(top.restAjax.path('api/role/user/update/{roleId}', [roleId]), {
ids: ids saveIds: ids,
deleteIds: deleteUsers
}, null, function (code, data) { }, null, function (code, data) {
top.dialog.msg(top.dataMessage.updated); top.dialog.msg(top.dataMessage.updated);
initSelectUserIds(); initSelectUserIds();