CheckListBase.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.plm.test.CheckListBase', {
  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. 'core.form.Panel','plm.test.CheckListBase','core.grid.Panel2','core.toolbar.Toolbar','core.button.Load','core.form.HrefField',
  9. 'core.button.Add','core.button.Submit','core.button.Audit','core.button.Save','core.button.Close','core.button.Print',
  10. 'core.button.ResSubmit','core.button.Update','core.button.Delete','core.button.ResAudit','core.button.DeleteDetail','core.button.UpdateTestResult',
  11. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.button.End','core.button.ResEnd','core.button.DeleteAllDetails'
  12. ],
  13. init:function(){
  14. var me=this;
  15. this.control({
  16. 'erpGridPanel2': {
  17. itemclick: this.onGridItemClick,
  18. render: function(p){
  19. p.getEl().dom.addEventListener('scroll', function(){
  20. }, p);
  21. }
  22. },
  23. 'erpSaveButton': {
  24. click: function(btn){
  25. this.save(this);
  26. }
  27. },
  28. 'erpCloseButton': {
  29. click: function(btn){
  30. },
  31. scope:this,
  32. },
  33. 'erpUpdateButton': {
  34. afterrender: function(btn){
  35. var status = Ext.getCmp('cb_statuscode');
  36. if(status && status.value != 'ENTERING'){
  37. var grid = Ext.getCmp('grid');
  38. grid.plugins[0].destroy();
  39. btn.hide();
  40. }
  41. },
  42. click: function(btn){
  43. this.FormUtil.onUpdate(this);
  44. }
  45. },
  46. 'erpDeleteDetailButton':{
  47. afterrender:function(btn){
  48. var status = Ext.getCmp('cb_statuscode');
  49. if(status && status.value != 'ENTERING'){
  50. btn.disabled=true;
  51. }
  52. }
  53. },
  54. 'button[id=deleteallbutton]':{
  55. click:function(btn){
  56. Ext.Ajax.request({
  57. method:'post',
  58. url:basePath+'plm/check/deleteAllDetails.action',
  59. params:{
  60. id:Ext.getCmp('cb_id').getValue()
  61. },
  62. callback : function(options,success,response){
  63. var localJson = new Ext.decode(response.responseText);
  64. if(localJson.success){
  65. Ext.Msg.alert('提示','清除成功!',function(btn){
  66. //update成功后刷新页面进入可编辑的页面
  67. window.location.reload();
  68. });
  69. } else if(localJson.exceptionInfo){
  70. var str = localJson.exceptionInfo;
  71. showError(str);return;
  72. }
  73. }
  74. });
  75. },
  76. afterrender:function(btn){
  77. var statuscode=Ext.getCmp('cb_statuscode').getValue();
  78. if(statuscode&&statuscode!='ENTERING'){
  79. btn.hide();
  80. }
  81. }
  82. },
  83. 'erpDeleteButton': {
  84. afterrender: function(btn){
  85. var status = Ext.getCmp('cb_statuscode');
  86. var source=Ext.getCmp('cb_source');
  87. if((status && status.value != 'ENTERING') || (source && source.value!='add') ){
  88. btn.hide();
  89. }
  90. },
  91. click: function(btn){
  92. this.FormUtil.onDelete(Ext.getCmp('cb_id').value);
  93. }
  94. },
  95. 'erpAddButton': {
  96. click: function(){
  97. me.FormUtil.onAdd('addCheckList', 'CheckList单', 'jsps/plm/test/checklistbase.jsp');
  98. }
  99. },
  100. 'field[name=cb_prjcode]': {
  101. afterrender:function(f){
  102. f.setFieldStyle({
  103. 'color': 'blue'
  104. });
  105. f.focusCls = 'mail-attach';
  106. var c = Ext.Function.bind(me.openUrl, me);
  107. Ext.EventManager.on(f.inputEl, {
  108. mousedown : c,
  109. scope: f,
  110. buffer : 100
  111. });
  112. }
  113. },
  114. 'field[name=cb_prcode]':{
  115. afterrender:function(f){
  116. f.setFieldStyle({
  117. 'color': 'blue'
  118. });
  119. f.focusCls = 'mail-attach';
  120. var c = Ext.Function.bind(me.openUrl, me);
  121. Ext.EventManager.on(f.inputEl, {
  122. mousedown : c,
  123. scope: f,
  124. buffer : 100
  125. });
  126. }
  127. },
  128. 'erpLoadButton':{
  129. afterrender:function(btn){
  130. var statuscode=Ext.getCmp('cb_statuscode').getValue();
  131. if(statuscode!='ENTERING'){
  132. btn.hide();
  133. }
  134. },
  135. click:function(btn){
  136. //根据产品类型载入测试项
  137. var type=Ext.getCmp('cb_prodtype').getValue(),keyValue=Ext.getCmp('cb_id').getValue();
  138. warnMsg('重新载入测试项会清除掉明细数据,以及已产生的BUG单?', function(btn){
  139. if(btn == 'yes'){
  140. me.showItemWidow(type,keyValue);
  141. } else {
  142. return;
  143. }
  144. });
  145. }
  146. },
  147. 'erpSubmitButton': {
  148. afterrender: function(btn){
  149. var status = Ext.getCmp('cb_statuscode');
  150. if(status && status.value != 'ENTERING'){
  151. btn.hide();
  152. }
  153. },
  154. click: function(btn){
  155. me.FormUtil.onSubmit(Ext.getCmp('cb_id').value);
  156. }
  157. },
  158. 'erpResSubmitButton':{
  159. afterrender:function(btn){
  160. var status = Ext.getCmp('cb_statuscode');
  161. if(status && status.value != 'COMMITED'){
  162. btn.hide();
  163. }
  164. },
  165. click:function(btn){
  166. me.FormUtil.onResSubmit(Ext.getCmp('cb_id').value);
  167. }
  168. },
  169. 'erpEndButton':{
  170. afterrender:function(btn){
  171. var statuscode=Ext.getCmp('cb_statuscode').getValue();
  172. if(statuscode!='COMMITED'){
  173. btn.hide();
  174. }
  175. },
  176. click:function(btn){
  177. me.FormUtil.onEnd(Ext.getCmp('cb_id').getValue());
  178. }
  179. },
  180. 'erpResEndButton':{
  181. afterrender:function(btn){
  182. var statuscode=Ext.getCmp('cb_statuscode').getValue();
  183. if(statuscode!='FINISH'){
  184. btn.hide();
  185. }
  186. }
  187. },
  188. 'erpDeleteDetailButton': {
  189. afterrender: function(btn){
  190. btn.ownerCt.add({
  191. id:'set',
  192. readOnly:false,
  193. xtype:'combo',
  194. fieldLabel:'结果设置',
  195. store: Ext.create('Ext.data.Store', {
  196. fields: ['display', 'value'],
  197. data : [{"display": '测试通过', "value": 'OK'},
  198. {"display": '不用测试', "value": 'NT'},
  199. {"display": '无此功能', "value": 'NF'},{"display": '测试不通过', "value": 'NG'} ]
  200. }),
  201. displayField:'display',
  202. valueField: 'value',
  203. queryMode: 'local',
  204. editable: false,
  205. dirty : false,
  206. disabled:true,
  207. listeners:{
  208. select:function(combo,records){
  209. me.setResult(combo.value);
  210. }
  211. }
  212. });
  213. }
  214. },
  215. 'erpUpdateTestResultButton': {
  216. click: function(btn){
  217. win = this.getUpdateResultWindow(btn);
  218. win.show();
  219. }
  220. },
  221. 'erpAuditButton': {
  222. afterrender: function(btn){
  223. var status = Ext.getCmp('cb_statuscode');
  224. if(status && status.value != 'COMMITED'){
  225. btn.hide();
  226. }
  227. },
  228. click: function(btn){
  229. me.FormUtil.onAudit(Ext.getCmp('cb_id').value);
  230. }
  231. },
  232. 'erpResAuditButton':{
  233. afterrender: function(btn){
  234. var status = Ext.getCmp('cb_statuscode');
  235. if(status && status.value != 'AUDITED'){
  236. btn.hide();
  237. }
  238. },
  239. click: function(btn){
  240. me.FormUtil.onResAudit(Ext.getCmp('cb_id').value);
  241. }
  242. },
  243. 'textareatrigger':{
  244. change:function(trigger,newvalue,oldvalue,btn){
  245. var grid=Ext.getCmp('grid');
  246. if(trigger.record && btn=='ok'){
  247. Ext.Ajax.request({
  248. url:basePath+'plm/test/updateResult.action',
  249. params: {
  250. data:newvalue,
  251. field:trigger.name,
  252. keyValue:trigger.record.data[grid.keyField]
  253. },
  254. method : 'post',
  255. callback : function(options,success,response){
  256. var local=Ext.decode(response.responseText);
  257. if(local.success) {
  258. grid.GridUtil.loadNewStore(grid,{
  259. caller:caller,
  260. condition:grid.mainField+"="+trigger.record.data[grid.mainField]
  261. })
  262. showMessage('提示', '保存成功!', 1000);
  263. }else {
  264. showError(local.exceptionInfo);
  265. }
  266. }
  267. });
  268. }
  269. }
  270. }
  271. });
  272. },
  273. onGridItemClick: function(selModel, record){/*//grid行选择
  274. var me = this;
  275. var status = Ext.getCmp('cb_statuscode');
  276. var value=record.data.cld_id;
  277. Ext.getCmp('file').setDisabled(false);
  278. if(status && status.value != 'ENTERING'&&value!=0){
  279. //不能修改了
  280. var formCondition = "cld_id IS" + value ;
  281. var gridCondition="ch_cldid IS"+value;
  282. var panel = Ext.getCmp("cld_id=" +value);
  283. var caller="Check";
  284. var url=basePath+"jsps/plm/test/check.jsp";
  285. var main = parent.Ext.getCmp("content-panel");
  286. if(!panel){
  287. var title = "";
  288. if (value.toString().length>4) {
  289. title = value.toString().substring(value.toString().length-4);
  290. } else {
  291. title = value;
  292. }
  293. panel = {
  294. //title : main.getActiveTab().title+'('+title+')',
  295. title:'check单('+title+')',
  296. tag : 'iframe',
  297. tabConfig:{tooltip:'check单('+title+')'},
  298. frame : true,
  299. border : false,
  300. layout : 'fit',
  301. iconCls : 'x-tree-icon-tab-tab',
  302. html : '<iframe id="iframe_maindetail_'+caller+"_"+value+'" src="'+url+'?formCondition='+formCondition+'&gridCondition='+gridCondition+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  303. closable : true,
  304. listeners : {
  305. close : function(){
  306. main.setActiveTab(main.getActiveTab().id);
  307. }
  308. }
  309. };
  310. me.openTab(panel,"ch_id=" + value);
  311. }else{
  312. main.setActiveTab(panel);
  313. }
  314. }else{
  315. this.gridLastSelected = record;
  316. var grid = Ext.getCmp('grid');
  317. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  318. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  319. } else {
  320. this.gridLastSelected.findable = false;
  321. }
  322. this.GridUtil.onGridItemClick(selModel, record);
  323. }
  324. */},
  325. /* openUrl: function(e, el, obj) {
  326. var f = obj.scope;
  327. if(f.value) {
  328. this.FormUtil.onAdd('ProdInOut', f.ownerCt.down('#in_source').value,
  329. this.getRelativeUrl(f));
  330. }
  331. },*/
  332. openTab : function (panel,id){
  333. var me = this;
  334. var o = (typeof panel == "string" ? panel : id || panel.id);
  335. var main = parent.Ext.getCmp("content-panel");
  336. var tab = main.getComponent(o);
  337. if (tab) {
  338. main.setActiveTab(tab);
  339. } else if(typeof panel!="string"){
  340. panel.id = o;
  341. var p = main.add(panel);
  342. main.setActiveTab(p);
  343. }
  344. },
  345. getForm: function(btn){
  346. return btn.ownerCt.ownerCt;
  347. },
  348. setResult:function(value){
  349. var grid=Ext.getCmp('grid');
  350. var params=grid.getMultiSelected();
  351. params.result=value;
  352. Ext.Ajax.request({
  353. url : basePath + 'plm/test/setItemResult.action',
  354. params: params,
  355. method : 'post',
  356. callback : function(options,success,response){
  357. var localJson = new Ext.decode(response.responseText);
  358. if(localJson.exceptionInfo){
  359. showError(localJson.exceptionInfo);
  360. return "";
  361. }
  362. if(localJson.success){
  363. if(localJson.log){
  364. showMessage("提示", localJson.log);
  365. }
  366. Ext.getCmp('set').setDisabled(true);
  367. Ext.getCmp('set').setValue(null);
  368. grid.multiselected = new Array();
  369. grid.GridUtil.loadNewStore(grid,{
  370. caller:caller,
  371. condition:'cbd_cbid='+Ext.getCmp('cb_id').getValue()
  372. });
  373. showMessage('提示', '设置成功!', 1000);
  374. }
  375. }
  376. });
  377. },
  378. save: function(btn){
  379. var me = this;
  380. var codefield=Ext.getCmp('cb_code');
  381. if(codefield.value == null || codefield.value == ''){
  382. me.BaseUtil.getRandomNumber();
  383. codefield.setValue('CL_'+codefield.getValue());
  384. }
  385. me.FormUtil.beforeSave(me);
  386. },
  387. showItemWidow:function (type,keyValue){
  388. var mb=new Ext.window.MessageBox();
  389. var condition="tt_productkind='"+type+"'",nCaller='CheckItem';
  390. var win = new Ext.window.Window({
  391. id : 'win',
  392. height: "100%",
  393. width: "80%",
  394. maximizable : true,
  395. buttonAlign : 'center',
  396. layout : 'anchor',
  397. items: [{
  398. tag : 'iframe',
  399. frame : true,
  400. anchor : '100% 100%',
  401. layout : 'fit',
  402. html : '<iframe id="iframe_' + caller + '" src="' + basePath + 'jsps/common/editorColumn.jsp?caller=' + nCaller
  403. + "&condition=" + condition +'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
  404. }],
  405. buttons : [{
  406. name: 'confirm',
  407. text : $I18N.common.button.erpConfirmButton,
  408. iconCls: 'x-button-icon-confirm',
  409. cls: 'x-btn-gray',
  410. listeners: {
  411. buffer: 500,
  412. click: function(btn){
  413. var grid = Ext.getCmp('win').items.items[0].body.dom.getElementsByTagName('iframe')[0].contentWindow.Ext.getCmp("editorColumnGridPanel");
  414. var data = grid.getEffectData();
  415. mb.wait("正在加载...");
  416. Ext.Ajax.request({
  417. url : basePath + 'plm/test/LoadTestItem.action',
  418. params: {
  419. id: keyValue,
  420. kinds:Ext.encode(data),
  421. producttype:type
  422. },
  423. method : 'post',
  424. callback : function(options,success,response){
  425. var localJson = new Ext.decode(response.responseText);
  426. mb.close();
  427. if(localJson.exceptionInfo){
  428. showError(localJson.exceptionInfo);
  429. }else {
  430. Ext.Msg.alert('提示','载入成功',function(){
  431. var grid=Ext.getCmp('grid');
  432. Ext.getCmp('win').destroy();
  433. var param={
  434. caller:caller,
  435. condition:'cbd_cbid='+keyValue
  436. };
  437. grid.GridUtil.loadNewStore(grid,param);
  438. });
  439. }
  440. }
  441. });
  442. }
  443. }
  444. }, {
  445. text : $I18N.common.button.erpCloseButton,
  446. iconCls: 'x-button-icon-close',
  447. cls: 'x-btn-gray',
  448. handler : function(){
  449. Ext.getCmp('win').close();
  450. }
  451. }]
  452. });
  453. win.show();
  454. },
  455. getUpdateResultWindow: function(record) {
  456. var me = this;
  457. /* var date = record.data.pd_deliveryreply;
  458. if (date != null) {
  459. date = Ext.Date.parse(date, "Y-m-d");
  460. }*/
  461. return Ext.create('Ext.window.Window', {
  462. width: 430,
  463. height: 250,
  464. closeAction: 'destroy',
  465. cls: 'custom-blue',
  466. title: '<h1>更改测试结果</h1>',
  467. layout: {
  468. type: 'fit'
  469. },
  470. items: [{
  471. xtype:'form',
  472. frame:true,
  473. layout: {
  474. type: 'vbox'
  475. },
  476. items:[{
  477. margin: '5 0 0 5',
  478. xtype:'combo',
  479. fieldLabel:'结果设置',
  480. store: Ext.create('Ext.data.Store', {
  481. fields: ['display', 'value'],
  482. data : [{"display": '测试通过', "value": 'OK'},
  483. {"display": '不用测试', "value": 'NT'},
  484. {"display": '无此功能', "value": 'NF'}/*,
  485. {"display": '测试不通过', "value": 'NG'}*/]
  486. }),
  487. displayField:'display',
  488. valueField: 'value',
  489. queryMode: 'local',
  490. name:'result',
  491. editable: false,
  492. dirty : false
  493. },
  494. /*{
  495. margin: '5 0 0 5',
  496. xtype: 'dbfindtrigger',
  497. columnidth: 0.4,
  498. fieldLabel: '处理人',
  499. name: 'emname',
  500. id:'emname',
  501. dbfind:'Employee|em_name'
  502. },{
  503. margin:'5 0 0 5',
  504. xtype:'hidden',
  505. name:'emid',
  506. id:'emid'
  507. },*/
  508. {
  509. margin: '5 0 0 5',
  510. xtype: 'textareafield',
  511. fieldLabel: '备注',
  512. name: 'remark',
  513. hideTrigger: true,
  514. id: 'remark'
  515. }]
  516. }],
  517. buttonAlign: 'center',
  518. buttons: [{
  519. xtype: 'button',
  520. text: '保存',
  521. width: 60,
  522. iconCls: 'x-button-icon-save',
  523. handler: function(btn) {
  524. var w = btn.up('window');
  525. me.saveTestResult(w);
  526. win.close();
  527. win.destroy();
  528. }
  529. },
  530. {
  531. xtype: 'button',
  532. columnWidth: 0.1,
  533. text: '关闭',
  534. width: 60,
  535. iconCls: 'x-button-icon-close',
  536. margin: '0 0 0 10',
  537. handler: function(btn) {
  538. var win = btn.up('window');
  539. win.close();
  540. win.destroy();
  541. }
  542. }]
  543. });
  544. },
  545. openUrl:function (e, el, obj){
  546. var f = obj.scope;
  547. if(f.value){
  548. if(f.dataIndex=='cb_prjcode'){
  549. openFormUrl(f.value,'prj_code','jsps/plm/project/project.jsp','立项申请');
  550. }else if(f.dataIndex=='cb_prcode'){
  551. openFormUrl(f.value,'pr_code','jsps/plm/project/projectReview.jsp','项目评审');
  552. }
  553. }
  554. },
  555. saveTestResult:function(w){
  556. var form=w.down('form'),values=form.getForm().getValues(),grid=Ext.getCmp('grid');
  557. var params=grid.getMultiSelected();
  558. params.formdata=unescape(escape(Ext.JSON.encode(values)));
  559. Ext.Ajax.request({
  560. url : basePath + 'plm/test/batchUpdateResult.action',
  561. params: params,
  562. method : 'post',
  563. callback : function(options,success,response){
  564. var localJson = new Ext.decode(response.responseText);
  565. if(localJson.exceptionInfo){
  566. showError(localJson.exceptionInfo);
  567. return "";
  568. }
  569. if(localJson.success){
  570. if(localJson.log){
  571. showMessage("提示", localJson.log);
  572. }
  573. Ext.getCmp('set').setDisabled(true);
  574. Ext.getCmp('set').setValue(null);
  575. grid.multiselected = new Array();
  576. grid.GridUtil.loadNewStore(grid,{
  577. caller:caller,
  578. condition:'cbd_cbid='+Ext.getCmp('cb_id').getValue()
  579. });
  580. showMessage('提示', '设置成功!', 1000);
  581. }
  582. }
  583. });
  584. }
  585. });