Form.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. Ext.define('erp.view.common.CommonChange.Form',{
  2. requires: ['erp.view.core.form.Panel'],
  3. extend: 'erp.view.core.form.Panel',
  4. alias: 'widget.erpCommonChangeFormPanel',
  5. LogFields:null,
  6. initComponent : function(){
  7. formCondition = getUrlParam('formCondition');//从url解析参数
  8. formCondition = (formCondition == null) ? "" : formCondition.replace(/IS/g,"=");
  9. //集团版
  10. var master=getUrlParam('newMaster');
  11. var datalistId = getUrlParam('datalistId');
  12. var datalist = parent.Ext.getCmp(datalistId);
  13. if(datalist){
  14. var record = datalist.currentRecord;
  15. caller=record.get('cl_caller');
  16. }
  17. var param = {caller: this.caller || caller, condition:this.formCondition||formCondition, _noc: (getUrlParam('_noc') || this._noc)};
  18. if(master){
  19. param.master=master;
  20. }
  21. this.addEvents({alladded: true});
  22. this.callParent(arguments);
  23. },
  24. getItemsAndButtons:function(form,url,param){
  25. var me = this, tab = me.FormUtil.getActiveTab(),buttons=null;
  26. param.condition=null;
  27. me.setLoading(true);
  28. Ext.Ajax.request({//拿到form的items
  29. url : basePath + url,
  30. params: param,
  31. method : 'post',
  32. callback : function(options, success, response){
  33. me.setLoading(false);
  34. if (!response) return;
  35. var res = new Ext.decode(response.responseText);
  36. if(res.exceptionInfo != null){
  37. showError(res.exceptionInfo);return;
  38. }
  39. form.fo_id = res.fo_id;
  40. form.fo_keyField = res.keyField;
  41. form.tablename = res.tablename;//表名
  42. form.uulistener = res.uulistener;//uu监听字段
  43. if(res.keyField){//主键
  44. form.keyField = res.keyField;
  45. }
  46. if(res.statusField){//状态
  47. form.statusField = res.statusField;
  48. }
  49. if(res.statuscodeField){//状态码
  50. form.statuscodeField = res.statuscodeField;
  51. }
  52. if(res.codeField){//Code
  53. form.codeField = res.codeField;
  54. }
  55. if(res.dealUrl){
  56. form.dealUrl = res.dealUrl;
  57. }
  58. form.fo_detailMainKeyField = res.fo_detailMainKeyField;//从表外键字段
  59. var grids = Ext.ComponentQuery.query('gridpanel');
  60. //如果该页面只有一个form,而且form字段少于8个,则布局改变
  61. if(!form.fixedlayout && !form.minMode && grids.length == 0 && res.items.length <= 8){
  62. Ext.each(res.items, function(item){
  63. item.columnWidth = 0.5;
  64. });
  65. form.layout = 'column';
  66. }
  67. var record=null;
  68. if(formCondition==null || formCondition=='') buttons=res.buttons;
  69. else {
  70. record=me.getRecord(formCondition);
  71. buttons=me.getbuttons(caller);
  72. }
  73. var items=me.setItems(form,res.items,record);
  74. form.add(items.baseItems);
  75. form.add(me.getChangeGroupItem());
  76. form.add(items.changeItems);
  77. me.fireEvent('afterload', me);
  78. me.FormUtil.setButtons(form, buttons);
  79. }
  80. });
  81. },
  82. setItems: function(form, items, data, limits){
  83. var edit = true,hasData = true,limitArr = new Array(),itemId=null,o=new Object(),array=new Array(),baseItems=new Array(),changeAfterItems=new Array(),allItems=new Object();
  84. form.LogFields=new Array();
  85. if(limits != null && limits.length > 0) {//权限外字段
  86. limitArr = Ext.Array.pluck(limits, 'lf_field');
  87. }
  88. if (data) {
  89. if(form.statuscodeField && data[form.statuscodeField] != null && data[form.statuscodeField] != '' &&
  90. ['ENTERING', 'UNAUDIT', 'UNPOST', 'CANUSE'].indexOf(data[form.statuscodeField]) == -1){//非在录入和已提交均设置为只读// && data[form.statuscodeField] != 'COMMITED'
  91. form.readOnly = true;
  92. edit = false;
  93. }
  94. } else {
  95. hasData = false;
  96. }
  97. var bool = 'a';
  98. if(items.length > 110&&items.length <=190){
  99. bool = 'b';
  100. }else if(items.length>190){
  101. bool = 'c';
  102. }
  103. Ext.each(items, function(item){
  104. if(screen.width < 1280){//根据屏幕宽度,调整列显示宽度
  105. if(item.columnWidth > 0 && item.columnWidth <= 0.25){
  106. item.columnWidth = 1/3;
  107. } else if(item.columnWidth > 0.25 && item.columnWidth <= 0.5){
  108. item.columnWidth = 2/3;
  109. } else if(item.columnWidth >= 1){
  110. item.columnWidth = 1;
  111. }
  112. } else {
  113. if(item.columnWidth > 0.25 && item.columnWidth < 0.5){
  114. item.columnWidth = 1/3;
  115. } else if(item.columnWidth > 0.5 && item.columnWidth < 0.75){
  116. item.columnWidth = 2/3;
  117. }
  118. }
  119. if(item.name != null) {
  120. if(item.name == form.statusField){//状态加特殊颜色
  121. item.fieldStyle = item.fieldStyle + ';font-weight:bold;';
  122. } else if(item.name == form.statuscodeField){//状态码字段强制隐藏
  123. item.xtype = 'hidden';
  124. }
  125. }
  126. if(item.xtype == 'hidden') {
  127. item.columnWidth = 0;
  128. item.margin = '0';
  129. }
  130. if(item.xtype == 'checkbox') {
  131. item.focusCls = '';
  132. }
  133. if (hasData) {
  134. item.value = data[item.name];
  135. if(item.secondname){//针对合并型的字段MultiField
  136. item.secondvalue = data[item.secondname];
  137. }
  138. if(!edit){
  139. form.readOnly = true;
  140. item.fieldStyle = item.fieldStyle + ';background:#f1f1f1;';
  141. item.readOnly = true;
  142. }
  143. if(item.xtype == 'checkbox'){
  144. item.checked = Math.abs(item.value || 0) == 1;
  145. item.fieldStyle = '';
  146. }
  147. }
  148. if(limitArr.length > 0 && Ext.Array.contains(limitArr, item.name)) {
  149. item.hidden = true;
  150. }
  151. if(item.html&&item.name == null&&item.value==''){
  152. }else{
  153. if(bool == 'b') {
  154. item.columnWidth = item.columnWidth*0.83;
  155. }
  156. if(bool == 'c') {
  157. item.columnWidth = item.columnWidth*0.85;
  158. }
  159. }
  160. if(item.logic!='changeKeyField' && item.logic!='changeCodeField' && item.xtype=='dbfindtrigger'){
  161. item.readOnly=true;
  162. }
  163. if(item.id!=null && (item.table ==null || item.table !='commonchangelog') && item.logic!='changeKeyField' && item.logic!='changeCodeField'){
  164. o=Ext.clone(item);
  165. o.id=o.id+"-new";
  166. o.triggerName=o.name;
  167. o.name=o.name+"-new";
  168. o.isCommonChange=true;
  169. if (data!=null) o.value=data[o.name];
  170. o.readOnly=false;
  171. o.group=10;
  172. array.push(o);
  173. }else form.LogFields.push(item.name);
  174. });
  175. // 字段少的form
  176. if(form.minMode) {
  177. Ext.each(array, function(item){
  178. if(item.columnWidth >= 0 && item.columnWidth < 0.5){
  179. item.columnWidth = 0.5;
  180. } else if(item.columnWidth >= 0.5) {
  181. item.columnWidth = 1;
  182. }
  183. });
  184. }
  185. allItems.changeItems=array;
  186. allItems.baseItems=items;
  187. return allItems;
  188. },
  189. getChangeGroupItem:function(){
  190. var o=new Object();
  191. o.html = "<div onclick=\"javascript:collapse(" + 10+ ");\" class=\"x-form-group-label\" id=\"group"
  192. + 10 + "\" style=\"background-color: #bfbfbe;\" title=\"收拢\"><h6>变更后</h6></div>";
  193. o.columnWidth = 1;
  194. o.xtype = "label";
  195. o.cls = "";
  196. return o;
  197. },
  198. getLogValues:function(form){
  199. var values=form.getForm.getValues(),logvalues=new Object();
  200. Ext.Array.each(form.LogFields,function(field){
  201. logvalues[field]=values[field];
  202. })
  203. return logvalues;
  204. },
  205. getRecord:function(formCondition){
  206. var record=null;
  207. Ext.Ajax.request({
  208. url : basePath + 'common/getFieldsData.action',
  209. params : {
  210. fields:'cl_data,cl_status,cl_statuscode,cl_auditman,cl_auditdate',
  211. caller:'commonchangelog',
  212. condition:formCondition
  213. },
  214. async:false,
  215. method : 'post',
  216. callback : function(options,success,response){
  217. var localJson = new Ext.decode(response.responseText);
  218. if(localJson.success){
  219. var data=localJson.data;
  220. data.cl_data.cl_status=data.cl_status;
  221. data.cl_data.cl_statuscode=data.cl_statuscode;
  222. data.cl_data.cl_auditman=data.cl_auditman;
  223. data.cl_data.cl_auditdate=data.cl_auditdate;
  224. record=data.cl_data;
  225. /*form.getForm().setValues(localJson.data.cl_data);
  226. var chs = form.query('checkbox');
  227. Ext.each(chs, function(){
  228. this.setValue(Math.abs(d[this.name] || 0) == 1);
  229. });
  230. form.getForm().getFields().each(function (item,index,length){
  231. item.originalValue = item.value;
  232. if(data.cl_data.cl_statuscode !='ENTERING') item.setReadOnly(true);
  233. });*/
  234. }
  235. }
  236. });
  237. return record;
  238. },
  239. getbuttons:function(caller){
  240. var buttons=null;
  241. Ext.Ajax.request({
  242. url : basePath + 'common/getFieldData.action',
  243. params : {
  244. field:'Fo_Button4rw',
  245. caller:'Form',
  246. condition:"fo_caller='"+caller+"'"
  247. },
  248. async:false,
  249. method : 'post',
  250. callback : function(options,success,response){
  251. var localJson = new Ext.decode(response.responseText);
  252. if(localJson.success){
  253. buttons=localJson.data;
  254. }
  255. }
  256. });
  257. return buttons;
  258. }
  259. });