Unit.js 12 KB

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