CheckBase.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.plm.test.CheckBase', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. BaseUtil: Ext.create('erp.util.BaseUtil'),
  6. GridUtil: Ext.create('erp.util.GridUtil'),
  7. views:[
  8. 'plm.test.Check','core.form.Panel','core.grid.Panel2','core.grid.Panel5',
  9. 'core.button.Submit','core.button.ResSubmit','core.button.Close',
  10. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.form.YnField','core.button.ChangeHandler'
  11. ],
  12. init:function(){
  13. var me=this;
  14. this.control({
  15. 'erpSubmitButton': {
  16. afterrender: function(btn){
  17. var code = Ext.getCmp('cbd_statuscode').getValue();
  18. if(code!='TESTING'){
  19. btn.hide();
  20. }
  21. },
  22. beforerender:function(btn){
  23. btn.formBind=true;
  24. },
  25. click: function(btn){
  26. var handman=Ext.getCmp('cbd_handman').value,result=Ext.getCmp('cbd_result').value;
  27. if(result=='NG' && (handman == null || handman=='')){
  28. showMessage('提示','NG状态请先选择对应处理人再提交!',1000);
  29. }
  30. else me.onUpdate(this);
  31. }
  32. },
  33. 'erpResSubmitButton':{
  34. click:function(btn){
  35. me.FormUtil.onResSubmit(Ext.getCmp('cbd_id').getValue());
  36. },
  37. afterrender: function(btn){
  38. var code = Ext.getCmp('cbd_statuscode').getValue();
  39. if(code=='TESTING'){
  40. btn.hide();
  41. }
  42. },
  43. },
  44. 'erpCloseButton':{
  45. afterrender:function(btn){
  46. /*var handmanid=Ext.getCmp('cld_newhandmanid').getValue();
  47. if(Ext.getCmp('cld_statuscode').value!='HANDED'){
  48. if(handmanid==emid){
  49. Ext.getCmp('cld_newhanddate').setValue(Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
  50. if(Ext.getCmp('cld_statuscode').value!='HANDED'){
  51. Ext.getCmp('cld_handdescription').setValue(null);
  52. Ext.getCmp('cld_handresult').setValue(null);
  53. }
  54. }else {
  55. Ext.getCmp('cld_newtestdate').setValue(Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
  56. Ext.getCmp('cld_newtestman').setValue(emname);
  57. Ext.getCmp('cld_newtestmanid').setValue(emid);
  58. Ext.getCmp('cld_testdescription').setValue(null);
  59. Ext.getCmp('cld_testresult').setValue(null);
  60. }
  61. }else {
  62. }
  63. var value=Ext.getCmp('cld_attach').getValue();
  64. var form = me.getForm(btn);
  65. if(value!=null&&value!=""){
  66. form.add({
  67. title:'相关文件',
  68. id:'container',
  69. style: {borderColor:'green', borderStyle:'solid', borderWidth:'0px'},
  70. xtype:'container',
  71. columnWidth:1
  72. });
  73. var name=value.split(";")[0];
  74. var id=value.split(";")[1];
  75. var items = new Array();
  76. items.push({
  77. style: 'background:#CDBA96;',
  78. html: '<h1>相关文件:</h1>',
  79. });
  80. items.push({
  81. style: 'background:#C6E2FF;',
  82. html: '<img src="' + basePath + 'resource/images/mainpage/things.png" width=16 height=16/>' +
  83. '<span>文件:' + name + '<a href="' + basePath + "common/downloadbyId.action?id=" + id + '">下载</a></span>',
  84. });
  85. Ext.getCmp('container').add(items);
  86. }*/
  87. }
  88. },
  89. 'textfield[name=cbd_testman]':{
  90. afterrender:function(field){
  91. if(!field.value){
  92. field.setValue(emname);
  93. }
  94. }
  95. },
  96. 'datetimefield[name=cbd_testdate]':{
  97. afterrender:function(field){
  98. if(!field.value){
  99. field.setValue(new Date());
  100. }
  101. }
  102. },
  103. 'multidbfind[name=cbd_handman]':{
  104. afterrender:function(field){
  105. field.dbKey='cb_prjid';
  106. field.mappingKey='tm_prjid';
  107. field.message='无数据!';
  108. }
  109. },
  110. 'combo[name=cbd_result]':{
  111. afterrender: function(t) {
  112. me.checkType(t.value);
  113. },
  114. change: function(t){
  115. me.checkType(t.value);
  116. }
  117. },
  118. 'erpYnField[name=cld_handresult]':{
  119. beforerender:function(field){
  120. var value=Ext.getCmp('cld_newhandmanid').getValue();
  121. if(value&&value==emid){
  122. //当前用户进来的是处理人员
  123. field.fieldStyle='background:#fffac0;color:#515151;';
  124. field.allowBlank=false;
  125. field.readOnly=false;
  126. }
  127. }
  128. },
  129. 'erpYnField[name=cld_testresult]':{
  130. beforerender:function(field){
  131. var value=Ext.getCmp('cld_newhandmanid').getValue();
  132. if(value&&value!=emid){
  133. //当前用户进来的是处理人员
  134. field.allowBlank=false;
  135. field.fieldStyle='background:#fffac0;color:#515151;';
  136. field.readOnly=false;
  137. }
  138. }
  139. },
  140. 'textarea[name=cld_testdescription]':{
  141. beforerender:function(field){
  142. var value=Ext.getCmp('cld_newhandmanid').getValue();
  143. if(value&&value!=emid){
  144. //当前用户进来的是处理人员
  145. field.allowBlank=false;
  146. field.fieldStyle='background:#fffac0;color:#515151;';
  147. field.readOnly=false;
  148. }
  149. }
  150. },
  151. 'textarea[name=cld_handdescription]':{
  152. beforerender:function(field){
  153. var value=Ext.getCmp('cld_newhandmanid').getValue();
  154. if(value&&value==emid){
  155. //当前用户进来的是处理人员
  156. field.fieldStyle='background:#fffac0;color:#515151;';
  157. field.allowBlank=false;
  158. field.readOnly=false;
  159. field.value="";
  160. }
  161. }
  162. },
  163. 'gridcolumn[dataIndex=ch_description]':{
  164. beforerender:function(column){
  165. column.flex=1;
  166. }
  167. },
  168. 'dbfindtrigger[name=cld_newhandman]':{
  169. afterrender:function(trigger){
  170. trigger.dbKey='cl_prjplanid';
  171. trigger.mappingKey='tm_prjid';
  172. trigger.dbMessage='请选择该测试单的项目计划';
  173. },
  174. },
  175. 'dbfindtrigger[name=prjplan_prjid]':{
  176. afterrender:function(dbfindtrigger){
  177. dbfindtrigger.dbBaseCondition="prj_statuscode IS 'AUDITED'";
  178. },
  179. },
  180. 'textfield[name=cld_name]':{
  181. render:function(field){
  182. Ext.create('Ext.tip.ToolTip', {
  183. target:field.getEl(),
  184. trackMouse: true,
  185. renderTo: Ext.getBody(),
  186. html:field.value,
  187. bodyStyle: {
  188. background: '#F8F8FF',
  189. padding: '10px'
  190. }
  191. });
  192. }
  193. },
  194. 'textfield[name=cl_prjplanname]':{
  195. render:function(field){
  196. Ext.create('Ext.tip.ToolTip', {
  197. target:field.getEl(),
  198. trackMouse: true,
  199. renderTo: Ext.getBody(),
  200. html:field.value,
  201. bodyStyle: {
  202. background: '#F8F8FF',
  203. padding: '10px'
  204. }
  205. });
  206. }
  207. },
  208. });
  209. },
  210. getForm: function(btn){
  211. return btn.ownerCt.ownerCt;
  212. },
  213. onUpdate: function(me){
  214. var mm = this;
  215. var form = Ext.getCmp('form');
  216. var s1 = mm.checkFormDirty(form);
  217. var s2 = '';
  218. var grids = Ext.ComponentQuery.query('gridpanel');
  219. if(grids.length > 0){//check所有grid是否已修改
  220. Ext.each(grids, function(grid, index){
  221. if(grid.GridUtil){
  222. var msg = grid.GridUtil.checkGridDirty(grid);
  223. if(msg.length > 0){
  224. s2 = s2 + '<br/>' + grid.GridUtil.checkGridDirty(grid);
  225. }
  226. }
  227. });
  228. }
  229. if(s1 == '' && (s2 == '' || s2 == '<br/>')){
  230. showError($I18N.common.form.emptyData + '<br/>' + $I18N.common.grid.emptyDetail);
  231. return;
  232. }
  233. if(form && form.getForm().isValid()){
  234. //form里面数据
  235. var r = form.getValues(false, true);
  236. //去除ignore字段
  237. var keys = Ext.Object.getKeys(r), f;
  238. Ext.each(keys, function(k){
  239. f = form.down('#' + k);
  240. if(f && f.logic == 'ignore') {
  241. delete r[k];
  242. }
  243. });
  244. if(!mm.contains(form.updateUrl, '?caller=', true)){
  245. form.updateUrl = form.updateUrl + "?caller=" + caller;
  246. }
  247. var params = [];
  248. if(grids.length > 0){
  249. var param = grids[0].GridUtil.getGridStore();
  250. if(grids[0].necessaryField.length > 0 && (param == null || param == '')){
  251. warnMsg('明细表还未添加数据,是否继续?', function(btn){
  252. if(btn == 'yes'){
  253. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  254. } else {
  255. return;
  256. }
  257. });
  258. } else {
  259. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  260. }
  261. }
  262. mm.update(r, params);
  263. }else{
  264. mm.checkForm(form);
  265. }
  266. },
  267. update: function(){
  268. var params = new Object();
  269. var r = arguments[0];
  270. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  271. if(contains(k, 'ext-', true)){
  272. delete r[k];
  273. }
  274. });
  275. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  276. params.param = unescape(arguments[1].toString().replace(/\\/g,"%"));
  277. for(var i=2; i<arguments.length; i++) { //兼容多参数
  278. params['param' + i] = unescape(arguments[i].toString().replace(/\\/g,"%"));
  279. }
  280. var mm = this;
  281. var form = Ext.getCmp('form');
  282. Ext.Ajax.request({
  283. url : basePath + form.updateUrl,
  284. params: params,
  285. method : 'post',
  286. callback : function(options,success,response){
  287. var localJson = new Ext.decode(response.responseText);
  288. if(localJson.success){
  289. showMessage('提示', '提交成功!', 1000);
  290. window.location.reload();
  291. } else if(localJson.exceptionInfo){
  292. var str = localJson.exceptionInfo;
  293. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  294. str = str.replace('AFTERSUCCESS', '');
  295. showError(str);
  296. window.location.reload();
  297. }
  298. showError(str);return;
  299. } else {
  300. updateFailure();
  301. }
  302. }
  303. });
  304. },
  305. checkFormDirty: function(){
  306. var form = Ext.getCmp('form');
  307. var s = '';
  308. form.getForm().getFields().each(function (item,index,length){
  309. var value = item.value == null ? "" : item.value;
  310. item.originalValue = item.originalValue == null ? "" : item.originalValue;
  311. if(item.originalValue.toString() != value.toString()){//isDirty、wasDirty、dirty一直都是true,没办法判断,所以直接用item.originalValue,原理是一样的
  312. var label = item.fieldLabel || item.ownerCt.fieldLabel ||
  313. item.boxLabel || item.ownerCt.title;//针对fieldContainer、radio、fieldset等
  314. if(label){
  315. s = s + '&nbsp;' + label.replace(/&nbsp;/g,'');
  316. }
  317. }
  318. });
  319. return (s == '') ? s : ('表单字段(<font color=green>'+s+'</font>)已修改');
  320. },
  321. contains: function(string,substr,isIgnoreCase){
  322. if(isIgnoreCase){
  323. string=string.toLowerCase();
  324. substr=substr.toLowerCase();
  325. }
  326. var startChar=substr.substring(0,1);
  327. var strLen=substr.length;
  328. for(var j=0;j<string.length-strLen+1;j++){
  329. if(string.charAt(j)==startChar){//如果匹配起始字符,开始查找
  330. if(string.substring(j,j+strLen)==substr){//如果从j开始的字符与str匹配,那ok
  331. return true;
  332. }
  333. }
  334. }
  335. return false;
  336. },
  337. checkType: function(val){
  338. if(val != 'NG') {
  339. Ext.getCmp('cbd_handman').allowBlank = true;
  340. Ext.getCmp('cbd_handman').setFieldStyle('background:#FFFAFA;color:#515151;');
  341. } else {
  342. Ext.getCmp('cbd_handman').allowBlank = false;
  343. Ext.getCmp('cbd_handman').setFieldStyle("background:#E0E0FF;color:#515151;");
  344. }
  345. }
  346. });