Check.js 13 KB

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