Unit.js 11 KB

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