Unit.js 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088
  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. "units": [],
  9. //"unitTypes": [],
  10. "values": [],
  11. "zIndex": 1000,
  12. "expand": true,
  13. "exclude" : [],
  14. "expandSubEnable" : true, //是否允许展开下一层
  15. "selectAllEnable" : true, //分类是否允许全选下一层
  16. "selectType" : "unit"
  17. },
  18. setInitTitle: function(){
  19. this.setOptions({"title": MWF.xApplication.Selector.LP.selectUnit});
  20. },
  21. _init : function(){
  22. this.selectType = "unit";
  23. this.className = "Unit";
  24. },
  25. loadSelectItems: function(addToNext){
  26. if( this.options.disabled ){
  27. this.afterLoadSelectItem();
  28. return;
  29. }
  30. this._loadSelectItems();
  31. },
  32. _loadSelectItems: function(){
  33. var afterLoadSelectItemFun = this.afterLoadSelectItem.bind(this);
  34. if (this.options.units.length){
  35. this.expandSubEnable = this.options.expandSubEnable || this.options.forceShowSubEnable || this.options.firstLevelSelectable;
  36. var unitList = [];
  37. for( var i=0 ; i<this.options.units.length; i++ ){
  38. var unit = this.options.units[i];
  39. if( typeOf( unit ) === "string" ){
  40. unitList.push(unit);
  41. }else if( typeOf(unit)==="object"){
  42. unitList.push(unit.distinguishedName || unit.unique || unit.levelName || unit.id);
  43. }
  44. }
  45. if( this.isCheckStatusOrCount() ) {
  46. this.loadingCount = "wait";
  47. this.loadCount( unitList );
  48. }
  49. o2.Actions.load("x_organization_assemble_express").UnitAction.listObject( {"unitList" : unitList} , function (json) {
  50. debugger;
  51. if (json.data.length){
  52. json.data.each( function(data){
  53. var item;
  54. if( this.options.expandSubEnable ) {
  55. if( this.options.firstLevelSelectable ){
  56. item = this._newItem(data, this, this.itemAreaNode );
  57. this.items.push( item );
  58. this.subItems.push(item);
  59. }else{
  60. if (data.subDirectUnitCount){
  61. var category = this._newItemCategory("ItemCategory", data, this, this.itemAreaNode );
  62. this.subCategorys.push(category);
  63. this.subCategoryMap[data.levelName] = category;
  64. }
  65. }
  66. }else{
  67. item = this._newItem(data, this, this.itemAreaNode );
  68. this.items.push( item );
  69. this.subItems.push(item);
  70. }
  71. }.bind(this));
  72. }
  73. afterLoadSelectItemFun();
  74. }.bind(this), afterLoadSelectItemFun );
  75. }else{
  76. this.expandSubEnable = this.options.expandSubEnable || this.options.forceShowSubEnable;
  77. this.orgAction.listTopUnit(function(json){
  78. // if( this.isCheckStatusOrCount() ) {
  79. // this.loadingCount = "wait";
  80. //
  81. // unitList = json.data.filter(function (data) {
  82. // return !this.isExcluded( data );
  83. // }).map(function(data){
  84. // return unit.id || unit.distinguishedName || unit.unique || unit.levelName
  85. // }.bind(this)).clean();
  86. //
  87. // this.loadCount( unitList );
  88. // }
  89. json.data.each(function(data){
  90. if( !this.isExcluded( data ) ) {
  91. var unit = this._newItem(data, this, this.itemAreaNode, 1);
  92. this.items.push( unit );
  93. this.subItems.push(unit);
  94. }
  95. }.bind(this));
  96. afterLoadSelectItemFun();
  97. }.bind(this));
  98. }
  99. },
  100. _scrollEvent: function(y){
  101. return true;
  102. },
  103. _getChildrenItemIds: function(){
  104. return null;
  105. },
  106. _newItemCategory: function(type, data, selector, item, level, category, delay){
  107. return new MWF.xApplication.Selector.Unit[type](data, selector, item, level, category, delay)
  108. },
  109. _listItemByKey: function(callback, failure, key){
  110. if( this.options.expandSubEnable ){
  111. if (this.options.units.length){
  112. var units = [];
  113. this.options.units.each(function(u){
  114. if (typeOf(u)==="string"){
  115. units.push(u);
  116. }
  117. if (typeOf(u)==="object"){
  118. units.push(u.distinguishedName);
  119. }
  120. });
  121. key = {"key": key, "unitList": units};
  122. }
  123. this.orgAction.listUnitByKey(function(json){
  124. if (callback) callback.apply(this, [json]);
  125. }.bind(this), failure, key);
  126. }else{
  127. if (key){
  128. this.initSearchArea(true);
  129. this.searchInItems(key);
  130. }else{
  131. this.initSearchArea(false);
  132. }
  133. }
  134. },
  135. _getItem: function(callback, failure, id, async){
  136. this.orgAction.getUnit(function(json){
  137. if (callback) callback.apply(this, [json]);
  138. }.bind(this), failure, ((typeOf(id)==="string") ? id : id.distinguishedName), async);
  139. },
  140. _newItemSelected: function(data, selector, item, selectedNode){
  141. return new MWF.xApplication.Selector.Unit.ItemSelected(data, selector, item, selectedNode)
  142. },
  143. _listItemByPinyin: function(callback, failure, key){
  144. if( this.options.expandSubEnable ){
  145. if (this.options.units.length){
  146. var units = [];
  147. this.options.units.each(function(u){
  148. if (typeOf(u)==="string"){
  149. units.push(u);
  150. }
  151. if (typeOf(u)==="object"){
  152. units.push(u.distinguishedName);
  153. }
  154. });
  155. key = {"key": key, "unitList": units};
  156. }
  157. this.orgAction.listUnitByPinyininitial(function(json){
  158. if (callback) callback.apply(this, [json]);
  159. }.bind(this), failure, key);
  160. }else{
  161. if (key){
  162. this.initSearchArea(true);
  163. this.searchInItems(key);
  164. }else{
  165. this.initSearchArea(false);
  166. }
  167. }
  168. },
  169. _newItem: function(data, selector, container, level, category, delay){
  170. return new MWF.xApplication.Selector.Unit.Item(data, selector, container, level, category, delay);
  171. },
  172. _newItemSearch: function(data, selector, container, level){
  173. return new MWF.xApplication.Selector.Unit.SearchItem(data, selector, container, level);
  174. },
  175. loadCount: function( unitList ){
  176. var check = function () {
  177. this.loadingCount = "ready";
  178. this.checkCountAndStatus();
  179. this.loadingCount = "done";
  180. }.bind(this);
  181. var unitLoaded, selectedUnitLoaded, excludeUnitLoaded;
  182. var unitTree;
  183. this.unitExcludedCount = {};
  184. this.unitSelectedCount = {};
  185. debugger;
  186. var caculate = function () {
  187. if (unitLoaded && selectedUnitLoaded && excludeUnitLoaded) {
  188. if( !this.allUnitObject )this.allUnitObject = {};
  189. if( unitTree && unitTree.length ){
  190. unitTree.each( function ( tree ) {
  191. if( !this.allUnitObject[ tree.levelName ] ){
  192. this.caculateNestedSubCount(tree)
  193. }
  194. }.bind(this) );
  195. check();
  196. }
  197. }
  198. }.bind(this);
  199. this.getUnitCountMap(this.options.values, function (map) {
  200. this.unitSelectedCount = map;
  201. selectedUnitLoaded = true;
  202. caculate();
  203. }.bind(this));
  204. this.getUnitCountMap(this.options.exclude, function (map) {
  205. this.unitExcludedCount = map;
  206. excludeUnitLoaded = true;
  207. caculate();
  208. }.bind(this));
  209. o2.Actions.load("x_organization_assemble_express").UnitAction.listWithUnitTree({"unitList": unitList}, function (json) {
  210. unitTree = json.data;
  211. unitLoaded = true;
  212. caculate();
  213. }.bind(this))
  214. },
  215. getUnitCountMap : function( identityList, callback ){
  216. var result = {};
  217. this.listUnitObject( identityList, function ( identityObjectList ) {
  218. identityObjectList.each(function (id) {
  219. if (id && id.levelName) {
  220. result[id.levelName] = (result[id.levelName] || 0) + 1;
  221. }
  222. }.bind(this));
  223. if( callback )callback( result );
  224. })
  225. },
  226. listUnitObject : function( unitList, callback ){
  227. var list = [];
  228. unitList.each( function (d) {
  229. if( typeOf( d ) === "object"){
  230. if( !d.levelName || !d.distinguishedName )list.push( d.distinguishedName || d.unique || d.id )
  231. }else{
  232. list.push( d )
  233. }
  234. });
  235. if( list.length > 0 ){
  236. o2.Actions.load("x_organization_assemble_express").UnitAction.listObject({ unitList : list }, function (json) {
  237. var map = {};
  238. json.data.each( function (d) { map[ d.matchKey ] = d; });
  239. var unitObjectList = [];
  240. unitList.each( function (d) {
  241. var key = typeOf( d ) === "object" ? ( d.distinguishedName || d.unique || d.id ) : d;
  242. unitObjectList.push( map[key] ? map[key] : d );
  243. });
  244. if( callback )callback( unitList );
  245. }.bind(this))
  246. }else{
  247. if( callback )callback( unitList );
  248. }
  249. },
  250. caculateNestedSubCount : function ( tree ) {
  251. if( this.isExcluded( tree ) )return;
  252. var count;
  253. var selectedCount;
  254. if(!this.allUnitObject[ tree.levelName ]){
  255. this.allUnitObject[ tree.levelName ] = tree;
  256. count = tree.subDirectUnitCount;
  257. if( this.unitExcludedCount && this.unitExcludedCount[ tree.levelName ] ){
  258. count = (count || 0) - this.unitExcludedCount[ tree.levelName ];
  259. }
  260. selectedCount = 0;
  261. if( this.unitSelectedCount && this.unitSelectedCount[ tree.levelName ] ){
  262. selectedCount = this.unitSelectedCount[ tree.levelName ];
  263. }
  264. }else{
  265. count = this.allUnitObject[ tree.levelName ].subNestedUnitCount || 0;
  266. selectedCount = this.allUnitObject[ tree.levelName ].selectedNestedUnitCount || 0;
  267. }
  268. var nameList = tree.levelName.split("/");
  269. var names = [];
  270. nameList.each( function (n) {
  271. names.push( n );
  272. var levelName = names.join("/");
  273. var unitObject = this.allUnitObject[levelName];
  274. if( unitObject ){
  275. unitObject.subNestedUnitCount = (unitObject.subNestedUnitCount || 0) + count;
  276. unitObject.selectedNestedUnitCount = (unitObject.selectedNestedUnitCount || 0) + selectedCount;
  277. }
  278. }.bind(this));
  279. tree.subUnits.each( function (unit) {
  280. this.caculateNestedSubCount( unit )
  281. }.bind(this))
  282. },
  283. _addSelectedCount: function( itemOrItemSelected, count ){
  284. var itemData = itemOrItemSelected.data;
  285. [itemOrItemSelected.data.levelName].each(function(levelName){
  286. if(!levelName)return;
  287. var list = levelName.split("/");
  288. var nameList = [];
  289. var subCategoryMapList = [this.subCategoryMap];
  290. for (var j = 0; j < list.length; j++) {
  291. nameList.push(list[j]);
  292. var name = nameList.join("/");
  293. var maplist = [];
  294. subCategoryMapList.each(function(subCategoryMap){
  295. if ( subCategoryMap[name] ) {
  296. var category = subCategoryMap[name];
  297. category._addSelectedCount(count);
  298. maplist.push( category.subCategoryMap ) ;
  299. }
  300. });
  301. subCategoryMapList = subCategoryMapList.concat(maplist);
  302. if( this.loadingCount === "done" ){
  303. var obj = this.allUnitObject[name];
  304. if (obj) {
  305. obj.selectedNestedUnitCount = obj.selectedNestedUnitCount + count;
  306. }
  307. }
  308. }
  309. }.bind(this));
  310. }
  311. });
  312. MWF.xApplication.Selector.Unit.Item = new Class({
  313. Extends: MWF.xApplication.Selector.Identity.Item,
  314. load : function(){
  315. if( this.selector.isFlatCategory ){
  316. if( !this.justItem && this.selector.options.expandSubEnable && this.data.subDirectUnitCount ){
  317. this.loadCategoryForFlatCategory();
  318. }else if(!this.ignoreItem){
  319. this.loadForNormal(true);
  320. }
  321. }else{
  322. this.loadForNormal();
  323. }
  324. },
  325. loadForNormal : function( isNotLoadSubItem, container ){
  326. this.selector.fireEvent("queryLoadItem",[this]);
  327. if( !this.node )this.node = new Element("div", {
  328. "styles": this.selector.css.selectorItem
  329. }).inject(container || this.container);
  330. this.levelNode = new Element("div", {
  331. "styles": this.selector.css.selectorItemLevelNode
  332. }).inject(this.node);
  333. var indent = this.selector.options.level1Indent + (this.level-1)*this.selector.options.indent;
  334. if(this.selector.options.style === "flow"){
  335. if (this.level === 1) {
  336. indent = 26;
  337. } else {
  338. indent = 26 + ( this.level - 1 ) * this.selector.options.indent;
  339. }
  340. }
  341. this.levelNode.setStyle("width", ""+indent+"px");
  342. this.iconNode = new Element("div", {
  343. "styles": this.selector.css.selectorItemIconNode
  344. }).inject(this.node);
  345. this._setIcon();
  346. this.actionNode = new Element("div", {
  347. "styles": this.selector.css.selectorItemActionNode
  348. }).inject(this.node);
  349. if( ( this.selector.options.count.toInt() === 1 || this.selector.options.noSelectedContainer ) && this.selector.css.selectorItemActionNode_single ){
  350. this.actionNode.setStyles( this.selector.css.selectorItemActionNode_single );
  351. }
  352. this.textNode = new Element("div", {
  353. "styles": this.selector.css.selectorItemTextNode,
  354. "text": this._getShowName(),
  355. "title": this._getTtiteText()
  356. }).inject(this.node);
  357. this.textNode.store("indent", indent);
  358. var m = this.textNode.getStyle("margin-left").toFloat()+indent;
  359. this.textNode.setStyle("margin-left", ""+m+"px");
  360. if(this.postLoad)this.postLoad();
  361. if(!isNotLoadSubItem)this.loadSubItem();
  362. this.setEvent();
  363. this.check();
  364. if(this.afterLoad)this.afterLoad();
  365. this.selector.fireEvent("postLoadItem",[this]);
  366. },
  367. _getShowName: function(){
  368. return (this.isShowLevelName && this.data.levelName) ? this.data.levelName : this.data.name;
  369. },
  370. _getTtiteText: function(){
  371. return this.data.levelName || this.data.name;
  372. },
  373. _setIcon: function(){
  374. var style = this.selector.options.style;
  375. this.iconNode.setStyle("background-image", "url("+"../x_component_Selector/$Selector/"+style+"/icon/departmenticon.png)");
  376. },
  377. loadSubItem: function(){
  378. if( !this.selector.options.expandSubEnable )return;
  379. this.isExpand = (this.selector.options.expand);
  380. if ( this._hasChild() || this.selector.options.expandEmptyCategory ){
  381. if (this.selector.options.expand){
  382. if( typeOf(this.selector.options.defaultExpandLevel) === "number" ){
  383. if (this.level <= this.selector.options.defaultExpandLevel && this._hasChild() ){
  384. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_expand);
  385. this.loadSubItems();
  386. }else{
  387. this.isExpand = false;
  388. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_collapse);
  389. }
  390. }else if (this.level===1 && this._hasChild() ){
  391. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_expand);
  392. this.loadSubItems();
  393. }else{
  394. this.isExpand = false;
  395. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_collapse);
  396. }
  397. }else{
  398. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_collapse);
  399. }
  400. this.levelNode.addEvent("click", function(e){
  401. if (this.isExpand){
  402. this.selector.fireEvent("collapse", [this] );
  403. this.children.setStyle("display", "none");
  404. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_collapse);
  405. this.isExpand = false;
  406. }else{
  407. this.selector.fireEvent("expand", [this] );
  408. this.loadSubItems();
  409. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_expand);
  410. this.isExpand = true;
  411. }
  412. e.stopPropagation();
  413. }.bind(this));
  414. if( this.selector.css.selectorItemLevelNode_expand_over && this.selector.css.selectorItemLevelNode_collapse_over ){
  415. this.levelNode.addEvents({
  416. mouseover : function(e){
  417. var styles = this.isExpand ? this.selector.css.selectorItemLevelNode_expand_over : this.selector.css.selectorItemLevelNode_collapse_over;
  418. this.levelNode.setStyles(styles);
  419. }.bind(this),
  420. mouseout : function(e){
  421. var styles = this.isExpand ? this.selector.css.selectorItemLevelNode_expand : this.selector.css.selectorItemLevelNode_collapse;
  422. this.levelNode.setStyles(styles);
  423. }.bind(this)
  424. })
  425. }
  426. if( !this.selectAllNode && this.selector.options.count.toInt() !== 1 &&
  427. ( this.selector.options.style!=="blue_flat" && this.selector.options.style!=="blue_flat_mobile")){
  428. this.selectAllNode = new Element("div", {
  429. "styles": this.selector.css.selectorItemCategoryActionNode_selectAll,
  430. "title" : MWF.SelectorLP.selectChildren
  431. }).inject(
  432. this.selector.options.style === "flow" ? this.iconNode : this.textNode,
  433. "before"
  434. );
  435. this.selectAllNode.addEvent( "click", function(ev){
  436. if( this.isSelectedAll ){
  437. // this.unselectAll(ev);
  438. this.selector.options.selectAllRange === "all" ? this.unselectAllNested(ev, null, true) : this.unselectAll(ev, null, true);
  439. this.selector.fireEvent("unselectCatgory",[this]);
  440. this.selector.fireEvent("unselectCategory",[this])
  441. }else{
  442. // this.selectAll(ev);
  443. if( this.selector.options.selectAllRange === "all" ){
  444. var node = new Element("div.categorySelectedNode").inject( this.selector.selectedNode );
  445. this.selectAllNested(ev, true, node)
  446. }else{
  447. this.selectAll(ev ,true)
  448. }
  449. this.selector.fireEvent("selectCatgory",[this]);
  450. this.selector.fireEvent("selectCategory",[this])
  451. }
  452. ev.stopPropagation();
  453. }.bind(this));
  454. if( this.selector.css.selectorItemCategoryActionNode_selectAll_over ){
  455. this.selectAllNode.addEvents( {
  456. "mouseover" : function(ev){
  457. if( !this.isSelectedAll )this.selectAllNode.setStyles( this.selector.css.selectorItemCategoryActionNode_selectAll_over );
  458. //ev.stopPropagation();
  459. }.bind(this),
  460. "mouseout" : function(ev){
  461. if( !this.isSelectedAll )this.selectAllNode.setStyles( this.selector.css.selectorItemCategoryActionNode_selectAll );
  462. //ev.stopPropagation();
  463. }.bind(this)
  464. })
  465. }
  466. }
  467. }else if( !this.selectAllNode && this.selector.options.count.toInt() !== 1 && this.selector.options.style === "flow" ){
  468. new Element("div", {
  469. "styles": this.selector.css.selectorItemCategoryActionNode_empty
  470. }).inject(
  471. this.selector.options.style === "flow" ? this.iconNode : this.textNode,
  472. "before"
  473. );
  474. }
  475. //this.actionNode.setStyles((this.selector.options.expand) ? this.selector.css.selectorItemCategoryActionNode_expand : this.selector.css.selectorItemCategoryActionNode_collapse);
  476. },
  477. unselectAll : function(ev, exclude, checkValid){
  478. //( this.subItems || [] ).each( function(item){
  479. // if(item.isSelected)item.unSelected();
  480. //}.bind(this));
  481. var excludeList = exclude || [];
  482. if( exclude && typeOf(exclude) !== "array" )excludeList = [exclude];
  483. ( this.subItems || [] ).each( function(item){
  484. if(item.isSelected && !excludeList.contains(item) ){
  485. item.unSelected( checkValid );
  486. }
  487. }.bind(this));
  488. if( this.selectAllNode ){
  489. if( this.selector.isFlatCategory ){
  490. this.selectAllNode.setStyles( this.selector.css.flatCategory_selectAll );
  491. }else if(this.selector.css.selectorItemCategoryActionNode_selectAll){
  492. this.selectAllNode.setStyles( this.selector.css.selectorItemCategoryActionNode_selectAll );
  493. }
  494. }
  495. this.isSelectedAll = false;
  496. },
  497. unselectAllNested : function( ev, exclude, checkValid ){
  498. this.unselectAll(ev, exclude, checkValid );
  499. if( this.subCategorys && this.subCategorys.length ){
  500. this.subCategorys.each( function( category ){
  501. if(category.unselectAllNested)category.unselectAllNested( ev, exclude, checkValid )
  502. })
  503. }
  504. if( this.subItems && this.subItems.length ){
  505. this.subItems.each( function( item ){
  506. if(item.unselectAllNested)item.unselectAllNested( ev, exclude, checkValid )
  507. })
  508. }
  509. },
  510. selectAllNested : function(ev, checkValid, selectedNode){
  511. var node;
  512. if( selectedNode )node = new Element("div.categorySelectedNode").inject( selectedNode );
  513. this.selectAll(ev, checkValid, node, function () {
  514. if( this.subCategorys && this.subCategorys.length ){
  515. this.subCategorys.each( function( category ){
  516. if(selectedNode)var node = new Element("div.categorySelectedNode").inject( selectedNode );
  517. if(category.selectAllNested)category.selectAllNested(ev, checkValid, node)
  518. })
  519. }
  520. if( this.subItems && this.subItems.length ){
  521. this.subItems.each( function( item ){
  522. if(selectedNode)var node = new Element("div.categorySelectedNode").inject( selectedNode );
  523. if(item.selectAllNested)item.selectAllNested(ev, checkValid, node)
  524. })
  525. }
  526. }.bind(this));
  527. },
  528. selectAll: function(ev, checkValid, selectedNode, callback){
  529. if( this.loaded || this.selector.isFlatCategory ){
  530. this._selectAll( ev, checkValid, selectedNode );
  531. if(callback)callback();
  532. }else{
  533. this.loadSubItems(function(){
  534. this._selectAll( ev, checkValid, selectedNode );
  535. if(callback)callback();
  536. }.bind(this));
  537. this.levelNode.setStyles(this.selector.css.selectorItemLevelNode_expand);
  538. this.isExpand = true;
  539. }
  540. },
  541. _selectAll : function( ev, checkValid, selectedNode ){
  542. if( !this.subItems || !this.subItems.length )return;
  543. var count = this.selector.options.maxCount || this.selector.options.count;
  544. if (!count) count = 0;
  545. var selectedSubItemCount = 0;
  546. this.subItems.each( function(item){
  547. if(item.isSelected)selectedSubItemCount++
  548. }.bind(this));
  549. if ((count.toInt()===0) || (this.selector.selectedItems.length+(this.subItems.length-selectedSubItemCount))<=count){
  550. var doSelectAll = function () {
  551. var checkedCount = 0;
  552. this.subItems.each( function(item){
  553. if(!item.isSelected && !item.disabled )item.selected(false, function () {
  554. checkedCount++;
  555. if( this.subItems.length === checkedCount ){
  556. if( checkValid )this.selector.fireEvent("valid", [this.selector, this]);
  557. }
  558. }.bind(this), selectedNode);
  559. }.bind(this));
  560. if( this.selectAllNode ){
  561. if( this.selector.isFlatCategory ){
  562. this.selectAllNode.setStyles( this.selector.css.flatCategory_selectAll_selected );
  563. }else if(this.selector.css.selectorItemCategoryActionNode_selectAll_selected){
  564. this.selectAllNode.setStyles( this.selector.css.selectorItemCategoryActionNode_selectAll_selected );
  565. }
  566. }
  567. this.isSelectedAll = true;
  568. }.bind(this);
  569. if( this._beforeSelectAll ){
  570. this._beforeSelectAll( doSelectAll );
  571. }else{
  572. doSelectAll();
  573. }
  574. }else{
  575. MWF.xDesktop.notice("error", {x: "right", y:"top"}, MWF.SelectorLP.selectItemMaxText.replace("{count}", count), this.node);
  576. }
  577. },
  578. checkSelectAll : function(){
  579. if( this.isSelectedAll )return;
  580. if( !this.selectAllNode )return;
  581. if( !this.subItems )return;
  582. var isAllItemSelected = true;
  583. for( var i=0; i< this.subItems.length; i++ ){
  584. if( !this.subItems[i].isSelected ){
  585. isAllItemSelected = false;
  586. break;
  587. }
  588. }
  589. if( isAllItemSelected ){
  590. if( this.selector.isFlatCategory ){
  591. this.selectAllNode.setStyles( this.selector.css.flatCategory_selectAll_selected );
  592. }else if( this.selector.css.selectorItemCategoryActionNode_selectAll_selected ){
  593. this.selectAllNode.setStyles( this.selector.css.selectorItemCategoryActionNode_selectAll_selected );
  594. }
  595. this.isSelectedAll = true;
  596. }
  597. },
  598. checkUnselectAll : function(){
  599. if( !this.isSelectedAll )return;
  600. if( !this.selectAllNode )return;
  601. if( ! this.subItems )return;
  602. var hasSelectedItem = false;
  603. for( var i=0; i< this.subItems.length; i++ ){
  604. if( this.subItems[i].isSelected ){
  605. hasSelectedItem = true;
  606. break;
  607. }
  608. }
  609. if( !hasSelectedItem ){
  610. if( this.selector.isFlatCategory ){
  611. this.selectAllNode.setStyles( this.selector.css.flatCategory_selectAll );
  612. }else if( this.selector.css.selectorItemCategoryActionNode_selectAll ){
  613. this.selectAllNode.setStyles( this.selector.css.selectorItemCategoryActionNode_selectAll );
  614. }
  615. this.isSelectedAll = false;
  616. }
  617. },
  618. loadSubItems: function( callback ){
  619. if (!this.loaded && !this.loading){
  620. this.loading = true;
  621. if (!this.children){
  622. this.children = new Element("div", {
  623. "styles": this.selector.css.selectorItemCategoryChildrenNode
  624. }).inject(this.node, "after");
  625. }
  626. this.children.setStyle("display", "block");
  627. // if (!this.selector.options.expand) this.children.setStyle("display", "none");
  628. this.selector.orgAction.listSubUnitDirect(function(subJson){
  629. subJson.data.each(function(subData){
  630. if( !this.selector.isExcluded( subData ) ) {
  631. var category = this.selector._newItem(subData, this.selector, this.children, this.level + 1, this);
  632. this.selector.items.push( category );
  633. if( !this.subItems )this.subItems = [];
  634. this.subItems.push( category );
  635. }
  636. }.bind(this));
  637. this.loaded = true;
  638. this.loading = false;
  639. if(callback)callback();
  640. }.bind(this), null, this.data.distinguishedName);
  641. }else{
  642. this.children.setStyle("display", "block");
  643. }
  644. },
  645. getData: function(callback){
  646. if (callback) callback();
  647. },
  648. postLoad : function(){
  649. if( this.selector.options.style === "blue_flat" ) {
  650. if (this.level === 1) {
  651. var indent = 26;
  652. this.levelNode.setStyle("width", "" + indent + "px");
  653. } else {
  654. var indent = 26 + ( this.level - 1 ) * this.selector.options.indent;
  655. this.levelNode.setStyle("width", "" + indent + "px");
  656. }
  657. }
  658. },
  659. loadCategoryForFlatCategory : function(){
  660. this.selector.fireEvent("queryLoadCategory",[this]);
  661. if( !this.flatCategoryItemNode ){
  662. this.flatCategoryItemNode = new Element("div.flatCategoryItemNode", {
  663. "styles": this.selector.css.flatCategoryItemNode,
  664. "title" : this._getTtiteText()
  665. });
  666. this.flatCategoryItemNode.store( "category", this );
  667. this.flatCategoryItemNode.store( "dn", this.data.distinguishedName );
  668. this.flatCategoryItemTextNode = new Element("div", {
  669. "styles": this.selector.css.flatCategoryItemTextNode,
  670. "text": this._getShowName(),
  671. "title": this._getTtiteText()
  672. }).inject(this.flatCategoryItemNode);
  673. }
  674. this.children = new Element("div", {
  675. "styles": this.selector.css.selectorItemCategoryChildrenNode
  676. }).inject(this.selector.itemAreaNode);
  677. this.children.setStyle("display", "none");
  678. if( this.level === 1 ){
  679. this.loadForNormal(true, this.children);
  680. }
  681. if( !this.selectAllNode && this.selector.options.count.toInt() !== 1 ){
  682. var selectAllWrap = new Element("div",{
  683. styles : this.selector.css.flatCategory_selectAllWrap
  684. }).inject(this.children);
  685. this.selectAllNode = new Element("div", {
  686. "styles": this.selector.css.flatCategory_selectAll,
  687. "text" : MWF.SelectorLP.selectAll
  688. }).inject(selectAllWrap);
  689. this.selectAllNode.addEvent( "click", function(ev){
  690. if( this.isSelectedAll ){
  691. this.unselectAll(ev);
  692. this.selector.fireEvent("unselectCatgory",[this]);
  693. this.selector.fireEvent("unselectCategory",[this])
  694. }else{
  695. this.selectAll(ev);
  696. this.selector.fireEvent("selectCatgory",[this]);
  697. this.selector.fireEvent("selectCategory",[this]);
  698. }
  699. ev.stopPropagation();
  700. }.bind(this));
  701. }
  702. //this.loadForNormal(true, this.children);
  703. this.flatCategoryItemNode.addEvents({
  704. //"mouseover": function(){
  705. // if (!this.isSelected )this.node.setStyles(this.selector.css.flatCategoryItemNode_over );
  706. //}.bind(this),
  707. //"mouseout": function(){
  708. // if (!this.isSelected )this.node.setStyles(this.selector.css.flatCategoryItemNode );
  709. //}.bind(this),
  710. "click": function(){
  711. if( this.selector.currentFlatCategory === this )return;
  712. if( this.selector.currentFlatCategory ){
  713. this.selector.currentFlatCategory.clickFlatCategoryItem(null, true); //取消原来选择的
  714. }
  715. this.selector.currentFlatCategory = this;
  716. this.clickFlatCategoryItem();
  717. }.bind(this)
  718. });
  719. //this.setEvent();
  720. var isCreateSubCategoryListNode = this.data.subDirectUnitCount ? this.data.subDirectUnitCount : true;
  721. var nodeContainer;
  722. if( this.nodeContainer ){
  723. nodeContainer = this.nodeContainer;
  724. }else{
  725. nodeContainer = (this.category && this.category.subCategoryListNode) ? this.category.subCategoryListNode : null;
  726. }
  727. this.subCategoryListNode = this.selector.addFlatCategoryItem( this.flatCategoryItemNode, this.data.subDirectUnitCount, nodeContainer, isCreateSubCategoryListNode );
  728. //this.check();
  729. if( this.loadCategoryChildren )this.loadCategoryChildren();
  730. //if(this.postLoad)this.postLoad();
  731. //this.setEvent();
  732. //this.check();
  733. this.selector.fireEvent("postLoadCategory",[this]);
  734. },
  735. clickFlatCategoryItem : function( callback, hidden ){
  736. //if (this._hasChildItem()){
  737. var firstLoaded = !this.itemLoaded;
  738. this.loadItemChildren(function(){
  739. if( hidden ){
  740. this.children.setStyles({ "display": "none" });
  741. this.flatCategoryItemNode.setStyles(this.selector.css.flatCategoryItemNode);
  742. this.isExpand = false;
  743. }else if( firstLoaded ){
  744. this.children.setStyles({"display": "block"});
  745. this.flatCategoryItemNode.setStyles( this.selector.css.flatCategoryItemNode_selected );
  746. this.isExpand = true;
  747. }else {
  748. var display = this.children.getStyle("display");
  749. if (display === "none") {
  750. this.children.setStyles({ "display": "block" });
  751. this.flatCategoryItemNode.setStyles(this.selector.css.flatCategoryItemNode_selected);
  752. this.isExpand = true;
  753. } else {
  754. this.children.setStyles({ "display": "none" });
  755. this.flatCategoryItemNode.setStyles(this.selector.css.flatCategoryItemNode);
  756. this.isExpand = false;
  757. }
  758. }
  759. if(callback)callback()
  760. }.bind(this));
  761. //}
  762. },
  763. loadCategoryChildren : function( callback ){
  764. if (!this.categoryLoaded){
  765. this.selector.orgAction.listSubUnitDirect(function(subJson){
  766. subJson.data.each(function(subData){
  767. if( !this.selector.isExcluded( subData ) ) {
  768. if( subData.subDirectUnitCount ){
  769. var category = this.selector._newItem(subData, this.selector, this.children, this.level + 1, this);
  770. //if( !this.subItems )this.subItems = [];
  771. //this.subItems.push( category );
  772. }
  773. }
  774. }.bind(this));
  775. this.categoryLoaded = true;
  776. if(callback)callback();
  777. }.bind(this), null, this.data.distinguishedName);
  778. }else{
  779. if(callback)callback();
  780. }
  781. },
  782. loadItemChildren : function( callback ){
  783. if (!this.itemLoaded){
  784. this.selector.orgAction.listSubUnitDirect(function(subJson){
  785. subJson.data.each(function(subData){
  786. if( !this.selector.isExcluded( subData ) ) {
  787. //if( !subData.subDirectUnitCount ){
  788. var category = this.selector._newItem(subData, this.selector, this.children, this.level + 1, this, true);
  789. category.justItem = true;
  790. category.load();
  791. this.selector.items.push( category );
  792. if( !this.subItems )this.subItems = [];
  793. this.subItems.push( category );
  794. //}
  795. }
  796. }.bind(this));
  797. this.itemLoaded = true;
  798. if(callback)callback();
  799. }.bind(this), null, this.data.distinguishedName);
  800. }else{
  801. if(callback)callback();
  802. }
  803. },
  804. _hasChild : function () {
  805. return this.data.subDirectUnitCount;
  806. }
  807. });
  808. MWF.xApplication.Selector.Unit.SearchItem = new Class({
  809. Extends: MWF.xApplication.Selector.Unit.Item,
  810. load : function(){
  811. this.loadForNormal(true);
  812. },
  813. _getShowName: function(){
  814. // return this.data.levelName || this.data.name;
  815. return this.data.name+((this.data.levelName) ? "("+this.data.levelName+")" : "");
  816. },
  817. loadSubItems: function( callback ){
  818. //只是为了在isFlatCategory模式下,加载全称用的,否则用继承的就可以
  819. if (!this.loaded && !this.loading){
  820. this.loading = true;
  821. if (!this.children){
  822. this.children = new Element("div", {
  823. "styles": this.selector.css.selectorItemCategoryChildrenNode
  824. }).inject(this.node, "after");
  825. }
  826. this.children.setStyle("display", "block");
  827. // if (!this.selector.options.expand) this.children.setStyle("display", "none");
  828. this.selector.orgAction.listSubUnitDirect(function(subJson){
  829. subJson.data.each(function(subData){
  830. if( !this.selector.isExcluded( subData ) ) {
  831. var category;
  832. if( this.selector.isFlatCategory ){
  833. category = this.selector._newItem(subData, this.selector, this.children, this.level + 1, this, true);
  834. category.isShowLevelName = true;
  835. category.load();
  836. }else{
  837. category = this.selector._newItem(subData, this.selector, this.children, this.level + 1, this);
  838. }
  839. this.selector.items.push( category );
  840. if( !this.subItems )this.subItems = [];
  841. this.subItems.push( category );
  842. }
  843. }.bind(this));
  844. this.loaded = true;
  845. this.loading = false;
  846. if(callback)callback();
  847. }.bind(this), null, this.data.distinguishedName);
  848. }else{
  849. this.children.setStyle("display", "block");
  850. }
  851. }
  852. });
  853. MWF.xApplication.Selector.Unit.ItemSelected = new Class({
  854. Extends: MWF.xApplication.Selector.Identity.ItemSelected,
  855. getData: function(callback){
  856. if (callback) callback();
  857. },
  858. _getTtiteText: function(){
  859. return this.data.levelName || this.data.name;
  860. },
  861. _getShowName: function(){
  862. return this.data.name+((this.data.levelName) ? "("+this.data.levelName+")" : "");
  863. },
  864. _setIcon: function(){
  865. var style = this.selector.options.style;
  866. this.iconNode.setStyle("background-image", "url("+"../x_component_Selector/$Selector/"+style+"/icon/departmenticon.png)");
  867. }
  868. });
  869. MWF.xApplication.Selector.Unit.ItemCategory = new Class({
  870. Extends: MWF.xApplication.Selector.Identity.ItemCategory,
  871. _getTotalCount : function(){
  872. if( !this.selector.allUnitObject )return 0;
  873. var unit = this.selector.allUnitObject[this.data.levelName];
  874. var count = unit ? unit.subNestedUnitCount : 0;
  875. return count;
  876. },
  877. _getSelectedCount : function(){
  878. if( typeOf(this.selectedCount) === "number" )return this.selectedCount;
  879. if( !this.selector.allUnitObject )return 0;
  880. var unit = this.selector.allUnitObject[this.data.levelName];
  881. var count = unit ? unit.selectedNestedUnitCount : 0;
  882. this.selectedCount = count + (this.selectedCount_wait || 0);
  883. this.selectedCount_wait = 0;
  884. return this.selectedCount;
  885. },
  886. loadSub: function(callback){
  887. if (!this.loaded){
  888. this.selector.orgAction.listSubUnitDirect(function(subJson){
  889. subJson.data.each(function(subData){
  890. if( !this.selector.isExcluded( subData ) ) {
  891. var category = this.selector._newItem(subData, this.selector, this.children, this.level+1, this);
  892. category.isItem = true;
  893. category.isCategory = true;
  894. this.selector.items.push( category );
  895. if(this.subItems)this.subItems.push( category );
  896. this.subCategorys.push( category );
  897. this.subCategoryMap[subData.levelName] = category;
  898. }
  899. //var category = this.selector._newItemCategory("ItemCategory", subData, this.selector, this.children, this.level+1);
  900. }.bind(this));
  901. this.loaded = true;
  902. if (callback) callback();
  903. }.bind(this), null, this.data.distinguishedName);
  904. }else{
  905. if (callback) callback();
  906. }
  907. },
  908. _hasChild: function(){
  909. var uCount = (this.data.subDirectUnitCount) ? this.data.subDirectUnitCount : 0;
  910. //var iCount = (this.data.subDirectIdentityCount) ? this.data.subDirectIdentityCount : 0;
  911. return uCount;
  912. },
  913. _hasChildCategory: function(){
  914. var uCount = (this.data.subDirectUnitCount) ? this.data.subDirectUnitCount : 0;
  915. return uCount;
  916. },
  917. _hasChildItem: function(){
  918. var uCount = (this.data.subDirectUnitCount) ? this.data.subDirectUnitCount : 0;
  919. return uCount;
  920. },
  921. //for flat category start
  922. loadCategoryChildren: function(callback){
  923. if (!this.categoryLoaded){
  924. this.selector.orgAction.listSubUnitDirect(function(subJson){
  925. subJson.data.each(function(subData){
  926. if( !this.selector.isExcluded( subData ) ) {
  927. var category = this.selector._newItem(subData, this.selector, this.children, this.level+1, this, true);
  928. category.ignoreItem = true;
  929. category.load();
  930. //if(this.subItems)this.subItems.push( category );
  931. this.subCategorys.push( category );
  932. this.subCategoryMap[subData.levelName] = category;
  933. }
  934. //var category = this.selector._newItemCategory("ItemCategory", subData, this.selector, this.children, this.level+1);
  935. }.bind(this));
  936. this.categoryLoaded = true;
  937. if (callback) callback();
  938. }.bind(this), null, this.data.distinguishedName);
  939. }else{
  940. if (callback) callback( );
  941. }
  942. },
  943. loadItemChildren: function(callback){
  944. if (!this.itemLoaded){
  945. this.selector.orgAction.listSubUnitDirect(function(subJson){
  946. subJson.data.each(function(subData){
  947. if( !this.selector.isExcluded( subData ) ) {
  948. var category = this.selector._newItem(subData, this.selector, this.children, this.level+1, this, true);
  949. category.justItem = true;
  950. category.load();
  951. this.selector.items.push( category );
  952. if(this.subItems)this.subItems.push( category );
  953. //this.subCategorys.push( category );
  954. }
  955. //var category = this.selector._newItemCategory("ItemCategory", subData, this.selector, this.children, this.level+1);
  956. }.bind(this));
  957. this.itemLoaded = true;
  958. if (callback) callback();
  959. }.bind(this), null, this.data.distinguishedName);
  960. }else{
  961. if (callback) callback( );
  962. }
  963. }
  964. });
  965. MWF.xApplication.Selector.Unit.Filter = new Class({
  966. Implements: [Options, Events],
  967. options: {
  968. "style": "default",
  969. "units": []
  970. },
  971. initialize: function(value, options){
  972. this.setOptions(options);
  973. this.value = value;
  974. this.orgAction = MWF.Actions.get("x_organization_assemble_control");
  975. },
  976. filter: function(value, callback){
  977. this.value = value;
  978. var key = this.value;
  979. if (this.options.units.length){
  980. var units = [];
  981. this.options.units.each(function(u){
  982. if (typeOf(u)==="string"){
  983. units.push(u);
  984. }
  985. if (typeOf(u)==="object"){
  986. units.push(u.distinguishedName);
  987. }
  988. });
  989. key = {"key": key, "unitList": units};
  990. }
  991. this.orgAction.listUnitByKey(function(json){
  992. data = json.data;
  993. if (callback) callback(data)
  994. }.bind(this), null, key);
  995. }
  996. });