lihai-oa/public/static/assets/gougu/module/employeepicker.js

267 lines
9.2 KiB
JavaScript
Raw Normal View History

2023-10-24 15:17:16 +08:00
layui.define(['layer','dtree'],function(exports){
//提示模块也可以依赖其它模块layui.define('layer', callback);
var layer = layui.layer;
var dtree = layui.dtree;
var opts={
"title":'选择员工',
"department_url": "/api/index/get_department_tree",
"employee_url": "/api/index/get_employee",
"type":1,
"ids":[],
"names":[],
"dids":[],
"departments":[],
"fixedid":0,
"callback": function(){}
};
obj = {
render:function(){
var me=this,letterTem='';
for(var i=0;i<26;i++){
letterTem+='<span class="layui-letter-span" data-code="'+String.fromCharCode(97+i)+'">'+String.fromCharCode(65+i)+'</span>';
}
var tpl='<div style="width:220px; height:388px; border-right:1px solid #eee; overflow-x: hidden; overflow-y: auto; float:left;">\
<div id="employeetree" style="padding:10px 0;"></div>\
</div>\
<div style="width:568px; height:388px; user-select:none; overflow-x: hidden; overflow-y: auto; float:left;">\
<div style="padding:15px 10px 0;"><div style="color:#999; text-align:center;"> 点击左边部门筛选员工或者点击下面字母筛选</div><div id="letterBtn" style="color:#999; text-align:center;">'+letterTem+'</div></div>\
<div id="employee" style="padding:8px 15px"></div>\
<div style="padding:10px 15px; border-top:1px solid #eee;;"><strong>已选择</strong><span class="layui-tags-all"></span></div>\
<div id="selectTags" style="padding:10px 15px;">'+me.initSelect()+'</div>\
</div>';
return tpl;
},
initSelect:function(){
var me=this,select_tags='';
if(me.settings.type == 0){
select_tags+='<span style="color:#1E9FFF">'+me.settings.names+'</span>';
}
else{
for(var a=0;a<me.settings.ids.length;a++){
if(me.settings.fixedid==me.settings.ids[a] && me.settings.fixedid!=0){
select_tags+='<span class="layui-tags-span">'+me.settings.names[a]+'</span>';
}
else{
select_tags+='<span class="layui-tags-span">'+me.settings.names[a]+'<i data-index="'+a+'" data-id="'+me.settings.ids[a]+'" class="layui-icon layui-tags-close">ဆ</i></span>';
}
}
}
return select_tags;
},
init: function (options) {
this.settings = $.extend({}, opts, options);
var me=this;
layer.open({
type:1,
title:me.settings.title,
area:['800px','500px'],
content:me.render(),
success:function(obj,idx){
var dataList=[];
$.ajax({
url:me.settings.department_url,
type:'get',
success:function(res){
dtree.render({
elem: "#employeetree",
data: res.trees,
type: "all",
initLevel: "1",
icon: "2" //修改二级图标样式
});
dtree.on("node('employeetree')" ,function(obj){
$('#letterBtn').find('span').removeClass('on');
$.ajax({
url:me.settings.employee_url,
type:'get',
data:{did:obj.param.nodeId},
success:function(res){
dataList=res.data;
if(dataList.length>2 && me.settings.type == 1){
$('.layui-tags-all').show();
}
else{
$('.layui-tags-all').hide();
}
if(dataList.length>0){
var tagsItem='';
for(var i=0; i<dataList.length; i++){
tagsItem+='<span class="layui-tags-span" data-id="'+dataList[i].id+'" data-did="'+dataList[i].did+'" data-department="'+dataList[i].department+'">'+dataList[i].nickname+'</span>';
}
$('#employee').html(tagsItem);
}else{
$('#employee').html('<div style="color:#999; text-align:center;">暂无员工</div>');
}
}
})
});
$('#letterBtn').on("click" ,'span',function(){
var code=$(this).data('code');
$(this).addClass('on').siblings().removeClass('on');
$.ajax({
url:me.settings.employee_url,
type:'get',
data:{id:1},
success:function(res){
dataList=res.data;
var letterData=[];
if(dataList.length>0){
var tagsItem='';
for(var i=0; i<dataList.length; i++){
if(dataList[i].username.slice(0,1)==code){
tagsItem+='<span class="layui-tags-span" data-id="'+dataList[i].id+'" data-did="'+dataList[i].did+'" data-department="'+dataList[i].department+'">'+dataList[i].nickname+'</span>';
letterData.push(dataList[i]);
}
}
dataList=letterData;
if(dataList.length>2 && me.settings.type == 1){
$('.layui-tags-all').show();
}
else{
$('.layui-tags-all').hide();
}
if(tagsItem==''){
tagsItem='<div style="color:#999; text-align:center;">暂无员工</div>';
}
$('#employee').html(tagsItem);
}else{
$('#employee').html('<div style="color:#999; text-align:center;">暂无员工</div>');
}
}
})
});
}
});
if(me.settings.type == 1){
$('.layui-tags-all').on('click',function(){
var sIds = me.settings.ids.join(',');
var sNames = me.settings.names.join(',');
var sDids = me.settings.dids.join(',');
var sDepartments = me.settings.departments.join(',');
for(var a=0; a<dataList.length;a++){
if(sIds.indexOf(dataList[a].id)<0){
sIds+=','+dataList[a].id;
sNames+=','+dataList[a].nickname;
sDids+=','+dataList[a].did;
sDepartments+=','+dataList[a].department;
}
}
if(me.settings.ids.length==0){
sIds=sIds.substr(1);
sNames=sNames.substr(1);
sDids=sDids.substr(1);
sDepartments=sDepartments.substr(1);
}
me.settings.ids=sIds.split(',');
me.settings.names=sNames.split(',');
me.settings.dids=sDids.split(',');
me.settings.departments=sDepartments.split(',');
$('#selectTags').html(me.initSelect());
});
}
$('#employee').on('click','.layui-tags-span',function(){
var item_id=$(this).data('id').toString();
var item_name=$(this).text();
var item_did=$(this).data('did').toString();
var item_department=$(this).data('department').toString();
if(me.settings.ids.indexOf(item_id)>=0){
return;
}
if(me.settings.type == 0){
layer.close(idx);
me.settings.callback(item_id,item_name,item_did,item_department);
}
else{
var sIds = me.settings.ids.join(',')+','+item_id;
var sNames = me.settings.names.join(',')+','+item_name;
var sDids = me.settings.dids.join(',')+','+item_did;
var sDepartments = me.settings.departments.join(',')+','+item_department;
if(me.settings.ids.length==0){
sIds=item_id;
sNames=item_name;
sDids=item_did;
sDepartments=item_department;
}
me.settings.ids=sIds.split(',');
me.settings.names=sNames.split(',');
me.settings.dids=sDids.split(',');
me.settings.departments=sDepartments.split(',');
$('#selectTags').html(me.initSelect());
}
});
$('#selectTags').on('click','.layui-tags-close',function(){
var index=$(this).data('index');
var newIds=[],newNames=[],newDids=[],newDepartments=[];
for(var i=0;i<me.settings.ids.length;i++){
if(i!=index){
newIds.push(me.settings.ids[i]);
newNames.push(me.settings.names[i]);
newDids.push(me.settings.dids[i]);
newDepartments.push(me.settings.departments[i]);
}
}
me.settings.ids=newIds;
me.settings.names=newNames;
me.settings.dids=newDids;
me.settings.departments=newDepartments;
$('#selectTags').html(me.initSelect());
});
if(me.settings.type == 0){
$('#layui-layer'+idx).find('.layui-layer-btn0').hide();
}
},
btn: ['确定添加', '清空已选'],
btnAlign:'c',
btn1: function(idx,obj){
me.settings.callback(me.settings.ids,me.settings.names,me.settings.dids,me.settings.departments);
layer.close(idx);
},
btn2: function(idx,obj){
me.settings.callback([],[],[],[]);
layer.close(idx);
}
})
}
}
layui.link(rootPath+'module/dtree/dtree.css');
layui.link(rootPath+'module/dtree/font/dtreefont.css');
//选择员工单人弹窗
$('body').on('click','.picker-one',function () {
let that = $(this);
let ids=that.next().val()+'',names = that.val()+'';
obj.init({
ids:ids,
names:names,
type:0,
callback:function(ids,names,dids,departments){
that.val(names);
that.next().val(ids);
}
});
});
//选择员工多人人弹窗
$('body').on('click','.picker-more',function () {
let that = $(this);
let ids=that.next().val()+'',names = that.val()+'',ids_array=[],names_array=[];
if(ids.length>0){
ids_array=ids.split(',');
names_array=names.split(',');
}
obj.init({
ids:ids_array,
names:names_array,
type:1,
callback:function(ids,names,dids,departments){
that.val(names.join(','));
that.next().val(ids.join(','));
}
});
});
//输出接口
exports('employeepicker', obj);
});