Form.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.ma.Form', {
  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.Form','core.form.Panel','core.grid.Panel2','ma.MyGrid',
  9. 'core.button.UUListener','core.button.Sync','erp.view.core.form.FileField',
  10. 'core.button.Add','core.button.Save','core.button.Close','core.button.Update','core.button.Delete','core.button.DeleteDetail',
  11. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.toolbar.Toolbar','core.trigger.MultiDbfindTrigger',
  12. 'core.grid.TfColumn','core.button.DbfindButton','core.button.ComboButton', 'core.form.YnField','core.button.CopyAll'
  13. ],
  14. init:function(){
  15. var me = this;
  16. this.control({
  17. 'erpSyncButton': {
  18. afterrender: function(btn){
  19. btn.autoClearCache = true;
  20. }
  21. },
  22. 'erpSaveButton': {
  23. click: function(btn){
  24. me.save();
  25. }
  26. },
  27. 'erpUpdateButton': {
  28. click: function(btn){
  29. me.update();
  30. }
  31. },
  32. 'erpDeleteButton': {
  33. click: function(btn){
  34. me.FormUtil.onDelete(Ext.getCmp('fo_id').value);
  35. }
  36. },
  37. 'erpCloseButton': {
  38. click: function(btn){
  39. this.FormUtil.beforeClose(this);
  40. }
  41. },
  42. 'mygrid':{
  43. select: function(selModel, record){
  44. this.GridUtil.onGridItemClick(selModel, record);
  45. var grid = selModel.view.ownerCt.ownerCt;
  46. if(record && record.data.fd_dbfind)
  47. grid.down('erpDbfindButton').setDisabled(false);
  48. else if(record && record.data.fd_type == 'C')
  49. grid.down('erpComboButton').setDisabled(false);
  50. else {
  51. grid.down('erpComboButton').setDisabled(true);
  52. grid.down('erpDbfindButton').setDisabled(true);
  53. }
  54. }
  55. },
  56. 'erpAddButton': {
  57. click: function(){
  58. me.FormUtil.onAdd('addForm', '新增Form', 'jsps/ma/form.jsp');
  59. }
  60. },
  61. 'checkcolumn[dataIndex=fd_dbfind]': {
  62. checkchange: function(cm, rIdx, val){
  63. if(val) {
  64. var grid = cm.up('grid'),
  65. record = grid.store.getAt(rIdx);
  66. grid.selModel.select(record);
  67. }
  68. }
  69. },
  70. 'erpDeleteDetailButton': {
  71. afterrender: function(btn){
  72. btn.ownerCt.add({
  73. xtype:'erpDbfindButton',
  74. });
  75. btn.ownerCt.add({
  76. xtype:'erpComboButton',
  77. });
  78. }
  79. },
  80. /**
  81. * 下拉框设置
  82. */
  83. 'erpComboButton': {
  84. click: function(btn){
  85. var record = btn.ownerCt.ownerCt.selModel.lastSelected;
  86. if(record && record.data.fd_type == 'C') {
  87. btn.comboSet(Ext.getCmp('fo_caller').value, record.data.fd_field,me);
  88. }
  89. }
  90. },
  91. /**
  92. * DBFind设置
  93. */
  94. 'erpDbfindButton': {
  95. click: function(btn){
  96. var grid = btn.ownerCt.ownerCt, record = grid.selModel.lastSelected;
  97. if(record && record.data.fd_dbfind) {
  98. btn.dbfindSetUI(Ext.getCmp('fo_caller').value, record.data.fd_field, grid);
  99. }
  100. }
  101. },
  102. 'erpFormPanel textfield[name=fo_detailtable]': {
  103. change: function(field){
  104. field.setValue(field.value.toUpperCase());
  105. }
  106. },
  107. 'multidbfindtrigger': {
  108. render: function(field){
  109. if(field.name == 'fo_button4add' || field.name == 'fo_button4rw'){
  110. var fields = Ext.Object.getKeys($I18N.common.button);
  111. var values = Ext.Object.getValues($I18N.common.button);
  112. var data = [];
  113. Ext.each(fields, function(f, index){
  114. var o = {};
  115. o.value = fields[index];
  116. o.display = values[index];
  117. data.push(o);
  118. });
  119. field.multistore = {fields:['display', 'value'],data:data};
  120. }
  121. }
  122. },
  123. 'multidbfindtrigger[name=fd_field]': {
  124. focus: function(t){
  125. t.setHideTrigger(false);
  126. t.setReadOnly(false);
  127. var record = Ext.ComponentQuery.query('mygrid')[0].selModel.getLastSelected();
  128. var code = record.get('fd_table');
  129. if(code == null || code == ''){
  130. showError("请先选择表单!");
  131. t.setHideTrigger(true);
  132. t.setReadOnly(true);
  133. } else {
  134. t.dbBaseCondition = "ddd_tablename='" + code.split(' ')[0].toUpperCase() + "'";
  135. }
  136. },
  137. aftertrigger: function(t) {
  138. var f = Ext.getCmp('fo_table');
  139. var record = Ext.ComponentQuery.query('mygrid')[0].selModel.getLastSelected();
  140. var a = record.data['fd_table'];
  141. if(Ext.isEmpty(f.value) && !Ext.isEmpty(a)) {
  142. f.setValue(a.toUpperCase());
  143. }
  144. }
  145. },
  146. 'dbfindtrigger[name=fo_table]': {
  147. afterrender: function(t){
  148. t.autoDbfind = false;
  149. }
  150. },
  151. 'dbfindtrigger[name=fd_table]': {
  152. afterrender: function(t){
  153. t.autoDbfind = false;
  154. },
  155. aftertrigger: function(t) {
  156. var f = Ext.getCmp('fo_table');
  157. if(Ext.isEmpty(f.value) && !Ext.isEmpty(t.value)) {
  158. f.setValue(t.value.toUpperCase());
  159. }
  160. }
  161. },
  162. 'dbfindtrigger[name=fo_keyfield]': {
  163. afterrender: function(t){
  164. t.autoDbfind = false;
  165. t.findConfig = function() {
  166. var tab = Ext.getCmp('fo_table').getValue();
  167. if(tab)
  168. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  169. return null;
  170. };
  171. }
  172. },
  173. 'dbfindtrigger[name=fo_codefield]': {
  174. afterrender: function(t){
  175. t.autoDbfind = false;
  176. t.findConfig = function() {
  177. var tab = Ext.getCmp('fo_table').getValue();
  178. if(tab)
  179. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  180. return null;
  181. };
  182. }
  183. },
  184. 'dbfindtrigger[name=fo_statusfield]': {
  185. afterrender: function(t){
  186. t.autoDbfind = false;
  187. t.findConfig = function() {
  188. var tab = Ext.getCmp('fo_table').getValue();
  189. if(tab)
  190. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  191. return null;
  192. };
  193. }
  194. },
  195. 'dbfindtrigger[name=fo_statuscodefield]': {
  196. afterrender: function(t){
  197. t.autoDbfind = false;
  198. t.findConfig = function() {
  199. var tab = Ext.getCmp('fo_table').getValue();
  200. if(tab)
  201. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  202. return null;
  203. };
  204. }
  205. },
  206. 'dbfindtrigger[name=fo_detailkeyfield]': {
  207. afterrender: function(t){
  208. t.autoDbfind = false;
  209. t.findConfig = function() {
  210. var tab = Ext.getCmp('fo_detailtable').getValue();
  211. if(tab)
  212. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  213. return null;
  214. };
  215. }
  216. },
  217. 'dbfindtrigger[name=fo_detailmainkeyfield]': {
  218. afterrender: function(t){
  219. t.autoDbfind = false;
  220. t.findConfig = function() {
  221. var tab = Ext.getCmp('fo_detailtable').getValue();
  222. if(tab)
  223. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  224. return null;
  225. };
  226. }
  227. },
  228. 'dbfindtrigger[name=fo_detailstatuscode]': {
  229. afterrender: function(t){
  230. t.autoDbfind = false;
  231. t.findConfig = function() {
  232. var tab = Ext.getCmp('fo_detailtable').getValue();
  233. if(tab)
  234. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  235. return null;
  236. };
  237. }
  238. },
  239. 'dbfindtrigger[name=fo_detailstatus]': {
  240. afterrender: function(t){
  241. t.autoDbfind = false;
  242. t.findConfig = function() {
  243. var tab = Ext.getCmp('fo_detailtable').getValue();
  244. if(tab)
  245. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  246. return null;
  247. };
  248. }
  249. },
  250. 'dbfindtrigger[name=fo_detaildetnofield]': {
  251. afterrender: function(t){
  252. t.autoDbfind = false;
  253. t.findConfig = function() {
  254. var tab = Ext.getCmp('fo_detailtable').getValue();
  255. if(tab)
  256. return "ddd_tablename='" + tab.split(' ')[0].toUpperCase() + "'";
  257. return null;
  258. };
  259. }
  260. },
  261. 'mfilefield': {
  262. afterrender: function(f) {
  263. // 只能有一个rpt附件
  264. f.multi = false;
  265. }
  266. }
  267. });
  268. },
  269. getForm: function(btn){
  270. return btn.ownerCt.ownerCt;
  271. },
  272. onChange: function(field, value){
  273. field.setValue(value);
  274. if(value == 'C'){
  275. }
  276. },
  277. save: function(){
  278. //序列号
  279. Ext.getCmp('fo_seq').setValue(Ext.getCmp('fo_table').value.toUpperCase() + '_SEQ');
  280. var dt = Ext.getCmp('fo_detailtable').value;
  281. if(dt != null && dt != ''){
  282. Ext.getCmp('fo_detailseq').setValue(dt.toUpperCase() + '_SEQ');
  283. var dm = Ext.getCmp('fo_detailmainkeyfield').value;
  284. if(dm == null || dm == ''){
  285. showError("请选择从表与主表关联的字段!");return;
  286. }
  287. }
  288. var grid = Ext.ComponentQuery.query('mygrid')[0], items = grid.store.data.items, dd = new Array(), d = null;
  289. var field = Ext.getCmp('fo_table');
  290. Ext.Array.each(items, function(item){
  291. d = item.data;
  292. if(!Ext.isEmpty(d['fd_field'])){
  293. if(Ext.isEmpty(d['fd_table']))
  294. item.set('fd_table', field.value);
  295. d.fd_readonly = d.fd_readonly ? 'T' : 'F';
  296. d.fd_dbfind = d.fd_dbfind ? 'T' : 'F';
  297. d.fd_allowblank = d.fd_allowblank ? 'T' : 'F';
  298. d.fd_check = d.fd_check ? 1 : 0;
  299. dd.push(d);
  300. }
  301. });
  302. if(dd.length > 0) {
  303. var form = Ext.getCmp('form');
  304. this.FormUtil.getSeqId(form);
  305. this.FormUtil.save(form.getValues(), Ext.encode(dd));
  306. } else {
  307. showError('请至少配置一个有效字段!');
  308. }
  309. },
  310. update: function(){
  311. var grid = Ext.ComponentQuery.query('mygrid')[0];
  312. var field = Ext.getCmp('fo_table'), id = Ext.getCmp('fo_id').value;
  313. grid.store.each(function(item){
  314. if(item.get('deploy') && !Ext.isEmpty(item.get('fd_field'))){
  315. if(item.get('fd_foid') != id)
  316. item.set('fd_foid', id);
  317. if(Ext.isEmpty(item.get('fd_table')))
  318. item.set('fd_table', field.value);
  319. }
  320. });
  321. var me = this;
  322. if(! me.FormUtil.checkForm()){
  323. return;
  324. }
  325. var dd = grid.getChange();
  326. me.FormUtil.update(Ext.getCmp('form').getValues(), Ext.encode(dd.added),
  327. Ext.encode(dd.updated), Ext.encode(dd.deleted));
  328. }
  329. });