IdentityWidthDuty.js 19 KB

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