employeepicker.js 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. layui.define(['layer','dtree'],function(exports){
  2. //提示:模块也可以依赖其它模块,如:layui.define('layer', callback);
  3. var layer = layui.layer;
  4. var dtree = layui.dtree;
  5. var opts={
  6. "title":'选择员工',
  7. "type":1,
  8. "ids":[],
  9. "names":[],
  10. "dids":[],
  11. "departments":[],
  12. "fixedid":0,
  13. "callback": function(){}
  14. };
  15. obj = {
  16. render:function(){
  17. var me=this,letterTem='';
  18. for(var i=0;i<26;i++){
  19. letterTem+='<span class="layui-letter-span" data-code="'+String.fromCharCode(97+i)+'">'+String.fromCharCode(65+i)+'</span>';
  20. }
  21. var tpl='<div style="width:220px; height:388px; border-right:1px solid #eee; overflow-x: hidden; overflow-y: auto; float:left;">\
  22. <div id="employeetree" style="padding:10px 0;"></div>\
  23. </div>\
  24. <div style="width:568px; height:388px; user-select:none; overflow-x: hidden; overflow-y: auto; float:left;">\
  25. <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>\
  26. <div id="employee" style="padding:8px 15px"></div>\
  27. <div style="padding:10px 15px; border-top:1px solid #eee;;"><strong>已选择</strong><span class="layui-tags-all">全选</span></div>\
  28. <div id="selectTags" style="padding:10px 15px;">'+me.initSelect()+'</div>\
  29. </div>';
  30. return tpl;
  31. },
  32. initSelect:function(){
  33. var me=this,select_tags='';
  34. if(me.settings.type == 0){
  35. select_tags+='<span style="color:#1E9FFF">'+me.settings.names+'</span>';
  36. }
  37. else{
  38. for(var a=0;a<me.settings.ids.length;a++){
  39. if(me.settings.fixedid==me.settings.ids[a] && me.settings.fixedid!=0){
  40. select_tags+='<span class="layui-tags-span">'+me.settings.names[a]+'</span>';
  41. }
  42. else{
  43. 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>';
  44. }
  45. }
  46. }
  47. return select_tags;
  48. },
  49. init: function (options) {
  50. this.settings = $.extend({}, opts, options);
  51. var me=this;
  52. layer.open({
  53. type:1,
  54. title:me.settings.title,
  55. area:['800px','500px'],
  56. content:me.render(),
  57. success:function(obj,idx){
  58. var dataList=[];
  59. $.ajax({
  60. url:me.settings.department_url,
  61. type:'get',
  62. success:function(res){
  63. dtree.render({
  64. elem: "#employeetree",
  65. data: res.trees,
  66. type: "all",
  67. initLevel: "1",
  68. icon: "2" //修改二级图标样式
  69. });
  70. dtree.on("node('employeetree')" ,function(obj){
  71. $('#letterBtn').find('span').removeClass('on');
  72. $.ajax({
  73. url:me.settings.employee_url,
  74. type:'get',
  75. data:{did:obj.param.nodeId},
  76. success:function(res){
  77. dataList=res.data;
  78. if(dataList.length>2 && me.settings.type == 1){
  79. $('.layui-tags-all').show();
  80. }
  81. else{
  82. $('.layui-tags-all').hide();
  83. }
  84. if(dataList.length>0){
  85. var tagsItem='';
  86. for(var i=0; i<dataList.length; i++){
  87. 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>';
  88. }
  89. $('#employee').html(tagsItem);
  90. }else{
  91. $('#employee').html('<div style="color:#999; text-align:center;">暂无员工</div>');
  92. }
  93. }
  94. })
  95. });
  96. $('#letterBtn').on("click" ,'span',function(){
  97. var code=$(this).data('code');
  98. console.log();
  99. $(this).addClass('on').siblings().removeClass('on');
  100. $.ajax({
  101. url:me.settings.employee_url,
  102. type:'get',
  103. data:{id:1},
  104. success:function(res){
  105. dataList=res.data;
  106. var letterData=[];
  107. if(dataList.length>0){
  108. var tagsItem='';
  109. for(var i=0; i<dataList.length; i++){
  110. if(pinyin(dataList[i].nickname, { toneType: 'none' }).slice(0,1)==code){
  111. 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>';
  112. letterData.push(dataList[i]);
  113. }
  114. }
  115. dataList=letterData;
  116. if(dataList.length>2 && me.settings.type == 1){
  117. $('.layui-tags-all').show();
  118. }
  119. else{
  120. $('.layui-tags-all').hide();
  121. }
  122. if(tagsItem==''){
  123. tagsItem='<div style="color:#999; text-align:center;">暂无员工</div>';
  124. }
  125. $('#employee').html(tagsItem);
  126. }else{
  127. $('#employee').html('<div style="color:#999; text-align:center;">暂无员工</div>');
  128. }
  129. }
  130. })
  131. });
  132. }
  133. });
  134. if(me.settings.type == 1){
  135. $('.layui-tags-all').on('click',function(){
  136. var sIds = me.settings.ids.join(',');
  137. var sNames = me.settings.names.join(',');
  138. var sDids = me.settings.dids.join(',');
  139. var sDepartments = me.settings.departments.join(',');
  140. for(var a=0; a<dataList.length;a++){
  141. if(sIds.indexOf(dataList[a].id)<0){
  142. sIds+=','+dataList[a].id;
  143. sNames+=','+dataList[a].nickname;
  144. sDids+=','+dataList[a].did;
  145. sDepartments+=','+dataList[a].department;
  146. }
  147. }
  148. if(me.settings.ids.length==0){
  149. sIds=sIds.substr(1);
  150. sNames=sNames.substr(1);
  151. sDids=sDids.substr(1);
  152. sDepartments=sDepartments.substr(1);
  153. }
  154. me.settings.ids=sIds.split(',');
  155. me.settings.names=sNames.split(',');
  156. me.settings.dids=sDids.split(',');
  157. me.settings.departments=sDepartments.split(',');
  158. $('#selectTags').html(me.initSelect());
  159. });
  160. }
  161. $('#employee').on('click','.layui-tags-span',function(){
  162. var item_id=$(this).data('id').toString();
  163. var item_name=$(this).text();
  164. var item_did=$(this).data('did').toString();
  165. var item_department=$(this).data('department').toString();
  166. if(me.settings.ids.indexOf(item_id)>=0){
  167. return;
  168. }
  169. if(me.settings.type == 0){
  170. layer.close(idx);
  171. me.settings.callback(item_id,item_name,item_did,item_department);
  172. }
  173. else{
  174. var sIds = me.settings.ids.join(',')+','+item_id;
  175. var sNames = me.settings.names.join(',')+','+item_name;
  176. var sDids = me.settings.dids.join(',')+','+item_did;
  177. var sDepartments = me.settings.departments.join(',')+','+item_department;
  178. if(me.settings.ids.length==0){
  179. sIds=item_id;
  180. sNames=item_name;
  181. sDids=item_did;
  182. sDepartments=item_department;
  183. }
  184. me.settings.ids=sIds.split(',');
  185. me.settings.names=sNames.split(',');
  186. me.settings.dids=sDids.split(',');
  187. me.settings.departments=sDepartments.split(',');
  188. $('#selectTags').html(me.initSelect());
  189. }
  190. });
  191. $('#selectTags').on('click','.layui-tags-close',function(){
  192. var index=$(this).data('index');
  193. var newIds=[],newNames=[],newDids=[],newDepartments=[];
  194. for(var i=0;i<me.settings.ids.length;i++){
  195. if(i!=index){
  196. newIds.push(me.settings.ids[i]);
  197. newNames.push(me.settings.names[i]);
  198. newDids.push(me.settings.dids[i]);
  199. newDepartments.push(me.settings.departments[i]);
  200. }
  201. }
  202. me.settings.ids=newIds;
  203. me.settings.names=newNames;
  204. me.settings.dids=newDids;
  205. me.settings.departments=newDepartments;
  206. $('#selectTags').html(me.initSelect());
  207. });
  208. if(me.settings.type == 0){
  209. $('#layui-layer'+idx).find('.layui-layer-btn0').hide();
  210. }
  211. },
  212. btn: ['确定添加', '清空已选'],
  213. btnAlign:'c',
  214. btn1: function(idx,obj){
  215. me.settings.callback(me.settings.ids,me.settings.names,me.settings.dids,me.settings.departments);
  216. layer.close(idx);
  217. },
  218. btn2: function(idx,obj){
  219. me.settings.callback([],[],[],[]);
  220. layer.close(idx);
  221. }
  222. })
  223. }
  224. }
  225. layui.link(rootPath+'module/dtree/dtree.css');
  226. layui.link(rootPath+'module/dtree/font/dtreefont.css');
  227. //选择员工单人弹窗
  228. $('body').on('click','.picker-one',function () {
  229. let that = $(this);
  230. console.log(that)
  231. let ids=that.next().val()+'',names = that.val()+'';
  232. obj.init({
  233. ids:ids,
  234. names:names,
  235. type:0,
  236. department_url: "/admin/project.api/get_department_tree",
  237. employee_url: "/admin/project.api/get_employee",
  238. callback:function(ids,names,dids,departments){
  239. that.val(names);
  240. that.next().val(ids);
  241. }
  242. });
  243. });
  244. //选择员工多人人弹窗
  245. $('body').on('click','.picker-more',function () {
  246. let that = $(this);
  247. console.log(that)
  248. let ids=that.next().val()+'',names = that.val() + '',ids_array=[],names_array=[];
  249. if(ids.length>0){
  250. ids_array=ids.split(',');
  251. names_array=names.split(',');
  252. }
  253. obj.init({
  254. ids:ids_array,
  255. names:names_array,
  256. type:1,
  257. department_url: "/admin/project.api/get_department_tree",
  258. employee_url: "/admin/project.api/get_employee",
  259. callback:function(ids,names,dids,departments){
  260. that.val(names.join(','));
  261. that.next().val(ids.join(','));
  262. }
  263. });
  264. });
  265. //输出接口
  266. exports('employeepicker', obj);
  267. });