| 1 |
- MWF.xApplication.Selector=MWF.xApplication.Selector||{};MWF.xDesktop.requireApp("Selector","Actions.RestActions",null,false);MWF.xApplication.Selector.Person=new Class({Extends:MWF.widget.Common,Implements:[Options,Events],options:{style:"default",count:0,title:"Select Person",groups:[],roles:[],values:[],names:[],zIndex:100,expand:true},initialize:function(e,t){this.setOptions(t);this.path="/x_component_Selector/$Selector/";this.cssPath="/x_component_Selector/$Selector/"+this.options.style+"/css.wcss";this._loadCss();this.container=$(e);this.action=new MWF.xApplication.Selector.Actions.RestActions;this.lastPeople="";this.pageCount="13";this.selectedItems=[];this.items=[]},load:function(){this.container.mask({destroyOnHide:true,style:this.css.maskNode});this.container.setStyle("z-index",this.options.zIndex);this.node=new Element("div",{styles:this.options.count.toInt()==1?this.css.containerNodeSingle:this.css.containerNode});this.node.setStyle("z-index",this.options.zIndex.toInt()+1);this.titleNode=new Element("div",{styles:this.css.titleNode}).inject(this.node);this.titleActionNode=new Element("div",{styles:this.css.titleActionNode}).inject(this.titleNode);this.titleTextNode=new Element("div",{styles:this.css.titleTextNode,text:this.options.title}).inject(this.titleNode);this.contentNode=new Element("div",{styles:this.css.contentNode}).inject(this.node);this.loadContent();this.actionNode=new Element("div",{styles:this.css.actionNode}).inject(this.node);if(this.options.count.toInt()==1)this.actionNode.setStyle("text-align","center");this.loadAction();this.node.inject(this.container);this.node.position({relativeTo:this.container,position:"center",edge:"center"});var e=this.container.getSize();var t=this.node.getSize();this.node.makeDraggable({handle:this.titleNode,limit:{x:[0,e.x-t.x],y:[0,e.y-t.y]}});this.setEvent()},setEvent:function(){this.titleActionNode.addEvent("click",function(){this.close()}.bind(this))},close:function(){this.node.destroy();this.container.unmask();delete this},loadAction:function(){this.okActionNode=new Element("button",{styles:this.css.okActionNode,text:"确 定"}).inject(this.actionNode);this.cancelActionNode=new Element("button",{styles:this.css.cancelActionNode,text:"取 消"}).inject(this.actionNode);this.okActionNode.addEvent("click",function(){this.fireEvent("complete",[this.selectedItems]);this.close()}.bind(this));this.cancelActionNode.addEvent("click",function(){this.close()}.bind(this))},loadContent:function(){if(this.options.count.toInt()!=1)this.loadSelectedNode();this.loadSelectNode()},loadSelectNode:function(){this.selectNode=new Element("div",{styles:this.options.count.toInt()==1?this.css.selectNodeSingle:this.css.selectNode}).inject(this.contentNode);this.searchInputDiv=new Element("div",{styles:this.css.searchInputDiv}).inject(this.selectNode);this.searchInput=new Element("input",{styles:this.options.count.toInt()==1?this.css.searchInputSingle:this.css.searchInput,type:"text"}).inject(this.searchInputDiv);this.initSearchInput();this.letterAreaNode=new Element("div",{styles:this.css.letterAreaNode}).inject(this.selectNode);this.loadLetters();this.itemAreaScrollNode=new Element("div",{styles:this.css.itemAreaScrollNode}).inject(this.selectNode);this.itemAreaNode=new Element("div",{styles:this.css.itemAreaNode}).inject(this.itemAreaScrollNode);this.itemSearchAreaNode=new Element("div",{styles:this.css.itemAreaNode}).inject(this.itemAreaScrollNode);this.itemSearchAreaNode.setStyle("display","none");MWF.require("MWF.widget.ScrollBar",function(){var e=this;new MWF.widget.ScrollBar(this.itemAreaScrollNode,{style:"xApp_Organization_Explorer",where:"before",distance:30,friction:4,axis:{x:false,y:true},onScroll:function(t){e._scrollEvent(t)}})}.bind(this));this.initLoadSelectItems();if(!this.options.groups.length&&!this.options.roles.length){this.loadSelectItems()}else{this.loadSelectItemsByCondition()}},initSearchInput:function(){this.searchInput.addEvents({keydown:function(e){var t=this.searchInput.retrieve("searchTimer",null);if(t){window.clearTimeout(t);this.searchInput.eliminate("searchTimer")}t=window.setTimeout(function(){this.search()}.bind(this),800);this.searchInput.store("searchTimer",t)}.bind(this),change:function(e){var t=this.searchInput.get("value");if(!t)this.initSearchArea(false)}.bind(this),blur:function(){var e=this.searchInput.get("value");if(!e)this.initSearchArea(false)}.bind(this)})},initSearchArea:function(e){if(e){this.itemSearchAreaNode.empty();this.itemAreaNode.setStyle("display","none");this.itemSearchAreaNode.setStyle("display","block")}else{this.itemAreaNode.setStyle("display","block");this.itemSearchAreaNode.setStyle("display","none")}},search:function(){if(!this.options.groups.length&&!this.options.roles.length){var e=this.searchInput.get("value");if(e){this._listItemByKey(function(e){this.initSearchArea(true);e.data.each(function(e){var t=true;if(this.options.departments){if(this.options.departments.length){if(this.options.departments.indexOf(e.departmentName)==-1)t=false}}if(this.options.companys){if(this.options.companys.length){if(this.options.companys.indexOf(e.company)==-1)t=false}}if(t)this._newItem(e,this,this.itemSearchAreaNode)}.bind(this))}.bind(this),null,e)}else{this.initSearchArea(false)}}else{var e=this.searchInput.get("value");if(e){this.initSearchArea(true);this.searchInItems(e)}else{this.initSearchArea(false)}}},searchInItems:function(e){this.createItemsSearchData(function(){var t=e.toLowerCase();var s=[];this.itemsSearchData.each(function(e){var i=e.text+"#"+e.pinyin+"#"+e.firstPY;if(i.indexOf(t)!=-1){if(s.indexOf(e.data.name)==-1){this._newItem(e.data,this,this.itemSearchAreaNode);s.push(e.data.name)}}}.bind(this));delete s}.bind(this))},createItemsSearchData:function(e){if(!this.itemsSearchData){this.itemsSearchData=[];MWF.require("MWF.widget.PinYin",function(){var t=[];this.items.each(function(e){if(t.indexOf(e.data.name)==-1){var s=e._getShowName().toLowerCase();var i=s.toPY().toLowerCase();var n=s.toPYFirst().toLowerCase();this.itemsSearchData.push({text:s,pinyin:i,firstPY:n,data:e.data});t.push(e.data.name)}}.bind(this));delete t;if(e)e()}.bind(this))}else{if(e)e()}},loadSelectedNode:function(){this.selectedScrollNode=new Element("div",{styles:this.css.selectedScrollNode}).inject(this.contentNode);this.selectedNode=new Element("div",{styles:this.css.selectedNode}).inject(this.selectedScrollNode);this.setSelectedItem();MWF.require("MWF.widget.ScrollBar",function(){var e=this;new MWF.widget.ScrollBar(this.selectedScrollNode,{style:"xApp_Organization_Explorer",where:"before",distance:100,friction:4,axis:{x:false,y:true}})}.bind(this))},setSelectedItem:function(){if(this.options.values.length){this.options.values.each(function(e){this._getItem(function(e){this.selectedItems.push(this._newItemSelected(e.data,this,null))}.bind(this),null,e,false)}.bind(this))}else if(this.options.names.length){this.options.names.each(function(e){this._listItemByKey(function(e){var t="";if(e.data.length)t=e.data[0];if(t){this.selectedItems.push(this._newItemSelected(t,this,null))}}.bind(this),null,e)}.bind(this))}},loadLetters:function(){var e=this;letters=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];letters.each(function(t){var s=new Element("div",{styles:this.css.letterNode,text:t}).inject(this.letterAreaNode);s.addEvents({mouseover:function(e){e.target.setStyles(this.css.letterNode_over);var t=new Element("div",{styles:this.css.letterShowNode,text:e.target.get("text")}).inject(this.selectNode);t.position({relativeTo:this.itemAreaScrollNode,position:"center",edge:"center"});e.target.store("showNode",t)}.bind(this),mouseout:function(e){var t=e.target.retrieve("showNode");t.destroy();e.target.setStyles(this.css.letterNode)}.bind(this),click:function(){e.listPersonByPinyin(this)}})}.bind(this))},listPersonByPinyin:function(e){this.searchInput.focus();var t=this.searchInput.get("value");t=t+e.get("text");this.searchInput.set("value",t);if(!this.options.groups.length&&!this.options.roles.length){if(t){this._listItemByPinyin(function(e){this.initSearchArea(true);e.data.each(function(e){var t=true;if(this.options.departments){if(this.options.departments.length){if(this.options.departments.indexOf(e.departmentName)==-1)t=false}}if(this.options.companys){if(this.options.companys.length){if(this.options.companys.indexOf(e.company)==-1)t=false}}if(t)this._newItem(e,this,this.itemSearchAreaNode)}.bind(this))}.bind(this),null,t.toLowerCase())}}else{if(t){this.initSearchArea(true);this.searchInItems(t)}else{this.initSearchArea(false)}}},initLoadSelectItems:function(){this.loaddingItems=false;this.isItemLoaded=false;this.loadItemsQueue=0;this.initSearchArea(false)},loadSelectItems:function(e){if(!this.isItemLoaded){if(!this.loaddingItems){this.loaddingItems=true;var t=20;this._listItemNext(this.getLastLoadedItemId(),t,function(e){if(e.data.length){e.data.each(function(e){var t=this._newItem(e,this,this.itemAreaNode);this.items.push(t)}.bind(this));this.loaddingItems=false;if(e.data.length<t){this.isItemLoaded=true}else{if(this.loadItemsQueue>0){this.loadItemsQueue--;this.loadSelectItems()}}}else{this.isItemLoaded=true;this.loaddingItems=false}}.bind(this))}else{if(e)this.loadItemsQueue++}}},getLastLoadedItemId:function(){return this.items.length?this.items[this.items.length-1].data.name:"(0)"},loadSelectItemsByCondition:function(){this.options.groups.each(function(e){this.action.listGroupByKey(function(e){if(e.data.length){var t=e.data[0];var s=this._newItemCategory("ItemGroupCategory",t,this,this.itemAreaNode);this._getChildrenItemIds(t).each(function(e){this._getItem(function(e){var t=this._newItem(e.data,this,s.children);this.items.push(t)}.bind(this),null,e)}.bind(this))}}.bind(this),null,e)}.bind(this));this.options.roles.each(function(e){this.action.listRoleByKey(function(e){if(e.data.length){var t=e.data[0];var s=this._newItemCategory("ItemRoleCategory",t,this,this.itemAreaNode);this._getChildrenItemIds(t).each(function(e){this._getItem(function(e){var t=this._newItem(e.data,this,s.children);this.items.push(t)}.bind(this),null,e)}.bind(this))}}.bind(this),null,e)}.bind(this))},_getChildrenItemIds:function(e){return e.personList},_newItemCategory:function(e,t,s,i){return new MWF.xApplication.Selector.Person[e](t,s,i)},_listItemByKey:function(e,t,s){this.action.listPersonByKey(function(t){if(e)e.apply(this,[t])}.bind(this),t,s)},_getItem:function(e,t,s,i){this.action.getPerson(function(t){if(e)e.apply(this,[t])}.bind(this),t,s,i)},_newItemSelected:function(e,t,s){return new MWF.xApplication.Selector.Person.ItemSelected(e,t,s)},_listItemByPinyin:function(e,t,s){this.action.listPersonByPinyin(function(t){if(e)e.apply(this,[t])}.bind(this),t,s)},_newItem:function(e,t,s){return new MWF.xApplication.Selector.Person.Item(e,t,s)},_listItemNext:function(e,t,s){this.action.listPersonNext(e,t,function(e){if(s)s.apply(this,[e])}.bind(this))},_scrollEvent:function(e){if(!this.options.groups.length&&!this.options.roles.length){var t=this.itemAreaScrollNode.getScrollSize();var s=this.itemAreaScrollNode.getSize();var i=t.y-s.y;if(e+30>i){if(!this.isItemLoaded)this.loadSelectItems()}}}});MWF.xApplication.Selector.Person.Item=new Class({initialize:function(e,t,s,i){this.data=e;this.selector=t;this.container=s;this.isSelected=false;this.level=i?i.toInt():1;this.load()},_getShowName:function(){return this.data.display+"("+this.data.employee+")"},_setIcon:function(){this.iconNode.setStyle("background-image","url("+"/x_component_Selector/$Selector/default/icon/personicon.png)")},load:function(){this.node=new Element("div",{styles:this.selector.css.selectorItem}).inject(this.container);this.levelNode=new Element("div",{styles:this.selector.css.selectorItemLevelNode}).inject(this.node);var e=this.level*10;this.levelNode.setStyle("width",""+e+"px");this.iconNode=new Element("div",{styles:this.selector.css.selectorItemIconNode}).inject(this.node);this._setIcon();this.actionNode=new Element("div",{styles:this.selector.css.selectorItemActionNode}).inject(this.node);this.textNode=new Element("div",{styles:this.selector.css.selectorItemTextNode,text:this._getShowName()}).inject(this.node);var t=this.textNode.getStyle("margin-left").toFloat()+e;this.textNode.setStyle("margin-left",""+t+"px");this.loadSubItem();this.setEvent();this.check()},loadSubItem:function(){},check:function(){if(this.selector.options.count.toInt()==1){this.checkSelectedSingle()}else{this.checkSelected()}},checkSelectedSingle:function(){var e=this.selector.options.values.filter(function(e,t){return this.data.name==e}.bind(this));if(e.length){this.selectedSingle()}},checkSelected:function(){var e=this.selector.selectedItems.filter(function(e,t){return e.data.name==this.data.name}.bind(this));if(e.length){e[0].addItem(this);this.selectedItem=e[0];this.setSelected()}},setSelected:function(){this.isSelected=true;this.node.setStyles(this.selector.css.selectorItem_selected);this.textNode.setStyles(this.selector.css.selectorItemTextNode_selected);this.actionNode.setStyles(this.selector.css.selectorItemActionNode_selected)},setEvent:function(){this.node.addEvents({mouseover:function(){this.overItem()}.bind(this),mouseout:function(){this.outItem()}.bind(this),click:function(){this.clickItem()}.bind(this)})},clickItem:function(){if(this.selector.options.count.toInt()==1){this.selectedSingle()}else{if(this.isSelected){this.unSelected()}else{this.selected()}}},overItem:function(){if(!this.isSelected){this.node.setStyles(this.selector.css.selectorItem_over);this.actionNode.setStyles(this.selector.css.selectorItemActionNode_over)}},outItem:function(){if(!this.isSelected){this.node.setStyles(this.selector.css.selectorItem);this.actionNode.setStyles(this.selector.css.selectorItemActionNode)}},selectedSingle:function(){if(!this.isSelected){if(this.selector.currentItem)this.selector.currentItem.unSelectedSingle();this.selector.currentItem=this;this.isSelected=true;this.selector.selectedItems.push(this);this.node.setStyles(this.selector.css.selectorItem_selected);this.textNode.setStyles(this.selector.css.selectorItemTextNode_selected);this.actionNode.setStyles(this.selector.css.selectorItemActionNode_selected)}else{this.unSelectedSingle()}},unSelectedSingle:function(){this.selector.currentItem=null;this.isSelected=false;this.selector.selectedItems.erase(this);this.node.setStyles(this.selector.css.selectorItem);this.textNode.setStyles(this.selector.css.selectorItemTextNode);this.actionNode.setStyles(this.selector.css.selectorItemActionNode)},selected:function(){debugger;if(this.selector.options.count==0||this.selector.selectedItems.length+1<=this.selector.options.count){this.isSelected=true;this.node.setStyles(this.selector.css.selectorItem_selected);this.textNode.setStyles(this.selector.css.selectorItemTextNode_selected);this.actionNode.setStyles(this.selector.css.selectorItemActionNode_selected);this.selectedItem=this.selector._newItemSelected(this.data,this.selector,this);this.selectedItem.check();this.selector.selectedItems.push(this.selectedItem)}else{MWF.xDesktop.notice("error",{x:"right",y:"top"},"最多可选择"+this.selector.options.count+"个选项",this.selector.node)}},unSelected:function(){this.isSelected=false;this.node.setStyles(this.selector.css.selectorItem);this.textNode.setStyles(this.selector.css.selectorItemTextNode);this.actionNode.setStyles(this.selector.css.selectorItemActionNode);if(this.selectedItem){this.selector.selectedItems.erase(this.selectedItem);this.selectedItem.items.each(function(e){if(e!=this){e.isSelected=false;e.node.setStyles(this.selector.css.selectorItem);e.textNode.setStyles(this.selector.css.selectorItemTextNode);e.actionNode.setStyles(this.selector.css.selectorItemActionNode)}}.bind(this));this.selectedItem.destroy();this.selectedItem=null}}});MWF.xApplication.Selector.Person.ItemSelected=new Class({Extends:MWF.xApplication.Selector.Person.Item,initialize:function(e,t,s){this.data=e;this.selector=t;this.container=this.selector.selectedNode;this.isSelected=false;this.items=[];if(s)this.items.push(s);this.level=0;this.load()},clickItem:function(){if(this.items.length){this.items.each(function(e){e.unSelected()})}else{this.destroy();this.selector.selectedItems.erase(this)}},overItem:function(){if(!this.isSelected){this.node.setStyles(this.selector.css.selectorItem_over);this.actionNode.setStyles(this.selector.css.selectorItemActionNode_selected_over)}},addItem:function(e){if(this.items.indexOf(e)==-1)this.items.push(e)},check:function(){if(this.selector.items.length){var e=this.selector.items.filter(function(e,t){return e.data.name==this.data.name}.bind(this));this.items=e;if(e.length){e.each(function(e){e.selectedItem=this;e.setSelected()}.bind(this))}}},destroy:function(){this.node.destroy();delete this}});MWF.xApplication.Selector.Person.ItemCategory=new Class({Extends:MWF.xApplication.Selector.Person.Item,initialize:function(e,t,s,i){this.data=e;this.selector=t;this.container=s;this.isSelected=false;this.level=i?i.toInt():1;this.load()},createNode:function(){this.node=new Element("div",{styles:this.selector.css.selectorItemCategory}).inject(this.container)},load:function(){this.createNode();this.levelNode=new Element("div",{styles:this.selector.css.selectorItemLevelNode}).inject(this.node);var e=this.level*10;this.levelNode.setStyle("width",""+e+"px");this.iconNode=new Element("div",{styles:this.selector.css.selectorItemIconNode}).inject(this.node);this._setIcon();this.actionNode=new Element("div",{styles:this.selector.options.expand?this.selector.css.selectorItemCategoryActionNode_expand:this.selector.css.selectorItemCategoryActionNode_collapse}).inject(this.node);this.textNode=new Element("div",{styles:this.selector.css.selectorItemCategoryTextNode,text:this._getShowName()}).inject(this.node);var t=this.textNode.getStyle("margin-left").toFloat()+e;this.textNode.setStyle("margin-left",""+t+"px");this.children=new Element("div",{styles:this.selector.css.selectorItemCategoryChildrenNode}).inject(this.node,"after");if(!this.selector.options.expand)this.children.setStyle("display","none");var s=this.selector._getChildrenItemIds(this.data);if(s){var i=s.length;this.childrenHeight=i*29;this.children.setStyle("height",""+this.childrenHeight+"px")}if(!this._hasChild()){this.actionNode.setStyle("background","transparent");this.textNode.setStyle("color","#777")}this.setEvent();this.check()},clickItem:function(){if(this._hasChild()){if(!this.fx){this.fx=new Fx.Tween(this.children,{duration:200})}if(!this.fx.isRunning()){var e=this.children.getStyle("display");if(e=="none"){this.children.setStyles({display:"block",height:"0px"});this.fx.start("height","0px",""+this.childrenHeight+"px");this.actionNode.setStyles(this.selector.css.selectorItemCategoryActionNode_expand)}else{if(!this.childrenHeight)this.childrenHeight=this.children.getStyle("height").toFloat();this.fx.start("height",""+this.childrenHeight+"px","0px").chain(function(){this.children.setStyles({display:"none",height:"0px"})}.bind(this));this.actionNode.setStyles(this.selector.css.selectorItemCategoryActionNode_collapse)}}}},overItem:function(){},outItem:function(){},_hasChild:function(){var e=this.selector._getChildrenItemIds(this.data);if(e)if(e.length)return true;return false}});MWF.xApplication.Selector.Person.ItemGroupCategory=new Class({Extends:MWF.xApplication.Selector.Person.ItemCategory,_getShowName:function(){return this.data.name},_setIcon:function(){this.iconNode.setStyle("background-image","url("+"/x_component_Selector/$Selector/default/icon/groupicon.png)")}});MWF.xApplication.Selector.Person.ItemRoleCategory=new Class({Extends:MWF.xApplication.Selector.Person.ItemCategory,_getShowName:function(){return this.data.name},_setIcon:function(){this.iconNode.setStyle("background-image","url("+"/x_component_Selector/$Selector/default/icon/roleicon.png)")}});
|