Datalist.js 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.opensys.Datalist', {
  3. extend: 'Ext.app.Controller',
  4. requires: ['erp.util.BaseUtil', 'erp.util.FormUtil', 'erp.util.RenderUtil'],
  5. views:[
  6. 'opensys.datalist.Viewport','opensys.datalist.GridPanel','opensys.datalist.Toolbar'
  7. ],
  8. init:function(){
  9. this.BaseUtil = Ext.create('erp.util.BaseUtil');
  10. this.FormUtil = Ext.create('erp.util.FormUtil');
  11. this.GridUtil = Ext.create('erp.util.GridUtil');
  12. this.control({
  13. 'erpDatalistGridPanel': {
  14. itemclick: this.onGridItemClick
  15. },
  16. 'erpVastDeleteButton': {
  17. click: function(btn){
  18. var dlwin = new Ext.window.Window({
  19. id : 'dlwin',
  20. title: btn.text,
  21. height: "100%",
  22. width: "80%",
  23. maximizable : true,
  24. buttonAlign : 'center',
  25. layout : 'anchor',
  26. items: [{
  27. tag : 'iframe',
  28. frame : true,
  29. anchor : '100% 100%',
  30. layout : 'fit',
  31. html : '<iframe id="iframe_dl_'+caller+'" src="'+basePath+'jsps/common/vastDatalist.jsp?urlcondition='+condition+'&whoami='+caller+'" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
  32. }],
  33. buttons : [{
  34. text: btn.text,
  35. iconCls: btn.iconCls,
  36. cls: 'x-btn-gray-1',
  37. handler: function(){
  38. }
  39. },{
  40. text : '关 闭',
  41. iconCls: 'x-button-icon-close',
  42. cls: 'x-btn-gray',
  43. handler : function(){
  44. Ext.getCmp('dlwin').close();
  45. }
  46. }]
  47. });
  48. dlwin.show();
  49. }
  50. },
  51. 'button[id=searchlist]': {
  52. click: function(){
  53. this.showSearchListWin();
  54. }
  55. },
  56. 'button[id=customize]': {
  57. click: function(){
  58. this.showCustomizeWin();
  59. }
  60. },
  61. 'dbfindtrigger[name=sl_label]': {
  62. afterrender: function(t){
  63. t.dbBaseCondition = 'sl_caller=\'' + caller + '\'';
  64. }
  65. }
  66. });
  67. },
  68. onGridItemClick: function(selModel, record){//grid行选择
  69. if(typeof parentDoc !== 'undefined' && parentDoc) {
  70. var doc = parent.Ext.getCmp(parentDoc);
  71. if(doc) {
  72. doc.fireEvent('itemselect', doc, record.data);
  73. }
  74. } else {
  75. if(keyField != null && keyField != ''){//有些datalist不需要打开明细表,这些表在datalist表里面不用配dl_keyField
  76. if(keyField.indexOf('+') > 0) {//多条件传入查询界面//vd_vsid@vd_id+vd_class@vd_class
  77. this.openQueryUrl(record);
  78. } else {
  79. this.openUrl(record);
  80. }
  81. }
  82. }
  83. },
  84. openUrl: function(record) {
  85. var me = this, value = record.data[keyField];
  86. var formCondition = keyField + "IS" + value ;
  87. var gridCondition = pfField + "IS" + value;
  88. var newmaster = record.data['CURRENTMASTER'];
  89. if(!Ext.isEmpty(pfField) && pfField.indexOf('+') > -1) {//多条件传入维护界面//vd_vsid@vd_id+vd_class@vd_class
  90. var arr = pfField.split('+'),ff = [],k = [];
  91. Ext.Array.each(arr, function(r){
  92. ff = r.split('@');
  93. k.push(ff[0] + 'IS\'' + record.get(ff[1]) + '\'');
  94. });
  95. gridCondition = k.join(' AND ');
  96. }
  97. var panelId = caller + keyField + "_" + value + gridCondition;
  98. var panel = Ext.getCmp(panelId);
  99. var main = parent.Ext.getCmp("content-panel");
  100. if(!main){
  101. main = parent.parent.Ext.getCmp("content-panel");
  102. }
  103. if(!panel){
  104. var title = "";
  105. if (value.toString().length>4) {
  106. title = value.toString().substring(value.toString().length-4);
  107. } else {
  108. title = value;
  109. }
  110. var myurl = '';
  111. if(me.BaseUtil.contains(url, '?', true)){
  112. myurl = url + '&formCondition='+formCondition+'&gridCondition='+gridCondition;
  113. } else {
  114. myurl = url + '?formCondition='+formCondition+'&gridCondition='+gridCondition;
  115. }
  116. myurl += "&datalistId=" + main.getActiveTab().id;
  117. if( newmaster ){
  118. // myurl += "&newMaster=" + newmaster;
  119. var currentMaster = parent.window.sob;
  120. if ( currentMaster && currentMaster != newmaster) {// 与当前账套不一致
  121. me.openModalWin(newmaster, currentMaster, myurl);return;
  122. }
  123. }
  124. main.getActiveTab().currentStore = me.getCurrentStore(value);//用于单据翻页
  125. main.getActiveTab().currentRecord=record;
  126. if(main._mobile) {
  127. main.addPanel(me.BaseUtil.getActiveTab().title+'('+title+')', myurl, panelId);
  128. } else {
  129. panel = {
  130. title : me.BaseUtil.getActiveTab().title+'('+title+')',
  131. tag : 'iframe',
  132. tabConfig:{tooltip:me.BaseUtil.getActiveTab().tabConfig.tooltip+'('+keyField + "=" + value+')'},
  133. border : false,
  134. layout : 'fit',
  135. iconCls : 'x-tree-icon-tab-tab1',
  136. html : '<iframe id="iframe_maindetail_'+caller+"_"+value+'" src="' + myurl + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
  137. closable : true,
  138. listeners : {
  139. close : function(){
  140. if(!main){
  141. main = parent.parent.Ext.getCmp("content-panel");
  142. }
  143. main.setActiveTab(main.getActiveTab().id);
  144. }
  145. }
  146. };
  147. this.openTab(panel, panelId);
  148. }
  149. }else{
  150. main.setActiveTab(panel);
  151. }
  152. },
  153. openQueryUrl: function(record) {
  154. var me = this, arr = keyField.split('+'),ff = [],k = [];//vd_vsid@vd_id+vd_class@vd_class
  155. Ext.Array.each(arr, function(r){
  156. ff = r.split('@');
  157. var val = record.get(ff[1]);
  158. if(val instanceof Date)
  159. val = Ext.Date.format(val, 'Y-m-d');
  160. k.push(ff[0] + '=' + val);
  161. });
  162. var myurl = k.join('&');
  163. var panelId = caller + "_" + myurl;
  164. var panel = Ext.getCmp(panelId);
  165. var main = parent.Ext.getCmp("content-panel");
  166. if(!main){
  167. main = parent.parent.Ext.getCmp("content-panel");
  168. }
  169. if(!panel){
  170. var title = me.BaseUtil.getActiveTab().title + '-查询';
  171. if(contains(url, '?', true)){
  172. myurl = url + '&' + myurl;
  173. } else {
  174. myurl = url + '?' + myurl;
  175. }
  176. if (main._mobile) {
  177. main.addPanel(title, myurl, panelId);
  178. } else {
  179. panel = {
  180. title : title,
  181. tag : 'iframe',
  182. tabConfig: {tooltip: title},
  183. border : false,
  184. layout : 'fit',
  185. iconCls : 'x-tree-icon-tab-tab1',
  186. html : '<iframe src="' + myurl + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
  187. closable : true,
  188. listeners : {
  189. close : function(){
  190. if(!main){
  191. main = parent.parent.Ext.getCmp("content-panel");
  192. }
  193. main.setActiveTab(main.getActiveTab().id);
  194. }
  195. }
  196. };
  197. this.openTab(panel, panelId);
  198. }
  199. } else {
  200. main.setActiveTab(panel);
  201. }
  202. },
  203. openTab : function (panel,id){
  204. var o = (typeof panel == "string" ? panel : id || panel.id);
  205. var main = parent.Ext.getCmp("content-panel");
  206. /*var tab = main.getComponent(o); */
  207. if(!main) {
  208. main =parent.parent.Ext.getCmp("content-panel");
  209. }
  210. var tab = main.getComponent(o);
  211. if (tab) {
  212. main.setActiveTab(tab);
  213. } else if(typeof panel!="string"){
  214. panel.id = o;
  215. var p = main.add(panel);
  216. main.setActiveTab(p);
  217. }
  218. },
  219. openModalWin: function(master, current, url) {
  220. if (parent.Ext) {
  221. Ext.Ajax.request({
  222. url: basePath + 'common/changeMaster.action',
  223. params: {
  224. to: master
  225. },
  226. callback: function(opt, s, r) {
  227. if (s) {
  228. var win = parent.Ext.create('Ext.Window', {
  229. width: '100%',
  230. height: '100%',
  231. draggable: false,
  232. closable: false,
  233. modal: true,
  234. id:'modalwindow',
  235. historyMaster:current,
  236. title: '创建到账套' + master + '的临时会话',
  237. html : '<iframe src="' + url + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
  238. buttonAlign: 'center',
  239. buttons: [{
  240. text: $I18N.common.button.erpCloseButton,
  241. cls: 'x-btn-blue',
  242. id: 'close',
  243. handler: function(b) {
  244. Ext.Ajax.request({
  245. url: basePath + 'common/changeMaster.action',
  246. params: {
  247. to: current
  248. },
  249. callback: function(opt, s, r) {
  250. if (s) {
  251. b.up('window').close();
  252. } else {
  253. alert('切换到原账套失败!');
  254. }
  255. }
  256. });
  257. }
  258. }]
  259. });
  260. win.show();
  261. } else {
  262. alert('无法创建到账套' + master + '的临时会话!');
  263. }
  264. }
  265. });
  266. }
  267. },
  268. getCurrentStore: function(value){
  269. var grid = Ext.getCmp('grid');
  270. var items = grid.store.data.items;
  271. var array = new Array();
  272. var o = null;
  273. Ext.each(items, function(item, index){
  274. o = new Object();
  275. o.selected = false;
  276. if(index == 0){
  277. o.prev = null;
  278. } else {
  279. o.prev = items[index-1].data[keyField];
  280. }
  281. if(index == items.length - 1){
  282. o.next = null;
  283. } else {
  284. o.next = items[index+1].data[keyField];
  285. }
  286. var v = item.data[keyField];
  287. o.value = v;
  288. if(v == value)
  289. o.selected = true;
  290. array.push(o);
  291. });
  292. return array;
  293. },
  294. showSearchListWin: function(){
  295. var me = this, win = this.searchWin;
  296. if (!win){
  297. win = this.searchWin = Ext.create('Ext.window.Window', {
  298. title: '高级查询',
  299. height: screen.height*0.7*0.8,
  300. width: screen.width*0.7*0.6,
  301. maximizable : true,
  302. closable: false,
  303. buttonAlign : 'center',
  304. layout : 'border',
  305. bodyStyle: 'background:#f1f1f1;',
  306. tools: [{
  307. type: 'close',
  308. handler: function(e, el, header, tool){
  309. tool.ownerCt.ownerCt.down('grid').setEffectData();//保留已选择的条件
  310. tool.ownerCt.ownerCt.hide();
  311. }
  312. }],
  313. items: [{
  314. xtype: 'form',
  315. region: 'north',
  316. layout: 'column',
  317. bodyStyle: 'background:#f1f1f1;',
  318. maxHeight: 100,
  319. buttonAlign: 'center',
  320. buttons: [{
  321. name: 'query',
  322. id: 'query',
  323. text: $I18N.common.button.erpQueryButton,
  324. iconCls: 'x-button-icon-query',
  325. cls: 'x-btn-gray',
  326. handler: function(btn){
  327. Ext.getCmp('grid').getCount(caller);
  328. btn.ownerCt.ownerCt.ownerCt.hide();
  329. }
  330. },{
  331. cls: 'x-btn-gray',
  332. text: '清空',
  333. handler: function(btn){
  334. btn.ownerCt.ownerCt.ownerCt.down('grid').store.loadData([{},{},{},{},{},{},{},{},{},{}]);
  335. Ext.getCmp('grid').getCount(caller);
  336. }
  337. },{
  338. cls: 'x-btn-gray',
  339. text: '关闭',
  340. handler: function(btn){
  341. btn.ownerCt.ownerCt.ownerCt.down('grid').setEffectData();
  342. btn.ownerCt.ownerCt.ownerCt.hide();
  343. }
  344. },{
  345. xtype: 'radio',
  346. name: 'separator',
  347. boxLabel: '与',
  348. checked: true,
  349. inputValue: 'AND',
  350. getCheckValue: function(){
  351. return this.checked ? 'AND' : 'OR';
  352. }
  353. },{
  354. xtype: 'radio',
  355. name: 'separator',
  356. boxLabel: '或',
  357. inputValue: 'OR'
  358. }]
  359. }, me.getSearchListGrid(), me.getTemplateForm() ]
  360. });
  361. Ext.getCmp('grid').searchGrid = win.down('grid');
  362. Ext.getCmp('grid').tempalteForm = win.down('form[name=template]');
  363. this.getTemplates(caller);
  364. }
  365. win.show();
  366. win.down('grid').loadData();
  367. },
  368. showCustomizeWin:function(){
  369. var me = this, win = this.CustomizeWin, grid = Ext.getCmp('grid');
  370. if(!win){
  371. var ablecolumns=new Array(),unselectcolumns=grid.basecolumns;
  372. Ext.Array.each(grid.columns,function(item){
  373. if(item.text && item.text.indexOf('&#160')<0){
  374. ablecolumns.push(item);
  375. }
  376. });
  377. unselectcolumns.splice(0,ablecolumns.length);
  378. this.CustomizeWin=win = Ext.create('Ext.window.Window', {
  379. title: '<div align="center">个性设置</div>',
  380. height: screen.height*0.7,
  381. width: screen.width*0.7*0.9,
  382. layout:'border',
  383. closeAction:'hide',
  384. items:[{
  385. region:'center',
  386. layout:{
  387. type: 'hbox',
  388. align: 'stretch',
  389. padding: 5
  390. },
  391. defaults : { flex : 1 },
  392. items:[{
  393. xtype:'grid',
  394. multiSelect: true,
  395. id: 'fromgrid',
  396. title:'可选项',
  397. flex:0.7,
  398. cls: 'custom-grid',
  399. store:Ext.create('Ext.data.Store', {
  400. fields: [{name:'dataIndex',type:'string'},{name:'text',type:'string'},{name:'width',type:'number'}],
  401. data: unselectcolumns,
  402. filterOnLoad: false
  403. }),
  404. plugins: [Ext.create('erp.view.core.grid.HeaderFilter')],
  405. viewConfig: {
  406. plugins: {
  407. ptype: 'gridviewdragdrop',
  408. dragGroup: 'togrid',
  409. dropGroup: 'togrid'
  410. }
  411. },
  412. stripeRows: false,
  413. columnLines:true,
  414. columns:[{
  415. dataIndex:'dataIndex',
  416. cls :"x-grid-header-1",
  417. text:'字段名称',
  418. width:120,
  419. filter: {
  420. xtype : 'textfield'
  421. }
  422. },{
  423. dataIndex:'text',
  424. text:'描述',
  425. cls :"x-grid-header-1",
  426. flex:1,
  427. filter: {
  428. xtype : 'textfield'
  429. }
  430. },{
  431. dataIndex:'width',
  432. text:'宽度',
  433. width:60,
  434. cls :"x-grid-header-1",
  435. align:'right',
  436. editor: {
  437. xtype: 'numberfield',
  438. format:0
  439. },
  440. filter: {
  441. xtype : 'textfield'
  442. }
  443. }]
  444. },{
  445. xtype:'grid',
  446. multiSelect: true,
  447. id: 'togrid',
  448. stripeRows: true,
  449. columnLines:true,
  450. title:'显示项',
  451. store:Ext.create('Ext.data.Store', {
  452. fields: [{name:'dataIndex',type:'string'},{name:'text',type:'string'},{name:'width',type:'number'},
  453. {name:'orderby',type:'string'},{name:'priority',type:'string'}],
  454. data:ablecolumns,
  455. filterOnLoad: false
  456. }),
  457. necessaryField:'dataIndex',
  458. plugins: [Ext.create('erp.view.core.grid.HeaderFilter'),
  459. Ext.create('Ext.grid.plugin.CellEditing', {
  460. clicksToEdit: 1
  461. })],
  462. viewConfig: {
  463. plugins: {
  464. ptype: 'gridviewdragdrop',
  465. dragGroup: 'togrid',
  466. dropGroup: 'togrid'
  467. }
  468. },
  469. columns:[{
  470. dataIndex:'dataIndex',
  471. text:'字段名称',
  472. cls :"x-grid-header-1",
  473. width:120,
  474. filter: {
  475. xtype : 'textfield'
  476. }
  477. },{
  478. dataIndex:'text',
  479. text:'描述',
  480. cls :"x-grid-header-1",
  481. flex:1,
  482. filter: {
  483. xtype : 'textfield'
  484. }
  485. },{
  486. dataIndex:'width',
  487. text:'宽度',
  488. width:60,
  489. xtype:'numbercolumn',
  490. align:'right',
  491. cls :"x-grid-header-1",
  492. filter: {
  493. xtype : 'textfield'
  494. },
  495. editable:true,
  496. format: '0',
  497. editor: {
  498. xtype: 'numberfield',
  499. hideTrigger: true
  500. },
  501. },
  502. {
  503. dataIndex:'orderby',
  504. text:'排序',
  505. width:60,
  506. xtype:'combocolumn',
  507. cls :"x-grid-header-1",
  508. filter: {
  509. xtype : 'textfield'
  510. },
  511. renderer:function(val){
  512. if(val=='ASC'){
  513. return '<img src="' + basePath + 'resource/images/16/up.png">' +
  514. '<span style="color:red;padding-left:2px">升序</span>';
  515. } else if(val=='DESC') {
  516. return '<img src="' + basePath + 'resource/images/16/down.png">' +
  517. '<span style="color:red;padding-left:2px">降序</span>';
  518. }
  519. },
  520. editor:{
  521. xtype:'combo',
  522. queryMode: 'local',
  523. displayField: 'display',
  524. valueField: 'value',
  525. store:Ext.create('Ext.data.Store', {
  526. fields: ['value', 'display'],
  527. data : [{value:"ASC", display:"升序"},
  528. {value:"DESC", display:"降序"}]
  529. })
  530. }
  531. },{
  532. dataIndex:'priority',
  533. text:'优先级',
  534. width:60,
  535. align:'right',
  536. cls :"x-grid-header-1",
  537. filter: {
  538. xtype : 'textfield'
  539. },
  540. editor:{
  541. xtype:'combo',
  542. queryMode: 'local',
  543. displayField: 'display',
  544. valueField: 'value',
  545. store:Ext.create('Ext.data.Store', {
  546. fields: ['value', 'display'],
  547. data : [{value:"1", display:"1"},
  548. {value:"2", display:"2"},
  549. {value:"3", display:"3"},
  550. {value:"4", display:"4"},
  551. {value:"5", display:"5"},
  552. {value:"6", display:"6"},
  553. {value:"7", display:"7"},
  554. {value:"8", display:"8"},
  555. {value:"9", display:"9"},]
  556. })
  557. }
  558. }]
  559. }]
  560. }],
  561. buttonAlign:'center',
  562. buttons:['->',{
  563. text:'重置',
  564. scope:this,
  565. handler:function(btn){
  566. warnMsg('重置列表将还原配置,确认重置吗?', function(btn){
  567. if(btn == 'yes'){
  568. Ext.Ajax.request({
  569. url : basePath + 'common/resetEmpsDataListDetails.action?_noc=1',
  570. params: {
  571. caller:caller
  572. },
  573. method : 'post',
  574. callback : function(options,success,response){
  575. var localJson = new Ext.decode(response.responseText);
  576. if(localJson.success){
  577. showMessage('提示','重置成功!',1000);
  578. window.location.reload();
  579. } else {
  580. if(localJson.exceptionInfo){
  581. var str = localJson.exceptionInfo;
  582. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  583. str = str.replace('AFTERSUCCESS', '');
  584. showError(str);
  585. } else {
  586. showError(str);return;
  587. }
  588. }
  589. }
  590. }
  591. });
  592. }
  593. });
  594. }
  595. },{
  596. style:'margin-left:5px;',
  597. text:'保存',
  598. scope:this,
  599. handler:function(btn){
  600. var grid=Ext.getCmp('togrid'),fromgrid=Ext.getCmp('fromgrid');
  601. var jsonGridData = new Array(),datas=new Array();
  602. var form = Ext.getCmp('form');
  603. grid.getStore().each(function(item){//将grid里面各行的数据获取并拼成jsonGridData
  604. var data = {
  605. dde_field:item.data.dataIndex,
  606. dde_width:item.data.width,
  607. dde_orderby:item.data.orderby,
  608. dde_priority:item.data.priority
  609. };
  610. item.dirty=false;
  611. jsonGridData.push(Ext.JSON.encode(data));
  612. datas.push(item.data);
  613. });
  614. Ext.Ajax.request({
  615. url : basePath + 'common/saveEmpsDataListDetails.action?_noc=1',
  616. params : {
  617. caller:caller,
  618. data:unescape(jsonGridData.toString())
  619. },
  620. method : 'post',
  621. callback : function(options,success,response){
  622. var localJson = new Ext.decode(response.responseText);
  623. if(localJson.success){
  624. showMessage('提示','保存成功!',1000);
  625. window.location.reload();
  626. }
  627. }
  628. });
  629. }
  630. },{
  631. style:'margin-left:5px;',
  632. text:'关闭',
  633. handler:function(btn){
  634. btn.ownerCt.ownerCt.hide();
  635. }
  636. },'->']
  637. });
  638. }
  639. win.show();
  640. },
  641. getFilterCondition: function(){
  642. var fields = Ext.getCmp('grid').plugins[0].fields;
  643. var items = new Array();
  644. Ext.each(Ext.Object.getKeys(fields), function(key){
  645. var item = fields[key];
  646. if(item.value != null && item.value.toString().trim() != ''){
  647. items.push({
  648. xtype: item.xtype,
  649. id: item.itemId,
  650. fieldLabel: item.fieldLabel,
  651. fieldStyle: item.fieldStyle,
  652. value: item.value,
  653. columnWidth: 0.5,
  654. cls: 'form-field-border',
  655. listeners: {
  656. change: function(f){
  657. Ext.getCmp(item.id).setValue(f.value);
  658. }
  659. }
  660. });
  661. }
  662. });
  663. return items;
  664. },
  665. getGridColumns : function() {
  666. var grid = Ext.getCmp('grid'), columns = grid.headerCt.getGridColumns(), data = [];
  667. Ext.each(columns, function(){
  668. if(this.dataIndex && this.getWidth() > 0) {
  669. data.push({
  670. display : this.text,
  671. value : this.text,
  672. column : this
  673. });
  674. }
  675. });
  676. return data;
  677. },
  678. getSearchListGrid: function(){
  679. var data = this.getGridColumns();
  680. var grid = Ext.create('Ext.grid.Panel', {
  681. maxHeight: 350,
  682. region: 'center',
  683. store: Ext.create('Ext.data.Store', {
  684. fields:[{
  685. name: 'sl_label',
  686. type: 'string'
  687. },{
  688. name: 'sl_field',
  689. type: 'string'
  690. },{
  691. name: 'sl_type',
  692. type: 'string'
  693. },{
  694. name: 'sl_dbfind',
  695. type: 'string'
  696. },{
  697. name: 'union',
  698. type: 'string'
  699. },{
  700. name: 'value'
  701. }],
  702. data: []
  703. }),
  704. columns: [{
  705. text: '条件',
  706. flex: 2,
  707. dataIndex: 'sl_label',
  708. editor: {
  709. xtype: 'combo',
  710. store : Ext.create('Ext.data.Store', {
  711. fields : [ 'display', 'value', 'column' ],
  712. data : data
  713. }),
  714. editable: false,
  715. displayField : 'display',
  716. valueField : 'value',
  717. queryMode : 'local'
  718. },
  719. renderer : function(val, meta, record, x, y, store, view) {
  720. if (val) {
  721. var column = view.ownerCt.headerCt.getHeaderAtIndex(y);
  722. if(column && typeof column.getEditor != 'undefined') {
  723. var editor = column.getEditor(record);
  724. if (editor && editor.lastSelection.length > 0) {
  725. var cm = editor.lastSelection[0].get('column'),
  726. field = cm.dataIndex;
  727. if (record.get('sl_field') != field)
  728. record.set('sl_field', field);
  729. var t = 'S';
  730. if(cm.xtype == 'datecolumn' || cm.xtype == 'datetimecolumn') {
  731. t = 'D';
  732. } else if(cm.xtype == 'numbercolumn') {
  733. t = 'N';
  734. }
  735. if (record.get('sl_type') != t)
  736. record.set('sl_type', t);
  737. }
  738. }
  739. } else {
  740. if (record.get('sl_field')) {
  741. record.set('sl_field', null);
  742. }
  743. }
  744. return val;
  745. },
  746. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  747. if (type == 'click' || type == 'dbclick') {
  748. return true;
  749. }
  750. return false;
  751. }
  752. },{
  753. text: '',
  754. hidden: true,
  755. dataIndex: 'sl_field',
  756. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  757. return false;
  758. }
  759. },{
  760. text: '',
  761. hidden: true,
  762. dataIndex: 'sl_type',
  763. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  764. return false;
  765. }
  766. },{
  767. text: '关系',
  768. flex: 1,
  769. dataIndex: 'union',
  770. xtype:'combocolumn',
  771. editor: {
  772. xtype: 'combo',
  773. store: Ext.create('Ext.data.Store', {
  774. fields: ['display', 'value'],
  775. data : [{"display": '等于', "value": '='},
  776. {"display": '大于', "value": '>'},
  777. {"display": '大于等于', "value": '>='},
  778. {"display": '小于', "value": '<'},
  779. {"display": '小于等于', "value": '<='},
  780. {"display": '不等于', "value": '<>'},
  781. {"display": '介于', "value": 'Between And'},
  782. {"display": '包含', "value": 'like'},
  783. {"display": '不包含', "value": 'not like'},
  784. {"display": '开头是', "value": 'begin like'},
  785. {"display": '开头不是', "value": 'begin not like'},
  786. {"display": '结尾是', "value": 'end like'},
  787. {"display": '结尾不是', "value": 'end not like'}]
  788. }),
  789. displayField: 'display',
  790. valueField: 'value',
  791. queryMode: 'local',
  792. editable: false,
  793. value: 'like'
  794. },
  795. /* renderer : function(v) {
  796. var r = v;
  797. switch(v) {
  798. case 'like':
  799. r = 'Like';break;
  800. case '=':
  801. r = '等于';break;
  802. case '>':
  803. r = '大于';break;
  804. case '>=':
  805. r = '大于等于';break;
  806. case '<':
  807. r = '小于';break;
  808. case '<=':
  809. r = '小于等于';break;
  810. case '<>':
  811. r = '不等于';break;
  812. case 'Between And':
  813. r = '介于';break;
  814. }
  815. return r;
  816. },*/
  817. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  818. if (type == 'click' || type == 'dbclick') {
  819. return true;
  820. }
  821. return false;
  822. }
  823. },{
  824. text: '值',
  825. flex: 3,
  826. dataIndex: 'value',
  827. renderer: function(val){
  828. if(Ext.isDate(val)){
  829. return Ext.Date.format(val, 'Y-m-d');
  830. }
  831. return val;
  832. },
  833. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  834. if (type == 'click' || type == 'dbclick') {
  835. var s = view.ownerCt.selModel, m = s.getSelection(), n = [];
  836. Ext.Array.each(m, function(){
  837. n.push(this);
  838. });
  839. n.push(view.ownerCt.store.getAt(recordIndex));
  840. s.select(n);
  841. return true;
  842. }
  843. return false;
  844. }
  845. }],
  846. columnLines: true,
  847. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  848. clicksToEdit: 1,
  849. listeners: {
  850. beforeedit: function(e){
  851. if(e.field == 'value'){
  852. var record = e.record;
  853. var column = e.column;
  854. if(record.data['union'] == null || record.data['union'] == ''){
  855. record.set('union', 'like');
  856. }
  857. var f = record.data['sl_field'];
  858. switch(record.data['sl_type']){
  859. case 'D':
  860. switch(record.data['union']){
  861. case 'Between And':
  862. column.setEditor(new erp.view.core.form.FtDateField({
  863. id: f,
  864. name: f
  865. }));break;
  866. default:
  867. column.setEditor(new Ext.form.field.Date({
  868. id: f,
  869. name: f
  870. }));break;
  871. }
  872. break;
  873. case 'S':
  874. switch(record.data['union']){
  875. case 'Between And':
  876. column.setEditor(new erp.view.core.form.FtField({
  877. id: f,
  878. name: f,
  879. value: e.value
  880. }));break;
  881. default:
  882. column.setEditor(new Ext.form.field.Text({
  883. id: f,
  884. name: f
  885. }));break;
  886. }
  887. break;
  888. case 'N':
  889. switch(record.data['union']){
  890. case 'Between And':
  891. column.setEditor(new erp.view.core.form.FtNumberField({
  892. id: f,
  893. name: f
  894. }));break;
  895. default:
  896. column.setEditor(new Ext.form.field.Number({
  897. id: f,
  898. name: f
  899. }));break;
  900. }
  901. break;
  902. case 'T':
  903. column.dbfind = record.get('sl_dbfind');
  904. switch(record.data['union']){
  905. case 'Between And':
  906. column.setEditor(new erp.view.core.form.FtFindField({
  907. id: f,
  908. name: f
  909. }));break;
  910. default:
  911. column.setEditor(new erp.view.core.trigger.DbfindTrigger({
  912. id: f,
  913. name: f
  914. }));break;
  915. }
  916. break;
  917. default:
  918. column.setEditor(null);
  919. }
  920. }
  921. }
  922. }
  923. }),
  924. selModel: Ext.create('Ext.selection.CheckboxModel',{
  925. }),
  926. setEffectData: function(){
  927. var me = this;
  928. var datas = new Array();
  929. Ext.each(me.selModel.getSelection(), function(item){
  930. var data = item.data;
  931. if(!Ext.isEmpty(data.sl_label) && !Ext.isEmpty(data.union) && !Ext.isEmpty(data.value)){
  932. datas.push(data);
  933. }
  934. });
  935. me.effectdata = datas;
  936. },
  937. getEffectData: function(){
  938. return this.effectdata || new Array();
  939. },
  940. loadData: function(){
  941. if(!this.effectdata) {
  942. this.store.add([{},{},{},{},{},{},{},{},{},{}]);
  943. }
  944. },
  945. /**
  946. * 将数据拼成Sql条件语句
  947. */
  948. getCondition: function(){
  949. this.setEffectData();
  950. var condition = '';
  951. var separator = this.up('window').down('form').down('radio').getCheckValue();
  952. Ext.each(this.effectdata, function(data){
  953. if(data.union == 'Between And'){
  954. var v1 = data.value.split('~')[0];
  955. var v2 = data.value.split('~')[1];
  956. if(data.sl_type == 'D'){
  957. if(condition == ''){
  958. condition = '(' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
  959. + v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
  960. } else {
  961. condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
  962. + v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
  963. }
  964. } else if(data.sl_type == 'N'){
  965. if(condition == ''){
  966. condition = '(' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
  967. } else {
  968. condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
  969. }
  970. } else{
  971. if(condition == ''){
  972. condition = '(' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
  973. } else {
  974. condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
  975. }
  976. }
  977. } else {
  978. if(data.sl_type == 'D'){
  979. var v = data.value, field = data.sl_field;
  980. if(Ext.isDate(v)) {
  981. v = Ext.Date.format(v, 'Y-m-d');
  982. }
  983. if(data.union == '<' || data.union == '<=' || data.union == '>' || data.union == '>='){
  984. v = "to_date('" + v + "','yyyy-MM-dd')";
  985. }else {
  986. v = Ext.Date.format(data.value, 'Ymd');
  987. field = "to_char(" + field + ",'yyyymmdd')";
  988. }
  989. if(condition == ''){
  990. condition = '(' + field + data.union + v + ') ';
  991. } else {
  992. condition += ' ' + separator +' (' + field + data.union + v + ') ';
  993. }
  994. } else {
  995. var v = data.value;
  996. var u =data.union ;
  997. if(data.union == 'like' || data.union=='not like'){
  998. v = " '%" + data.value + "%'";
  999. }else if(data.union =='begin like' || data.union =='begin not like'){
  1000. v = " '" + data.value + "%'";
  1001. u=data.union.substring(5);
  1002. }else if(data.union =='end like' || data.union=='end not like'){
  1003. v = " '%" + data.value + "'";
  1004. u=data.union.substring(3);
  1005. }else {
  1006. v = " '" + data.value + "'";
  1007. }
  1008. if(condition == ''){
  1009. condition = '(' + data.sl_field + " " +u + v + ") ";
  1010. } else {
  1011. condition += ' ' + separator +' (' + data.sl_field + " " +u + v + ") ";
  1012. }
  1013. }
  1014. }
  1015. });
  1016. return condition;
  1017. }
  1018. });
  1019. return grid;
  1020. },
  1021. getTemplateForm : function() {
  1022. var me = this;
  1023. return Ext.create('Ext.form.Panel', {
  1024. minHeight : 150,
  1025. region : 'south',
  1026. layout : 'column',
  1027. name : 'template',
  1028. bodyStyle : 'background:#f1f2f5;',
  1029. items : [{
  1030. xtype : 'fieldcontainer',
  1031. columnWidth : .75,
  1032. defaults : {
  1033. xtype : 'radio',
  1034. flex : 1,
  1035. margin : '5 0 5 15',
  1036. labelAlign : 'right'
  1037. },
  1038. items : [{
  1039. name : 'export-type',
  1040. boxLabel : '全部列',
  1041. checked : true
  1042. }]
  1043. }, {
  1044. xtype : 'fieldcontainer',
  1045. columnWidth : .25,
  1046. items : [{
  1047. xtype : 'button',
  1048. cls : 'x-btn-gray',
  1049. iconCls : 'x-button-icon-excel',
  1050. flex : 1,
  1051. margin : '15 0 5 0',
  1052. width : 80,
  1053. text : '导&nbsp;&nbsp;&nbsp;出',
  1054. handler : function(b) {
  1055. var grid = Ext.getCmp('grid'),
  1056. tb = grid.down('erpDatalistToolbar'),
  1057. r = b.ownerCt.ownerCt.down('radio[checked=true]');
  1058. if (r.fields)
  1059. tb.exportData(grid, b, r.boxLabel, r.fields);
  1060. else
  1061. tb.exportData(grid, b);
  1062. }
  1063. }
  1064. //已存在个性化设置列功能
  1065. /*,{
  1066. xtype : 'button',
  1067. cls : 'x-btn-gray',
  1068. flex : 1,
  1069. margin : '5 0 10 0',
  1070. width : 80,
  1071. text : '新建模板',
  1072. handler : function(b, e) {
  1073. var grid = Ext.getCmp('grid');
  1074. me.addTemplate(grid);
  1075. }
  1076. }*/
  1077. ]
  1078. }]
  1079. });
  1080. },
  1081. /* addTemplate : function(grid) {
  1082. var me = this, panel = grid.templatePanel;
  1083. if (!panel) {
  1084. var columns = grid.headerCt.getGridColumns(), data = [];
  1085. Ext.each(columns, function(){
  1086. if(this.dataIndex && this.getWidth() > 0) {
  1087. data.push({
  1088. boxLabel : this.text,
  1089. inputValue : this.dataIndex,
  1090. checked : true
  1091. });
  1092. }
  1093. });
  1094. data.push({
  1095. columnWidth : .8,
  1096. labelWidth : 60,
  1097. fieldLabel : '描述',
  1098. name : 'desc',
  1099. xtype : 'textfield',
  1100. allowBlank : false,
  1101. value : this.BaseUtil.getActiveTab().title + '(模板)-' + em_name
  1102. + '-' + Ext.Date.format(new Date(),'Ymd')
  1103. });
  1104. panel = grid.templatePanel = Ext.create('Ext.panel.Panel', {
  1105. floating : true,
  1106. shadow : 'frame',
  1107. layout : 'column',
  1108. width : 700,
  1109. bodyStyle : 'background:#f1f2f5;z-index:9999;',
  1110. defaults : {
  1111. xtype : 'checkbox',
  1112. margin : '5 5 15 15',
  1113. columnWidth : .25
  1114. },
  1115. items : data,
  1116. buttonAlign : 'center',
  1117. buttons : [{
  1118. text : '确认',
  1119. handler : function(b) {
  1120. var items = panel.query('checkbox[checked=true]'), fs = [];
  1121. Ext.each(items, function(){
  1122. fs.push(this.inputValue);
  1123. });
  1124. me.onTemplateAdd(panel, caller, fs.join(','), panel.down('textfield[name=desc]').value);
  1125. }
  1126. },{
  1127. text : '取消',
  1128. handler : function() {
  1129. panel.hide();
  1130. }
  1131. }]
  1132. });
  1133. }
  1134. panel.show();
  1135. panel.center();
  1136. },*/
  1137. onTemplateAdd : function(panel, caller, fields, desc) {
  1138. warnMsg('确定添加新模板:' + desc + '?', function(b){
  1139. if (b == 'ok' || b == 'yes') {
  1140. Ext.Ajax.request({
  1141. url : basePath + 'common/template/save.action',
  1142. params : {
  1143. _noc : 1,
  1144. caller : caller,
  1145. fields : fields,
  1146. desc : desc
  1147. },
  1148. callback : function(opt, s, res) {
  1149. var r = Ext.decode(res.responseText);
  1150. if (r.success) {
  1151. alert('添加成功!');
  1152. panel.hide();
  1153. var form = Ext.getCmp('grid').tempalteForm;
  1154. form.down('radio[value=true]').setValue(false);
  1155. form.items.first().add({
  1156. name : 'export-type',
  1157. boxLabel : desc,
  1158. fields : fields,
  1159. checked : true
  1160. });
  1161. }
  1162. }
  1163. });
  1164. }
  1165. });
  1166. },
  1167. getTemplates : function(caller) {
  1168. Ext.Ajax.request({
  1169. url : basePath + 'common/getFieldsDatas.action',
  1170. async: false,
  1171. params: {
  1172. caller: 'DataTemplate',
  1173. fields: 'dt_desc,dt_fields',
  1174. condition: 'dt_caller=\'' + caller + '\''
  1175. },
  1176. method : 'post',
  1177. callback : function(opt, s, res){
  1178. var r = new Ext.decode(res.responseText);
  1179. if(r.exceptionInfo){
  1180. showError(r.exceptionInfo);return;
  1181. }
  1182. if (r.success && r.data) {
  1183. var f = [], dd = Ext.decode(r.data);
  1184. if(dd.length > 0) {
  1185. Ext.each(dd, function(){
  1186. f.push({
  1187. name : 'export-type',
  1188. boxLabel : this.DT_DESC,
  1189. fields : this.DT_FIELDS
  1190. });
  1191. });
  1192. var form = Ext.getCmp('grid').tempalteForm;
  1193. form.items.first().add(f);
  1194. }
  1195. }
  1196. }
  1197. });
  1198. },
  1199. indexOf: function(array, item, from) {
  1200. if (supportsIndexOf) {
  1201. return array.indexOf(item, from);
  1202. }
  1203. var i, length = array.length;
  1204. for (i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++) {
  1205. if (array[i] === item) {
  1206. return i;
  1207. }
  1208. }
  1209. return -1;
  1210. },
  1211. });