AddressBook.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.oa.attention.AddressBook', {
  3. extend: 'Ext.app.Controller',
  4. requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil', 'erp.util.RenderUtil'],
  5. views:[
  6. 'oa.attention.AddressBook','oa.attention.AttentionGrid','oa.attention.PersonalAddressTreePanel','oa.attention.Form','core.form.FileField','core.form.PhotoField',
  7. 'core.button.Save','core.button.Close','core.button.Update','oa.mail.TreePanel','oa.attention.PublicAddressGrid','oa.attention.AddressQueryForm','core.trigger.DbfindTrigger','oa.attention.EmployeeTreePanel'
  8. ],
  9. init:function(){
  10. var me=this;
  11. this.control({
  12. 'hidden[id=file-hidden]':{
  13. change:function(field){
  14. console.log(field.value );
  15. }
  16. },
  17. 'hidden[id=ab_recorderid]':{
  18. afterrender:function(field){
  19. if(field.value!=emid){
  20. var btn=Ext.getCmp('updatebutton');
  21. if(btn) btn.setDisabled(true);
  22. Ext.getCmp('publicqueryform').resize();//坑爹的样式
  23. }
  24. }
  25. },
  26. 'erpMailTreePanel': {
  27. afterrender: function(tree){
  28. tree.selModel.on('select', function(selModel, record){
  29. record.selected = true;
  30. if(record.childNodes.length > 0){
  31. selModel.isOnSelect = true;
  32. selModel.select(record.childNodes);
  33. Ext.each(record.childNodes, function(){
  34. this.selected = true;
  35. });
  36. selModel.isOnSelect = false;
  37. me.setSharedName(selModel.getSelection());
  38. me.setSharedId(selModel.getSelection());
  39. } else {
  40. if(!selModel.isOnSelect){
  41. var arr = selModel.getSelection();
  42. arr.push(record);
  43. selModel.isOnSelect = true;
  44. selModel.select(arr);
  45. selModel.isOnSelect = false;
  46. me.setSharedName(selModel.getSelection());
  47. me.setSharedId(selModel.getSelection());
  48. }
  49. return;
  50. }
  51. });
  52. tree.selModel.on('deselect', function(selModel, record){
  53. record.selected = false;
  54. if(record.childNodes.length > 0){
  55. selModel.deselect(record.childNodes);
  56. Ext.each(record.childNodes, function(){
  57. this.selected = false;
  58. });
  59. me.setSharedName(selModel.getSelection());
  60. me.setSharedId(selModel.getSelection());
  61. } else {
  62. selModel.deselect(record);
  63. me.setSharedName(selModel.getSelection());
  64. me.setSharedId(selModel.getSelection());
  65. return;
  66. }
  67. });
  68. }
  69. },
  70. 'button[id=attention]':{
  71. click:function(){
  72. }
  73. },
  74. 'textfield[id=search]':{
  75. change:function(){
  76. me.onTextFieldChange();
  77. }
  78. },
  79. 'button[id=adduser]':{
  80. click:function(){
  81. me.addUser(me);
  82. }
  83. },
  84. 'button[id=deleteuser]':{
  85. click:function(){
  86. me.deleteUser(me);
  87. }
  88. },
  89. 'combo[id=moveto]':{
  90. select:function(combo,records){
  91. var groupid=records[0].data.id;
  92. me.moveToOtherGroup(groupid,me);
  93. }
  94. },
  95. 'erpEmployeeTreePanel':{
  96. show:function(panel){
  97. if(panel.select==null){
  98. panel.getSelectionModel().select(panel.getStore().tree.root.childNodes[0],true);
  99. }
  100. },
  101. selectionchange:function(model,data, eOpts ){
  102. var orgid=data[0].data.id;
  103. var grid=Ext.getCmp('employeeAddressBook');
  104. var findcondition='em_defaultorid='+orgid.replace(/org/g,"");
  105. var gridParam = {caller: grid.caller, condition:findcondition };
  106. grid.loadNewStore(grid,gridParam);
  107. }
  108. },
  109. 'erpPersonalAddressTreePanel':{
  110. afterrender:function(panel){
  111. var item=new Object();
  112. var button=new Object();
  113. button.xtype='button';
  114. button.cls='btn-cls';
  115. button.text='点击添加分组';
  116. button.iconCls='x-button-icon-addgroup';
  117. button.style='margin-left:20px;';
  118. button.handler=function open(){
  119. me.addGroup();
  120. };
  121. panel.add(button);
  122. if(panel.select==null){
  123. panel.getSelectionModel().select(panel.getStore().tree.root.childNodes[0],true);
  124. }
  125. },
  126. selectionchange:function(model,data, eOpts ){
  127. var groupid=data[0].data.id;
  128. Ext.getCmp('groupkind').setValue(data[0].data.text.substring(0,data[0].data.text.indexOf('('))+" ("+data[0].data.qtitle+"...)");
  129. Ext.getCmp('groupid').setValue(groupid);
  130. var grid=Ext.getCmp('AttentionGridPanel');
  131. var findcondition=(groupid==0) ?'ab_recorderid='+emid : 'ab_groupid='+groupid+' AND ab_recorderid='+emid;
  132. var gridParam = {caller: caller, condition:findcondition };
  133. grid.loadNewStore(grid,gridParam);
  134. },
  135. itemmousedown:function(view,record,el,index, e,eOpts){
  136. var menu=Ext.getCmp('mainmenu');
  137. if(menu){
  138. menu.close();
  139. }
  140. },
  141. containerclick:function(){
  142. Ext.getCmp('mainmenu').close();
  143. },
  144. itemcontextmenu:function(view,record,el,index, e,eOpts) {
  145. view.getSelectionModel().select(index);
  146. var id=record.data.id;
  147. var bool=id<1;
  148. var menu=Ext.create('Ext.menu.Menu', {
  149. style: {
  150. overflow: 'visible'
  151. },
  152. ownerCt : this.ownerCt,
  153. renderTo:Ext.getBody(),
  154. floating: false,
  155. id:'mainmenu',
  156. async:false,
  157. width: 100,
  158. autoHeight:true,
  159. plain: true,
  160. items: [{
  161. text:'共 享',
  162. iconCls:'x-menu-share',
  163. listeners:{
  164. click:function(){
  165. menu.close();
  166. me.share('group');
  167. }
  168. }
  169. },{
  170. text: '添加分组',
  171. iconCls:'x-button-icon-addgroup',
  172. listeners:{
  173. click:function(){
  174. menu.close();
  175. me.addGroup(view,index);
  176. }
  177. }
  178. },{
  179. text: '添加联系人',
  180. iconCls:'x-menu-adduser',
  181. disabled:bool,
  182. listeners:{
  183. click:function(){
  184. menu.close();
  185. me.addUser(me);
  186. }
  187. }
  188. },'-',{
  189. text: '重命名',
  190. iconCls:'x-menu-rename',
  191. disabled:bool,
  192. listeners:{
  193. click:function(){
  194. menu.close();
  195. me.renameGroup(id);
  196. }
  197. }
  198. },{
  199. text:'删除改组',
  200. iconCls:'x-button-icon-deletedetail',
  201. disabled:bool,
  202. listeners:{
  203. click:function(){
  204. menu.close();
  205. me.deleteGroup(id,'oa/addressbook/deleteAddressBookGroup.action');
  206. }
  207. }
  208. }]
  209. });
  210. menu.showAt(e.getXY());
  211. },
  212. }
  213. });
  214. },
  215. addGroup:function(view,index){
  216. var win = new Ext.window.Window({
  217. id : 'win',
  218. height: '300',
  219. width: '500',
  220. title:'添加新的分组',
  221. maximizable : true,
  222. buttonAlign : 'center',
  223. layout : 'anchor',
  224. items: [{
  225. tag : 'iframe',
  226. frame : true,
  227. anchor : '100% 100%',
  228. xtype:'erpAttentionFormPanel',
  229. caller:'AddressBookGroup' ,
  230. saveUrl:'oa/addressbook/saveAddressBookGroup.action',
  231. bbar:['->',{
  232. xtype:'erpSaveButton',
  233. handler:function(){
  234. var name=Ext.getCmp('ag_name').getValue();
  235. var tree= Ext.getCmp('PersonalAddressTree');
  236. var closebool=true;
  237. Ext.Array.each(tree.getStore().tree.root.childNodes,function(node){
  238. if(node.data.qtitle==name){
  239. closebool=false;
  240. Ext.Msg.alert($I18N.common.msg.title_prompt, '组名已存在!',function(){
  241. Ext.getCmp('ag_name').reset();
  242. });
  243. return;
  244. }
  245. });
  246. if(closebool){
  247. Ext.getCmp('form').save();
  248. Ext.getCmp('win').close();
  249. tree.getTreeRootNode(tree);
  250. }
  251. var groupid=Ext.getCmp('groupid').getValue();
  252. tree.getSelectionModel().select(tree.getStore().getNodeById(groupid),true)
  253. }
  254. },{
  255. xtype:'erpCloseButton',
  256. handler:function(){
  257. Ext.getCmp('win').close();
  258. }
  259. },'->']
  260. }],
  261. });
  262. win.show();
  263. },
  264. renameGroup:function(id){
  265. var win = new Ext.window.Window({
  266. id : 'win',
  267. height: '300',
  268. width: '500',
  269. title:'分组重命名',
  270. maximizable : true,
  271. buttonAlign : 'center',
  272. layout : 'anchor',
  273. items: [{
  274. tag : 'iframe',
  275. frame : true,
  276. anchor : '100% 100%',
  277. xtype:'erpAttentionFormPanel',
  278. caller:'AddressGrade' ,
  279. formCondition:'ag_id='+id,
  280. updateUrl:'oa/addressbook/updateAddressBookGroup.action',
  281. bbar:['->',{
  282. xtype:'erpSaveButton',
  283. handler:function(){
  284. var name=Ext.getCmp('ag_name').getValue();
  285. var tree= Ext.getCmp('PersonalAddressTree');
  286. var closebool=true;
  287. if(Ext.getCmp('ag_name').originalValue==name){
  288. closebool=false;
  289. Ext.Msg.alert($I18N.common.msg.title_prompt, '未作修改!',function(){
  290. Ext.getCmp('ag_name').reset();
  291. });
  292. return;
  293. }
  294. if(closebool){
  295. Ext.getCmp('form').update();
  296. Ext.getCmp('win').close();
  297. tree.getTreeRootNode(tree);
  298. tree.getSelectionModel().select(tree.getStore().getNodeById(id),true);
  299. }
  300. }
  301. },{
  302. xtype:'erpCloseButton',
  303. handler:function(){
  304. Ext.getCmp('win').close();
  305. }
  306. },'->']
  307. }],
  308. });
  309. win.show();
  310. },
  311. deleteGroup:function(id,deleteUrl){
  312. var me = this;
  313. warnMsg('确定要删除该分组吗?', function(btn){
  314. if(btn == 'yes'){
  315. Ext.Ajax.request({
  316. url : basePath + deleteUrl,
  317. async: false,
  318. params: {
  319. id: id
  320. },
  321. method : 'post',
  322. callback : function(options,success,response){
  323. var localJson = new Ext.decode(response.responseText);
  324. if(localJson.exceptionInfo){
  325. showError(localJson.exceptionInfo);return;
  326. }else {
  327. var tree= Ext.getCmp('PersonalAddressTree');
  328. tree.getTreeRootNode(tree);
  329. //删除完成之后选中第一个
  330. tree.getSelectionModel().select(tree.getStore().tree.root.childNodes[0],true);
  331. }
  332. }
  333. });
  334. }
  335. });
  336. } ,
  337. addUser: function(me){
  338. var win = new Ext.window.Window({
  339. id : 'win',
  340. height: '80%',
  341. width: '60%',
  342. title:'添加联系人',
  343. maximizable : true,
  344. buttonAlign : 'center',
  345. layout : 'anchor',
  346. items: [{
  347. tag : 'iframe',
  348. frame : true,
  349. anchor : '100% 100%',
  350. xtype:'erpAttentionFormPanel',
  351. caller:'AddressBook' ,
  352. saveUrl:'/oa/addressbook/saveAddressPerson.action',
  353. bbar:['->',{
  354. xtype:'erpSaveButton',
  355. handler:function(){
  356. var groupid=Ext.getCmp('groupid').getValue();
  357. Ext.getCmp('ab_groupid').setValue(groupid);
  358. Ext.getCmp('form').save();
  359. Ext.getCmp('win').close();
  360. me.reLoadTreeAndGrid();
  361. }
  362. },{
  363. xtype:'erpCloseButton',
  364. handler:function(){
  365. Ext.getCmp('win').close();
  366. }
  367. },'->']
  368. }],
  369. });
  370. win.show();
  371. },
  372. deleteUser:function(me){
  373. //批删除
  374. var grid=Ext.getCmp('AttentionGridPanel')
  375. var params=grid.getMultiSelected();
  376. var main = parent.Ext.getCmp("content-panel");
  377. main.getActiveTab().setLoading(true);//loading...
  378. Ext.Ajax.request({
  379. url : basePath + 'oa/addressbook/deleteAddressPerson.action',
  380. params: params,
  381. method : 'post',
  382. callback : function(options,success,response){
  383. main.getActiveTab().setLoading(false);
  384. var localJson = new Ext.decode(response.responseText);
  385. if(localJson.exceptionInfo){
  386. showError(localJson.exceptionInfo);
  387. return "";
  388. }
  389. if(localJson.success){
  390. if(localJson.log){
  391. showMessage("提示", localJson.log);
  392. }
  393. Ext.Msg.alert("提示", "删除成功!", function(){
  394. grid.multiselected = new Array();
  395. me.reLoadTreeAndGrid();
  396. });
  397. }
  398. }
  399. });
  400. },
  401. moveToOtherGroup:function(groupid,me){
  402. var grid=Ext.getCmp('AttentionGridPanel');
  403. var params=grid.getMultiSelected();
  404. params.id=groupid;
  405. var main = parent.Ext.getCmp("content-panel");
  406. main.getActiveTab().setLoading(true);//loading...
  407. Ext.Ajax.request({
  408. url : basePath + 'oa/addressbook/removeToOtherGroup.action',
  409. params: params,
  410. method : 'post',
  411. callback : function(options,success,response){
  412. main.getActiveTab().setLoading(false);
  413. var localJson = new Ext.decode(response.responseText);
  414. if(localJson.exceptionInfo){
  415. showError(localJson.exceptionInfo);
  416. return "";
  417. }
  418. if(localJson.success){
  419. if(localJson.log){
  420. showMessage("提示", localJson.log);
  421. }
  422. Ext.getCmp('moveto').reset();
  423. Ext.getCmp('moveto').setDisabled(true);
  424. Ext.Msg.alert("提示", "移动成功!", function(){
  425. grid.multiselected = new Array();
  426. me.reLoadTreeAndGrid();
  427. Ext.getCmp('deleteuser').setDisabled(true);
  428. });
  429. }
  430. }
  431. });
  432. } ,
  433. share:function(type){
  434. var win = new Ext.window.Window({
  435. id : 'win',
  436. height: '100%',
  437. width: '60%',
  438. title:'共享联系人',
  439. maximizable : true,
  440. buttonAlign : 'center',
  441. layout : 'fit',
  442. items: [{
  443. id:'desk',
  444. layout: 'border',
  445. items: [{
  446. tag : 'iframe',
  447. frame : true,
  448. region: 'center',
  449. width: '50%',
  450. xtype:'form',
  451. id:'form',
  452. layout:'column',
  453. items:[{
  454. fieldLabel:'<img src="' + basePath + 'resource/images/icon/share.png" style="width:30%">共享给',
  455. id:'sharedname',
  456. name:'sharedname',
  457. columnWidth:1,
  458. allowBlank:false,
  459. fieldStyle:'background:#f0f0f0;color:#515151;',
  460. xtype:'textarea',
  461. rows: 6,
  462. },{
  463. id:'sharedid',
  464. name:'sharedid',
  465. xtype:'textfield',
  466. hidden:'true',
  467. }],
  468. bbar:['->',{
  469. xtype:'erpSaveButton',
  470. handler:function(){
  471. var params = new Object();
  472. var r = Ext.getCmp('form').getValues();
  473. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  474. if(type=="group"){
  475. var groupid=Ext.getCmp('groupid').getValue();
  476. var data = new Array();
  477. var object=new Object();
  478. object.ab_groupid=groupid;
  479. data.push(object);
  480. params.data= Ext.encode(data);
  481. }
  482. params.type = type;
  483. Ext.Ajax.request({
  484. url : basePath + 'oa/addressbook/sharedToOther.action',
  485. params : params,
  486. method : 'post',
  487. async: false,
  488. callback : function(options,success,response){
  489. var localJson = new Ext.decode(response.responseText);
  490. if(localJson.exceptionInfo){
  491. var str = localJson.exceptionInfo;
  492. showError(str);
  493. }
  494. }
  495. });
  496. Ext.getCmp('win').close();
  497. }
  498. },{
  499. xtype:'erpCloseButton',
  500. handler:function(){
  501. Ext.getCmp('win').close();
  502. }
  503. },'->']
  504. }, {
  505. region: 'east',
  506. width: '50%',
  507. xtype: 'erpMailTreePanel',
  508. }]
  509. }]
  510. });
  511. win.show();
  512. },
  513. setSharedName: function(records){
  514. var r = '';
  515. Ext.each(records, function(){
  516. if(r != ''){
  517. r += ';';
  518. }
  519. r += this.get('text');
  520. });
  521. Ext.getCmp('sharedname').setValue(r);
  522. },
  523. setSharedId: function(records){
  524. var r = '';
  525. Ext.each(records, function(){
  526. if(r != ''){
  527. r += ';';
  528. }
  529. r += Math.abs(this.get('id'));
  530. });
  531. Ext.getCmp('sharedid').setValue(r);
  532. },
  533. reLoadTreeAndGrid:function(){
  534. var tree= Ext.getCmp('PersonalAddressTree');
  535. var groupid=Ext.getCmp('groupid').getValue();
  536. var findcondition=(groupid==0) ?'ab_recorderid='+emid : 'ab_groupid='+groupid+' AND ab_recorderid='+emid;
  537. var gridParam = {caller: caller, condition:findcondition };
  538. var grid=Ext.getCmp('AttentionGridPanel');
  539. grid.loadNewStore(grid, gridParam);
  540. tree.getTreeRootNode(tree);
  541. tree.getSelectionModel().select(tree.getStore().getNodeById(groupid),true);
  542. },
  543. onTextFieldChange: function() {
  544. var me = Ext.getCmp(gridid);
  545. me.view.refresh();
  546. me.searchValue = me.getSearchValue();
  547. me.indexes = [];
  548. me.currentIndex = null;
  549. if (me.searchValue !== null) {
  550. me.searchRegExp = new RegExp(me.searchValue, 'g' + (me.caseSensitive ? '' : 'i'));
  551. me.store.each(function(record, idx) {
  552. var td = Ext.fly(me.view.getNode(idx)).down('td'),
  553. cell, matches, cellHTML;
  554. while(td) {
  555. cell = td.down('.x-grid-cell-inner');
  556. matches = cell.dom.innerHTML.match(me.tagsRe);
  557. cellHTML = cell.dom.innerHTML.replace(me.tagsRe, me.tagsProtect);
  558. // populate indexes array, set currentIndex, and replace wrap matched string in a span
  559. cellHTML = cellHTML.replace(me.searchRegExp, function(m) {
  560. if (Ext.Array.indexOf(me.indexes, idx) === -1) {
  561. me.indexes.push(idx);
  562. }
  563. if (me.currentIndex === null) {
  564. me.currentIndex = idx;
  565. }
  566. return '<span class=" x-livesearch-matchbase">' + m + '</span>';
  567. });
  568. // restore protected tags
  569. Ext.each(matches, function(match) {
  570. cellHTML = cellHTML.replace(me.tagsProtect, match);
  571. });
  572. // update cell html
  573. cell.dom.innerHTML = cellHTML;
  574. td = td.next();
  575. }
  576. }, me);
  577. if (me.currentIndex !== null) {
  578. me.getSelectionModel().select(me.currentIndex);
  579. }
  580. }
  581. // no results found
  582. if (me.currentIndex === null) {
  583. me.getSelectionModel().deselectAll();
  584. }
  585. Ext.getCmp('search').focus();
  586. },
  587. });