Files
OMS/app/desktop/statics/js_mini/coms/finder.js
2025-12-28 23:13:25 +08:00

3 lines
19 KiB
JavaScript

!function(){finderGroup={},this.finderDestory=function(){for(var e in finderGroup)delete finderGroup[e]};function E(e,t,i){var n={},s={};return s[t=t||"controller"]=s[t]||{},s[t][i[0]]=i[1],n[e]=s,n}var c=new Class({Extends:Drag,start:function(e){this.parent(e)}});Finder=new Class({Implements:[Events],options:{selectName:"items[]"},detailStatus:{},initialize:function(e,t){$extend(this.options,t),this.id=e,this.initStaticView(),this.initView(),this.listContainer=this.list.getContainer(),this.attachStaticEvents(),this.attachEvents(),this.options.packet&&this.loadPacket()},initStaticView:function(){$each(["action","form","filter","search","tip","header","footer","pager","packet"],function(e){this[e]=$("finder-"+e+"-"+this.id)},this)},initView:function(){this.list=$("finder-list-"+this.id).store("visibility",!0),this.tip=$("finder-tip-"+this.id)},isVisibile:function(){return!!this.list.retrieve&&$chk(this.list.retrieve("visibility"))},attachStaticEvents:function(){var e,t,m=this;m.search&&(e=m.search.getElement("input[search]").addEvent("keypress",function(e){var t;13===e.code&&(e.stop(),this.value.trim().length||(m.filter.value=""),t=m.form.retrieve("rowselected",[]),m.refresh(t.length&&!t.contains("_ALL_")&&!confirm(LANG_Finder.refresh_confirm)))}),m.search.getElement(".finder-search-btn").addEvent("click",function(){e.fireEvent("keypress",{stop:$empty,code:13})})),m.action&&m.action.getElements("*[submit]").addEvent("click",function(e){e&&e.stop&&e.stop();var t=this.get("target"),i=this.get("submit"),n=m.form.retrieve("rowselected"),s=m.form.retrieve("_rowindex",$H());!(n=n||[]).length&&s&&s.getValues().sort(function(e,t){return e.toInt()-t.toInt()}).each(function(e){n.push(s.keyOf(e))});var a=new Element("form"),r=document.createDocumentFragment(),o=!1;if(n.each(function(e){var t=m.options.selectName;"_ALL_"==e&&(o=t="isSelectedAll"),r.appendChild(new Element("input",{type:"hidden",name:t,value:e}))}),a.appendChild(r),!a.getFirst())return MessageBox.error(LANG_Finder.error);var l=t,c={};t&&t.contains("::")&&(l=t.split("::")[0],c=JSON.decode(t.split("::")[1]),"object"!=$type(c)&&(c={}));var d,h,f=this.getProperty("confirm");if(!f||window.confirm(f))switch(o&&(h=[d=(d=m.form.action.match(/\?([\s\S]+$)/))[1]?d[1]:"",m.form.toQueryString(),m.filter.value].join("&"),a.adopt(h.toFormElements())),l){case"refresh":W.page(i,$extend({data:a,method:"post",onComplete:m.refresh.bind(m)},c));break;case"command":new cmdrunner(actionurl,{onSuccess:m.refresh.bind(m)});break;case"dialog":new Dialog(i,$extend({title:this.get("dialogtitle")||this.get("text"),ajaxoptions:{data:a,method:"post"},onClose:function(){m.unselectAll(),m.refresh.call(m)}},c));break;case"_blank":var u=a.set({action:i,name:l,target:"_blank",method:"post"}).inject(document.body);u.submit(),u.remove.delay(1e3,u);break;default:W.page(i,$extend({data:a,method:"post"},c))}}),m.header&&(m.header.addEvent("click",function(e){var t,i=$(e.target);i.hasClass("orderable")||(i=i.getParent(".orderable")),i&&(t=["desc"==i.get("order")?"asc":"desc",i.get("key")].link({"_finder[orderType]":String.type,"_finder[orderBy]":String.type}),m.fillForm(t).refresh(),e.stopPropagation())}),(t=function(e,t){try{m.header.setStyles({width:m.listContainer.clientWidth-m.listContainer.getPatch().x})}catch(e){}})(),LAYOUT.content_main.addEvent("resizelayout",t),m.header.addEvent("dispose",function(){LAYOUT.content_main.removeEvent("resizelayout",t)}))},selectAll:function(){this.header.getElement(".sellist").set("checked",!0).fireEvent("change"),this.tip.fireEvent("_update","selectedall").fireEvent("_show"),this.form.retrieve("rowselected").empty().push("_ALL_")},unselectAll:function(){this.header.getElement(".sellist").set("checked",!1).fireEvent("change"),this.form.retrieve("rowselected").empty(),this.form.retrieve("_rowindex",$H()).empty(),this.tip.fireEvent("_hide")},selectFav:function(i){this.list.getElements("table tbody td:nth-child(first)").each(function(e){var t=e.getElement("input[type=checkbox]");e.getElement(".fav-star-on")?t.set("checked",!i).fireEvent("change"):t.set("checked",!!i).fireEvent("change")})},selectunFav:function(){this.selectFav(!0)},attachEvents:function(){var e,t,u,m,v,i,g=this,p=this.listContainer,n=(g.list.retrieve("eventInfo",{}),g.form.retrieve("rowselected",[]));g.header&&g.list.getElement("tr")&&(t=(e=g.header.getElement(".finder-header")).getElements(".finder-col-resizer"),u=e.getElements("col"),m=e.getElement("tr").getChildren(),v=g.list.getElements("col"),new c(e,{modifiers:{x:!1,y:!1},limit:{x:[35,1e3]},handle:Array.from(t),onStart:function(e,t){var i;e.addClass("col-resizing"),i=t.target.getParent(".cell")?t.target.getParent(".cell").getParent("td"):t.target.getParent("td")?t.target.getParent("td"):t.target;var n=m.indexOf(i);if(n<0)return this.cancel();var s=m[n].getElement(".finder-col-resizer");e.store("_dragTargetIndex",n),u[n].addClass("resizing").setStyle("background","#e9e9e9");var a=e.retrieve("_dragTargetMoveEl");a||(a=new Element("div",{class:"resize-move-el",styles:{height:g.header.offsetHeight+p.offsetHeight,width:s.offsetWidth,position:"absolute",top:s.getPosition().y,left:s.getPosition().x,background:"#e9e9e9",zIndex:65535,cursor:"col-resize",opacity:.8,borderRight:"1px #cccccc solid"}}).inject(document.body),e.store("_dragTargetMoveEl",a))},onDrag:function(e){e.retrieve("_dragTargetMoveEl").setStyle("left",this.mouse.now.x)},onComplete:function(e){e.removeClass("col-resizing");var t,i,n,s,a,r,o,l,c,d,h=e.retrieve("_dragTargetIndex"),f=u[h].removeClass("resizing").setStyle("background","");e.retrieve("_dragTargetMoveEl")&&(e.retrieve("_dragTargetMoveEl").dispose(),e.eliminate("_dragTargetMoveEl"),t=this.mouse.now.x-this.mouse.start.x,n=((i=f.getStyle("width").toInt())+t).limit(this.options.limit.x[0],this.options.limit.x[1]),s=$$(f,v[h]),a=g.list.getElement("tr").getElement("td:nth-child("+(h+1)+")"),window.webkit&&(s=$$(s,m[h],a)),s.setStyle("width",n),r=p.scrollLeft,o=p.offsetWidth,l=p.scrollWidth,0<r&&l<=r+o&&((c=n-i)<0&&(p.scrollLeft=(p.scrollLeft-Math.abs(c)).limit(0,p.scrollWidth))),a&&(d=a.get("key"),EventsRemote.post({events:E("finder_colset",g.options.object_name+"_"+g.options.finder_aliasname,[d,n])})))}})),g.tip&&(g.tip.addEvents({_update:function(e,t){this.retrieve("arg:class","NULL")!=e&&$$(this.childNodes).hide();var i,n=this.getElement("."+e);n&&(n.innerHTML=n.innerHTML.replace(/<em>([\s\S]*?)<\/em>/gi,function(){return"<em>"+t+"</em>"}),n.setStyle("display","block")),this.store("arg:class",e),this.retrieve("tipclone")||(i=new Element("div",{class:"hide",html:"&nbsp;",styles:{height:this.offsetHeight}}).injectTop(p),this.store("tipclone",i))},_show:function(){"hidden"==this.style.visibility&&(this.setStyle("visibility","visible"),this.retrieve("tipclone").removeClass("hide"))},_hide:function(){"hidden"!=this.style.visibility&&(this.setStyle("visibility","hidden"),this.retrieve("tipclone").addClass("hide"))}}),1<(i=n.length)&&(i==g.tip.get("count").toInt()||n.contains("_ALL_")?g.tip.fireEvent("_update",["selectedall",i]).fireEvent("_show"):g.tip.fireEvent("_update",["selected",i]).fireEvent("_show"))),g.list.addEvents({selectrow:function(e){e.getParent(".row").addClass("selected")},unselectrow:function(e){e.getParent(".row").removeClass("selected")}});var s,a=g.list.getElements(".sel");g.rowCount=a.length,g.header&&g.header.getElement(".sellist")&&(s=g.header.getElement(".sellist").addEvent("change",function(){a.set("checked",this.checked).fireEvent("change")})),a.each(function(e){var t;Browser.ie&&(e.addEvent("click",function(){this.fireEvent("change")}),e.addEvent("focus",function(){this.blur()})),e.addEvent("change",function(){var e;if(s?(n[this.checked?"include":"erase"](this.value),e=g.form.retrieve("_rowindex",$H()),this.checked?e.set(this.value,this.get("rowindex")):e.erase(this.value)):n.empty().push(this.value),!this.checked&&n.contains("_ALL_"))return n.erase("_ALL_"),g.unselectAll();var t=n.length,i=0;1<t?t==g.tip.get("count").toInt()||n.contains("_ALL_")?g.tip.fireEvent("_update",["selectedall",t]).fireEvent("_show"):(g.tip.fireEvent("_update",["selected",t]),i=function(){if($clear(i),!(n.length<2))return"mousedown"==g.list.retrieve("eventState")?i=arguments.callee.delay(200):void g.tip.fireEvent("_show")}.delay(200)):($clear(i),g.tip.fireEvent("_update",["selected"]),g.tip.fireEvent("_hide")),g.list.fireEvent(this.checked?"selectrow":"unselectrow",this)}),n&&n.push&&(n.contains(e.value)||n.contains("_ALL_"))&&e.set("checked",!0).fireEvent("change"),!(row=e.getParent(".row"))||(t=row.get("item-id"))&&t==g.detailStatus.rowId&&g.showDetail(row.getElement("span[detail]").get("detail"),{},row)}),g.list.addEvent("click",function(e){var t=$(e.target);if(t){if(t.match("img")&&(t=$(t.parentNode)),t.hasClass("fav-star"))return t.toggleClass("fav-star-on"),EventsRemote.post({events:E("finder_favstar",g.options.object_name+"_"+g.options.finder_aliasname,["id-"+t.getParent("tr[item-id]").get("item-id"),t.hasClass("fav-star-on")?1:0])});var i=t.get("detail");if(i)return e.stopPropagation(),g.showDetail(i,{},t.getParent(".row"));if((t.hasClass("cell")||t.hasClass("cell-inside"))&&(t=t.getParent("td")),t.match("td")){if(!/row/.test(t.parentNode.className))return;if(g.detailStatus.row){var n=t.getParent(".row").getElement("*[detail]");if(n&&!t.getParent(".row").hasClass("view-detail"))return g.showDetail(n.get("detail"),{},t.getParent(".row"))}}}}),attachEsayCheck(g.list,"td:nth-child(first) .span-auto");var r=null,o=0,l=function(){r&&cancelAnimationFrame(r),r=requestAnimationFrame(function(){var e,t=this.listContainer.scrollLeft;t!==o&&(o=t,this.header&&this.header.scrollLeft!==t&&(this.header.scrollLeft=t),(e=this.listContainer.getElement(".finder-detail-content"))&&e.setStyle("margin-left",t),this.tip&&"hidden"!==this.tip.style.visibility&&this.tip.setStyles({left:t,top:this.listContainer.scrollTop})),r=null}.bind(this))}.bind(this);l(),this.listContainer.addEvent("scroll",l),this.list.addEvent("dispose",function(){this.listContainer.removeEvent("scroll",l),r&&(cancelAnimationFrame(r),r=null)}.bind(this)),this.cellOpts.call(this)},fillForm:function(e){if(e&&"object"==$type(e)){e=$H(e);var i=this;return e.each(function(e,t){(i.form.getElement("input[name^="+t.slice(0,-1)+"]")||new Element("input",{type:"hidden",name:t}).inject(i.form)).set("value",e)}),i}},eraseSelected:function(){var i,n=this,s=n.form.retrieve("rowselected",[]);"_ALL_"!=s[0]&&(i=n.list.getElements(".sel"),$splat(arguments).flatten().each(function(t){var e=i.filter(function(e){return e.value==t});e.length?e.set("checked",!1).fireEvent("change"):(s.erase(t),n.tip.fireEvent("_update",["selected",s.length]))}))},eraseFormElement:function(){var e=Array.flatten(arguments),t=this;return $each(e,function(e){t.form.getElement("input[name="+e+"]").remove()}),t},scrollTab:function(t,i,e){i=i||LAYOUT.content_main,e=e||t;var n=t.getElements("li"),s=t.getElements(".scroll-handle"),a=t.getElement(".tabs-items"),r=2;n.each(function(e){r+=e.offsetWidth}),t.getElement("ul").setStyle("width",r);function o(){try{var e=i.offsetWidth;t[e<r?"addClass":"removeClass"]("tabs-scroll").setStyle("width",e-2),a.setStyle("width",e-2*a.getStyle("marginLeft").toInt()),l.options.duration=500,l.scrollIntoView(t.getElement(".current"))}catch(e){}}var l=new Fx.Scroll(a,{link:"cancel"});o(),LAYOUT.content_main.addEvent("resizelayout",o),e.addEvent("dispose",function(){LAYOUT.content_main.removeEvent("resizelayout",o)}),s.addEvents({mouseenter:function(){l.options.duration=850,l[this.hasClass("r")?"toRight":"toLeft"]()},mouseleave:function(){l.stop()}})},showDetail:function(e,t,a){var r=this,i=a.getNext(),n=a.get("item-id");if(this.detailCurTab&&this.detailCurTab[0]==n&&(e=this.detailCurTab[1]),i&&i.hasClass("finder-detail"))return this.hideDetail(a,i);this.hideDetail(this.detailStatus.row,this.detailStatus.dp);var o=new Element("tr",{class:"finder-detail"}),l=new Element("td",{colspan:a.getElements("td").length,class:"finder-detail-colspan"}),c=new Element("div",{class:"finder-detail-content clearfix",id:"finder-detail-"+this.id}).set({container:!0});o.adopt(l.adopt(c));var d=this.list.getContainer(),s=this.detailStatus.Request;s&&s.cancel(),this.detailStatus.row=a.addClass("view-detail"),this.detailStatus.rowId=n,this.detailStatus.Request=new Request.HTML({evalScripts:!1,url:e+(0<e.indexOf("&")?"&":"")+"finder_name="+this.id,onRequest:function(){new MessageBox(LANG_Finder.detail.request,{type:"notice"})},onComplete:function(e,t,i,n){o.injectAfter(a),new MessageBox(LANG_Finder.detail.complete,{autohide:1}),W.render(c.set("html",i));function s(){try{c.setStyle("width",d.clientWidth-l.getPatch().x)}catch(e){}}s(),LAYOUT.content_main.addEvent("resizelayout",s),r.list.addEvent("dispose",function(){LAYOUT.content_main.removeEvent("resizelayout",s)}),$globalEval(n)}.bind(this),onFailure:function(){new MessageBox(LANG_Finder.detail.failure+[this.xhr.status],{type:"error",autohide:!0})}}).send().chain(function(){delete this.detailStatus.Request,this.detailStatus.dp=o,d.retrieve("fxscroll",new Fx.Scroll(d,{link:"cancel"})).toElement(a)}.bind(this))},hideDetail:function(e,t){e&&e.removeClass("view-detail"),t&&t.remove(),delete this.detailCurTab,delete this.detail,delete this.detailStatus.row,delete this.detailStatus.dp,delete this.detailStatus.rowId},getFormQueryString:function(){return this.form.toQueryString()},page:function(e){this.form.store("page",e||1),this.request({method:this.form.method||"post"})},loadPacket:function(){var e=this.packet;this.options.packet&&new Request.HTML({url:this.form.action+"&action=packet",update:e,onRequest:function(){e.addClass("loading")},onComplete:function(){e.removeClass("loading")}}).get()},storeTab:function(){var e,t=$("finder-detail-"+this.id);!t||(e=t.getElement(".finder-tabs-wrap .current"))&&(this.detailCurTab=[e.get("item-id"),e.get("url")])},refresh:function(e){this.storeTab(),this.request({method:this.form.method||"post",onComplete:function(){this.loadPacket(),e&&this.unselectAll()}.bind(this)})},filter2packet:function(){var e=this.filter.value;e&&new Dialog(this.form.action+"&action=filter2packet",{width:400,height:200,ajaxoptions:{method:"post",data:$H({filterquery:e,finder_id:this.id})}})},setCount:function(){var e=this.tip.get("count").toInt(),t=$E(".finder-title .count");return t&&t.setText(e),this},request:function(){var e=Array.flatten(arguments).link({options:Object.type,action:String.type});e.action=e.action||this.form.action+"&page="+(this.form.retrieve("page")||1),e.options=e.options||{};var t=e.options.onComplete;"function"!=$type(t)&&(t=$empty),$extend(e.options,{clearUpdateMap:!1,updateMap:{".innerheader":this.header,".pager":this.pager},onComplete:function(){this.initView(),this.setCount().attachEvents(),t.apply(this,Array.flatten(arguments));var e=$("filter-tip-"+this.id);e&&(this.filter.value.trim().length?e.setStyle("visibility","visible").highlight("#FFFFCC"):e.setStyle("visibility","hidden"))}.bind(this)}),this.search&&this.search.getElement("input[search]").value.trim().length&&(this.filter.value=this.search.toQueryString());var i=this.getFormQueryString().concat("&"+this.filter.value),n=e.options.data;switch($type(n)){case"string":e.options.data=[i,n].join("&");break;case"object":case"hash":e.options.data=[i,Hash.toQueryString(n)].join("&");break;case"element":e.options.data=[i,$(n).toQueryString()].join("&");break;default:e.options.data=i}for(v in this.detailStatus)"element"==$type(this.detailStatus[v])&&delete this.detailStatus[v];W.page(e.action,e.options)},cellOpts:function(){var o=this,e=o.list.getElements(".opt-handle");e&&e.each(function(n,e){var s=n.getSize().x,a=n.getPatch().x;new DropMenu(n,{eventType:"mouse",stopState:!0,offset:{x:s-a-3,y:0},relative:$("main"),delay:0,size:!0,onPosition:function(e){var t,i;this.offset||(this.offset=this.options.offset.x),"x"==e&&(i=(t=n.getParent("td").getSize().x)<s?t-a-12:this.offset,this.options.offset.x=this.options.relative.getScroll().x+i,this.options.offset.y=this.options.relative.getScroll().y)},onHide:function(){this.element.style.position="static"},onInitShow:function(){o.detailStatus.rowId&&(this.status=!0)},onShow:function(e){this.element.style.position="relative",this.bind||(e.getElements("a").addEvent("click",function(e){var t=this.get("submit")||this.get("url"),i=this.get("target");if(i&&t){e.preventDefault();var n=i.split("::")[0]||i,s=JSON.decode(i.split("::")[1])||{};switch(n){case"dialog":var a=new Dialog(t,$extend(s,{onLoad:function(){this.dialog.getElement("form").store("target",{onComplete:function(){a.close(),o.refresh()}})}}));break;case"tab":o.showDetail(t,s,this.getParent("tr"));break;case"request":new Request({url:t,method:"post",data:s.data,onComplete:function(e){o.showDetail(s.url,{},this.getParent("tr"))}.bind(this)}).send();break;case"confirm":var r=this.get("confirm");if(r&&!confirm(r))return;W.page(t,{onComplete:function(e){o.refresh()}})}}}),this.bind=!0)}})})}}),Filter=new Class({Implements:[Events,Options],options:{onPush:$empty,onRemove:$empty,onChange:$empty},initialize:function(e,t,i){this.finderId=t,this.filter=$(e),this.finderObj=window.finderGroup[t],this.setOptions(i)},update:function(){var n=this.filter,e=n.toQueryString(function(e){var t,i=$(e).getParent("dl");if(i&&i.isDisplay()&&$(e).value&&(!(t=e.name.match(/_([\s\S]+)_search/))||n.getElement("*[name="+t[1]+"]").value)&&(!e.name.match(/_DTYPE_TIME/)||n.getElement("*[name="+e.value+"]").value)&&(!(t=e.name.match(/_DTIME_\[([^\]]+)\]\[([^\]]+)\]/))||n.getElement("*[name="+t[2]+"]").value))return!0},!0);this.finderObj.search&&(this.finderObj.search.getElement("input[search]").value=""),this.finderObj.filter.value=e;var t=this.finderObj.form.retrieve("rowselected",[]);this.finderObj.refresh(t.length&&!t.contains("_ALL_")&&!confirm(LANG_Finder.refresh_confirm)),this.fireEvent("change")},retrieve:function(){var e=this.finderObj.filter.value||"";this.finderObj.search&&(this.finderObj.search.getElement("input[search]").value="");var n=this;e.replace(/([^&]+)\=([^&]+)/g,function(){var e=arguments,t=e[1],i=n.filter.getElement("[name="+t+"]");t&&t.slice(-1)&&"]"==t.slice(-1)&&(i=n.filter.getElement("[name^="+t.substr(0,t.length-1)+"]")),i&&(i.value=decodeURIComponent(e[2]))})}})}(),function(){var i=new Tips({onShow:function(e,t){var i;t.addClass("active"),e.setStyle("display","block").store("tip:imgsource",i=$pick(t.get("href"),t.get("src")));var n=e.getElement(".tip-text").set("html","&nbsp;").addClass("loading");Asset.image(i,{onload:function(){this.src==e.retrieve("tip:imgsource")&&(n.empty().adopt(this.zoomImg(n.offsetWidth,n.offsetHeight)).removeClass("loading"),this.setStyle("margin-top",(n.offsetHeight-this.height)/2))}})},text:function(e){return"&nbsp;"},className:"finder-col-img-tip"}),n=new Tips({onShow:function(e,t){t.addClass("active"),e.setStyle("display","block");var i=t.retrieve("loaded:html"),n=e.getElement(".tip-text");if(i)return n.set("html",i);n.set("html","&nbsp;").addClass("loading"),new Request({url:t.get("data-load"),onSuccess:function(e){n.removeClass("loading").empty().set("html",e),t.store("loaded:html",e)}}).get()},text:function(e){return"&nbsp;"},className:"finder-col-desc-tip"}),s=new Tips({onShow:function(e,t){t.addClass("active"),e.setStyle("display","block")},text:function(e){return e.get("title")||e.get("rel")},className:"finder-col-text-tip"}),a=new Tips({onShow:function(e,t){t.addClass("active"),e.setStyle("display","block")},text:function(e){return e.getElement("textarea").value},className:"finder-col-desc-tip"});this.bindFinderColTip=function(e){var t=(e=new Event(e)).target;t&&(t.onmouseover=null,t.hasClass("img-tip")?i.attach(t):t.hasClass("desc-tip")?a.attach(t):t.hasClass("load-tip")?n.attach(t):s.attach(t),t.addEvent("mouseleave",function(){this.removeClass("active")}),t.fireEvent("mouseenter",e))}}();