DbfindButton.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907
  1. Ext.define('erp.view.core.button.DbfindButton',{
  2. extend: 'Ext.Button',
  3. alias: 'widget.erpDbfindButton',
  4. text: 'DBfind设置',
  5. cls: 'x-btn-gray',
  6. hidden: false,
  7. disabled:true,
  8. style: {
  9. marginLeft: '10px'
  10. },
  11. width: 120,
  12. initComponent : function(){
  13. this.callParent(arguments);
  14. },
  15. FormUtil:Ext.create('erp.util.FormUtil'),
  16. dbfindSetUI: function(caller, field, grid){
  17. var me=this;
  18. var formData=null,gridData=null,findData=null;
  19. var arr=new Array();
  20. grid = grid || Ext.getCmp('grid');
  21. Ext.Array.each(grid.data,function(item){
  22. var obj=new Object();
  23. //obj.display=item.fd_caption;
  24. obj.display=item.fd_field;
  25. obj.value=item.fd_field;
  26. arr.push(obj);
  27. });
  28. var localJson=me.getDbFindSetUI(caller,field);
  29. if(localJson!=null && localJson.griddata!=null){
  30. gridData=localJson.griddata;
  31. formData=localJson.formdata;
  32. findData=localJson.fields;
  33. }else {
  34. gridData=new Array();
  35. for(var i=0;i<10;i++){
  36. var o = new Object();
  37. gridData.push(o);
  38. }
  39. }
  40. function showButton(value,cellmeta){
  41. var returnStr = "<INPUT align='center' type='button' value='删除' onclick='Delete();'>";
  42. return returnStr;
  43. };
  44. Ext.create('Ext.Window', {
  45. width: '90%',
  46. height: '100%',
  47. autoShow: true,
  48. layout: 'border',
  49. title:'<h1>Form查找配置</h1>',
  50. items: [{
  51. region:'north',
  52. xtype: 'form',
  53. id:'dbform',
  54. layout: 'column',
  55. autoScroll:true,
  56. buttonAlign:'left',//'center',
  57. bodyStyle: 'background:#f1f1f1;',
  58. fieldDefaults: {
  59. labelWidth: 80,
  60. fieldStyle:'background:#FFFAFA;color:#515151;'
  61. },
  62. items: [{
  63. xtype: 'textfield',
  64. fieldLabel: '描述',
  65. allowBlank:false,
  66. fieldStyle:'background:#fffac0;color:#515151;',
  67. id:'ds_caption',
  68. name: 'ds_caption',
  69. columnWidth: 0.25
  70. },{
  71. xtype: 'dbfindtrigger',//'textfield',
  72. fieldLabel: '查找表名',
  73. name: 'ds_whichdbfind',
  74. id:'ds_whichdbfind',
  75. allowBlank:false,
  76. fieldStyle:'background:#fffac0;color:#515151;',
  77. columnWidth: 0.5
  78. },{
  79. xtype: 'dbfindtrigger',
  80. fieldLabel: '关联字段',
  81. name: 'ds_likefield',
  82. id: 'ds_likefield',
  83. allowBlank:false,
  84. fieldStyle:'background:#fffac0;color:#515151;',
  85. columnWidth: 0.25
  86. },{
  87. xtype:'adddbfindtrigger',//'multidbfindtrigger',
  88. fieldLabel:'所需表',
  89. name: 'ds_tables',
  90. id:'ds_tables',
  91. allowBlank:false,
  92. fieldStyle:'background:#fffac0;color:#515151;',
  93. columnWidth: 0.5,
  94. listeners:{
  95. change:function(){
  96. Ext.getCmp('submitchange').setDisabled(false);
  97. }
  98. }
  99. },{
  100. xtype: 'textfield',
  101. fieldLabel: '条件',
  102. name: 'ds_uifixedcondition',
  103. columnWidth: 0.5
  104. },{
  105. xtype: 'textfield',
  106. fieldLabel: '排序',
  107. name: 'ds_orderby',
  108. columnWidth: 0.5
  109. },{
  110. xtype: 'textfield',
  111. fieldLabel: '关联下拉项',
  112. name: 'ds_dlccaller',
  113. id:'ds_dlccaller',
  114. columnWidth: 0.47
  115. },{
  116. xtype: 'button',
  117. iconCls: 'dlccaller',
  118. cls: 'x-btn-tb',
  119. columnWidth: 0.02,
  120. tooltip: '获取关联下拉项',
  121. hidden: false,
  122. handler: function(){
  123. var table=Ext.getCmp('ds_tables').value;
  124. var fields='';
  125. var items=Ext.getCmp('dbgrid').store.data.items;
  126. Ext.each(items,function(i){
  127. if(i.data['ds_type']=='C'){
  128. fields+="'"+i.data['ds_findtoui_f']+"',";
  129. }
  130. });
  131. if(fields.length>0&&table){
  132. fields=fields.substring(0,fields.length-1);
  133. var arr=table.split('#');
  134. var con='';
  135. Ext.each(arr,function(v){
  136. con+="'"+v+"',";
  137. });
  138. con=con.substring(0,con.length-1).toUpperCase();
  139. Ext.Ajax.request({
  140. url : basePath +'common/getDlccallerByTables.action',
  141. params: {
  142. table:con,
  143. fields:fields
  144. },
  145. async: false,
  146. method : 'post',
  147. callback : function(options,success,response){
  148. var res = new Ext.decode(response.responseText);
  149. if(res.exceptionInfo != null){
  150. showError(res.exceptionInfo);return;
  151. }
  152. if(res.success){
  153. var arr=arr1=arr2=new Array();
  154. var s1=Ext.getCmp('ds_dlccaller').value;
  155. arr1=s1.split(',');
  156. var s2=res.callers;
  157. var arr2=s2.split(',');
  158. var arr=Ext.Array.union(arr1,arr2);
  159. arr=Ext.Array.remove(arr,'');
  160. Ext.getCmp('ds_dlccaller').setValue(arr.join(','));
  161. }
  162. }
  163. });
  164. }else{
  165. showError("未配置选择所需表或类型中未配置下拉类型");
  166. }
  167. }
  168. },{
  169. xtype: 'textfield',
  170. fieldLabel: '容错提示',
  171. name: 'ds_error',
  172. columnWidth: 0.5
  173. },{
  174. xtype:'hidden',
  175. name:'ds_id'
  176. },{
  177. xtype:'hidden',
  178. name:'ds_caller',
  179. value:caller
  180. },{
  181. xtype:'hidden',
  182. name:'ds_whichui',
  183. value:field
  184. }],
  185. buttons:[{
  186. xtype : 'tbtext',
  187. text:'<font color=gray>*点击【确认】根据所需表载入取值字段</font>' //'*点击【确认】根据所需表载入取值字段'
  188. },'->',{
  189. xtype:'button',
  190. text: '确认',
  191. id:'submitchange',
  192. iconCls: 'x-button-icon-submit',
  193. cls: 'x-btn-gray',
  194. width: 60,
  195. disabled:true,
  196. handler:function(btn){
  197. var newValue=Ext.getCmp('ds_tables').value;
  198. Ext.Ajax.request({
  199. url : basePath +'common/getDbFindFields.action',
  200. params: {
  201. table:newValue
  202. },
  203. async: false,
  204. method : 'post',
  205. callback : function(options,success,response){
  206. var res = new Ext.decode(response.responseText);
  207. if(res.exceptionInfo != null){
  208. showError(res.exceptionInfo);return;
  209. }
  210. if(res.success){
  211. findData=Ext.decode(res.findfields);
  212. }
  213. }
  214. });
  215. }
  216. },{
  217. xtype:'button',
  218. text: $I18N.common.button.erpSaveButton,
  219. iconCls: 'x-button-icon-save',
  220. cls: 'x-btn-gray',
  221. formBind: true,//form.isValid() == false时,按钮disabled
  222. width: 60,
  223. style: {
  224. marginLeft: '10px'
  225. },
  226. handler:function(){
  227. me.save(me,caller,field);
  228. }
  229. },{
  230. xtype:'button',
  231. text: $I18N.common.button.erpCloseButton,
  232. iconCls: 'x-button-icon-close',
  233. cls: 'x-btn-gray',
  234. width: 60,
  235. style: {
  236. marginLeft: '10px'
  237. },
  238. handler:function(btn){
  239. btn.ownerCt.ownerCt.ownerCt.close();
  240. }
  241. },'->','->']
  242. },{
  243. region:'center',
  244. xtype: 'grid',
  245. id:'dbgrid',
  246. columnLines:true,
  247. store:Ext.create('Ext.data.Store',{
  248. fields:['ds_findtoui_f','ds_findtoui_i','ds_dbcaption',{name:'ds_dbwidth',type:'float'},{name:'ds_type',defaultValue:'S'}]
  249. }),
  250. necessaryFields:['ds_findtoui_f','ds_findtoui_i','ds_dbcaption'],
  251. viewConfig: {
  252. plugins: {
  253. ptype: 'gridviewdragdrop',
  254. dragGroup: 'dbgrid',
  255. dropGroup: 'dbgrid'
  256. }
  257. },
  258. emptyText : $I18N.common.grid.emptyText,
  259. bodyStyle: 'background-color:#f1f1f1;',
  260. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  261. clicksToEdit: 1
  262. }),
  263. listeners:{
  264. itemclick:function(selModel, record,e,index){
  265. var grid=selModel.ownerCt;
  266. if(index.toString() == 'NaN'){
  267. index = '';
  268. }
  269. if(index == grid.store.data.items.length-1){//如果选择了最后一行
  270. var items=grid.store.data.items;
  271. for(var i=0;i<10;i++){
  272. var o = new Object();
  273. grid.store.insert(items.length, o);
  274. items[items.length-1]['index'] = items.length-1;
  275. }
  276. }
  277. }
  278. },
  279. columns: [{
  280. cls : "x-grid-header-1",
  281. text: '取值字段',
  282. xtype: 'combocolumn',
  283. dataIndex: 'ds_findtoui_f',
  284. renderer: function(val, meta, record){
  285. if(!val){
  286. val="";
  287. }
  288. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  289. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  290. },
  291. flex: 1,
  292. format:"",
  293. editor: {
  294. format:'',
  295. xtype: 'combo',
  296. listConfig:{
  297. maxHeight:180
  298. },
  299. store: {
  300. fields: ['display', 'value'],
  301. data :[]
  302. },
  303. displayField: 'display',
  304. valueField: 'value',
  305. queryMode: 'local',
  306. onTriggerClick:function(trigger){
  307. var me=this;
  308. this.getStore().loadData(findData);
  309. if (!me.readOnly && !me.disabled) {
  310. if (me.isExpanded) {
  311. me.collapse();
  312. } else {
  313. me.expand();
  314. }
  315. me.inputEl.focus();
  316. }
  317. }
  318. }
  319. },{
  320. cls : "x-grid-header-1",
  321. text: '赋值字段',
  322. xtype: 'combocolumn',
  323. dataIndex: 'ds_findtoui_i',
  324. flex: 1,
  325. renderer: function(val, meta, record){
  326. if(!val){
  327. val="";
  328. }
  329. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  330. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  331. },
  332. /*renderer: function(val, meta, record){
  333. return val;
  334. },*/
  335. editor: {
  336. format:"",
  337. xtype: 'combo',
  338. listConfig:{
  339. maxHeight:180
  340. },
  341. store: {
  342. fields: ['display', 'value'],
  343. data:arr
  344. },
  345. displayField: 'display',
  346. valueField: 'value',
  347. queryMode: 'local'
  348. }
  349. },{
  350. cls : "x-grid-header-1",
  351. text: '描述',
  352. dataIndex: 'ds_dbcaption',
  353. flex: 1,
  354. renderer: function(val, meta, record){
  355. if(!val){
  356. val="";
  357. }
  358. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  359. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  360. },
  361. editor:{
  362. xtype:'textfield',
  363. format:""
  364. }
  365. },{
  366. cls : "x-grid-header-1",
  367. text: '列宽',
  368. dataIndex: 'ds_dbwidth',
  369. //format: '0',
  370. flex:1,
  371. editor: {
  372. xtype: 'textfield'
  373. ///format: '0'
  374. }
  375. },{
  376. cls : "x-grid-header-1",
  377. text: '类型',
  378. dataIndex: 'ds_type',
  379. flex: 1,
  380. editor:{
  381. xtype:'combo',
  382. editable : false,
  383. store: {
  384. fields:['display','value'],
  385. data:[{'display':'字符串','value':'S'},
  386. {'display':'数字','value':'N'},
  387. {'display':'日期','value':'D'},
  388. {'display':'时间','value':'DT'},
  389. {'display':'是否(-1,0)','value':'YN'},
  390. {'display':'下拉框','value':'C'}]},
  391. queryMode: 'local',
  392. displayField: 'display',
  393. valueField: 'value'
  394. }
  395. },{
  396. xtype:'actioncolumn',
  397. cls : "x-grid-header-1",
  398. header:'操作',
  399. //width:50,
  400. align:'center',
  401. items: [{
  402. icon : basePath+'resource/images/delete.png',
  403. handler: function(grid, rowIndex, colIndex) {
  404. grid.getStore().removeAt(rowIndex);
  405. }
  406. }],
  407. flex:0.3
  408. }]
  409. }]
  410. });
  411. if(formData!=null){
  412. if(formData['ds_caller']=="" || formData['ds_caller']==null || formData['ds_caller']!=caller){
  413. delete formData['ds_caller'];
  414. delete formData['ds_id'];
  415. }
  416. Ext.getCmp('dbform').getForm().setValues(formData);
  417. }
  418. Ext.getCmp('dbgrid').getStore().loadData(gridData);
  419. },
  420. dbfindSetGrid:function(caller,grid,field){
  421. var FindFields=new Array(),me=this,SetFields=new Array(),gridData=new Array(),DBCaller=null,DBKey=null,DBtable=null;
  422. var me=this;
  423. function showButton(value,cellmeta){
  424. var returnStr = "<INPUT align='center' type='button' value='删除' onclick='DeleteGrid();'>";
  425. return returnStr;
  426. };
  427. var localJson=me.getDBGridFields(caller,field);
  428. if(localJson==null||!localJson.data||!localJson.data.dbcaller){
  429. //说明无数据
  430. for(var i=0;i<10;i++){
  431. var o = new Object();
  432. o.ds_caller=caller;
  433. gridData.push(o);
  434. }Ext.Array.each(grid.data,function(item){
  435. var obj=new Object();
  436. obj.display=item.dg_caption;
  437. obj.value=item.dg_field;
  438. SetFields.push(obj);
  439. });
  440. }else {
  441. DBCaller=localJson.data.dbcaller;
  442. DBKey=localJson.data.linkkey;
  443. DBtable=localJson.data.dbtablename;
  444. Ext.Array.each(localJson.data.details,function(field){
  445. var o=new Object();
  446. o.display=field.dd_fieldcaption;
  447. o.value=field.dd_fieldname;
  448. FindFields.push(o);
  449. });
  450. Ext.Array.each(grid.data,function(item){
  451. var obj=new Object();
  452. obj.display=item.dg_caption;
  453. obj.value=item.dg_field;
  454. SetFields.push(obj);
  455. });
  456. gridData=localJson.data.dbfindsetgrid;
  457. if(gridData.length==0)
  458. gridData=[{ds_caller:caller},{ds_caller:caller},{ds_caller:caller},{ds_caller:caller},
  459. {ds_caller:caller},{ds_caller:caller},{ds_caller:caller},{ds_caller:caller},{ds_caller:caller},{ds_caller:caller}];
  460. }
  461. Ext.create('Ext.Window', {
  462. width: '90%',
  463. height: '100%',
  464. autoShow: true,
  465. layout: 'border',
  466. title:'<h1>Grid查找配置</h1>',
  467. items: [{
  468. region:'center',
  469. xtype: 'grid',
  470. id:'dbGridgrid',
  471. columnLines:true,
  472. store:Ext.create('Ext.data.Store',{
  473. fields:['ds_id','ds_caller','ds_gridfield','ds_dbfindfield','ds_triggerfield']
  474. }),
  475. emptyText : $I18N.common.grid.emptyText,
  476. bodyStyle: 'background-color:#f1f1f1;',
  477. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  478. clicksToEdit: 1
  479. }),
  480. tbar:[{
  481. xtype:'button',
  482. text: $I18N.common.button.erpSaveButton,
  483. iconCls: 'x-button-icon-save',
  484. cls: 'x-btn-gray',
  485. formBind: true,//form.isValid() == false时,按钮disabled
  486. width: 60,
  487. style: {
  488. margin: '10 5 0 5'
  489. },
  490. handler:function(btn){
  491. me.saveDBFindSetGrid(btn,caller,field);
  492. }
  493. },'-',{
  494. xtype:'button',
  495. text: $I18N.common.button.erpCloseButton,
  496. iconCls: 'x-button-icon-close',
  497. cls: 'x-btn-gray',
  498. formBind: true,//form.isValid() == false时,按钮disabled
  499. width: 60,
  500. handler:function(btn){
  501. btn.ownerCt.ownerCt.ownerCt.close();
  502. }
  503. },'-',{
  504. xtype:'button',
  505. text: '维护DBFindSet',
  506. iconCls: 'x-button-icon-submit',
  507. cls: 'x-btn-gray',
  508. width: 120,
  509. handler:function(btn){
  510. var value=btn.ownerCt.items.items[6].lastValue;
  511. if(value){
  512. openGridUrl(value,"ds_caller", "dd_caller", "jsps/ma/dbFindSet.jsp", "DBFind维护");
  513. }else{
  514. me.FormUtil.onAdd('DBfindSet', 'DBFIND设置', 'jsps/ma/dbFindSet.jsp');
  515. }
  516. }
  517. },'-',{
  518. xtype:'dbfindtrigger',
  519. fieldLabel:'<h3>DBFindSetCaller</h3>',
  520. labelWidth:110,
  521. labelSeparator:"",
  522. name:'dbcaller',
  523. id:'dbcaller',
  524. allowBlank:false,
  525. value:DBCaller,
  526. fieldStyle:'background:#fffac0;color:#515151;',
  527. listeners:{
  528. change:function(field,newValue){
  529. Ext.getCmp('commitchange').setDisabled(false);
  530. },
  531. blur:function(){
  532. }
  533. }
  534. },{
  535. xtype:'hidden',
  536. name:'dbtable',
  537. id:'dbtablename',
  538. value:DBtable,
  539. listeners:{
  540. change:function(field,newValue){
  541. var link=Ext.getCmp('linkkey');
  542. var table=newValue.toUpperCase().split('LEFT JOIN')[0].replace(/(^\s*)|(\s*$)/g, "");
  543. link.setDisabled(false);
  544. Ext.getCmp('linkkey').setValue(null);
  545. }
  546. }
  547. },{
  548. xtype:'dbfindtrigger',
  549. labelAlign:'right',
  550. fieldLabel:'<h3>关联字段名</h3>',
  551. labelWidth:80,
  552. labelSeparator:"",
  553. name:'linkkey',
  554. id:'linkkey',
  555. value:DBKey,
  556. disabled:true,
  557. allowBlank:false,
  558. fieldStyle:'background:#fffac0;color:#515151;',
  559. listeners:{
  560. afterrender:function(field){
  561. if(field.value){
  562. field.setDisabled(false);
  563. }
  564. }
  565. }
  566. },'-',{
  567. xtype:'button',
  568. text: '确认',
  569. id:'commitchange',
  570. iconCls: 'x-button-icon-submit',
  571. cls: 'x-btn-gray',
  572. width: 60,
  573. disabled:true,
  574. handler:function(btn){
  575. var field=Ext.getCmp('dbcaller');
  576. var table=Ext.getCmp('dbtablename').value;
  577. if(field.originalValue==field.value||table==undefined){
  578. showMessage('提示','未做任何修改!');
  579. btn.setDisabled(true);
  580. return;
  581. }else{
  582. //更改下拉store 同时 reset 关联字段
  583. var json=me.getDBGridFields(field.value,null);
  584. FindFields=new Array();
  585. Ext.Array.each(json.data.details,function(field){
  586. var o=new Object();
  587. o.display=field.dd_fieldcaption;
  588. o.value=field.dd_fieldname;
  589. FindFields.push(o);
  590. });
  591. }
  592. }
  593. }],
  594. listeners:{
  595. itemclick:function(selModel, record,e,index){
  596. var grid=selModel.ownerCt;
  597. if(index.toString() == 'NaN'){
  598. index = '';
  599. }
  600. if(index == grid.store.data.items.length-1){//如果选择了最后一行
  601. var items=grid.store.data.items;
  602. for(var i=0;i<10;i++){
  603. var o = new Object();
  604. o.ds_caller=caller;
  605. grid.store.insert(items.length, o);
  606. items[items.length-1]['index'] = items.length-1;
  607. }
  608. }
  609. }
  610. },
  611. columns: [{
  612. text: 'ID',
  613. dataIndex: 'ds_id',
  614. xtype:'numbercolumn',
  615. width:0
  616. },{
  617. cls : "x-grid-header-1",
  618. text: 'Caller',
  619. dataIndex: 'ds_caller',
  620. flex:1,
  621. readOnly:true
  622. },{
  623. cls : "x-grid-header-1",
  624. text:'Grid赋值字段',
  625. dataIndex: 'ds_gridfield',
  626. flex:1,
  627. renderer: function(val, meta, record){
  628. if(!val){
  629. val="";
  630. }
  631. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  632. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  633. },
  634. editor: {
  635. format:"",
  636. xtype: 'combobox',
  637. listConfig:{
  638. maxHeight:180
  639. },
  640. typeAhead: true,
  641. triggerAction: 'all',
  642. selectOnTab: true,
  643. store: {
  644. fields: ['display', 'value'],
  645. data:SetFields
  646. },
  647. displayField: 'display',
  648. valueField: 'value',
  649. queryMode: 'local'
  650. }
  651. },{
  652. cls : "x-grid-header-1",
  653. text:'查找字段',
  654. dataIndex: 'ds_dbfindfield',
  655. flex:1,
  656. renderer: function(val, meta, record){
  657. if(!val){
  658. val="";
  659. }
  660. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  661. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  662. },
  663. editor: {
  664. format:"",
  665. xtype: 'combo',
  666. listConfig:{
  667. maxHeight:180
  668. },
  669. store: {
  670. fields: ['display', 'value'],
  671. data:[]
  672. },
  673. onTriggerClick:function(trigger){
  674. var me=this;
  675. this.getStore().loadData(FindFields);
  676. if (!me.readOnly && !me.disabled) {
  677. if (me.isExpanded) {
  678. me.collapse();
  679. } else {
  680. me.expand();
  681. }
  682. me.inputEl.focus();
  683. }
  684. },
  685. displayField: 'display',
  686. valueField: 'value',
  687. queryMode: 'local'
  688. }
  689. },{
  690. cls : "x-grid-header-1",
  691. text: '触发DBFIND字段',
  692. dataIndex:'ds_triggerfield',
  693. flex:1,
  694. renderer: function(val, meta, record){
  695. if(!val){
  696. val="";
  697. }
  698. return val;
  699. },
  700. editor: {
  701. format:"",
  702. xtype: 'combobox',
  703. listConfig:{
  704. maxHeight:180
  705. },
  706. typeAhead: true,
  707. triggerAction: 'all',
  708. selectOnTab: true,
  709. store: {
  710. fields: ['display', 'value'],
  711. data:SetFields
  712. },
  713. displayField: 'display',
  714. valueField: 'value',
  715. queryMode: 'local'
  716. }
  717. },{
  718. xtype:'actioncolumn',
  719. cls : "x-grid-header-1",
  720. header:'操作',
  721. align:'center',
  722. items: [{
  723. icon : basePath+'resource/images/delete.png',
  724. handler: function(grid, rowIndex, colIndex) {
  725. var lastselected=grid.getStore().getAt(rowIndex);
  726. var id=lastselected.data.ds_id;
  727. if(id!=null){
  728. //存在ID 则后台删除
  729. Ext.Ajax.request({
  730. url : basePath + 'common/deleteDbFindSetGrid.action',
  731. params : {
  732. id:id
  733. },
  734. method : 'post',
  735. callback : function(options,success,response){
  736. var res=new Ext.decode(response.responseText);
  737. if(res.exceptionInfo != null){
  738. showError(res.exceptionInfo);return;
  739. }
  740. if(res.success){
  741. Ext.Msg.alert('提示','删除成功!');
  742. }
  743. }
  744. });
  745. }
  746. grid.getStore().removeAt(rowIndex);
  747. }
  748. }],
  749. flex:0.3
  750. }]
  751. }]
  752. });
  753. Ext.getCmp('dbGridgrid').getStore().loadData(gridData);
  754. },
  755. save:function(me,caller,field){
  756. var grid=Ext.getCmp('dbgrid');
  757. var jsonGridData = new Array();
  758. var dd;
  759. var s = grid.getStore().data.items,allowsave=true;
  760. for(var i=0;i<s.length;i++){
  761. var data = s[i].data;
  762. dd = new Object();
  763. allowsave=true;
  764. if(grid.necessaryFields){
  765. Ext.Array.each(grid.necessaryFields,function(f){
  766. if(data[f] == null || data[f]==""){
  767. allowsave=false;
  768. return false;
  769. }
  770. });
  771. if(allowsave){
  772. if(data['ds_findtoui_i']==null || data['ds_findtoui_i']=="")data['ds_findtoui_i']="ignore";
  773. jsonGridData.push(Ext.JSON.encode(data));}
  774. }
  775. }
  776. var param=jsonGridData;
  777. if(param.length==0){
  778. showError($I18N.common.grid.emptyDetail);
  779. }else {
  780. var r = Ext.getCmp('dbform').getForm().getValues();
  781. var params = new Object();
  782. params.formStore = unescape(Ext.JSON.encode(r));
  783. params.gridStore = unescape(param.toString());
  784. params.caller=caller;
  785. me.FormUtil.setLoading(true);
  786. Ext.Ajax.request({
  787. url : basePath + 'common/saveDbfindSetUI.action',
  788. params : params,
  789. method : 'post',
  790. callback : function(options,success,response){
  791. var res=new Ext.decode(response.responseText);
  792. me.FormUtil.setLoading(false);
  793. if(res.exceptionInfo != null){
  794. showError(res.exceptionInfo);return;
  795. }
  796. if(res.success){
  797. showMessage('提示','保存成功');
  798. var jsondata=me.getDbFindSetUI(caller,field);
  799. Ext.getCmp('dbform').getForm().setValues(jsondata.formdata);
  800. Ext.getCmp('dbgrid').getStore().loadData(jsondata.griddata);
  801. }
  802. }
  803. });
  804. }
  805. },
  806. saveDBFindSetGrid:function(btn,pagecaller,dgfield){
  807. var bar=btn.ownerCt,grid=btn.ownerCt.ownerCt;
  808. var caller=bar.items.items[6].value;
  809. var table=bar.items.items[7].value;
  810. var field=bar.items.items[8].value;
  811. var me=this;
  812. var jsonGridData = new Array();
  813. grid.necessaryField='ds_gridfield';
  814. var dd;
  815. var s = grid.getStore().data.items;
  816. for(var i=0;i<s.length;i++){
  817. var data = s[i].data;
  818. dd = new Object();
  819. if(s[i].dirty&&data[grid.necessaryField] != null && data[grid.necessaryField] != ""){
  820. Ext.each(grid.columns, function(c){
  821. if(c.dataIndex){
  822. dd[c.dataIndex] = s[i].data[c.dataIndex];
  823. }
  824. });
  825. jsonGridData.push(Ext.JSON.encode(dd));
  826. }
  827. }
  828. if(jsonGridData == null || jsonGridData == '' || jsonGridData.length==0)
  829. showError($I18N.common.grid.emptyDetail);
  830. if(caller&&caller!=""&&field&&field!=""){
  831. Ext.Ajax.request({
  832. url : basePath +'common/saveDbFindSetGrid.action',
  833. params: {
  834. caller:caller,
  835. field:field,
  836. table:table,
  837. dgfield:dgfield,
  838. gridStore:unescape(jsonGridData.toString())
  839. },
  840. method : 'post',
  841. callback : function(options,success,response){
  842. var re = new Ext.decode(response.responseText);
  843. if(re.success){
  844. var json=me.getDBGridFields(pagecaller,dgfield);
  845. grid.getStore().loadData(json.data.dbfindsetgrid);
  846. showMessage('提示','保存成功!');
  847. }
  848. else if(re.exceptionInfo == null){
  849. showError(res.exceptionInfo);return ;
  850. }
  851. }
  852. });
  853. }
  854. },
  855. getDBGridFields:function(caller,field){
  856. var localJson=null;
  857. Ext.Ajax.request({
  858. url : basePath +'common/getDbFindSetGridFields.action',
  859. params: {
  860. caller:caller,
  861. field:field
  862. },
  863. async: false,
  864. method : 'post',
  865. callback : function(options,success,response){
  866. var re = new Ext.decode(response.responseText);
  867. if(re.exceptionInfo == null){
  868. localJson=re;
  869. }
  870. }
  871. });
  872. return localJson;
  873. },
  874. getDbFindSetUI:function(caller,field){
  875. var localJson=null;
  876. Ext.Ajax.request({
  877. url : basePath +'common/getDbFindSetUI.action',
  878. params: {
  879. caller:caller,
  880. field:field
  881. },
  882. async: false,
  883. method : 'post',
  884. callback : function(options,success,response){
  885. var res = new Ext.decode(response.responseText);
  886. if(res.exceptionInfo != null){
  887. showError(res.exceptionInfo);
  888. return;
  889. }
  890. if(res.success){
  891. localJson=res;
  892. }
  893. }
  894. });
  895. return localJson;
  896. }
  897. });