MultiForm.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.oa.custom.MultiForm', {
  3. extend: 'Ext.app.Controller',
  4. requires: ['erp.util.FormUtil', 'erp.util.GridUtil'],
  5. views:[
  6. 'oa.custom.MultiForm','oa.custom.CustomGrid','ma.MyForm','ma.MyDetail','core.button.DeleteDetail','core.toolbar.Toolbar',
  7. 'core.trigger.DbfindTrigger','core.trigger.MultiDbfindTrigger','core.grid.TfColumn','core.grid.YnColumn',
  8. 'core.button.UUListener', 'core.button.DbfindButton','core.button.ComboButton', 'core.form.YnField',
  9. 'core.button.Sync'
  10. ],
  11. init:function(){
  12. var me = this;
  13. me.FormUtil = Ext.create('erp.util.FormUtil');
  14. me.GridUtil = Ext.create('erp.util.GridUtil');
  15. this.control({
  16. 'erpSyncButton': {
  17. afterrender: function(btn){
  18. btn.autoClearCache = true;
  19. }
  20. },
  21. 'multidbfindtrigger': {
  22. render: function(field){
  23. if(field.name == 'fo_button4add' || field.name == 'fo_button4rw'){
  24. var fields = Ext.Object.getKeys($I18N.common.button);
  25. var values = Ext.Object.getValues($I18N.common.button);
  26. var data = [];
  27. Ext.each(fields, function(f, index){
  28. var o = {};
  29. o.value = fields[index];
  30. o.display = values[index];
  31. data.push(o);
  32. });
  33. field.multistore = {fields:['display', 'value'],data:data};
  34. }
  35. }
  36. },
  37. 'mygrid': {
  38. select: function(selModel, record){
  39. this.GridUtil.onGridItemClick(selModel, record);
  40. var grid=Ext.getCmp('grid');
  41. if(record&&record.data.fd_dbfind)
  42. grid.down('erpDbfindButton').setDisabled(false);
  43. else if(record && record.data.fd_type == 'C')
  44. grid.down('erpComboButton').setDisabled(false);
  45. else {
  46. grid.down('erpComboButton').setDisabled(true);
  47. grid.down('erpDbfindButton').setDisabled(true);
  48. }
  49. }
  50. },
  51. 'mydetail': {
  52. select: function(selModel, record){
  53. this.GridUtil.onGridItemClick(selModel, record, 'detail');
  54. var grid=Ext.getCmp('detail');
  55. if(record&&record.data.dg_dbbutton)
  56. grid.down('erpDbfindButton').setDisabled(false);
  57. else if(record && record.data.dg_type == 'combo')
  58. grid.down('erpComboButton').setDisabled(false);
  59. else {
  60. grid.down('erpComboButton').setDisabled(true);
  61. grid.down('erpDbfindButton').setDisabled(true);
  62. }
  63. }
  64. },
  65. 'button[name=save]': {
  66. click: function(btn){
  67. //序列号
  68. Ext.getCmp('fo_seq').setValue(Ext.getCmp('fo_table').value.toUpperCase().split(' ')[0] + '_SEQ');
  69. var dt = Ext.getCmp('fo_detailtable').value;
  70. if(dt != null && dt != ''){
  71. Ext.getCmp('fo_detailseq').setValue(dt.toUpperCase().split(' ')[0] + '_SEQ');
  72. /*var dm =Ext.getCmp('fo_detailmainkeyfield').value;
  73. if(dm == null || dm == ''){
  74. showError("请选择从表与主表关联的字段!");return;
  75. }*/
  76. }
  77. //TODO
  78. var grid = Ext.getCmp('grid');
  79. var val = Ext.getCmp('fo_table').value.toUpperCase().split(' ')[0];
  80. Ext.Array.each(grid.store.data.items, function(item){
  81. if(item.data['fd_field'] != null && item.data['fd_field'] != ''){
  82. if(item.data['fd_table'].toUpperCase() != val) {
  83. item.set('fd_table', val);
  84. }
  85. }
  86. });
  87. //判断detailtable的主键字段是否加到了detailgrid里面
  88. //me.insertKeyField();
  89. //判断detailtable与主表关联的字段是否加到了detailgrid里面
  90. //me.insertMainField();
  91. me.save();
  92. }
  93. },
  94. 'erpDeleteDetailButton': {
  95. afterrender: function(btn){
  96. btn.ownerCt.add({
  97. xtype:'erpDbfindButton',
  98. });
  99. btn.ownerCt.add({
  100. xtype:'erpComboButton',
  101. });
  102. }
  103. },
  104. /**
  105. * 下拉框设置
  106. */
  107. 'erpComboButton': {
  108. click: function(btn){
  109. var activeTab = btn.up('tabpanel').getActiveTab();
  110. var record = activeTab.down('gridpanel').selModel.lastSelected;
  111. if(record) {
  112. if(activeTab.id == 'maintab'){
  113. if(record.data.fd_type == 'C') {
  114. btn.comboSet(Ext.getCmp('fo_caller').value, record.data.fd_field);
  115. }
  116. } else {
  117. if(record.data.dg_type == 'combo')
  118. btn.comboSet(Ext.getCmp('fo_caller').value, record.data.dg_field);
  119. }
  120. }
  121. }
  122. },
  123. /**
  124. * DBFind设置
  125. */
  126. 'erpDbfindButton': {
  127. click: function(btn){
  128. var activeTab = btn.up('tabpanel').getActiveTab();
  129. var record = activeTab.down('gridpanel').selModel.lastSelected;
  130. if(record) {
  131. if(activeTab.id == 'maintab'){
  132. if(record.data.fd_dbfind)
  133. btn.dbfindSetUI(Ext.getCmp('fo_caller').value, record.data.fd_field);
  134. }else {
  135. if(record.data.dg_dbbutton)
  136. btn.dbfindSetGrid(Ext.getCmp('fo_caller').value, activeTab.down('gridpanel'), record.data.dg_field);
  137. }
  138. }
  139. }
  140. },
  141. 'button[name=delete]': {
  142. click: function(btn){
  143. me.FormUtil.onDelete(Ext.getCmp('fo_id').value);
  144. }
  145. },
  146. 'button[name=close]': {
  147. click: function(btn){
  148. me.FormUtil.beforeClose(me);
  149. }
  150. },
  151. /*'textfield[name=fo_table]': {
  152. change: function(field){
  153. var grid = Ext.getCmp('grid');
  154. if(grid) {
  155. var val = field.value.toUpperCase().split(' ')[0];
  156. Ext.Array.each(grid.store.data.items, function(item){
  157. if(item.data['fd_field'] != null && item.data['fd_field'] != ''){
  158. var t = item.data['fd_table'];
  159. if(val != t.toUpperCase()){
  160. item.set('fd_table', val);
  161. }
  162. }
  163. });
  164. }
  165. }
  166. },*/
  167. 'textfield[name=fo_detailtable]': {
  168. change: function(field){
  169. var grid = Ext.getCmp('detail');
  170. if(grid) {
  171. var val = field.value.toUpperCase().split(' ')[0];
  172. Ext.each(grid.store.items, function(){
  173. var t = this.data['dg_table'];
  174. if(t != null && t != ''){
  175. if(val != t.toUpperCase()){
  176. this.set('dg_table', val);
  177. }
  178. }
  179. });
  180. }
  181. }
  182. },
  183. 'panel[id=detailtab]': {
  184. activate: function(){
  185. // var dt = Ext.getCmp('fo_detailtable').value;
  186. // if(dt == null || dt == ''){
  187. // showError("[主表]->[从表资料]->[明细表名]还未填写!");
  188. // Ext.getCmp('mytab').setActiveTab(0);
  189. // } else {
  190. // //判断detailtable的主键字段是否加到了detailgrid里面
  191. // me.insertKeyField();
  192. // //判断detailtable与主表关联的字段是否加到了detailgrid里面
  193. // me.insertMainField();
  194. // }
  195. }
  196. },
  197. 'button[name=preview]': {
  198. click: function(){
  199. }
  200. },
  201. 'erpCloseButton':{
  202. beforerender:function(btn){
  203. btn.handler= function(btn){
  204. var win = parent.Ext.ComponentQuery.query('window');
  205. if(win){
  206. Ext.each(win, function(){
  207. this.close();
  208. });
  209. } else {
  210. window.close();
  211. }
  212. };
  213. }
  214. }
  215. });
  216. },
  217. insertKeyField: function(){
  218. var grid = Ext.getCmp('detail');
  219. var field = Ext.getCmp('fo_detailkeyfield');
  220. var count = 0;
  221. Ext.each(grid.store.data.items, function(){
  222. var logic = this.data['dg_logictype'];
  223. var t = this.data['dg_field'];
  224. if(field.value.toUpperCase() == t.toUpperCase()){
  225. this.set('dg_logictype', 'keyField');
  226. logic = 'keyField';
  227. if(count >= 2){
  228. if(this.data['dg_id'] == null || this.data['dg_id'] == ''){
  229. grid.store.remove(this);
  230. }
  231. }
  232. }
  233. if(logic == 'keyField'){
  234. count++;
  235. if(count < 2 && field.value.toUpperCase() != t.toUpperCase()){
  236. this.set('dg_field', field.value);
  237. }
  238. if(count >= 2){
  239. if(this.data['dg_id'] == null || this.data['dg_id'] == ''){
  240. grid.store.remove(this);
  241. }
  242. }
  243. }
  244. });
  245. if(count == 0){
  246. grid.store.add({
  247. dg_sequence: grid.store.data.items[grid.store.data.length-1].data['dg_sequence'] + 1,
  248. dg_logictype: 'keyField',
  249. dg_field: field.value,
  250. dg_caption: 'ID',
  251. dg_table: Ext.getCmp('fo_detailtable').value,
  252. dg_caller: Ext.getCmp('fo_caller').value,
  253. dg_width: 0,
  254. dg_visible: '0',
  255. dg_type: 'numbercolumn',
  256. dg_editable: '0',
  257. dg_dbbutton: '0'
  258. });
  259. } else if(count > 1){
  260. showError("您的从表中有" + count + "个逻辑类型为[主键字段]的字段,请仔细核查!");
  261. }
  262. },
  263. insertMainField: function(){
  264. var grid = Ext.getCmp('detail');
  265. var field = Ext.getCmp('fo_detailmainkeyfield');
  266. var count = 0;
  267. Ext.each(grid.store.data.items, function(){
  268. var logic = this.data['dg_logictype'];
  269. var t = this.data['dg_field'];
  270. if(field.value.toUpperCase() == t.toUpperCase()){
  271. this.set('dg_logictype', 'mainField');
  272. logic = 'mainField';
  273. if(count >= 2){
  274. if(this.data['dg_id'] == null || this.data['dg_id'] == ''){
  275. grid.store.remove(this);
  276. }
  277. }
  278. }
  279. if(logic == 'mainField'){
  280. count++;
  281. if(count < 2 && field.value.toUpperCase() != t.toUpperCase()){
  282. this.set('dg_field', field.value);
  283. }
  284. if(count >= 2){
  285. if(this.data['dg_id'] == null || this.data['dg_id'] == ''){
  286. grid.store.remove(this);
  287. }
  288. }
  289. }
  290. });
  291. if(count == 0){
  292. grid.store.add({
  293. dg_sequence: grid.store.data.items[grid.store.data.length-1].data['dg_sequence'] + 1,
  294. dg_logictype: 'mainField',
  295. dg_field: field.value,
  296. dg_caption: 'MainID',
  297. dg_table: Ext.getCmp('fo_detailtable').value,
  298. dg_caller: Ext.getCmp('fo_caller').value,
  299. dg_width: 0,
  300. dg_visible: '0',
  301. dg_type: 'text',
  302. dg_editable: '0',
  303. dg_dbbutton: '0'
  304. });
  305. } else if(count > 1){
  306. showError("您的从表中有" + count + "个逻辑类型为[关联主表字段]的字段,请仔细核查!");
  307. }
  308. },
  309. createPreForm: function(){
  310. var form = Ext.create('Ext.form.Panel', {
  311. });
  312. },
  313. createPreGrid: function(){
  314. },
  315. createFormItem: function(record){
  316. },
  317. save: function(){
  318. var grid = Ext.getCmp('grid'), items = grid.store.data.items;
  319. var field = Ext.getCmp('fo_table'),val = field.value.split(' ')[0];
  320. Ext.Array.each(items, function(item){
  321. if(item.data['fd_field'] != null && item.data['fd_field'] != '' && Ext.isEmpty('fd_table')){
  322. item.set('fd_table', val);
  323. }
  324. });
  325. var detail = Ext.getCmp('detail'),records = detail.store.data.items;
  326. field = Ext.getCmp('fo_detailtable'),val = field.value.split(' ')[0];
  327. Ext.Array.each(records, function(item){
  328. if(item.data['dg_field'] != null && item.data['dg_field'] != '' && Ext.isEmpty('dg_table')){
  329. item.set('dg_table', val);
  330. }
  331. });
  332. var me = this;
  333. if(! me.FormUtil.checkForm()){
  334. return;
  335. }
  336. if(!Ext.getCmp('fo_flowcaller').value){
  337. Ext.getCmp('fo_flowcaller').setValue(Ext.getCmp('fo_caller').value);
  338. }
  339. var dd = grid.getChange(),de = detail.getChange();
  340. var form=Ext.getCmp('form');
  341. if(Ext.getCmp('fo_id').value){
  342. me.FormUtil.update(form.getValues(), Ext.encode(dd.added),
  343. Ext.encode(dd.updated), Ext.encode(dd.deleted), Ext.encode(de.added),
  344. Ext.encode(de.updated), Ext.encode(de.deleted));
  345. }else {
  346. me.FormUtil.getSeqId(form);
  347. //从表更新相应的dg_caller
  348. var adddetail=de.added;
  349. Ext.Array.each(adddetail,function(d){
  350. if(!d['dg_caller']){
  351. d.set('dg_caller',Ext.getCmp('fo_caller').value);
  352. }
  353. });
  354. me.FormUtil.save(form.getValues(),Ext.encode(dd.added), Ext.encode(adddetail));
  355. }
  356. }
  357. });