Datalist.js 44 KB

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