IdentityWidthDuty.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. MWF.xApplication.Selector = MWF.xApplication.Selector || {};
  2. MWF.xDesktop.requireApp("Selector", "Identity", null, false);
  3. MWF.xApplication.Selector.IdentityWidthDuty = new Class({
  4. Extends: MWF.xApplication.Selector.Identity,
  5. options: {
  6. "style": "default",
  7. "count": 0,
  8. "title": MWF.xApplication.Selector.LP.selectIdentity,
  9. "dutys": [],
  10. "units": [],
  11. "values": [],
  12. "zIndex": 1000,
  13. "expand": false,
  14. "exclude" : []
  15. },
  16. loadSelectItems: function(addToNext){
  17. if (this.options.dutys.length){
  18. this.options.dutys.each(function(duty){
  19. var data = {"name": duty, "id":duty};
  20. var category = this._newItemCategory("ItemCategory",data, this, this.itemAreaNode);
  21. category.loadSub();
  22. category.clickItem();
  23. // this.action.getUnitduty(function(dutyData){
  24. // var category = this._newItemCategory("ItemCategory", dutyData.data, this, this.itemAreaNode);
  25. // }.bind(this), null, duty);
  26. }.bind(this));
  27. }
  28. },
  29. search: function(){
  30. var key = this.searchInput.get("value");
  31. if (key){
  32. this.initSearchArea(true);
  33. this.searchInItems(key);
  34. }else{
  35. this.initSearchArea(false);
  36. }
  37. },
  38. listPersonByPinyin: function(node){
  39. this.searchInput.focus();
  40. var pinyin = this.searchInput.get("value");
  41. pinyin = pinyin+node.get("text");
  42. this.searchInput.set("value", pinyin);
  43. this.search();
  44. },
  45. checkLoadSelectItems: function(){
  46. if (!this.options.units.length){
  47. this.loadSelectItems();
  48. }else{
  49. this.loadSelectItems();
  50. }
  51. },
  52. _scrollEvent: function(y){
  53. return true;
  54. },
  55. _getChildrenItemIds: function(){
  56. return null;
  57. },
  58. _newItemCategory: function(type, data, selector, item, level){
  59. return new MWF.xApplication.Selector.IdentityWidthDuty[type](data, selector, item, level)
  60. },
  61. _listItemByKey: function(callback, failure, key){
  62. if (this.options.units.length) key = {"key": key, "unitList": this.options.units};
  63. this.orgAction.listIdentityByKey(function(json){
  64. if (callback) callback.apply(this, [json]);
  65. }.bind(this), failure, key);
  66. },
  67. _getItem: function(callback, failure, id, async){
  68. this.orgAction.getIdentity(function(json){
  69. if (callback) callback.apply(this, [json]);
  70. }.bind(this), failure, ((typeOf(id)==="string") ? id : id.distinguishedName), async);
  71. },
  72. _newItemSelected: function(data, selector, item){
  73. return new MWF.xApplication.Selector.IdentityWidthDuty.ItemSelected(data, selector, item)
  74. },
  75. _listItemByPinyin: function(callback, failure, key){
  76. if (this.options.units.length) key = {"key": key, "unitList": this.options.units};
  77. this.orgAction.listIdentityByPinyin(function(json){
  78. if (callback) callback.apply(this, [json]);
  79. }.bind(this), failure, key);
  80. },
  81. _newItem: function(data, selector, container, level){
  82. return new MWF.xApplication.Selector.IdentityWidthDuty.Item(data, selector, container, level);
  83. },
  84. _newItemSearch: function(data, selector, container, level){
  85. return new MWF.xApplication.Selector.IdentityWidthDuty.SearchItem(data, selector, container, level);
  86. }
  87. //_listItemNext: function(last, count, callback){
  88. // this.action.listRoleNext(last, count, function(json){
  89. // if (callback) callback.apply(this, [json]);
  90. // }.bind(this));
  91. //}
  92. });
  93. MWF.xApplication.Selector.IdentityWidthDuty.Item = new Class({
  94. Extends: MWF.xApplication.Selector.Identity.Item,
  95. _getShowName: function(){
  96. return this.data.name;
  97. },
  98. _getTtiteText: function(){
  99. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  100. },
  101. _setIcon: function(){
  102. this.iconNode.setStyle("background-image", "url("+"/x_component_Selector/$Selector/default/icon/personicon.png)");
  103. }
  104. });
  105. MWF.xApplication.Selector.IdentityWidthDuty.SearchItem = new Class({
  106. Extends: MWF.xApplication.Selector.Identity.Item,
  107. _getShowName: function(){
  108. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  109. }
  110. });
  111. MWF.xApplication.Selector.IdentityWidthDuty.ItemSelected = new Class({
  112. Extends: MWF.xApplication.Selector.Identity.ItemSelected,
  113. _getShowName: function(){
  114. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  115. },
  116. _getTtiteText: function(){
  117. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  118. },
  119. _setIcon: function(){
  120. this.iconNode.setStyle("background-image", "url("+"/x_component_Selector/$Selector/default/icon/personicon.png)");
  121. }
  122. });
  123. MWF.xApplication.Selector.IdentityWidthDuty.ItemCategory = new Class({
  124. Extends: MWF.xApplication.Selector.Identity.ItemCategory,
  125. createNode: function(){
  126. this.node = new Element("div", {
  127. "styles": this.selector.css.selectorItemCategory_department
  128. }).inject(this.container);
  129. },
  130. _getShowName: function(){
  131. return this.data.name;
  132. },
  133. _setIcon: function(){
  134. this.iconNode.setStyle("background-image", "url("+"/x_component_Selector/$Selector/default/icon/companyicon.png)");
  135. },
  136. clickItem: function(){
  137. if (this._hasChild()){
  138. var firstLoaded = !this.loaded;
  139. this.loadSub(function(){
  140. if( firstLoaded ){
  141. this.children.setStyles({"display": "block", "height": "auto"});
  142. this.actionNode.setStyles(this.selector.css.selectorItemCategoryActionNode_expand);
  143. }else{
  144. var display = this.children.getStyle("display");
  145. if (display === "none"){
  146. this.children.setStyles({"display": "block", "height": "auto"});
  147. this.actionNode.setStyles(this.selector.css.selectorItemCategoryActionNode_expand);
  148. }else{
  149. this.children.setStyles({"display": "none", "height": "0px"});
  150. this.actionNode.setStyles(this.selector.css.selectorItemCategoryActionNode_collapse);
  151. }
  152. }
  153. }.bind(this));
  154. }
  155. },
  156. loadSub: function(callback){
  157. if (!this.loaded){
  158. if (this.selector.options.units.length){
  159. var action = MWF.Actions.get("x_organization_assemble_express");
  160. var data = {"name":this.data.name, "unit":""};
  161. this.selector.options.units.each(function(u){
  162. if (typeOf(u)==="string"){
  163. data.unit = u;
  164. }else{
  165. data.unit = u.distinguishedName || u.unique || u.id || u.levelName
  166. }
  167. action.getDuty(data, function(json){
  168. json.data.each(function(idSubData){
  169. if( !this.selector.isExcluded( idSubData ) ) {
  170. var item = this.selector._newItem(idSubData, this.selector, this.children, this.level + 1);
  171. this.selector.items.push(item);
  172. }
  173. }.bind(this));
  174. }.bind(this));
  175. }.bind(this));
  176. this.loaded = true;
  177. if (callback) callback();
  178. }else{
  179. this.selector.orgAction.listIdentityWithDuty(function(json){
  180. json.data.each(function(idSubData){
  181. if( !this.selector.isExcluded( idSubData ) ) {
  182. var item = this.selector._newItem(idSubData, this.selector, this.children, this.level + 1);
  183. this.selector.items.push(item);
  184. }
  185. }.bind(this));
  186. this.loaded = true;
  187. if (callback) callback();
  188. }.bind(this), null, this.data.name);
  189. }
  190. }else{
  191. if (callback) callback( );
  192. }
  193. },
  194. _hasChild: function(){
  195. return true;
  196. }
  197. });
  198. MWF.xApplication.Selector.IdentityWidthDuty.Filter = new Class({
  199. Implements: [Options, Events],
  200. options: {
  201. "style": "default",
  202. "units": [],
  203. "dutys": []
  204. },
  205. initialize: function(value, options){
  206. this.setOptions(options);
  207. this.value = value;
  208. this.orgAction = MWF.Actions.get("x_organization_assemble_control");
  209. },
  210. getList: function(callback){
  211. if (false && this.list){
  212. if (callback) callback();
  213. }else{
  214. this.list = [];
  215. MWF.require("MWF.widget.PinYin", function(){
  216. this.options.dutys.each(function(duty){
  217. if (this.options.units.length){
  218. var action = MWF.Actions.get("x_organization_assemble_express");
  219. var data = {"name":duty, "unit":""};
  220. this.options.units.each(function(u){
  221. if (typeOf(u)==="string"){
  222. data.unit = u;
  223. }else{
  224. data.unit = u.distinguishedName || u.unique || u.id || u.levelName
  225. }
  226. action.getDuty(data, function(json){
  227. json.data.each(function(d){
  228. d.pinyin = d.name.toPY().toLowerCase();
  229. d.firstPY = d.name.toPYFirst().toLowerCase();
  230. this.list.push(d);
  231. }.bind(this));
  232. }.bind(this), null, false);
  233. }.bind(this));
  234. }else{
  235. this.orgAction.listIdentityWithDuty(function(json){
  236. json.data.each(function(d){
  237. d.pinyin = d.name.toPY().toLowerCase();
  238. d.firstPY = d.name.toPYFirst().toLowerCase();
  239. this.list.push(d);
  240. }.bind(this));
  241. }.bind(this), null, duty, false);
  242. }
  243. }.bind(this));
  244. if (callback) callback();
  245. }.bind(this));
  246. }
  247. },
  248. filter: function(value, callback){
  249. this.value = value;
  250. this.getList(function(){
  251. var data = this.list.filter(function(d){
  252. var text = d.name+"#"+d.pinyin+"#"+d.firstPY;
  253. return (text.indexOf(this.value)!=-1);
  254. }.bind(this));
  255. if (callback) callback(data);
  256. }.bind(this));
  257. }
  258. });