完善部门用户选择

This commit is contained in:
wanggeng 2022-08-13 21:59:54 +08:00
parent 47e0090b1c
commit 510a5027d4
2 changed files with 535 additions and 0 deletions

View File

@ -41,6 +41,12 @@ public class CoreManageRouteController {
return modelAndView;
}
@GetMapping("list-department-user-select")
public ModelAndView listDepartmentUserSelect() {
ModelAndView modelAndView = new ModelAndView("core/manage/list-department-user-select");
return modelAndView;
}
@GetMapping("save-department-user")
public ModelAndView saveDepartmentUser() {
ModelAndView modelAndView = new ModelAndView("core/manage/save-department-user");

View File

@ -0,0 +1,529 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/js/vendor/viewer/viewer.min.css">
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<style>
.search-item .layui-form-select .layui-input {width: 100%;}
.selected-user-box {padding-left: 10px;}
.selected-user-box .selected-user-list {border: 1px solid #e6e6e6; height: 100%; overflow-y: auto;}
.selected-user-box .selected-user-list .selected-user-item {position: relative;border-bottom: 1px dotted #e6e6e6;}
.selected-user-box .selected-user-list .selected-user-item:last-child {border-bottom: none;}
.selected-user-box .selected-user-list .selected-user-item .avatar {width: 62px; height: 62px; line-height: 62px; text-align: center; font-size: 31px; font-weight: bold; border-radius: 31px; position: absolute; top: 5px; left: 5px; }
.selected-user-box .selected-user-list .selected-user-item .avatar-color-0 {background-color: #b4b4c4; color: #fff;}
.selected-user-box .selected-user-list .selected-user-item .avatar-color-1 {background-color: #7182e7; color: #fff;}
.selected-user-box .selected-user-list .selected-user-item .avatar-color-2 {background-color: #304eff; color: #fff;}
.selected-user-box .selected-user-list .selected-user-item .avatar-color-3 {background-color: #ff75ef; color: #fff;}
.selected-user-box .selected-user-list .selected-user-item .avatar-color-4 {background-color: #ff7878; color: #fff;}
.selected-user-box .selected-user-list .selected-user-item .avatar-color-5 {background-color: #d2d2d2; color: #000;}
.selected-user-box .selected-user-list .selected-user-item .avatar-color-6 {background-color: #b8c926; color: #fff;}
.selected-user-box .selected-user-list .selected-user-item .avatar-color-7 {background-color: #8d3434; color: #fff;}
.selected-user-box .selected-user-list .selected-user-item .info {margin-left: 72px;}
.selected-user-box .selected-user-list .selected-user-item .info div {overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
.selected-user-box .selected-user-list .selected-user-item .remove {position: absolute; top: 25px; right: 5px;}
.btn-box {margin-top: 4px; text-align: right}
.btn-box button {height: 40px;}
</style>
</head>
<body>
<div class="layui-anim layui-anim-fadein">
<div class="layui-row">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-row">
<div class="layui-col-xs8">
<div class="test-table-reload-btn" style="margin-bottom: 10px;">
<div class="layui-row">
<div class="layui-col-xs3 layui-inline">
<input type="hidden" id="departmentId">
<input type="text" id="departmentName" class="layui-input search-item" placeholder="选择组织部门">
</div>
<div class="layui-col-xs3 layui-inline">
<input type="hidden" id="roleId">
<input type="text" id="roleName" class="layui-input search-item" placeholder="选择角色">
</div>
<div class="layui-col-xs3 layui-inline">
<input type="hidden" id="positionId">
<input type="text" id="positionName" class="layui-input search-item" placeholder="选择职位">
</div>
<div class="layui-col-xs3 layui-inline">
<input type="hidden" id="groupId">
<input type="text" id="groupName" class="layui-input search-item" placeholder="选择用户组">
</div>
</div>
<div class="layui-row" style="margin-top: 10px">
<div class="layui-col-xs3 layui-inline">
<input type="text" id="keywords" class="layui-input search-item" placeholder="用户名、昵称">
</div>
<div class="layui-col-xs3 layui-inline layui-form search-item">
<select id="userType" name="userType">
<option value="">选择类型</option>
<option value="1">系统用户</option>
<option value="2">普通用户</option>
<option value="3">公共用户</option>
</select>
</div>
<div class="layui-col-xs3 layui-inline layui-form search-item">
<select id="userState" name="userState">
<option value="">选择状态</option>
<option value="0">正常</option>
<option value="1">锁定</option>
<option value="-1">未审核</option>
<option value="-2">审核不通过</option>
</select>
</div>
<div class="layui-col-xs3 layui-btn-group">
<button type="button" id="search" class="layui-btn layui-btn-sm">
<i class="fa fa-lg fa-search"></i> 搜索
</button>
</div>
</div>
</div>
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
</div>
<div id="selectedUserBox" class="selected-user-box layui-col-xs4">
<div id="selectedUserListBox" class="selected-user-list"></div>
</div>
<div class="btn-box layui-col-xs4">
<div class="layui-btn-group">
<button id="clearBtn" class="layui-btn layui-btn-danger"><i class="fa fa-trash" aria-hidden="true"></i> 清空</button>
<button id="confirmBtn" class="layui-btn layui-btn-normal"><i class="fa fa-check" aria-hidden="true"></i> 确定</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="assets/js/common/layui-input-tree.js"></script>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script th:inline="javascript">
layui.config({
base: 'assets/layuiadmin/'
}).extend({
index: 'lib/index'
}).use(['index', 'table', 'laydate', 'upload', 'ztree'], function() {
var $ = layui.$;
var $win = $(window);
var table = layui.table;
var admin = layui.admin;
var layer = layui.layer;
var laydate = layui.laydate;
var resizeTimeout = null;
var layuiInputTree = new LayuiInputTree(layui);
var tableUrl = 'api/core/manage/listpage-user';
// 已经选择用户列表
var isUpdate = false;
// 旧的选择的用户
var selectedIdArray = top.dialog.dialogData.selectedIdArray ? top.dialog.dialogData.selectedIdArray : [];
// 选择的用户列表
top.dialog.dialogData.newSelectedArray = null;
// 正在选择
var selectMap = {};
var tableData = [];
// 刷新已选择的用户列表
function reloadSelectedUsersDom() {
$('#selectedUserListBox').empty();
var doms = '';
var index = 0;
for(var key in selectMap) {
var user = selectMap[key];
var dom = `
<div class="selected-user-item">
<div class="avatar avatar-color-${index % 8}">${user.userName.substring(0, 1)}</div>
<div class="info">
<div class="userName">${user.userName}</div>
<div class="username"><i class="fa fa-user-o"></i> ${user.userUsername}</div>
<div class="phone"><i class="fa fa-phone-square"></i> ${user.userPhone ? user.userPhone : '-'}</div>
</div>
<div class="remove">
<button class="layui-btn layui-btn-danger layui-btn-xs remove-selected-btn" data-user-id="${user.userId}">
<i class="fa fa-times"></i>
</button>
</div>
</div>
`
doms += dom;
index++;
}
$('#selectedUserListBox').append(doms);
}
// 初始化选择的用户列表
function initSelectedUsers() {
if(selectedIdArray.length == 0) {
return;
}
top.restAjax.post(top.restAjax.path('api/user/list/ids', []), {
ids: selectedIdArray
}, null, function(code, data) {
$.each(data, function(index, item) {
selectMap[item.userId] = item;
})
reloadSelectedUsersDom();
}, function(code, data) {
top.dialog.msg(data.msg);
});
}
initSelectedUsers();
// 初始化已选择的列表
function initSelectMap() {
for(var i = 0, item; item = selectedIdArray[i++];) {
selectMap[item] = {
userId: item
}
}
}
initSelectMap();
// 初始化表格
function initTable() {
var colsArray = [
{type:'checkbox', fixed: 'left'},
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
{field:'userUsername', width:140, title: '用户名', sort: true, align:'center',
templet: function(rowData) {
return rowData.userUsername;
}
},
{field:'userName', width:140, title: '昵称', sort: true, align:'center'},
{field:'userType', width:90, title: '类型', sort: true, align:'center',
templet: function(item) {
if(item.userType == 1) {
return '<span class="layui-badge layui-bg-green">系统用户</span>';
} else if(item.userType == 2) {
return '<span class="layui-badge layui-bg-orange">普通用户</span>';
} else if(item.userType == 3) {
return '<span class="layui-badge layui-bg-gray">公共用户</span>';
}
return '<span class="layui-badge">类型错误</span>';
}
},
{field:'userState', width:80, title: '状态', sort: true, align:'center',
templet: function(item) {
var value;
switch (item.userState) {
case 1:
value = '<span class="layui-badge layui-bg-blue">锁定</span>';
break;
case -1:
value = '<span class="layui-badge layui-bg-gray">未审核</span>';
break;
case -2:
value = '<span class="layui-badge">审核不通过</span>';
break;
default:
value = '<span class="layui-badge layui-bg-green">正常</span>';
}
return value;
}
},
{field:'userPhone', width:140, title: '手机', sort: true, align:'center',
templet: function(item) {
if(!item.userPhone) {
return '-';
}
return item.userPhone;
}
},
{field:'userEmail', width: 160, title: '邮箱', sort: true, align:'center',
templet: function(item) {
if(!item.userEmail) {
return '-';
}
return item.userEmail;
}
},
{field:'gmtCreate', width:180, title: '创建时间', align:'center',
templet: function(item) {
if(!item.gmtCreate) {
return '-';
}
return item.gmtCreate;
}
},
];
$.extend(table, {config: {checkName: 'checked'}});
table.render({
elem: '#dataTable',
id: 'dataTable',
url: top.restAjax.path(tableUrl, []),
width: admin.screen() > 1 ? '100%' : '',
height: $win.height() - 100,
limit: 20,
limits: [20, 40, 60, 80, 100, 200],
toolbar: false,
request: {
pageName: 'page',
limitName: 'rows'
},
cols: [
colsArray
],
page: true,
parseData: function(data) {
// 默认勾选
for(var i = 0, item; item = data.rows[i++];) {
if(selectMap[item.userId]) {
item.checked = true;
// 重新赋值:在打开界面后直接确定关闭页面时回显正常
selectMap[item.userId] = item;
} else {
item.checked = false;
}
}
tableData = data.rows;
// 默认勾选
return {
'code': 0,
'msg': '',
'count': data.total,
'data': data.rows
};
}
});
}
// 重载表格
function reloadTable(currentPage) {
table.reload('dataTable', {
where: {
keywords: $('#keywords').val(),
startTime: $('#startTime').val(),
endTime: $('#endTime').val(),
userType: $('#userType').val(),
userState: $('#userState').val(),
departmentId: $('#departmentId').val(),
roleId: $('#roleId').val(),
positionId: $('#positionId').val(),
groupId: $('#groupId').val()
},
page: {
curr: currentPage
},
});
}
// 初始化日期
function initDate() {
// 日期选择
laydate.render({
elem: '#startTime',
format: 'yyyy-MM-dd'
});
laydate.render({
elem: '#endTime',
format: 'yyyy-MM-dd'
});
}
// 初始化下拉树
function initSelectInputTree() {
// 组织机构下拉树
layuiInputTree.initSelect({
id: 'departmentName',
url: 'api/department/listztree',
getSelectedData: function() {
return {id: $('#departmentId').val(), name: $('#departmentName').val()}
},
onConfirm: function(zTree, selectedNode) {
if(!selectedNode) {
$('#departmentId').val('');
return;
}
$('#departmentId').val(selectedNode.id);
}
})
// 角色下拉树选择
layuiInputTree.initSelect({
id: 'roleName',
url: 'api/role/listztree',
getSelectedData: function() {
return {id: $('#roleId').val(), name: $('#roleName').val()}
},
onConfirm: function(zTree, selectedNode) {
if(!selectedNode) {
$('#roleId').val('');
return;
}
$('#roleId').val(selectedNode.id);
}
})
// 职位下拉树选择
layuiInputTree.initSelect({
id: 'positionName',
url: 'api/position/listztree',
getSelectedData: function() {
return {id: $('#positionId').val(), name: $('#positionName').val()}
},
onConfirm: function(zTree, selectedNode) {
if(!selectedNode) {
$('#positionId').val('');
return;
}
$('#positionId').val(selectedNode.id);
}
})
// 用户组下拉树选择
layuiInputTree.initSelect({
id: 'groupName',
url: 'api/group/listztree',
getSelectedData: function() {
return {id: $('#groupId').val(), name: $('#groupName').val()}
},
onConfirm: function(zTree, selectedNode) {
if(!selectedNode) {
$('#groupId').val('');
return;
}
$('#groupId').val(selectedNode.id);
}
})
}
// 初始化已选择
function initSelectedBox() {
$('#selectedUserBox').css('height', ($win.height() - 64) +'px');
}
initTable();
initDate();
initSelectInputTree();
initSelectedBox();
// 事件 - 页面变化
$win.on('resize', function() {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(function() {
reloadTable();
}, 500);
});
// 事件 - 搜索
$(document).on('click', '#search', function() {
reloadTable(1);
});
table.on('tool(dataTable)', function(obj) {
var layEvent = obj.event;
var data = obj.data;
if(layEvent === 'userExpandEvent') {
top.dialog.open({
url: top.restAjax.path('{userExpand}?userId={userId}', [$('#userExpand').val(), data.userId]),
title: '【'+ data.userName +'】拓展属性',
width: '60%',
height: '80%',
onClose: function() {}
});
} else if(layEvent === 'expandOpitionEvent') {
top.dialog.open({
url: top.restAjax.path('{userExpandOptionRoute}?userId={userId}', [this.dataset.route, data.userId]),
title: '【'+ data.userName +'】'+ this.dataset.title,
width: '60%',
height: '80%',
onClose: function() {}
});
}
});
// 事件-排序
table.on('sort(dataTable)', function(obj) {
table.reload('dataTable', {
initSort: obj,
where: {
sort: obj.field,
order: obj.type
}
});
});
/**
* 清空选择
*/
function clearSelect() {
selectMap = {};
}
/**
* 添加选择
* @param item
*/
function addSelect(item) {
selectMap[item.userId] = item;
}
/**
* 删除选择
* @param item
*/
function removeSelect(item) {
delete selectMap[item.userId];
}
// 勾选事件
table.on('checkbox(dataTable)', function(obj) {
isUpdate = true;
if(obj.type === 'all') {
if(obj.checked) {
// 添加全部
for(var i = 0, item; item = tableData[i++];) {
addSelect(item);
}
} else {
// 删除全部
for(var i = 0, item; item = tableData[i++];) {
removeSelect(item);
}
}
} else {
if(obj.checked) {
addSelect(obj.data);
} else {
removeSelect(obj.data);
}
}
reloadSelectedUsersDom();
});
// 关闭
function close() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
// 选择的用户删除事件
$(document).on('click', '.remove-selected-btn', function() {
isUpdate = true;
var userId = this.dataset.userId;
delete selectMap[userId];
for(var i = 0, item; item = tableData[i++];) {
if(userId === item.userId) {
reloadTable();
break;
}
}
reloadSelectedUsersDom();
})
// 清空事件
$(document).on('click', '#clearBtn', function() {
clearSelect();
reloadTable();
reloadSelectedUsersDom();
});
// 确定事件
$(document).on('click', '#confirmBtn', function() {
if(isUpdate) {
top.dialog.dialogData.newSelectedArray = [];
for(var key in selectMap) {
top.dialog.dialogData.newSelectedArray.push(selectMap[key]);
}
}
close();
});
});
</script>
</body>
</html>