DataDictionary.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.ma.DataDictionary', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. GridUtil: Ext.create('erp.util.GridUtil'),
  6. BaseUtil: Ext.create('erp.util.BaseUtil'),
  7. views:[
  8. 'ma.DataDictionary','core.form.Panel','core.grid.Panel2','core.button.Sync','ma.DataDictionaryGrid','ma.DictPropertyGrid',
  9. 'core.button.Add','core.button.Submit','core.button.Audit','core.button.Save','core.button.Close','core.button.Print',
  10. 'core.button.Upload','core.button.Update','core.button.Delete','core.button.DeleteDetail','core.button.ResAudit',
  11. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.toolbar.Toolbar',
  12. ],
  13. init:function(){
  14. var me = this;
  15. this.control({
  16. 'form':{
  17. afterrender:function(form){
  18. if(!currentRecord && tablename){
  19. me.getTable(form,tablename);
  20. me.getRelations(tablename);
  21. }
  22. }
  23. },
  24. 'button[itemId=save]':{
  25. click:function(btn){
  26. var params=me.getColumnChanges();
  27. Ext.apply(params,me.getIndexChanges());
  28. params.tablename=tablename;
  29. var form=btn.ownerCt.ownerCt,values=form.getForm().getValues();
  30. params.formStore=Ext.JSON.encode(values);
  31. var propgrid=Ext.getCmp("propertygrid");
  32. var param=me.getGridStore(propgrid);
  33. param = param == null ? [] : "[" + param.toString() + "]";
  34. params.gridStore= unescape(param);
  35. me.FormUtil.setLoading(true);
  36. Ext.Ajax.request({
  37. method:'post',
  38. url:basePath+'ma/dataDictionary/alter.action',
  39. params:params,
  40. callback : function(options, success, response){
  41. me.FormUtil.setLoading(false);
  42. if (!response) return;
  43. var res = new Ext.decode(response.responseText);
  44. if(res.success){
  45. window.location.reload();
  46. }
  47. else if(res.exceptionInfo != null){
  48. showError(res.exceptionInfo);return;
  49. }
  50. }
  51. });
  52. }
  53. },
  54. 'button[itemId=add]':{
  55. click:function(btn){
  56. if(isbasic==1){ me.onAdd('dictionarypanel', '系统数据字典', 'jsps/ma/dataDictionary.jsp?isbasic='+isbasic);}
  57. else if(isbasic==null||isbasic==''){
  58. me.FormUtil.onAdd('addDic', '系统数据字典', 'jsps/ma/dataDictionary.jsp');
  59. }
  60. }
  61. },
  62. 'button[itemId=refresh]':{
  63. click:function(btn){
  64. var form=btn.ownerCt.ownerCt;
  65. me.FormUtil.setLoading(true);
  66. Ext.Ajax.request({
  67. method:'post',
  68. url:basePath+'ma/dataDictionary/refresh.action',
  69. timeout:60000,
  70. params:{tablename:tablename},
  71. callback : function(options, success, response){
  72. me.FormUtil.setLoading(false);
  73. var localJson = new Ext.decode(response.responseText);
  74. if(localJson.success){
  75. Ext.Msg.alert('提示','刷新成功');
  76. window.location.reload();
  77. }else{
  78. Ext.Msg.alert('提示','刷新失败');
  79. }
  80. }
  81. });
  82. }
  83. },
  84. 'button[itemId=close]':{
  85. click:function(btn){
  86. if(isbasic){
  87. var main = parent.Ext.getCmp("dictionarypanel");
  88. main.getActiveTab().close();
  89. }else{
  90. var main = parent.Ext.getCmp("content-panel");
  91. main.getActiveTab().close();
  92. }
  93. }
  94. },
  95. 'radiogroup':{
  96. change: function(group ,newvalue,oldvalue){
  97. if(Ext.isString(newvalue.uniqueness)){
  98. me.isDirtyChange(newvalue.uniqueness, group.name);
  99. }
  100. }
  101. },
  102. 'gridpanel[id=grid]':{
  103. afterrender:function(grid){
  104. grid.plugins[1].on('beforeedit',function(e,Opts){
  105. if(e.column.dataIndex == 'data_length'){
  106. var record = e.record,column = e.column;
  107. var f = record.data['data_type'];
  108. if(f=='DATE' || f=='CLOB' || f=='TIMESTAMP'){
  109. return false;
  110. }
  111. }
  112. });
  113. grid.plugins[1].on('edit',function(editor,e){
  114. if(e.field=='column_name'){
  115. var record = e.record,value=e.value;
  116. Ext.Array.each(record.store.data.items,function(item,index){
  117. if(item.get('column_name')==value && index!=e.rowIdx && item.get('column_name')!=null&&item.get('column_name')!=''){
  118. Ext.Msg.alert('提示','列 '+value+' 已存在!');
  119. e.record.reject();
  120. }
  121. });
  122. }
  123. });
  124. }
  125. },
  126. 'gridpanel[id=index_column_grid]':{
  127. afterrender:function(grid){
  128. grid.plugins[0].on('edit',function(editor,e,Opts){
  129. /*if()
  130. e.originalValue!=e.value
  131. e.record.reject();*/
  132. var msg=me._checkIndex_col(e.value,e.record,e.rowIdx);
  133. if(msg){
  134. e.record.reject();
  135. Ext.Msg.alert('提示',msg);
  136. }
  137. });
  138. }
  139. },
  140. 'button[itemId=column_add]':{
  141. click:function(btn){
  142. var g=btn.ownerCt.ownerCt;
  143. g.getStore().insert(0,{data_type:'VARCHAR2',data_length:20,nullable:'Y'});
  144. }
  145. },
  146. 'button[itemId=column_delete]':{
  147. click:function(btn){
  148. var grid=btn.ownerCt.ownerCt;
  149. if(isbasic==1){ //增加isbasic参数判断是否是标准字段
  150. var _g=btn.ownerCt.ownerCt,store=_g.getStore();
  151. var selected=_g.getSelectionModel().getLastSelected();
  152. if(selected) {store.remove(selected);}
  153. }else if(isbasic==null||isbasic==''){
  154. var _g=btn.ownerCt.ownerCt,store=_g.getStore();
  155. var selected=_g.getSelectionModel().getLastSelected();
  156. var _index=selected.data.column_name;
  157. if(_index.indexOf('_USER')>-1)
  158. store.remove(selected);
  159. else alert("不能删除标准字段");
  160. }
  161. }
  162. },
  163. 'button[itemId=add_index]':{
  164. click:function(btn){
  165. var list=btn.ownerCt.ownerCt.down('boundlist[name=tab_indexs]'),_s=list.store,maxNum=0,_index;
  166. Ext.Array.each(_s.data.items,function(record){
  167. _index=record.get('index_name');
  168. if(_index.indexOf(tablename+'_INDEX')>-1){
  169. var s=_index.split(tablename+'_INDEX')[1];
  170. if(s.length>0){
  171. if(Ext.isNumeric(s)){
  172. if(s>maxNum) maxNum=s;
  173. }
  174. }
  175. }
  176. });
  177. maxNum=parseInt(maxNum)+1;
  178. var data={
  179. index_name:tablename+'_INDEX'+maxNum,
  180. uniqueness:'NONUNIQUE',
  181. ind_columns:[]
  182. };
  183. _s.insert(_s.data.items.length,data);
  184. var _bound=Ext.ComponentQuery.query('boundlist')[0];
  185. _bound.select(_s.data.items.length-1);
  186. me.setIndexDisp(data);
  187. }
  188. },
  189. 'button[itemId=delete_index]':{
  190. click:function(btn){
  191. var list=btn.ownerCt.ownerCt.down('boundlist[name=tab_indexs]'),_s=list.store;
  192. _s.remove(list.getSelectionModel().getSelection());
  193. if(_s.data.items.length>0){
  194. list.select(0);
  195. me.setIndexDisp(_s.data.items[0].data);
  196. }
  197. }
  198. },
  199. 'button[itemId=add_ind_column]':{
  200. click:function(btn){
  201. var _g=Ext.getCmp('index_column_grid'),store=_g.getStore();
  202. var _col=me.getInd_column(store.collect('COLUMN_NAME'));
  203. store.insert(store.data.items.length,{
  204. COLUMN_NAME:_col,
  205. DESCEND:'ASC'
  206. });
  207. var arr=new Array();
  208. Ext.Array.each(store.data.items,function(item){
  209. arr.push(item.data);
  210. });
  211. me.isDirtyChange(arr, "ind_columns");
  212. }
  213. },
  214. 'button[itemId=delete_ind_column]':{
  215. click:function(btn){
  216. var _g=Ext.getCmp('index_column_grid'),store=_g.getStore();
  217. var selected=_g.getSelectionModel().getLastSelected();
  218. var arr=new Array();
  219. if(selected) store.remove(selected);
  220. Ext.Array.each(store.data.items,function(item){
  221. arr.push(item.data);
  222. });
  223. me.isDirtyChange(arr, "ind_columns");
  224. }
  225. },
  226. 'boundlist[name=tab_indexs]':{
  227. itemclick:function(view,record){
  228. me.setIndexDisp(record.data);
  229. },
  230. beforrender:function(list){
  231. list.multiSelect=false;
  232. },
  233. afterrender:function(c){
  234. Ext.defer(function(){
  235. var _bound=Ext.ComponentQuery.query('boundlist')[0],_store=_bound.getStore();
  236. if(_store.data.items.length>0 && _bound.getSelectedNodes().length==0){
  237. _bound.select(0);
  238. me.setIndexDisp(_store.data.items[0].data);
  239. }
  240. },200);
  241. }
  242. },
  243. 'erpSaveButton': {
  244. /* afterrender: function(){
  245. me.getDetail();
  246. },*/
  247. click: function(btn){
  248. me.FormUtil.onSave(this);
  249. }
  250. },
  251. 'erpUpdateButton': {
  252. click: function(btn){
  253. var form = btn.up('form'),
  254. grid = form.ownerCt.down('grid'),
  255. table = form.down('#dd_tablename').value,
  256. key = form.down('#dd_primekey').value;
  257. grid.store.each(function(){
  258. if(this.get('ddd_id') == 0) {
  259. this.set('ddd_tablename', table);
  260. this.set('ddd_primekey', key);
  261. }
  262. });
  263. me.FormUtil.onUpdate(this);
  264. }
  265. },
  266. 'erpAddButton': {
  267. click: function(){
  268. if(isbasic==1){
  269. me.onAdd('dictionarypanel', '新增数据字典', 'jsps/ma/dataDictionary.jsp?isbasic='+isbasic);}
  270. else if(isbasic==null||isbasic==''){
  271. me.FormUtil.onAdd('addDataDictionary', '新增数据字典', 'jsps/ma/dataDictionary.jsp');
  272. }
  273. }
  274. },
  275. 'erpCloseButton': {
  276. click: function(btn){
  277. me.FormUtil.beforeClose(me);
  278. }
  279. },
  280. 'erpGridPanel2': {
  281. afterrender: function(g) {
  282. g.plugins[0].on('beforeedit', function(args){
  283. if(g.readOnly || (args.record.get('ddd_id') > 0 && args.field != 'ddd_description')) {// 已存在的,不允许直接界面修改
  284. return false;
  285. }
  286. });
  287. },
  288. itemclick: function(selModel, record) {
  289. if(record)
  290. selModel.ownerCt.down('erpAddDetailButton').setDisabled(false);// 可新增字段
  291. }
  292. },
  293. 'erpFormPanel textfield[name=dd_tablename]': {
  294. change: function(field){
  295. field.setValue(field.value.toUpperCase());
  296. var grid = Ext.getCmp('grid');
  297. Ext.each(grid.store.data.items, function(item){
  298. if(item.dirty == true){
  299. item.set('ddd_tablename', Ext.getCmp('dd_tablename').value);
  300. item.set('ddd_updatetime', Ext.getCmp('dd_updatetime').value);
  301. item.set('ddd_updateuser', Ext.getCmp('dd_updateuser').value);
  302. item.set('ddd_primekey', Ext.getCmp('dd_primekey').value);
  303. }
  304. });
  305. }
  306. },
  307. 'erpFormPanel textfield[name=dd_updatetime]': {
  308. change: function(){
  309. var grid = Ext.getCmp('grid');
  310. Ext.each(grid.store.data.items, function(item){
  311. if(item.dirty == true){
  312. item.set('ddd_tablename', Ext.getCmp('dd_tablename').value);
  313. item.set('ddd_updatetime', Ext.getCmp('dd_updatetime').value);
  314. item.set('ddd_updateuser', Ext.getCmp('dd_updateuser').value);
  315. item.set('ddd_primekey', Ext.getCmp('dd_primekey').value);
  316. }
  317. });
  318. }
  319. },
  320. 'erpFormPanel textfield[name=dd_updateuser]': {
  321. change: function(){
  322. var grid = Ext.getCmp('grid');
  323. Ext.each(grid.store.data.items, function(item){
  324. if(item.dirty == true){
  325. item.set('ddd_tablename', Ext.getCmp('dd_tablename').value);
  326. item.set('ddd_updatetime', Ext.getCmp('dd_updatetime').value);
  327. item.set('ddd_updateuser', Ext.getCmp('dd_updateuser').value);
  328. item.set('ddd_primekey', Ext.getCmp('dd_primekey').value);
  329. }
  330. });
  331. }
  332. }
  333. });
  334. },
  335. _checkIndex_col:function(value,record,rowIndex){
  336. var msg=null;
  337. Ext.Array.each(record.store.data.items,function(item,index){
  338. if(item.get('COLUMN_NAME')==value && index!=rowIndex){
  339. msg='列 '+value+' 在索引 '+Ext.getCmp('index_name').value+' 中只能使用一次';
  340. return false;
  341. }
  342. });
  343. return msg;
  344. },
  345. getForm: function(btn){
  346. return btn.ownerCt.ownerCt;
  347. },
  348. getTable:function(form,tablename){
  349. if(tablename){
  350. Ext.Ajax.request({
  351. url : basePath + '/common/getFieldsData.action',
  352. async: false,
  353. params: {
  354. caller: 'USER_OBJECTS LEFT JOIN User_Tab_Comments ON OBJECT_NAME=User_Tab_Comments.Table_Name',
  355. fields: 'object_name,object_id,comments',
  356. condition: "OBJECT_NAME='"+tablename+"' and OBJECT_TYPE='TABLE'"
  357. },
  358. method : 'post',
  359. callback : function(opt, s, res){
  360. var r = new Ext.decode(res.responseText);
  361. if(r.exceptionInfo){
  362. showError(r.exceptionInfo);return;
  363. } else if(r.success && r.data){
  364. form.getForm().setValues(r.data);
  365. }
  366. }
  367. });
  368. }
  369. },
  370. setIndexDisp:function(data){
  371. Ext.getCmp('uniqueness').setValue({uniqueness:data['uniqueness']});
  372. Ext.getCmp('index_name').setValue(data['index_name']);
  373. Ext.getCmp('index_column_grid').getStore().loadData(data['ind_columns']);
  374. },
  375. getSelectNode:function(_bound){
  376. if(!_bound) _bound=Ext.ComponentQuery.query('boundlist')[0];
  377. var selects=_bound.getSelectionModel().getSelection();
  378. if(selects.length>0) return selects[0];
  379. else return null;
  380. },
  381. isDirtyChange:function(newvalue,name,record){
  382. if(!record) record=this.getSelectNode();
  383. if(newvalue != record.get(name)){
  384. record.set(name,newvalue);
  385. }
  386. },
  387. getInd_column:function(arr){
  388. var store=Ext.getCmp('grid').getStore(),_column=null;
  389. Ext.Array.each(store.data.items,function(item){
  390. if(!Ext.Array.contains(arr,item.get('column_name'))){
  391. _column=item.get('column_name');
  392. return false;
  393. }
  394. });
  395. return _column;
  396. },
  397. checkTab_columns:function(){
  398. // var grid=Ext.getCmp('grid');
  399. },
  400. getColumnChanges:function(){
  401. var grid=Ext.getCmp('grid'),store=grid.getStore(),
  402. toUpdated=store.getUpdatedRecords();
  403. toCreated=store.getNewRecords();
  404. toRemoved=store.getRemovedRecords();
  405. var columparam=new Object();
  406. if(toUpdated.length>0){
  407. var updated=new Array();
  408. Ext.Array.each(toUpdated,function(item){
  409. if(item.get('column_name')!=null && item.get('column_name')!='' && item.get('data_type')!=null && item.get('comments')!=null && item.get('comments')!=''){
  410. updated.push(item.data);
  411. }
  412. });
  413. columparam['Col_update']=Ext.JSON.encode(updated);
  414. }
  415. if(toCreated.length>0){
  416. var created=new Array();
  417. var bool=false;
  418. if(isbasic==null||isbasic==''){
  419. Ext.Array.each(toCreated,function(item){
  420. if(item.get('column_name')!=null && item.get('column_name').trim()!="" && item.get('data_type')!=null && item.get('data_type').trim()!="" && item.get('comments')!=null && item.get('comments')!=''){
  421. if(currentMaster!="UAS" && item.get('column_name').toUpperCase().indexOf("_USER")<0){
  422. bool=true;
  423. item.data['column_name']= item.get('column_name')+"_USER";
  424. }
  425. created.push(item.data);
  426. }
  427. }); if (bool) window.alert("非UAS标准字段,字段名将默认添加_USER作为后缀");
  428. }else if(isbasic==1){ //管理员可以随意添加字段的判断逻辑
  429. Ext.Array.each(toCreated,function(item){
  430. if(item.get('column_name')!=null && item.get('column_name').trim()!="" && item.get('data_type')!=null && item.get('data_type').trim()!="" && item.get('comments')!=null && item.get('comments')!=''){
  431. created.push(item.data);
  432. }
  433. });}
  434. columparam['Col_create']=Ext.JSON.encode(created);
  435. }
  436. if(toRemoved.length>0){
  437. var removed=new Array();
  438. Ext.Array.each(toRemoved,function(item){
  439. if(item.get('column_name')!=null && item.get('column_name')!=' ' && item.get('data_type')!=null){
  440. removed.push(item.data);
  441. }
  442. });
  443. columparam['Col_remove']=Ext.JSON.encode(removed);
  444. }
  445. return columparam;
  446. },
  447. getIndexChanges:function(){
  448. var _bound=Ext.ComponentQuery.query('boundlist[name=tab_indexs]')[0],store=_bound.getStore();
  449. toUpdated=store.getUpdatedRecords();
  450. toCreated=store.getNewRecords();
  451. toRemoved=store.getRemovedRecords();
  452. var indexparam=new Object();
  453. if(toUpdated.length>0){
  454. indexparam['Ind_update']=Ext.JSON.encode(toUpdated);
  455. }
  456. if(toCreated.length>0){
  457. var created=new Array();
  458. Ext.Array.each(toCreated,function(item){
  459. if(item.get('ind_columns').length>0){
  460. created.push(item.data);
  461. }
  462. });
  463. indexparam['Ind_create']=Ext.JSON.encode(created);
  464. }
  465. if(toRemoved.length>0){
  466. var remove=new Array();
  467. Ext.Array.each(toRemoved,function(item){
  468. remove.push(item.data);
  469. });
  470. indexparam['Ind_remove']=Ext.JSON.encode(remove);
  471. }
  472. return indexparam;
  473. },
  474. getRelations:function(tablename){
  475. var me=this;
  476. Ext.Ajax.request({
  477. url:basePath+'ma/getDatarelations.action',
  478. method:'get',
  479. params:{tablename:tablename},
  480. callback : function(opt, s, res){
  481. var r = new Ext.decode(res.responseText);
  482. if(r.exceptionInfo){
  483. showError(r.exceptionInfo);return;
  484. } else if(r.success && r.relations && r.relations.length>0 ){
  485. me.showRelTab(me.formatRelations(r));
  486. }
  487. }
  488. });
  489. },
  490. formatRelations:function(r){
  491. var arr=new Array(),o,groupname,relations=r.relations,col_comments=r.relations_col_comments,tab_comments=r.relations_tab_comments;
  492. Ext.Array.each(relations,function(item){
  493. Ext.Array.each(tab_comments,function(tab){
  494. if(tab.TABLE_NAME==item.table_name_y){
  495. groupname=item.table_name_y+'('+tab.COMMENTS+')';
  496. return false;
  497. }
  498. });
  499. if(item.col_x_1){
  500. o=new Object();
  501. o.col_x=item.col_x_1;
  502. o.col_y=item.col_y_1;
  503. Ext.Array.each(r.relations_col_comments,function(col){
  504. if(col.COLUMN_NAME==item.col_x_1 && col.TABLE_NAME==item.table_name_x){
  505. o.desc_x=col.COMMENTS;
  506. o.type_x=col.DATA_TYPE;
  507. }
  508. if(col.COLUMN_NAME==item.col_y_1 && col.TABLE_NAME==item.table_name_y){
  509. o.desc_y=col.COMMENTS;
  510. o.type_y=col.DATA_TYPE;
  511. }
  512. });
  513. o.tab_y=groupname;
  514. arr.push(o);
  515. }
  516. if(item.col_x_2){
  517. o=new Object();
  518. o.col_x=item.col_x_2;
  519. o.col_y=item.col_y_2;
  520. Ext.Array.each(r.relations_col_comments,function(col){
  521. if(col.COLUMN_NAME==item.col_x_2 && col.TABLE_NAME==item.table_name_x){
  522. o.desc_x=col.COMMENTS;
  523. o.type_x=col.DATA_TYPE;
  524. }
  525. if(col.COLUMN_NAME==item.col_y_2 && col.TABLE_NAME==item.table_name_y){
  526. o.desc_y=col.COMMENTS;
  527. o.type_y=col.DATA_TYPE;
  528. }
  529. });
  530. o.tab_y=groupname;
  531. arr.push(o);
  532. }
  533. });
  534. return arr;
  535. },
  536. showRelTab:function(data){
  537. var tabP=Ext.getCmp('dictab'),_m=this;
  538. tabP.insert(2,{
  539. title:'关联表',
  540. xtype:'gridpanel',
  541. id:'relationgrid',
  542. columnLines:true,
  543. columns:[{
  544. text:'基础表',
  545. cls: "x-grid-header-1",
  546. columns:[{
  547. text:'列名',
  548. dataIndex:'col_x',
  549. cls: "x-grid-header-2",
  550. width:150,
  551. fixed :true
  552. },{
  553. text:'类型',
  554. dataIndex:'type_x',
  555. //cls: "x-grid-header-1",
  556. width:80,
  557. fixed :true
  558. },{
  559. text:'注释',
  560. dataIndex:'desc_x',
  561. // cls: "x-grid-header-1",
  562. width:200,
  563. fixed :true
  564. }]
  565. },{
  566. text:'关联表',
  567. cls: "x-grid-header-1",
  568. columns:[{
  569. text:'字段',
  570. dataIndex:'col_y',
  571. // cls: "x-grid-header-1",
  572. width:150,
  573. fixed :true
  574. },{
  575. text:'类型',
  576. dataIndex:'type_y',
  577. //cls: "x-grid-header-1",
  578. width:80,
  579. fixed :true
  580. },{
  581. text:'注释',
  582. dataIndex:'desc_y',
  583. // cls: "x-grid-header-1",
  584. width:200,
  585. fixed :true
  586. }]
  587. },{
  588. dataIndex:'tab_y',
  589. cls: "x-grid-header-1",
  590. width:0
  591. }
  592. ],
  593. store:Ext.create('Ext.data.Store', {
  594. fields: [ {name: 'col_x'},{name:'desc_x'},{name:'type_x'},
  595. {name:'col_y'},{name:'desc_y'},{name:'type_y'},{name:'tablerelation'},{name:'tab_x'},{name:'tab_y'}],
  596. data:data,
  597. groupers:['tab_y']
  598. }),
  599. features: [{
  600. //id: 'group',
  601. ftype: 'grouping',
  602. groupHeaderTpl: '关联表:<a href="#">{name}</a>',
  603. getFeatureTpl: function(values, parent, x, xcount) {
  604. var me = this;
  605. return [
  606. '<tpl if="typeof rows !== \'undefined\'">',
  607. // group row tpl
  608. '<tr class="' + Ext.baseCSSPrefix + 'grid-group-hd ' + (me.startCollapsed ? me.hdCollapsedCls : '') + ' {hdCollapsedCls}"><td class="' + Ext.baseCSSPrefix + 'grid-cell" align=center colspan="' + parent.columns.length + '" ><div class="' + Ext.baseCSSPrefix + 'grid-cell-inner"><div class="' + Ext.baseCSSPrefix + 'grid-group-title">{collapsed}' + me.groupHeaderTpl + '</div></div></td></tr>',
  609. // this is the rowbody
  610. '<tr id="{viewId}-gp-{name}" class="' + Ext.baseCSSPrefix + 'grid-group-body ' + (me.startCollapsed ? me.collapsedCls : '') + ' {collapsedCls}"><td colspan="' + parent.columns.length + '">{[this.recurse(values)]}</td></tr>',
  611. '</tpl>'
  612. ].join('');
  613. },
  614. onGroupClick: function(view, group, idx, foo, e) {
  615. var _table=idx.substring(0,idx.indexOf('('));
  616. _m.FormUtil.onAdd(_table,'系统数据字典',basePath+'jsps/ma/dataDictionary.jsp?formCondition=object_nameIS'+_table);
  617. },
  618. enableGroupingMenu: false
  619. }]
  620. });
  621. },
  622. getGridStore:function(grid){
  623. var jsonGridData = new Array();
  624. var s = grid.getStore().data.items;//获取store里面的数据
  625. var dd;
  626. for(var i=0;i<s.length;i++){//将grid里面各行的数据获取并拼成jsonGridData
  627. var data = s[i].data;
  628. dd = new Object();
  629. if(s[i].dirty){
  630. Ext.each(grid.columns, function(c){
  631. if((c.logic != 'ignore') && c.dataIndex){//只需显示,无需后台操作的字段,自动略去
  632. dd[c.dataIndex] = s[i].data[c.dataIndex];
  633. }
  634. });
  635. jsonGridData.push(Ext.JSON.encode(dd));
  636. }
  637. }
  638. return jsonGridData;
  639. },
  640. onAdd: function(panelId, title, url){
  641. var main = this.getMain();
  642. if(main){
  643. panelId = panelId == null
  644. ? Math.random() : panelId;
  645. var panel = Ext.getCmp(panelId);
  646. if(!panel){
  647. var value = "";
  648. if (title.toString().length>5) {
  649. value = title.toString().substring(0,5);
  650. } else {
  651. value = title;
  652. }
  653. if(!contains(url, 'http://', true) && !contains(url, basePath, true)){
  654. url = basePath + url;
  655. }
  656. panel = {
  657. title : value,
  658. tag : 'iframe',
  659. tabConfig:{tooltip:title},
  660. border : false,
  661. layout : 'fit',
  662. iconCls : 'x-tree-icon-tab-tab',
  663. html : '<iframe id="iframe_add_'+panelId+'" src="' + url+'" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>',
  664. closable : true
  665. };
  666. this.openTab(panel, panelId);
  667. } else {
  668. main.setActiveTab(panel);
  669. }
  670. } else {
  671. if(!contains(url, basePath, true)){
  672. url = basePath + url;
  673. }
  674. window.open(url);
  675. }
  676. },
  677. getMain: function(){
  678. var main = Ext.getCmp("dictionarypanel");
  679. if(!main)
  680. main = parent.Ext.getCmp("dictionarypanel");
  681. if(!main)
  682. main = parent.parent.Ext.getCmp("dictionarypanel");
  683. return main;
  684. },
  685. openTab : function (panel,id){
  686. var o = panel.id;
  687. var main = this.getMain();
  688. var tab = main.getComponent(o);
  689. if (tab) {
  690. main.setActiveTab(tab);
  691. } else if(typeof panel!="string"){
  692. panel.id = o;
  693. var p = main.add(panel);
  694. main.setActiveTab(p);
  695. }
  696. }
  697. });