AttentionGrid.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. Ext.define('erp.view.oa.attention.AttentionGrid',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.erpAttentionGridPanel',
  4. id: 'AttentionGridPanel',
  5. layout : 'auto',
  6. emptyText : '无数据',
  7. columnLines : true,
  8. autoScroll : true,
  9. store: [],
  10. columns: [],
  11. multiselected: [],
  12. bodyStyle: 'background: #f1f1f1;',
  13. GridUtil: Ext.create('erp.util.GridUtil'),
  14. BaseUtil: Ext.create('erp.util.BaseUtil'),
  15. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  16. clicksToEdit: 1
  17. }),
  18. dockedItems: [{
  19. xtype: 'toolbar',
  20. dock: 'top',
  21. style:'font-size:16px;height:40px',
  22. bodyStyle: 'font-size:16px;height:40px;background:#EBEBEB;',
  23. style:'background:#EBEBEB;height:40px;',
  24. layout:'column',
  25. items: [{
  26. id:'groupkind',
  27. hideLabel :true,
  28. readOnly:true,
  29. xtype:'textfield',
  30. columnWidth:0.9,
  31. style:'margin-left:10px;margin-top:10px',
  32. fieldStyle : 'background:#EBEBEB ;border-bottom-style: none;padding:2px 2px;vertical-align:middle;border-top:none;border-right:none;color:#CD661D;border-left:none; ',
  33. },{
  34. xtype:'textfield',
  35. id:'groupid',
  36. hidden:true,
  37. },'->',{
  38. xtype:'combo',
  39. fieldLabel:'移动到',
  40. disabled:true,
  41. labelSeparator :'',
  42. labelAlign:'right',
  43. style:'margin-left:10px;margin-top:10px',
  44. fieldStyle:"background:#FFFAFA;color:#515151; height:20px",
  45. labelStyle:'font-size:14px',
  46. id:'moveto',
  47. queryMode :'local',
  48. displayField:'display',
  49. valueField :'value',
  50. onTriggerClick:function(){
  51. var me = this;
  52. var data=null;
  53. var store=[];
  54. Ext.Ajax.request({
  55. url : basePath + 'oa/addressbook/getAddressBookGroup.action',
  56. async: false,
  57. method : 'post',
  58. callback : function(options,success,response){
  59. var res = new Ext.decode(response.responseText);
  60. if(res.exceptionInfo){
  61. showError(localJson.exceptionInfo);return;
  62. }else {
  63. data=res.tree;
  64. Ext.Array.each(data, function(tr) {
  65. if(tr.id!=0){
  66. tr.display=tr.text.substring(0,tr.text.indexOf('('));
  67. tr.value=tr.id;
  68. }
  69. });
  70. }
  71. }
  72. });
  73. this.getStore().loadData(data);
  74. Ext.create('Ext.data.Store', {
  75. fields: ['display', 'value'],
  76. data :data
  77. });
  78. if (!me.readOnly && !me.disabled) {
  79. if (me.isExpanded) {
  80. me.collapse();
  81. } else {
  82. me.expand();
  83. }
  84. me.inputEl.focus();
  85. }
  86. }
  87. },{
  88. xtype: 'button',
  89. id:'adduser',
  90. iconCls: 'x-menu-adduser',
  91. tooltip:'添加联系人' ,
  92. style:'margin-left:10px;margin-top:10px'
  93. },{
  94. xtype:'button',
  95. id:'deleteuser',
  96. disabled:true,
  97. tooltip:'删除联系人',
  98. iconCls: 'x-menu-deleteuser',
  99. style:'margin-left:10px;margin-top:10px'
  100. },{
  101. xtype:'button',
  102. id:'export',
  103. tooltip:'导出',
  104. iconCls: 'x-button-icon-excel',
  105. style:'margin-left:10px;margin-top:10px'
  106. },{
  107. xtype:'button',
  108. id:'import',
  109. tooltip:'导入',
  110. iconCls: 'x-button-icon-excel',
  111. style:'margin-left:10px;margin-top:10px'
  112. },{xtype:'button',
  113. id:'print',
  114. tooltip:'打印',
  115. iconCls: 'x-button-icon-print',
  116. style:'margin-left:10px;margin-right:20px;margin-top:10px'
  117. }]
  118. }],
  119. selModel: Ext.create('Ext.selection.CheckboxModel',{
  120. ignoreRightMouseSelection : false,
  121. listeners:{
  122. selectionchange:function(selectionModel, selected, options){
  123. }
  124. },
  125. onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法
  126. var me = Ext.getCmp('AttentionGridPanel');
  127. var bool = true;
  128. var items = me.selModel.getSelection();
  129. Ext.each(items, function(item, index){
  130. if(item.data == record.data){
  131. bool = false;
  132. me.selModel.deselect(record);
  133. Ext.Array.remove(items, item);
  134. Ext.Array.remove(me.multiselected, record);
  135. }
  136. });
  137. Ext.each(me.multiselected, function(item, index){
  138. items.push(item);
  139. });
  140. me.selModel.select(items);
  141. if(bool){
  142. view.el.focus();
  143. var checkbox = item.childNodes[0].childNodes[0].childNodes[0];
  144. if(checkbox.getAttribute('class') == 'x-grid-row-checker'){
  145. me.multiselected.push(record);
  146. items.push(record);
  147. me.selModel.select(items);
  148. } else {
  149. me.selModel.deselect(record);
  150. Ext.Array.remove(me.multiselected, record);
  151. }
  152. }
  153. if(items.length>0){
  154. Ext.getCmp('deleteuser').setDisabled(false);
  155. Ext.getCmp('moveto').setDisabled(false);
  156. }else {Ext.getCmp('deleteuser').setDisabled(true);
  157. Ext.getCmp('moveto').setDisabled(true);
  158. }
  159. },
  160. onHeaderClick: function(headerCt, header, e) {
  161. if (header.isCheckerHd) {
  162. e.stopEvent();
  163. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  164. if (isChecked) {
  165. this.deselectAll(true);
  166. var grid = Ext.getCmp('AttentionGridPanel');
  167. this.deselect(grid.multiselected);
  168. grid.multiselected = new Array();
  169. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  170. Ext.each(els, function(el, index){
  171. el.setAttribute('class','x-grid-row-checker');
  172. });
  173. header.el.removeCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  174. } else {
  175. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  176. var grid = Ext.getCmp('AttentionGridPanel');
  177. this.deselect(grid.multiselected);
  178. grid.multiselected = new Array();
  179. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  180. Ext.each(els, function(el, index){
  181. el.setAttribute('class','x-grid-row-checker');
  182. });
  183. this.selectAll(true);
  184. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  185. }
  186. }
  187. }
  188. }),
  189. initComponent : function(){
  190. this.addEvents({
  191. mouseover: true
  192. });
  193. condition = this.BaseUtil.getUrlParam('urlcondition');
  194. condition = (condition == null) ? "1=1": condition;
  195. condition = condition.replace(/@/,"'%").replace(/@/,"%'");
  196. this.defaultCondition = condition;
  197. var gridParam = {caller: caller, condition: condition};
  198. this.GridUtil.getGridColumnsAndStore(this, 'common/singleGridPanel.action?', gridParam, "");
  199. this.callParent(arguments);
  200. },
  201. viewConfig: {
  202. stripeRows: true
  203. },
  204. getMultiSelected: function(){
  205. var grid = this;
  206. var items = grid.selModel.getSelection();
  207. Ext.each(items, function(item, index){
  208. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  209. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  210. grid.multiselected.push(item);
  211. }
  212. });
  213. var records=Ext.Array.unique(grid.multiselected);
  214. var params = new Object();
  215. params.caller = caller;
  216. var data = new Array();
  217. Ext.each(records, function(record, index){
  218. if(grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  219. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  220. bool = true;
  221. var o = new Object();
  222. o[grid.keyField] = record.data[grid.keyField];
  223. if(grid.necessaryFields){
  224. Ext.each(grid.necessaryFields, function(f, index){
  225. var v = record.data[f];
  226. if(Ext.isDate(v)){
  227. v = Ext.Date.toString(v);
  228. }
  229. o[f] = v;
  230. });
  231. }
  232. data.push(o);
  233. }
  234. });
  235. params.data = Ext.encode(data);
  236. return params;
  237. },
  238. loadNewStore: function(grid, param){
  239. var me = this;
  240. var main = parent.Ext.getCmp("content-panel");
  241. if(!main)
  242. main = parent.parent.Ext.getCmp("content-panel");
  243. if(main){
  244. main.getActiveTab().setLoading(true);//loading...
  245. }
  246. Ext.Ajax.request({//拿到grid的columns
  247. url : basePath + "common/loadNewGridStore.action",
  248. params: param,
  249. async: false,
  250. method : 'post',
  251. callback : function(options,success,response){
  252. if(main){
  253. main.getActiveTab().setLoading(false);
  254. }
  255. var res = new Ext.decode(response.responseText);
  256. if(res.exceptionInfo){
  257. showError(res.exceptionInfo);return;
  258. }
  259. var data = res.data;
  260. if(!data || data.length == 0){
  261. data = [];
  262. me.add10EmptyData(grid.detno, data);
  263. me.add10EmptyData(grid.detno, data);//添20条吧
  264. }
  265. grid.store.loadData(data);
  266. //自定义event
  267. grid.addEvents({
  268. storeloaded: true
  269. });
  270. grid.fireEvent('storeloaded', grid);
  271. }
  272. });
  273. },
  274. /**
  275. * 从index行开始,往grid里面加十空行
  276. * @param detno 编号字段
  277. * @param data 需要添加空白数据的data
  278. */
  279. add10EmptyData: function(detno, data){
  280. if(detno){
  281. var index = data.length == 0 ? 0 : Number(data[data.length-1][detno]);
  282. for(var i=0;i<10;i++){
  283. var o = new Object();
  284. o[detno] = index + i + 1;
  285. data.push(o);
  286. }
  287. } else {
  288. for(var i=0;i<10;i++){
  289. var o = new Object();
  290. data.push(o);
  291. }
  292. }
  293. },
  294. getSearchValue: function() {
  295. var me = this,
  296. value = Ext.getCmp('search').getValue();
  297. if (value === '') {
  298. return null;
  299. }
  300. if (!me.regExpMode) {
  301. value = value.replace(me.regExpProtect, function(m) {
  302. return '\\' + m;
  303. });
  304. } else {
  305. try {
  306. new RegExp(value);
  307. } catch (error) {
  308. me.statusBar.setStatus({
  309. text: error.message,
  310. iconCls: 'x-status-error'
  311. });
  312. return null;
  313. }
  314. // this is stupid
  315. if (value === '^' || value === '$') {
  316. return null;
  317. }
  318. }
  319. return value;
  320. },
  321. });