jquery-changeuser.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. /**
  2. edittable 选择人员插件
  3. caratename:chenxihu
  4. caratetime:2014-04-06 21:40:00
  5. email:admin@rockoa.com
  6. homepage:www.rockoa.com
  7. */
  8. (function ($) {
  9. function _getstyles(){
  10. var s='<style>.changeuserlist div.listsss{padding:10px; background:white;border-bottom:1px #eeeeee solid;cursor:default}.changeuserlist td{color:#333333}.changeuserlist div:active{ background:#f1f1f1}.changeuserbotton{height:30px;width:50px; background:#d9534f;color:white;font-size:14px;border:none;padding:0px;margin:0px;line-height:20px;cursor:default;opacity:1;outline:none;border-radius:5px}.changeuserbotton:active{color:white;border:none;opacity:0.8}.changeuserxuan span{background:white;border:1px #cccccc solid;padding:3px;border-radius:5px;font-size:12px;margin-left:5px;cursor:pointer}</style>';
  11. return s;
  12. }
  13. function chnageuser(sobj, options){
  14. var obj = sobj;
  15. var rand = ''+parseInt(Math.random()*9999999)+'';
  16. var me = this;
  17. this.rand = rand;
  18. this.changesel = '';
  19. this.firstpid = 0;
  20. this._init = function(){
  21. for(var i in options)this[i]=options[i];
  22. this.oveob = false;
  23. if(this.showview!='' && get(this.showview))this.oveob=true;
  24. if(!this.oveob){
  25. window.onhashchange=function(){
  26. var has = location.hash;
  27. if(has.indexOf('#changeuser')==-1)me.hide();
  28. }
  29. js.location('#changeuser');
  30. }
  31. this.userarr = [];
  32. this.deptarr = [];
  33. this.grouparr= [];
  34. if(isempt(this.changerange) && isempt(this.changerangeno)){
  35. var us = js.getoption('userjson');
  36. if(us)this.userarr = js.decode(us);
  37. us = js.getoption('deptjson');
  38. if(us)this.deptarr = js.decode(us);
  39. us = js.getoption('groupjson');
  40. if(us)this.grouparr = js.decode(us);
  41. }
  42. this.show();
  43. };
  44. this.creatediv=function(){
  45. var type='checkbox';
  46. if(this.changetype.indexOf('check')==-1)type='radio';
  47. this.inputtype = type;
  48. $('#changeuser_'+rand+'').remove();
  49. var hei = $(window).height(),jhei=50,atts='position:fixed;';
  50. if(this.oveob){
  51. hei = $('#'+this.showview+'').height();
  52. atts='';
  53. }
  54. var s='<div style="'+atts+'z-index:100;width:100%;height:100%;overflow:hidden;left:0px;top:0px; background:white" id="changeuser_'+rand+'">';
  55. if(this.titlebool){
  56. s+='<div style="height:50px;line-height:50px;text-align:center; background:white;border-bottom:1px #cccccc solid"><b>'+this.title+'</b></div>';
  57. jhei+=50;
  58. }
  59. if(this.changetype.indexOf('user')>=0){
  60. s+='<div style="height:50px;overflow:hidden;border-bottom:1px #cccccc solid"><table width="100%" style="background:none"><tr><td width="100%" height="50" style="background:none"><input id="changekey_'+this.rand+'" placeholder="部门/姓名/职位" style="height:30px;border:none;background:none;width:100%;margin:0px 10px;outline:none"></td><td><button style="background:none;border:none;color:#666666" class="changeuserbotton" id="changesoubtn_'+this.rand+'" type="button" >查找</button></td></tr></table></div>';
  61. jhei+=50;
  62. }
  63. s+='<div style="-webkit-overflow-scrolling:touch;height:'+(hei-jhei)+'px;overflow:auto; background:#f1f1f1" class="changeuserlist">';
  64. s+='<span id="showdiv'+rand+'_0"></span>';
  65. s+='<span id="showdiv'+rand+'_search"></span>';
  66. s+='</div>';
  67. var s3= '<input id="changeboxs_'+rand+'" style="width:18px;height:18px;" align="absmiddle" type="checkbox" >';
  68. if(type!='checkbox1')s3='';
  69. if(1==1){
  70. s3='<select id="changesel_'+rand+'" style="height:30px;border:none;background:none;outline:none">';
  71. s3+='<option value="">默认显示</option>';
  72. if(this.changetype.indexOf('user')>=0)s3+='<option value="1">仅限显示人员</option>';
  73. if(this.changetype.indexOf('dept')>=0)s3+='<option value="2">仅限显示部门</option>';
  74. if(this.changetype.indexOf('user')>=0)s3+='<option value="3">显示组</option>';
  75. s3+='</select>';
  76. }
  77. if(type=='checkbox'){
  78. s+='<div class="changeuserxuan" style="padding:5px;border-right:1px #cccccc solid;border-top:1px #cccccc solid;line-height:30px;position:absolute;bottom:49px;background:white;"><font style="cursor:pointer" id="yixuanbtn_'+rand+'">∨</font><font id="yixuan_'+rand+'"></font></div>';
  79. }
  80. var cold = window['maincolor'];if(!cold)cold='#1389D3';
  81. s+='<div style="height:50px;line-height:50px;border-top:1px #cccccc solid" align="right"><table width="100%" style="background:none"><tr><td width="10" nowrap>&nbsp;</td><td width="80%">'+s3+'</td><td><button style="width:70px;border:none" type="button" id="changereload_'+rand+'" class="changeuserbotton" >刷新数据</button></td><td width="10" nowrap>&nbsp;</td><td><button class="changeuserbotton" type="button" id="changecancl_'+rand+'" >取消</button></td><td width="10" nowrap>&nbsp;</td><td height="50"><button style="background:'+cold+';" id="changeok_'+rand+'" type="button" class="changeuserbotton">确定</button></td><td width="10" nowrap>&nbsp;</td></tr></table></div>';
  82. s+=_getstyles();
  83. s+='</div>';
  84. if(atts==''){
  85. $('#'+this.showview+'').html(s);
  86. }else{
  87. obj.append(s);
  88. }
  89. $('#changecancl_'+this.rand+'').click(function(){
  90. me._clickcancel();
  91. });
  92. $('#changereload_'+this.rand+'').click(function(){
  93. me._loaddata();
  94. });
  95. $('#changeok_'+this.rand+'').click(function(){
  96. me.queding();
  97. });
  98. $('#changesoubtn_'+this.rand+'').click(function(){
  99. me._searchkey(true);
  100. });
  101. $('#changekey_'+this.rand+'').keydown(function(e){
  102. me._searchkeys(e)
  103. });
  104. $('#changeboxs_'+this.rand+'').click(function(){
  105. me._changboxxuan(this)
  106. });
  107. $('#changesel_'+this.rand+'').change(function(){
  108. me._changesel(this)
  109. });
  110. if(type=='checkbox'){
  111. $('#yixuanbtn_'+rand+'').click(function(){
  112. $('#yixuan_'+rand+'').toggle();
  113. });
  114. this._initmrvel();
  115. }
  116. rchanguserclick=function(o1){
  117. me._changexuan(o1);
  118. }
  119. rchanguserquxiao=function(o1){
  120. me._changequxiao(o1);
  121. }
  122. };
  123. this.showlist=function(pid,oi){
  124. var type=this.inputtype,hw=24;
  125. var s='',ssu='',s1='';
  126. var sel = this.changesel;
  127. var dob = this.changetype.indexOf('dept')==-1;
  128. var uob = this.changetype.indexOf('user')>=0;
  129. this.fid = 1;
  130. if(sel=='1'){
  131. ssu = this._showuser(0,'',type,sel);
  132. }else if(sel=='2'){
  133. s = this._showdept(pid,oi,s1,type,sel,dob,uob);
  134. }else if(sel=='3'){
  135. s = this._showgorup(type);
  136. }else{
  137. s1='<div style="width:'+(hw*oi)+'px"></div>';
  138. s = this._showdept(pid,oi,s1,type,sel,dob,uob);
  139. if(uob){
  140. ssu+=this._showuser(pid,s1,type,sel);
  141. }
  142. }
  143. var xud = (oi==0)?'0' : pid;
  144. $('#showdiv'+rand+'_'+xud+'').html(ssu+s).attr('show','true');
  145. if(sel==''){
  146. if(oi==0)this.showlist(this.fid, 1);
  147. $('#showdiv'+rand+'_0 [deptxu]').unbind('click').click(function(){
  148. me._deptclicks(this);
  149. });
  150. }
  151. if(sel=='3'){
  152. $('#showdiv'+rand+'_0 [groupxu]').unbind('click').click(function(){
  153. me._groupclicks(this);
  154. });
  155. }
  156. };
  157. this._showuser=function(pid,s1,type,sel){
  158. var a,len,i,ssu='',dids,zoi=0,ids,chk='';
  159. a=this.userarr;
  160. len=a.length;
  161. for(i=0;i<len;i++){
  162. dids = ','+a[i].deptids+',';
  163. if(
  164. ((a[i].deptid==pid || dids.indexOf(','+pid+',')>-1 || sel=='1') && sel!='3')
  165. ||
  166. (sel=='3' && (','+a[i].groupname+',').indexOf(','+pid+',')>-1)//显示组下人员
  167. ){
  168. chk='';
  169. if(get('show'+rand+'_u'+a[i].id+''))chk='checked ';
  170. ssu+='<div class="listsss">';
  171. ssu+='<table style="background:none" width="100%"><tr><td>'+s1+'</td><td width="100%"><img align="absmiddle" height="24" height="24" src="'+a[i].face+'">&nbsp;'+a[i].name+'<span style="font-size:12px;color:#888888">('+a[i].ranking+')</span></td><td><input name="changeuserinput_'+rand+'" xxu="'+i+'" xls="u" xname="'+a[i].name+'" value="'+a[i].id+'" style="width:18px;height:18px;" '+chk+'onclick="rchanguserclick(this)" type="'+type+'"></td></tr></table>';
  172. ssu+='</div>';
  173. zoi++;
  174. if(zoi>=200)break;
  175. }
  176. }
  177. return ssu;
  178. };
  179. this._showdeptci = 0;
  180. this._showdept=function(pid,oi,s1,type,sel,dob,uob){
  181. var a,len,i,wwj,s2='',s='',zs;
  182. a=this.deptarr;
  183. len=a.length;
  184. this._showdeptci++;
  185. for(i=0;i<len;i++){
  186. //if(this._showdeptci==1)this._showdepticons(i);
  187. if(a[i].pid==pid || sel=='2'){
  188. this.fid = a[i].id;
  189. wjj= 'images/files.png';
  190. if(a[i].ntotal=='0' && uob)wjj= 'images/file.png';
  191. if(this.changetype=='changedept' || this.changetype=='changedeptcheck'){
  192. //zs = a[i].dtotal;
  193. //wjj= 'images/files.png';
  194. //if(zs==0)wjj= 'images/file.png';
  195. }
  196. s2 = '<input name="changeuserinput_'+rand+'" xls="d" xname="'+a[i].name+'" xu="'+i+'" value="'+a[i].id+'" style="width:18px;height:18px;" onclick="rchanguserclick(this)" type="'+type+'">';
  197. if(dob)s2='';
  198. if(s2!='' && !this._isdeptcheck(a[i]))s2='';
  199. s+='<div class="listsss">';
  200. s+='<table style="background:none" width="100%"><tr><td>'+s1+'</td><td deptxu="'+i+'_'+oi+'" width="100%"><img align="absmiddle" height="20" height="20" src="'+wjj+'">&nbsp;'+a[i].name+'</td><td>'+s2+'</td></tr></table>';
  201. s+='</div>';
  202. s+='<span show="false" id="showdiv'+rand+'_'+a[i].id+'"></span>';
  203. }
  204. }
  205. return s;
  206. };
  207. this._showdepticons=function(xu){
  208. var a,len,i,d,zs=0;
  209. a=this.deptarr;
  210. len=a.length;
  211. d = a[xu];
  212. if(!isempt(d.dtotal))return zs;
  213. for(i=0;i<len;i++){
  214. if(a[i].pid==d.id)zs++;
  215. }
  216. this.deptarr[xu].dtotal=zs;
  217. return zs;
  218. };
  219. this._showgorup=function(type){
  220. var a,len,i,ssu='',s1;
  221. a=this.grouparr;
  222. len=a.length;
  223. for(i=0;i<len;i++){
  224. s1 = '<input name="changeuserinput_'+rand+'" xls="g" xname="'+a[i].name+'" value="'+a[i].id+'" style="width:18px;height:18px;" onclick="rchanguserclick(this)" type="'+type+'">';
  225. if(this.changetype.indexOf('deptuser')==-1)s1='';
  226. ssu+='<div class="listsss">';
  227. ssu+='<table style="background:none" width="100%"><tr><td></td><td groupxu="'+i+'" width="100%"><img align="absmiddle" height="24" height="24" src="images/group.png">&nbsp;'+a[i].name+' <span style="font-size:12px;color:#888888">('+a[i].usershu+'人)</span></td><td>'+s1+'</td></tr></table>';
  228. ssu+='</div>';
  229. ssu+='<span show="false" id="showgroup'+rand+'_'+a[i].id+'"></span>';
  230. }
  231. return ssu;
  232. };
  233. this._groupclicks=function(o){
  234. if(this.changetype.indexOf('user')==-1)return;
  235. var sxu = $(o).attr('groupxu');
  236. var a = this.grouparr[sxu];
  237. var o1 = $('#showgroup'+rand+'_'+a.id+'');
  238. var lx = o1.attr('show');
  239. if(lx=='false'){
  240. var s1='<div style="width:24px"></div>';
  241. var s = this._showuser(a.id,s1,this.inputtype, this.changesel);
  242. o1.html(s).attr('show','true');
  243. }else{
  244. o1.toggle();
  245. }
  246. };
  247. this._changexuan=function(o1){
  248. if(this.inputtype!='checkbox')return;
  249. var o = $(o1),xls=o.attr('xls'),val=o.val();
  250. var sid = 'show'+rand+'_'+xls+''+val+'';
  251. if(o1.checked){
  252. var str='<span id="'+sid+'" xls="'+xls+'" xvl="'+val+'" onclick="rchanguserquxiao(this)">';
  253. str+='<input name="yixuancheck_'+rand+'" value="'+val+'" align="absmiddle" xls="'+xls+'" type="checkbox" checked xxu="" xname="'+o.attr('xname')+'">'+o.attr('xname')+'';
  254. str+='</span>';
  255. if(!get(sid))$('#yixuan_'+rand+'').append(str);
  256. }else{
  257. $('#'+sid+'').remove();
  258. }
  259. };
  260. this._changequxiao=function(o1){
  261. var o = $(o1),xls=o.attr('xls'),xvl=o.attr('xvl');
  262. o.remove();
  263. $("input[name='changeuserinput_"+rand+"'][xls='"+xls+"'][value='"+xvl+"']").attr('checked', false);
  264. };
  265. this._initmrvel=function(){
  266. var sid ='',sna='',i,str='',xls,val;
  267. if(this.idobj)sid=this.idobj.value;
  268. if(this.nameobj)sna=this.nameobj.value;
  269. if(!sid || !sna)return;
  270. var sida = sid.split(','),snaa=sna.split(',');
  271. var ob1=this.changetype.indexOf('dept')>-1,ob2=this.changetype.indexOf('user')>-1;
  272. for(i=0;i<sida.length;i++){
  273. xls=sida[i].substr(0,1);
  274. if(!isNaN(xls)){
  275. if(ob1)xls='d';
  276. if(ob2)xls='u';
  277. }
  278. val=sida[i].replace('u','').replace('g','').replace('d','');
  279. str+='<span id="show'+rand+'_'+xls+''+val+'" xls="'+xls+'" xvl="'+val+'" onclick="rchanguserquxiao(this)">';
  280. str+='<input name="yixuancheck_'+rand+'" value="'+val+'" align="absmiddle" xls="'+xls+'" type="checkbox" checked xxu="" xname="'+snaa[i]+'">'+snaa[i]+'';
  281. str+='</span>';
  282. }
  283. $('#yixuan_'+rand+'').html(str);
  284. };
  285. this._changesel=function(o1){
  286. var val = o1.value;
  287. this.changesel = val;
  288. this.showlist(this.firstpid, 0);
  289. };
  290. this._searchkeys=function(e){
  291. clearTimeout(this._searchkeystime);
  292. this._searchkeystime=setTimeout(function(){
  293. me._searchkey(false);
  294. },500);
  295. };
  296. this._isdeptcheck=function(a){
  297. if(this.inputtype=='checkbox' && this.changetype.indexOf('user')>=0 && this.changetype.indexOf('dept')>=0){
  298. var stotal,i,nstotal=0,len=this.userarr.length,spath;
  299. stotal = parseFloat(a.stotal);
  300. for(i=0;i<len;i++){
  301. spath = this.userarr[i].deptpath;
  302. if(spath.indexOf('['+a.id+']')>=0)nstotal++;
  303. }
  304. return nstotal>=stotal;
  305. }else{
  306. return true;
  307. }
  308. },
  309. this._clickcheckbox=function(o1){
  310. var o = $(o1),xu,a,stotal,i,nstotal=0,len=this.userarr.length,spath;
  311. if(o.attr('xls')!='d')return;
  312. xu = parseFloat(o.attr('xu'));
  313. a = this.deptarr[xu];
  314. stotal = parseFloat(a.stotal);
  315. for(i=0;i<len;i++){
  316. spath = this.userarr[i].deptpath;
  317. if(spath==null) continue;
  318. if(spath.indexOf('['+a.id+']')>=0)nstotal++;
  319. }
  320. if(nstotal<stotal){
  321. o1.checked=false;
  322. o1.disabled=true;
  323. js.msg('msg','无权选择部门['+a.name+']');
  324. }
  325. },
  326. this._searchkey = function(bo){
  327. var key = $('#changekey_'+this.rand+'').val(),s='',a=[],d=[],len,i;
  328. a=this.userarr;
  329. len=a.length;
  330. if(key!='')for(i=0;i<len;i++)if(a[i].name.indexOf(key)>-1 || a[i].pingyin.indexOf(key)==0 || a[i].deptname.indexOf(key)>-1 || a[i].ranking.indexOf(key)>-1){a[i].xu=i;d.push(a[i])};
  331. len = d.length;
  332. for(i=0;i<len;i++){
  333. s+='<div class="listsss">';
  334. s+='<table style="background:none" width="100%"><tr><td></td><td width="100%"><img align="absmiddle" height="24" height="24" src="'+d[i].face+'">&nbsp;'+d[i].name+'<span style="font-size:12px;color:#888888">('+d[i].ranking+')</span></td><td><input name="changeuserinput_'+rand+'_soukey" xxu="'+d[i].xu+'" xls="u" xname="'+d[i].name+'" value="'+d[i].id+'" style="width:18px;height:18px;" onclick="rchanguserclick(this)" type="'+this.inputtype+'"></td></tr></table>';
  335. s+='</div>';
  336. }
  337. if(bo && s=='' && key!='')js.msg('msg','无相关['+key+']的记录', 2);
  338. $('#showdiv'+rand+'_search').html(s);
  339. var o1 = $('#showdiv'+rand+'_0');
  340. if(s==''){o1.show();}else{o1.hide();}
  341. };
  342. this._clickcancel=function(){
  343. if(!this.oveob)history.back();
  344. this.hide();
  345. };
  346. this.hide=function(){
  347. $('#changeuser_'+rand+'').remove();
  348. this.oncancel();
  349. };
  350. this.show=function(){
  351. this.creatediv();
  352. if(this.deptarr.length>0){
  353. this.firstpid = this.deptarr[0].pid;
  354. this.showlist(this.firstpid,0);
  355. }else{
  356. this._loaddata();
  357. }
  358. };
  359. this._deptclicks=function(o){
  360. var sxu = $(o).attr('deptxu').split('_');
  361. var a = this.deptarr[sxu[0]];
  362. var o1 = $('#showdiv'+rand+'_'+a.id+'');
  363. var lx = o1.attr('show');
  364. if(lx=='false'){
  365. this.showlist(a.id, parseFloat(sxu[1])+1);
  366. }else{
  367. o1.toggle();
  368. }
  369. };
  370. this._loaddata=function(){
  371. var o1 = $('#showdiv'+rand+'_0'),url;
  372. o1.html('<div align="center" style="padding:30px"><img src="images/mloading.gif"></div>');
  373. var url = 'index.php?a=deptuserjson&m=dept&d=system&ajaxbool=true&changerange='+this.changerange+'&changerangeno='+this.changerangeno+'&gtype=change';
  374. $.getJSON(url, function(ret){
  375. if(ret.code==200){
  376. ret = ret.data;
  377. me._loaddatashow(ret);
  378. }else{
  379. o1.html(ret.msg);
  380. }
  381. });
  382. };
  383. this._loaddatashow=function(ret){
  384. if(isempt(this.changerange) && isempt(this.changerangeno)){
  385. if(ret.iscache=='1'){
  386. js.setoption('deptjson', '');
  387. js.setoption('userjson', '');
  388. js.setoption('groupjson', '');
  389. }else{
  390. js.setoption('deptjson', ret.deptjson);
  391. js.setoption('userjson', ret.userjson);
  392. js.setoption('groupjson', ret.groupjson);
  393. }
  394. }
  395. this.userarr = js.decode(ret.userjson);
  396. this.deptarr = js.decode(ret.deptjson);
  397. this.grouparr = js.decode(ret.groupjson);
  398. this.firstpid = 0;
  399. if(this.deptarr[0])this.firstpid = this.deptarr[0].pid;
  400. this.showlist(this.firstpid, 0);
  401. };
  402. this._changboxxuan=function(os){
  403. var ns= 'changeuserinput_'+rand+'';
  404. if($('#showdiv'+rand+'_search').html()!='')ns+='_soukey';
  405. var ob = os.checked,o=$("input[name='"+ns+"']"),i;
  406. for(i=0;i<o.length;i++)o[i].checked=ob;
  407. };
  408. this.queding=function(){
  409. var ns= 'changeuserinput_'+rand+'';
  410. if($('#showdiv'+rand+'_search').html()!='')ns+='_soukey';
  411. if(this.inputtype=='checkbox')ns='yixuancheck_'+rand+'';
  412. var o = $("input[name='"+ns+"']");
  413. var i,len=o.length,o1,xls,xna,xal,xxu,sid='',sna='',ob1=this.changetype.indexOf('dept')==-1,ob2=this.changetype.indexOf('user')==-1,xzarr=[];
  414. var ob3=ob1 || ob2;
  415. for(i=0;i<len;i++){
  416. o1 = $(o[i]);
  417. if(o[i].checked){
  418. xls= o1.attr('xls');
  419. xna= o1.attr('xname');
  420. xxu= o1.attr('xxu');
  421. xal= o1.val();
  422. if(ob3)xls='';
  423. sid+=','+xls+''+xal+'';
  424. sna+=','+xna+'';
  425. if(!isempt(xxu))xzarr.push(this.userarr[parseFloat(xxu)]);
  426. }
  427. }
  428. if(sid!=''){
  429. sid=sid.substr(1);
  430. sna=sna.substr(1);
  431. }
  432. if(this.idobj)this.idobj.value=sid;
  433. if(this.nameobj){
  434. this.nameobj.value=sna;
  435. this.nameobj.focus();
  436. }
  437. if(!this.oveob)history.back();
  438. this.onselect(sna, sid, xzarr);
  439. this.hide();
  440. }
  441. }
  442. function selectdata(sobj, options){
  443. var obj = sobj;
  444. var rand = ''+parseInt(Math.random()*9999999)+'';
  445. var me = this;
  446. this.rand = rand;
  447. this.ismobile = false;
  448. this.page = 1;
  449. this.selvalue = '';
  450. this._init = function(){
  451. for(var i in options)this[i]=options[i];
  452. if(typeof(ismobile) && ismobile==1)this.ismobile = true;
  453. this._showcreate();
  454. };
  455. this._showcreate = function(){
  456. var ws = '350px';
  457. if(this.ismobile)ws='90%';
  458. var cold = window['maincolor'];if(!cold)cold='#1389D3';
  459. var s='<div style="width:100%;height:100%;overflow:hidden;left:0px;top:0px; background:rgba(0,0,0,0.3);position:fixed;z-index:11" id="selectdata_'+rand+'">';
  460. s+='<div tsid="main" id="mints_'+rand+'" style="position:absolute;top:30%; background:white;width:'+ws+';box-shadow:0px 0px 10px rgba(0,0,0,0.3);border-radius:5px">';
  461. s+=' <div onmousedown="js.move(\'mints_'+rand+'\')" style="line-height:50px;color:'+cold+';font-size:16px;border-bottom:1px #eeeeee solid;font-weight:bold;"> &nbsp; &nbsp;'+this.title+'</div>';
  462. s+=' <div style="height:40px;overflow:hidden;border-bottom:1px #cccccc solid;"><table width="100%" style="background:none"><tr><td><select id="selxuan_'+this.rand+'" style="width:120px;border:none;background:none;display:none"><option value="">选择所有</option></select></td><td width="100%" height="40"><input id="changekey_'+this.rand+'" placeholder="搜索关键词" style="height:30px;border:none;background:none;width:100%;margin:0px 10px;outline:none"></td><td><button style="background:none;color:#666666;" class="changeuserbotton" id="changesoubtn_'+this.rand+'" type="button" >查找</button></td></tr></table></div>';
  463. s+=' <div style="-webkit-overflow-scrolling:touch;height:300px;overflow:auto; background:#f1f1f1" id="selectlist_'+rand+'" class="changeuserlist"></div>';
  464. s+=' <div style="height:50px;line-height:50px;border-top:1px #cccccc solid;" align="right"><table width="100%" style="background:none"><tr><td width="10" nowrap>&nbsp;</td><td width="80%"><font color="#888888" tsid="count"></font></td><td><button type="button" id="changereload_'+rand+'" class="changeuserbotton">刷新</button></td><td width="10" nowrap>&nbsp;</td><td><button class="changeuserbotton" type="button" id="changecancl_'+rand+'">取消</button></td><td width="10" nowrap>&nbsp;</td><td height="50"><button style="background:'+cold+';" id="changeok_'+rand+'" type="button" class="changeuserbotton">确定</button></td><td width="10" nowrap>&nbsp;</td></tr></table></div>';
  465. s+='</div>';
  466. s+='</div>';
  467. s+=_getstyles();
  468. $('body').append(s);
  469. this.showdata(this.data);
  470. var o = this._getobj('main');
  471. var l = ($(window).width()-o.width())*0.5,t = ($(window).height()-o.height())*0.5;
  472. o.css({'left':''+l+'px','top':''+t+'px'});
  473. $('#changecancl_'+this.rand+'').click(function(){
  474. me._clickcancel();
  475. });
  476. $('#changeok_'+this.rand+'').click(function(){
  477. me.queding();
  478. });
  479. $('#changereload_'+this.rand+'').click(function(){
  480. me.reload();
  481. });
  482. $('#changesoubtn_'+this.rand+'').click(function(){
  483. me._searchkey(true);
  484. });
  485. $('#changekey_'+this.rand+'').keydown(function(e){
  486. me._searchkeys(e)
  487. });
  488. $('#changekey_'+this.rand+'').keyup(function(e){
  489. me._searchkeys(e)
  490. });
  491. };
  492. this._getobj=function(lx){
  493. var o = $('#selectdata_'+rand+'').find("[tsid='"+lx+"']");
  494. return o;
  495. };
  496. this._clickcancel=function(){
  497. this.hide();
  498. };
  499. this.hide=function(){
  500. $('#selectdata_'+rand+'').remove();
  501. this.oncancel();
  502. };
  503. this.queding=function(){
  504. var ns= 'changeuserinput_'+rand+'';
  505. var o = $("input[name='"+ns+"']");
  506. var i,len=o.length,o1,xna,xu,xal,sid='',sna='',seld=[];
  507. for(i=0;i<len;i++){
  508. o1 = $(o[i]);
  509. if(o[i].checked){
  510. xna= o1.attr('xname');
  511. xu = parseFloat(o1.attr('xu'));
  512. if(this.checked){
  513. seld.push(this.nowdata[xu]);
  514. }else{
  515. seld=this.nowdata[xu];
  516. }
  517. xal= o1.val();
  518. sid+=','+xal+'';
  519. sna+=','+xna+'';
  520. }
  521. }
  522. if(sid!=''){
  523. sid=sid.substr(1);
  524. sna=sna.substr(1);
  525. }
  526. if(this.idobj)this.idobj.value=sid;
  527. if(this.nameobj){
  528. this.nameobj.value=sna;
  529. this.nameobj.focus();
  530. }
  531. this.onselect(seld,sna, sid);
  532. this.hide();
  533. };
  534. this.showdata=function(a,inb){
  535. if(!a)a=[];
  536. var ret= a;
  537. this.showselectdata(a.selectdata);
  538. var len = 0;
  539. if(a.totalCount)len=a.totalCount;
  540. if(a.rows)a = a.rows;
  541. if(len==0)len=a.length;
  542. var s='',s1='',npid='nextpage_'+this.rand+'';
  543. if(len==0){
  544. s='<div align="center" style="margin-top:30px;color:#cccccc;font-size:16px">无记录</div>';
  545. }else{
  546. s = this.showhtml(a);
  547. s1='共'+len+'条';
  548. if(ret.page && ret.limit){
  549. var max = Math.ceil(len/ret.limit);
  550. s1+=' ';
  551. if(ret.page>1)s1+='<a id="'+npid+'1" class="zhu" href="javascript:;">上页</a>';
  552. s1+='('+ret.page+'/'+max+')';
  553. if(max>ret.page)s1+='<a id="'+npid+'" class="zhu" href="javascript:;">下页</a>';
  554. this.searchajax = true;
  555. }
  556. }
  557. this._getobj('count').html(s1);
  558. var o = $('#selectlist_'+rand+'');
  559. o.html(s);
  560. $('#'+npid+'').click(function(){me.nextpage(1);});
  561. $('#'+npid+'1').click(function(){me.nextpage(-1);});
  562. if(!inb && len==0)this.loaddata();
  563. };
  564. this.seldatsse=[];
  565. this.showselectdata=function(da){
  566. if(this.showselbo || !da)return;
  567. var o = get('selxuan_'+this.rand+'');
  568. js.setselectdata(o,da,'value');
  569. if(da.length>0){
  570. this.showselbo=true;
  571. }
  572. $(o).change(function(){
  573. me._changeselval(this);
  574. }).show();
  575. };
  576. this._changeselval=function(o){
  577. this.selvalue = o.value;
  578. this.loaddata(o.value);
  579. };
  580. this.showhtml=function(a,ks){
  581. this.nowdata = a;
  582. var i,len=a.length,s='',s2,s1='',atr,oldvel='',d;
  583. if(this.nameobj)oldvel=this.nameobj.value;
  584. if(this.idobj)oldvel=this.idobj.value;
  585. var type='checkbox',ched='';
  586. if(!ks)ks=0;
  587. if(!this.checked)type='radio';
  588. oldvel = ','+oldvel+',';
  589. for(i=ks;i<len && i<this.maxshow+ks;i++){
  590. ched='';
  591. d = a[i];
  592. if(!isempt(d.value) && oldvel.indexOf(','+d.value+',')>-1)ched='checked';
  593. if(d.disabled)ched+=' disabled';
  594. s2 = '<input xu="'+i+'" '+ched+' name="changeuserinput_'+rand+'" xname="'+d.name+'" value="'+d.value+'" style="width:18px;height:18px;" align="absmiddle" type="'+type+'">';
  595. atr = '';
  596. if(d.padding)atr='style="padding-left:'+d.padding+'px"';
  597. if(!d.iconswidth)d.iconswidth=18;
  598. if(d.iconsimg)s2+=' <img align="absmiddle" src="'+d.iconsimg+'" height="'+d.iconswidth+'" width="'+d.iconswidth+'">';
  599. s+='<div class="listsss" '+atr+'><label>'+s2+'&nbsp;'+d.name+'';
  600. if(d.subname)s+='&nbsp;<span style="font-size:12px;color:#888888">('+d.subname+')</span>';
  601. s+='</label></div>';
  602. }
  603. if(len>i){
  604. s+='<div align="center" id="moreadd_'+rand+'" style="padding:10px;font-size:12px;color:#aaaaaa;cursor:pointer">还有'+(len-i)+'条,点我加载</div>';
  605. setTimeout(function(){$('#moreadd_'+rand+'').click(function(){me.moregegd(i);});},10);
  606. }
  607. return s;
  608. };
  609. this.moregegd=function(i1){
  610. $('#moreadd_'+rand+'').remove();
  611. var s = this.showhtml(this.nowdata, i1);
  612. if(s)$('#selectlist_'+rand+'').append(s);
  613. };
  614. this.reload=function(){
  615. this.page = 1;
  616. this.loaddata(this.selvalue);
  617. };
  618. this.nextpage=function(p){
  619. this.page = this.page+p;
  620. this.loaddata(this.selvalue);
  621. };
  622. this.loaddata=function(svel){
  623. var url = this.url;
  624. if(svel)url+='&selvalue='+svel+'';
  625. if(url=='')return;
  626. url+='&page='+this.page+'';
  627. url+='&limit='+this.maxshow+'';
  628. $('#selectlist_'+rand+'').html('<div align="center" style="margin-top:30px"><img src="images/mloading.gif"></div>');
  629. $.ajax({
  630. type:'get',dataType:'json',url:url,
  631. success:function(ret){
  632. me.data = ret;
  633. me.onloaddata(ret);
  634. me.showdata(ret, true);
  635. },
  636. error:function(e){
  637. $('#selectlist_'+rand+'').html('加载错误:<br><textarea style="width:95%;height:60%;color:red">'+e.responseText+'</textarea>');
  638. }
  639. });
  640. };
  641. this._searchkeys=function(e){
  642. if(!this.searchajax){
  643. clearTimeout(this._searchkeystime);
  644. this._searchkeystime=setTimeout(function(){
  645. me._searchkey(false);
  646. },500);
  647. }else{
  648. if(e.keyCode==13)this._searchkey(false);
  649. }
  650. };
  651. this._searchkey = function(bo){
  652. var key = $('#changekey_'+this.rand+'').val(),a=[],d=[],d1,len,i,oi=0,s;
  653. if(this.searchajax){
  654. this.page = 1;
  655. this.loaddata(''+this.selvalue+'&key='+jm.base64encode(key)+'');
  656. return;
  657. }
  658. a=this.data;
  659. if(a.rows)a=a.rows;
  660. len=a.length;if(len==0)return;
  661. if(key)key = key.toLowerCase();
  662. if(key!='')for(i=0;i<len;i++){
  663. d1 = a[i];
  664. if(d1.name.indexOf(key)>-1 || d1.name.toLowerCase().indexOf(key)>-1 || d1.value==key || (d1.subname && d1.subname.indexOf(key)>-1)){
  665. d.push(d1);
  666. oi++;
  667. if(oi>20)break;//最多显示搜索
  668. }
  669. }
  670. len = d.length;
  671. if(len==0){
  672. if(key){
  673. s='<div align="center" style="margin-top:30px;color:#cccccc;font-size:16px">无相关['+key+']的记录</div>';
  674. }else{
  675. s=this.showhtml(a);
  676. }
  677. }else{
  678. s=this.showhtml(d);
  679. }
  680. $('#selectlist_'+rand+'').html(s);
  681. if(bo && len==0 && key!='')js.msg('msg','无相关['+key+']的记录', 2);
  682. };
  683. }
  684. $.fn.chnageuser = function(options){
  685. var defaultVal = {
  686. 'title' : '请选择...',
  687. 'titlebool':true,
  688. 'showview':'',
  689. 'changerange':'', //从哪些人员中选择
  690. 'changerangeno':'', //不从哪些人选择
  691. 'changetype' : 'user',
  692. 'idobj':false,'nameobj':false,
  693. 'onselect':function(){},
  694. 'oncancel':function(){}
  695. };
  696. var can = $.extend({}, defaultVal, options);
  697. var funcls = new chnageuser($(this), can);
  698. funcls._init();
  699. return funcls;
  700. };
  701. $.selectdata = function(options){
  702. var defaultVal = {
  703. 'showview': '',
  704. 'title' : '请选择...',
  705. 'maxshow' : 100, //最多显示防止卡死浏览器
  706. 'data' : [], 'url' : '',
  707. 'checked' : false,
  708. 'idobj' : false, 'nameobj':false,
  709. 'onselect': function(){},
  710. 'oncancel': function(){},
  711. 'onloaddata':function(){}
  712. };
  713. var can = $.extend({}, defaultVal, options);
  714. var funcls = new selectdata(false, can);
  715. funcls._init();
  716. return funcls;
  717. };
  718. })(jQuery);