IdentityWidthDuty.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  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. "noUnit" : false,
  15. "include" : [], //增加的可选项
  16. "resultType" : "", //可以设置成个人,那么结果返回个人
  17. "expandSubEnable": true,
  18. "selectAllEnable" : true, //分类是否允许全选下一层
  19. "exclude" : [],
  20. "selectType" : "identity"
  21. },
  22. loadSelectItems: function(addToNext){
  23. var afterLoadSelectItemFun = this.afterLoadSelectItem.bind(this);
  24. if( this.options.resultType === "person" ){
  25. if( this.titleTextNode ){
  26. this.titleTextNode.set("text", MWF.xApplication.Selector.LP.selectPerson );
  27. }else{
  28. this.options.title = MWF.xApplication.Selector.LP.selectPerson;
  29. }
  30. }
  31. if (this.options.dutys.length){
  32. var dutyLoaded = 0;
  33. var loadDutySuccess = function () {
  34. dutyLoaded++;
  35. if( dutyLoaded === this.options.dutys.length ){
  36. this.dutyLoaded = true;
  37. if( this.includeLoaded ){
  38. afterLoadSelectItemFun();
  39. }
  40. }
  41. }.bind(this);
  42. this.loadInclude( function () {
  43. this.includeLoaded = true;
  44. if( this.dutyLoaded ){
  45. afterLoadSelectItemFun();
  46. }
  47. }.bind(this));
  48. // this.loadInclude();
  49. this.options.dutys.each(function(duty){
  50. var data = {"name": duty, "id":duty};
  51. var category = this._newItemCategory("ItemCategory",data, this, this.itemAreaNode);
  52. this.subCategorys.push(category);
  53. //category.loadSub();
  54. //category.clickItem();
  55. // this.action.getUnitduty(function(dutyData){
  56. // var category = this._newItemCategory("ItemCategory", dutyData.data, this, this.itemAreaNode);
  57. // }.bind(this), null, duty);
  58. loadDutySuccess();
  59. }.bind(this));
  60. }
  61. },
  62. search: function(){
  63. var key = this.searchInput.get("value");
  64. if (key){
  65. this.initSearchArea(true);
  66. var createdId = this.searchInItems(key) || [];
  67. if( this.options.include && this.options.include.length ){
  68. this.includeObject.listByFilter( "key", key, function( array ){
  69. array.each( function(d){
  70. if( !createdId.contains( d.distinguishedName ) ){
  71. if( !this.isExcluded( d ) ) {
  72. this._newItem( d, this, this.itemSearchAreaNode);
  73. }
  74. }
  75. }.bind(this))
  76. }.bind(this))
  77. }
  78. }else{
  79. this.initSearchArea(false);
  80. }
  81. },
  82. listPersonByPinyin: function(node){
  83. this.searchInput.focus();
  84. var pinyin = this.searchInput.get("value");
  85. pinyin = pinyin+node.get("text");
  86. this.searchInput.set("value", pinyin);
  87. this.search();
  88. },
  89. checkLoadSelectItems: function(){
  90. if (!this.options.units.length){
  91. this.loadSelectItems();
  92. }else{
  93. this.loadSelectItems();
  94. }
  95. },
  96. _scrollEvent: function(y){
  97. return true;
  98. },
  99. _getChildrenItemIds: function(){
  100. return null;
  101. },
  102. _newItemCategory: function(type, data, selector, item, level, category, delay){
  103. return new MWF.xApplication.Selector.IdentityWidthDuty[type](data, selector, item, level, category, delay)
  104. },
  105. _listItemByKey: function(callback, failure, key){
  106. if (this.options.units.length) key = {"key": key, "unitList": this.options.units};
  107. this.orgAction.listIdentityByKey(function(json){
  108. if (callback) callback.apply(this, [json]);
  109. }.bind(this), failure, key);
  110. },
  111. _getItem: function(callback, failure, id, async){
  112. this.orgAction.getIdentity(function(json){
  113. if (callback) callback.apply(this, [json]);
  114. }.bind(this), failure, ((typeOf(id)==="string") ? id : id.distinguishedName), async);
  115. },
  116. _newItemSelected: function(data, selector, item, selectedNode){
  117. return new MWF.xApplication.Selector.IdentityWidthDuty.ItemSelected(data, selector, item, selectedNode)
  118. },
  119. _listItemByPinyin: function(callback, failure, key){
  120. if (this.options.units.length) key = {"key": key, "unitList": this.options.units};
  121. this.orgAction.listIdentityByPinyin(function(json){
  122. if (callback) callback.apply(this, [json]);
  123. }.bind(this), failure, key);
  124. },
  125. _newItem: function(data, selector, container, level, category){
  126. return new MWF.xApplication.Selector.IdentityWidthDuty.Item(data, selector, container, level, category);
  127. },
  128. _newItemSearch: function(data, selector, container, level){
  129. return new MWF.xApplication.Selector.IdentityWidthDuty.SearchItem(data, selector, container, level);
  130. }
  131. //_listItemNext: function(last, count, callback){
  132. // this.action.listRoleNext(last, count, function(json){
  133. // if (callback) callback.apply(this, [json]);
  134. // }.bind(this));
  135. //}
  136. });
  137. MWF.xApplication.Selector.IdentityWidthDuty.Item = new Class({
  138. Extends: MWF.xApplication.Selector.Identity.Item,
  139. _getShowName: function(){
  140. return this.data.name;
  141. },
  142. _getTtiteText: function(){
  143. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  144. },
  145. _setIcon: function(){
  146. var style = this.selector.options.style;
  147. this.iconNode.setStyle("background-image", "url("+"../x_component_Selector/$Selector/"+style+"/icon/personicon.png)");
  148. }
  149. });
  150. MWF.xApplication.Selector.IdentityWidthDuty.SearchItem = new Class({
  151. Extends: MWF.xApplication.Selector.Identity.Item,
  152. _getShowName: function(){
  153. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  154. }
  155. });
  156. MWF.xApplication.Selector.IdentityWidthDuty.ItemSelected = new Class({
  157. Extends: MWF.xApplication.Selector.Identity.ItemSelected,
  158. _getShowName: function(){
  159. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  160. },
  161. _getTtiteText: function(){
  162. return this.data.name+((this.data.unitLevelName) ? "("+this.data.unitLevelName+")" : "");
  163. },
  164. _setIcon: function(){
  165. var style = this.selector.options.style;
  166. this.iconNode.setStyle("background-image", "url("+"../x_component_Selector/$Selector/"+style+"/icon/personicon.png)");
  167. }
  168. });
  169. MWF.xApplication.Selector.IdentityWidthDuty.ItemCategory = new Class({
  170. Extends: MWF.xApplication.Selector.Identity.ItemCategory,
  171. createNode: function(){
  172. this.node = new Element("div", {
  173. "styles": this.selector.css.selectorItemCategory_department,
  174. "title" : this._getTtiteText()
  175. }).inject(this.container);
  176. },
  177. _getShowName: function(){
  178. return this.data.name;
  179. },
  180. _setIcon: function(){
  181. var style = this.selector.options.style;
  182. this.iconNode.setStyle("background-image", "url("+"../x_component_Selector/$Selector/"+style+"/icon/companyicon.png)");
  183. },
  184. loadSub: function(callback){
  185. if (!this.loaded && !this.loadingsub){
  186. this.loadingsub = true;
  187. if (this.selector.options.units.length){
  188. var action = MWF.Actions.get("x_organization_assemble_express");
  189. var data = {"name":this.data.name, "unit":""};
  190. var count = this.selector.options.units.length;
  191. var i = 0;
  192. if (this.selector.options.expandSubEnable) {
  193. this.selector.options.units.each(function(u){
  194. var unitName = "";
  195. if (typeOf(u)==="string"){
  196. unitName = u;
  197. }else{
  198. unitName = u.distinguishedName || u.unique || u.id || u.levelName
  199. }
  200. if (unitName){
  201. var unitNames;
  202. action.listUnitNameSubNested({"unitList": [unitName]}, function(json){
  203. unitNames = json.data.unitList;
  204. }.bind(this), null, false);
  205. unitNames.push(unitName);
  206. if (unitNames && unitNames.length){
  207. data.unitList = unitNames;
  208. action.getDuty(data, function(json){
  209. json.data.each(function(idSubData){
  210. if( !this.selector.isExcluded( idSubData ) ) {
  211. var item = this.selector._newItem(idSubData, this.selector, this.children, this.level + 1, this);
  212. this.selector.items.push(item);
  213. if(this.subItems)this.subItems.push( item );
  214. }
  215. }.bind(this));
  216. }.bind(this), null, false);
  217. }
  218. }
  219. i++;
  220. if (i>=count){
  221. if (!this.loaded) {
  222. this.loaded = true;
  223. this.loadingsub = false;
  224. this.itemLoaded = true;
  225. if (callback) callback();
  226. }
  227. }
  228. }.bind(this));
  229. }else{
  230. this.selector.options.units.each(function(u){
  231. if (typeOf(u)==="string"){
  232. data.unit = u;
  233. }else{
  234. data.unit = u.distinguishedName || u.unique || u.id || u.levelName
  235. }
  236. action.getDuty(data, function(json){
  237. json.data.each(function(idSubData){
  238. if( !this.selector.isExcluded( idSubData ) ) {
  239. var item = this.selector._newItem(idSubData, this.selector, this.children, this.level + 1, this);
  240. this.selector.items.push(item);
  241. if(this.subItems)this.subItems.push( item );
  242. }
  243. }.bind(this));
  244. i++;
  245. if (i>=count){
  246. if (!this.loaded) {
  247. this.loaded = true;
  248. this.loadingsub = false;
  249. this.itemLoaded = true;
  250. if (callback) callback();
  251. }
  252. }
  253. }.bind(this));
  254. }.bind(this));
  255. }
  256. // if (callback) callback();
  257. }else{
  258. this.selector.orgAction.listIdentityWithDuty(function(json){
  259. json.data.each(function(idSubData){
  260. if( !this.selector.isExcluded( idSubData ) ) {
  261. var item = this.selector._newItem(idSubData, this.selector, this.children, this.level + 1, this);
  262. this.selector.items.push(item);
  263. if(this.subItems)this.subItems.push( item );
  264. }
  265. }.bind(this));
  266. this.loaded = true;
  267. this.loadingsub = false;
  268. if (callback) callback();
  269. }.bind(this), null, this.data.name);
  270. }
  271. }else{
  272. if (callback) callback( );
  273. }
  274. },
  275. loadCategoryChildren: function(callback){
  276. this.loadSub(callback);
  277. this.categoryLoaded = true;
  278. //if (callback) callback();
  279. },
  280. loadItemChildren: function(callback){
  281. this.loadSub(callback);
  282. },
  283. _hasChild: function(){
  284. return true;
  285. },
  286. _hasChildCategory: function(){
  287. return true;
  288. },
  289. _hasChildItem: function(){
  290. return true;
  291. }
  292. });
  293. MWF.xApplication.Selector.IdentityWidthDuty.ItemUnitCategory = new Class({
  294. Extends: MWF.xApplication.Selector.Identity.ItemUnitCategory,
  295. loadSub: function(callback){
  296. if (!this.loaded){
  297. this.selector.orgAction.listIdentityWithUnit(function(idJson){
  298. idJson.data.each(function(idSubData){
  299. if( !this.selector.isExcluded( idSubData ) ) {
  300. var item = this.selector._newItem(idSubData, this.selector, this.children, this.level + 1, this);
  301. this.selector.items.push(item);
  302. if(this.subItems)this.subItems.push( item );
  303. }
  304. }.bind(this));
  305. if( !this.selector.options.expandSubEnable ){
  306. this.loaded = true;
  307. if (callback) callback();
  308. }
  309. if( this.selector.options.expandSubEnable ){
  310. this.selector.orgAction.listSubUnitDirect(function(json){
  311. json.data.each(function(subData){
  312. if( !this.selector.isExcluded( subData ) ) {
  313. var category = this.selector._newItemCategory("ItemUnitCategory", subData, this.selector, this.children, this.level + 1, this);
  314. this.subCategorys.push( category );
  315. }
  316. }.bind(this));
  317. this.loaded = true;
  318. if (callback) callback();
  319. }.bind(this), null, this.data.distinguishedName);
  320. }
  321. }.bind(this), null, this.data.distinguishedName);
  322. }else{
  323. if (callback) callback( );
  324. }
  325. },
  326. loadCategoryChildren: function(callback){
  327. if (!this.categoryLoaded){
  328. this.loadSub(callback);
  329. this.categoryLoaded = true;
  330. this.itemLoaded = true;
  331. //if( this.selector.options.expandSubEnable ){
  332. // this.selector.orgAction.listSubUnitDirect(function(json){
  333. // json.data.each(function(subData){
  334. // if( !this.selector.isExcluded( subData ) ) {
  335. // var category = this.selector._newItemCategory("ItemUnitCategory", subData, this.selector, this.children, this.level + 1, this);
  336. // this.subCategorys.push( category );
  337. // }
  338. // }.bind(this));
  339. // this.categoryLoaded = true;
  340. // if (callback) callback();
  341. // }.bind(this), null, this.data.distinguishedName);
  342. //}else{
  343. // if (callback) callback();
  344. //}
  345. }else{
  346. if (callback) callback( );
  347. }
  348. },
  349. loadItemChildren: function(callback){
  350. if (!this.itemLoaded){
  351. this.selector.orgAction.listIdentityWithUnit(function(idJson){
  352. idJson.data.each(function(idSubData){
  353. if( !this.selector.isExcluded( idSubData ) ) {
  354. var item = this.selector._newItem(idSubData, this.selector, this.children, this.level + 1, this);
  355. this.selector.items.push(item);
  356. if(this.subItems)this.subItems.push( item );
  357. }
  358. this.itemLoaded = true;
  359. }.bind(this));
  360. if (callback) callback();
  361. }.bind(this), null, this.data.distinguishedName);
  362. }else{
  363. if (callback) callback( );
  364. }
  365. }
  366. });
  367. MWF.xApplication.Selector.IdentityWidthDuty.ItemGroupCategory = new Class({
  368. Extends: MWF.xApplication.Selector.Identity.ItemGroupCategory
  369. });
  370. MWF.xApplication.Selector.IdentityWidthDuty.Filter = new Class({
  371. Implements: [Options, Events],
  372. options: {
  373. "style": "default",
  374. "units": [],
  375. "dutys": []
  376. },
  377. initialize: function(value, options){
  378. this.setOptions(options);
  379. this.value = value;
  380. this.orgAction = MWF.Actions.get("x_organization_assemble_control");
  381. },
  382. getList: function(callback){
  383. if (false && this.list){
  384. if (callback) callback();
  385. }else{
  386. this.list = [];
  387. MWF.require("MWF.widget.PinYin", function(){
  388. this.options.dutys.each(function(duty){
  389. if (this.options.units.length){
  390. var action = MWF.Actions.get("x_organization_assemble_express");
  391. var data = {"name":duty, "unit":""};
  392. this.options.units.each(function(u){
  393. if (typeOf(u)==="string"){
  394. data.unit = u;
  395. }else{
  396. data.unit = u.distinguishedName || u.unique || u.id || u.levelName
  397. }
  398. action.getDuty(data, function(json){
  399. json.data.each(function(d){
  400. d.pinyin = d.name.toPY().toLowerCase();
  401. d.firstPY = d.name.toPYFirst().toLowerCase();
  402. this.list.push(d);
  403. }.bind(this));
  404. }.bind(this), null, false);
  405. }.bind(this));
  406. }else{
  407. this.orgAction.listIdentityWithDuty(function(json){
  408. json.data.each(function(d){
  409. d.pinyin = d.name.toPY().toLowerCase();
  410. d.firstPY = d.name.toPYFirst().toLowerCase();
  411. this.list.push(d);
  412. }.bind(this));
  413. }.bind(this), null, duty, false);
  414. }
  415. }.bind(this));
  416. if (callback) callback();
  417. }.bind(this));
  418. }
  419. },
  420. filter: function(value, callback){
  421. this.value = value;
  422. this.getList(function(){
  423. var data = this.list.filter(function(d){
  424. var text = d.name+"#"+d.pinyin+"#"+d.firstPY;
  425. return (text.indexOf(this.value)!=-1);
  426. }.bind(this));
  427. if (callback) callback(data);
  428. }.bind(this));
  429. }
  430. });