FormPortal.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. Ext.define('erp.view.sys.base.FormPortal',{
  2. extend: 'Ext.form.Panel',
  3. alias: 'widget.formportal',
  4. autoScroll : true,
  5. defaultType : 'textfield',
  6. labelSeparator : ':',
  7. buttonAlign : 'center',
  8. bodyStyle : 'background:#f9f9f9;padding:5px 5px 0',
  9. fieldDefaults : {
  10. msgTarget: 'none',
  11. blankText : $I18N.common.form.blankText
  12. },
  13. FormUtil: Ext.create('erp.util.FormUtil'),
  14. BaseUtil: Ext.create('erp.util.BaseUtil'),
  15. layout:'column',
  16. defaultValues:null,
  17. saveType:'ADD',
  18. defaults:{
  19. xtype:'textfield',
  20. columnWidth:0.33,
  21. margin:'5 5 5 5'
  22. },
  23. caller:null,
  24. buttons: [{
  25. xtype:'tbtext',
  26. text:'<div style="color:gray;">带'+required+'输入框为必填项</div>'
  27. },'->',{
  28. text: '保存',
  29. formBind: true,
  30. disabled: true,
  31. handler: function(btn) {
  32. var form = this.up('form');
  33. if (form.isValid()) {
  34. form.onSave(form,btn);
  35. }
  36. }
  37. },{
  38. text: '清空',
  39. handler: function() {
  40. this.up('form').getForm().reset();
  41. }
  42. }],
  43. initComponent : function(){
  44. var params=this.params ||{
  45. caller:this.caller||caller,
  46. condition:this.condition
  47. };
  48. this.getFormItems(this,"common/singleFormItems.action",params);
  49. this.callParent(arguments);
  50. },
  51. getFormItems: function(form, url, param){
  52. var me = this;
  53. me.setLoading(true);
  54. Ext.Ajax.request({//拿到form的items
  55. url : basePath + url,
  56. params: param,
  57. method : 'post',
  58. callback : function(options, success, response){
  59. me.setLoading(false);
  60. if (!response) return;
  61. var res = new Ext.decode(response.responseText);
  62. if(res.exceptionInfo != null){
  63. showError(res.exceptionInfo);return;
  64. }
  65. form.fo_id = res.fo_id;
  66. form.fo_keyField = res.keyField;
  67. form.tablename = res.tablename;//表名
  68. if(res.keyField){//主键
  69. form.keyField = res.keyField;
  70. }
  71. if(res.statusField){//状态
  72. form.statusField = res.statusField;
  73. }
  74. if(res.statuscodeField){//状态码
  75. form.statuscodeField = res.statuscodeField;
  76. }
  77. if(res.codeField){//Code
  78. form.codeField = res.codeField;
  79. }
  80. if(res.dealUrl){
  81. form.dealUrl = res.dealUrl;
  82. }
  83. form.fo_detailMainKeyField = res.fo_detailMainKeyField;//从表外键字段
  84. var grids = Ext.ComponentQuery.query('gridpanel');
  85. var items = me.setItems(form, res.items, res.data, res.limits, {
  86. });
  87. form.add(items);
  88. form.fireEvent('afterload', form);
  89. }
  90. });
  91. },
  92. setItems: function(form, items, data, limits, necessaryCss){
  93. var edit = true,hasData = true,limitArr = new Array();
  94. if(limits != null && limits.length > 0) {//权限外字段
  95. limitArr = Ext.Array.pluck(limits, 'lf_field');
  96. }
  97. if (data) {
  98. data = Ext.decode(data);
  99. } else {
  100. hasData = false;
  101. }
  102. var bool = 'a';
  103. if(items.length > 110&&items.length <=190){
  104. bool = 'b';
  105. }else if(items.length>190){
  106. bool = 'c';
  107. }
  108. Ext.each(items, function(item){
  109. if(item.columnWidth<0.5)item.columnWidth = 0.5;
  110. item.cls="";
  111. item.fieldStyle="background:white repeat-x 0 0;border-width: 1px;border-style: solid;";
  112. //item.fieldStyle="background: white repeat-x 0 0;border-color: silver #d9d9d9 #d9d9d9;";
  113. if(item.name != null) {
  114. if(item.name == form.statusField){//状态加特殊颜色
  115. item.fieldStyle = item.fieldStyle + ';font-weight:bold;';
  116. } else if(item.name == form.statuscodeField){//状态码字段强制隐藏
  117. item.xtype = 'hidden';
  118. }
  119. }
  120. if(form.codeField && item.name==form.codeField) item.allowBlank=false;
  121. if(!item.allowBlank && item.fieldLabel) {
  122. item.afterLabelTextTpl=required;
  123. }
  124. if(item.xtype == 'hidden') {
  125. item.columnWidth = 0;
  126. item.margin = '0';
  127. }else if(item.xtype == 'checkbox') {
  128. item.focusCls = '';
  129. item.fieldStyle = '';
  130. item.uncheckedValue=0;
  131. }else if(item.xtype =='erpYnField'){
  132. item.xtype='checkbox';
  133. item.boxLabel=item.fieldLabel;
  134. item.hideLabel=true;
  135. item.afterBoxLabelTextTpl=required;
  136. item.fieldStyle = '';
  137. item.checked = Math.abs(item.value || 0) == 1;
  138. }else if(item.xtype=='textareatrigger') item.xtype='textareafield';
  139. if(item.maskRe!=null){
  140. item.maskRe=new RegExp(item.regex);
  141. }
  142. if(form.defaultValues){
  143. Ext.Array.each(form.defaultValues,function(v){
  144. if(item.name in v) item.value=v[item.name];
  145. });
  146. }
  147. if (hasData) {
  148. item.value = data[item.name];
  149. if(item.xtype == 'datefield' && !item.format && item.value) {
  150. item.value = item.value.substring(0,10);
  151. }
  152. if(item.secondname){//针对合并型的字段MultiField
  153. item.secondvalue = data[item.secondname];
  154. }
  155. if(!edit){
  156. form.readOnly = true;
  157. item.fieldStyle = item.fieldStyle + ';background:#f1f1f1;';
  158. item.readOnly = true;
  159. }
  160. if(item.xtype == 'checkbox'){
  161. item.checked = Math.abs(item.value || 0) == 1;
  162. item.fieldStyle = '';
  163. item.uncheckedValue=0;
  164. }
  165. }
  166. });
  167. items.push({
  168. xtype:'fieldset',
  169. title: '表单介绍',
  170. columnWidth: 1,
  171. collapsible: true,
  172. collapsed: true,
  173. html:'表单介绍'
  174. })
  175. return items;
  176. },
  177. onSave: function(form,btn){
  178. var me = this,url,warnMsg='保存成功!',kF=null;
  179. if(!me.checkData()){
  180. return;
  181. }
  182. if(form.keyField){
  183. kF=Ext.getCmp(form.keyField);
  184. if(kF.value == null || kF.value == '' || kF.value!=kF.originalValue){
  185. me.getSeqId(form,me.setKeyFieldValue);
  186. url = form.saveUrl;
  187. form.saveType='ADD';
  188. }else {
  189. url = form.updateUrl;
  190. warnMsg='修改成功!';
  191. form.saveType='UPDATE';
  192. }
  193. }
  194. Ext.each(form.items.items, function(item){
  195. if(item.xtype == 'numberfield'){
  196. //number类型赋默认值,不然sql无法执行
  197. if(item.value == null || item.value == ''){
  198. item.setValue(0);
  199. }
  200. }else if(item.xtype=='checkbox'){
  201. item.dirty=true;
  202. if(item.checked){
  203. item.inputValue='-1';
  204. item.submitValue='-1';
  205. }else {
  206. item.inputValue='0';
  207. item.submitValue='0';
  208. item.value='0';
  209. item.rawValue='0';
  210. }
  211. }
  212. });
  213. var r = form.getValues();
  214. var keys = Ext.Object.getKeys(r), f;
  215. var reg = /[!@#$%^&*()'":,\/?]/;
  216. Ext.each(keys, function(k){
  217. f = form.down('#' + k);
  218. if(f && f.logic == 'ignore') {
  219. delete r[k];
  220. }
  221. //codeField值强制大写,自动过滤特殊字符
  222. if(k == form.codeField && !Ext.isEmpty(r[k])) {
  223. r[k] = r[k].trim().toUpperCase().replace(reg, '');
  224. }
  225. });
  226. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  227. if(contains(k, 'ext-', true)){
  228. delete r[k];
  229. }
  230. });
  231. var params=new Object();
  232. params.formStore= unescape(escape(Ext.JSON.encode(r)));
  233. if(form.emptyGrid)params.gridStore="[]";
  234. if(url.indexOf('caller=') == -1){
  235. url = url + "?caller=" + form.caller;
  236. }
  237. form.setLoading(true);
  238. if(form.saveType='UPDATE' && form.keyField && kF.value) me.saveBefore(form.caller,kF.value);
  239. Ext.Ajax.request({
  240. url : basePath + url,
  241. params : params,
  242. method : 'post',
  243. callback : function(options,success,response){
  244. form.setLoading(false);
  245. var localJson = new Ext.decode(response.responseText);
  246. if(localJson.success){
  247. showResult('提示',warnMsg);
  248. me.saveAfter(form.caller,kF.value);
  249. form.saveSuccess(form.currentTab,btn);
  250. } else if(localJson.exceptionInfo){
  251. showResult('提示',localJson.exceptionInfo);
  252. } else{
  253. showResult('提示',"操作失败!");
  254. }
  255. }
  256. });
  257. },
  258. getSeqId: function(form,fn){
  259. if(!form){
  260. form = Ext.getCmp('form');
  261. }
  262. Ext.Ajax.request({
  263. url : basePath + form.getIdUrl,
  264. method : 'get',
  265. async: false,
  266. callback : function(options,success,response){
  267. var rs = new Ext.decode(response.responseText);
  268. if(rs.exceptionInfo){
  269. showError(rs.exceptionInfo);return;
  270. }
  271. if(rs.success){
  272. fn.call(null, form.keyField,rs.id);
  273. }
  274. }
  275. });
  276. },
  277. checkData:function(){
  278. return true;
  279. },
  280. setKeyFieldValue:function(keyField,value){
  281. Ext.getCmp(keyField).setValue(value);
  282. },
  283. saveBefore:function(caller,keyValue){
  284. Ext.Ajax.request({
  285. url : basePath + 'ma/sysinit/saveBefore.action',
  286. method : 'POST',
  287. async: false,
  288. params:{
  289. caller:caller,
  290. keyValue:keyValue
  291. }
  292. });
  293. },
  294. saveAfter:function(caller,keyValue){
  295. Ext.Ajax.request({
  296. url : basePath + 'ma/sysinit/saveAfter.action',
  297. method : 'POST',
  298. params:{
  299. caller:caller,
  300. keyValue:keyValue
  301. }
  302. });
  303. }
  304. });