IdentityWidthDuty.js 18 KB

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