ProjectReview.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.plm.project.ProjectReview', {
  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: ['plm.project.ProjectReview', 'core.form.Panel', 'core.form.CheckBoxGroup', 'core.grid.Panel5', 'core.grid.Panel2', 'core.form.HrefField', 'core.grid.YnColumn', 'core.form.FileField',
  8. 'core.button.ProjectReview', 'core.button.Add', 'core.button.Submit', 'core.button.Audit', 'core.button.Save', 'core.button.Close',
  9. 'core.button.Print', 'core.button.Update', 'core.button.Delete', 'core.button.PlanMainTask', 'core.button.ResAudit',
  10. 'core.button.ResSubmit', 'core.button.Load',
  11. 'core.trigger.TextAreaTrigger', 'core.trigger.DbfindTrigger', 'plm.budget.ProjectChart',
  12. 'plm.project.ReviewForm', 'plm.project.ProjectCostBudgetGrid'],
  13. init: function() {
  14. var me = this;
  15. this.control({
  16. 'projectcostbudget': {
  17. itemclick: this.onGridItemClick
  18. },
  19. 'erpGridPanel2[id=projectKeyDeviceGrid]': {
  20. itemclick: this.onGridItemClick1
  21. },
  22. 'erpCloseButton': {
  23. click: function(btn){
  24. this.FormUtil.beforeClose(this);
  25. }
  26. /* afterrender: function(btn) {
  27. var form = me.getForm(btn);
  28. var readOnly = statuscode != 'ENTERING';
  29. var items = me.getReviewItems(readOnly);
  30. form.add(items);
  31. form.add([{
  32. xtype: 'fieldset',
  33. title: '<h2>评审结果</h2>',
  34. columnWidth: 1,
  35. collapsible: true,
  36. frame: false,
  37. height: 100,
  38. html: '<div style="background-color: #FFFAFA;color:red">' + Ext.getCmp('pr_systemresult').getValue() + '</div>'
  39. }]);
  40. }*/
  41. },
  42. 'htmleditor[name=pr_prjcode]': {
  43. afterrender: function(editor) {
  44. editor.getToolbar().hide();
  45. editor.readOnly = true;
  46. editor.setValue('<a style="text-decoration:none;" href="javascript:parent.openFormUrl(' + editor.value + ',\'prj_code\',\'jsps/plm/project/project.jsp\',\'立项申请\'' + ');">' + editor.value + '</a>');
  47. }
  48. },
  49. 'erpFormPanel': {
  50. beforerender: function(form) {
  51. }
  52. },
  53. 'erpLoadButton': {
  54. click: function(btn) {
  55. me.loadKeyDevice(Ext.getCmp('pr_producttype').getValue());
  56. },
  57. afterrender: function(btn) {
  58. if (statuscode != 'ENTERING') {
  59. btn.hide();
  60. }
  61. }
  62. },
  63. 'erpUpdateButton': {
  64. click: function(btn) {
  65. me.update();
  66. },
  67. afterrender: function(btn) {
  68. statuscode = Ext.getCmp('pr_statuscode').getValue();
  69. if (statuscode != 'ENTERING') {
  70. btn.hide();
  71. }
  72. }
  73. },
  74. 'erpSubmitButton': {
  75. click: function(btn) {
  76. this.FormUtil.submit(Ext.getCmp('pr_id').getValue());
  77. },
  78. afterrender: function(btn) {
  79. if (statuscode != 'ENTERING') {
  80. btn.hide();
  81. }
  82. }
  83. },
  84. 'erpResSubmitButton': {
  85. click: function(btn) {
  86. this.FormUtil.onResSubmit(Ext.getCmp('pr_id').getValue());
  87. },
  88. afterrender: function(btn) {
  89. if (statuscode != 'COMMITED') {
  90. btn.hide();
  91. }
  92. }
  93. },
  94. 'erpAuditButton': {
  95. click: function(btn) {
  96. this.FormUtil.onAudit(Ext.getCmp('pr_id').getValue());
  97. },
  98. afterrender: function(btn) {
  99. if (statuscode != 'COMMITED') {
  100. btn.hide();
  101. }
  102. }
  103. },
  104. 'erpResAuditButton': {
  105. click: function(btn) {
  106. this.FormUtil.onResAudit(Ext.getCmp('pr_id').getValue());
  107. },
  108. afterrender: function(btn) {
  109. if (statuscode != 'AUDITED') {
  110. btn.hide();
  111. }
  112. }
  113. },
  114. 'erpPlanMainTaskButton': {
  115. click: function(btn) {
  116. me.PlanMainTask(btn);
  117. },
  118. afterrender: function(btn) {
  119. if (statuscode != 'AUDITED') {
  120. btn.hide();
  121. }
  122. }
  123. },
  124. 'erpDeleteButton': {
  125. afterrender: function(btn) {
  126. var status = Ext.getCmp('pr_statuscode');
  127. if (status && status.value != 'ENTERING') {
  128. btn.hide();
  129. }
  130. },
  131. click: function(btn) {
  132. me.FormUtil.onDelete((Ext.getCmp('pr_id').value));
  133. }
  134. }
  135. });
  136. },
  137. onGridItemClick: function(selModel, record){//grid行选择
  138. this.gridLastSelected = record;
  139. var grid = Ext.getCmp('projectCostBudgetGrid');
  140. grid.lastSelectedRecord = record;
  141. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  142. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  143. } else {
  144. this.gridLastSelected.findable = false;
  145. }
  146. this.GridUtil.onGridItemClick(selModel, record);
  147. },
  148. onGridItemClick1: function(selModel, record){//grid行选择
  149. this.gridLastSelected = record;
  150. var grid = Ext.getCmp('projectKeyDeviceGrid');
  151. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  152. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  153. } else {
  154. this.gridLastSelected.findable = false;
  155. }
  156. this.GridUtil.onGridItemClick(selModel, record);
  157. },
  158. getReviewItems: function(readOnly) {
  159. var me = this;
  160. var reviewitem = Ext.getCmp('pr_reviewitem').getValue().split("#");
  161. var reviewtitle = Ext.getCmp('pr_reviewtitle').getValue().split("#");
  162. var reviewresult = Ext.getCmp('pr_reviewresult').getValue().split("#");
  163. var items = new Array();
  164. var count = reviewitem.length % 2; //是否是2的倍
  165. for (var i = 0; i < reviewitem.length; i++) {
  166. if (count == 0 || i < reviewitem.length - 1) {
  167. items.push({
  168. xtype: 'fieldset',
  169. title: reviewtitle[i],
  170. groupName: reviewtitle[i],
  171. columnWidth: 0.5,
  172. groupkind: 'review',
  173. layout: 'column',
  174. height: 130,
  175. defaults: {
  176. columnWidth: 1
  177. },
  178. collapsible: true,
  179. readOnly: true,
  180. setReadOnly: function(bool) {
  181. var set = this,
  182. inputEl = set.inputEl;
  183. console.log(set);
  184. if (inputEl) {
  185. inputEl.dom.readOnly = readOnly;
  186. inputEl.dom.setAttribute('aria-readonly', readOnly);
  187. }
  188. set[readOnly ? 'addCls': 'removeCls'](set.readOnlyCls);
  189. set.readOnly = readOnly;
  190. Ext.Array.each(set.items.items,
  191. function(ite, index) {
  192. if (ite.xtype == 'textarea') {
  193. ite.setReadOnly(bool);
  194. console.log(bool);
  195. if (!bool) ite.setFieldStyle("background:#fffac0;color:#515151;");
  196. else ite.setFieldStyle("background:#FFFAFA;color:#515151;");
  197. } else {
  198. Ext.Array.each(ite.items.items,
  199. function(it) {
  200. it.setReadOnly(bool);
  201. });
  202. }
  203. });
  204. },
  205. items: [{
  206. xtype: 'textarea',
  207. value: reviewitem[i],
  208. readOnly: readOnly,
  209. groupName: reviewtitle[i]
  210. },
  211. {
  212. xtype: 'radiogroup',
  213. fieldLabel: '评审结果',
  214. radioValue: reviewresult[i],
  215. id: 'rating_' + [i],
  216. columns: 3,
  217. groupName: reviewtitle[i],
  218. readOnly: readOnly,
  219. defaults: {
  220. fieldCls: 'myradio',
  221. listeners: {
  222. /*change:function(radio){
  223. radio.ownerCt.radioValue=radio.inputValue;
  224. },*/
  225. beforerender: function(radio) {
  226. if (radio.ownerCt.radioValue == radio.inputValue) {
  227. radio.checked = true;
  228. }
  229. }
  230. },
  231. name: 'rating_' + [i]
  232. },
  233. items: me.getRadioItems(reviewresult[i], readOnly)
  234. }]
  235. });
  236. } else {
  237. items.push({
  238. xtype: 'fieldset',
  239. title: reviewtitle[i],
  240. groupName: reviewtitle[i],
  241. columnWidth: 1,
  242. groupkind: 'review',
  243. layout: 'column',
  244. collapsible: true,
  245. defaults: {
  246. columnWidth: 1
  247. },
  248. readOnly: true,
  249. items: [{
  250. xtype: 'textarea',
  251. value: reviewitem[i],
  252. readOnly: readOnly
  253. },
  254. {
  255. xtype: 'radiogroup',
  256. fieldLabel: '评审结果',
  257. columnWidth: 0.5,
  258. columns: 3,
  259. radioValue: reviewresult[i],
  260. id: 'rating_' + [i],
  261. readOnly: readOnly,
  262. defaults: {
  263. fieldCls: 'myradio',
  264. /*listeners:{
  265. change:function(radio){
  266. radio.ownerCt.radioValue=radio.inputValue;
  267. }
  268. },*/
  269. name: 'rating_' + [i]
  270. },
  271. items: me.getRadioItems(reviewresult[i], readOnly)
  272. }]
  273. });
  274. }
  275. };
  276. return items;
  277. },
  278. getRadioItems: function(radiovalue, readOnly) {
  279. var arr = new Array();
  280. var object = null;
  281. for (var i = 3; i > 0; i--) {
  282. object = new Object();
  283. object.inputValue = i;
  284. object.readOnly = readOnly;
  285. if (i == 3) {
  286. object.boxLabel = 'A';
  287. } else if (i == 2) {
  288. object.boxLabel = 'B';
  289. } else {
  290. object.boxLabel = 'C';
  291. }
  292. if (radiovalue == i) {
  293. object.checked = true;
  294. }
  295. arr.push(object);
  296. }
  297. arr.push({
  298. boxLabel: 'O',
  299. hidden: true,
  300. checked: i == 0,
  301. inputValue: 0
  302. });
  303. return arr;
  304. },
  305. loadKeyDevice: function(producttype) {
  306. Ext.Ajax.request({
  307. url: basePath + 'plm/review/loadKeyDevice.action',
  308. method: 'post',
  309. params: {
  310. producttype: producttype,
  311. prid: Ext.getCmp('pr_id').getValue()
  312. },
  313. callback: function(options, success, response) {
  314. var rs = new Ext.decode(response.responseText);
  315. if (rs.exceptionInfo) {
  316. showError(rs.exceptionInfo);
  317. return;
  318. }
  319. if (rs.success) {
  320. var grid = Ext.getCmp('projectKeyDeviceGrid');
  321. grid.GridUtil.loadNewStore(grid, {
  322. caller: "ProjectKeyDevice",
  323. condition: 'pkd_prid=' + Ext.getCmp('pr_id').getValue()
  324. });
  325. }
  326. }
  327. });
  328. },
  329. getForm: function(btn) {
  330. return btn.ownerCt.ownerCt;
  331. },
  332. save: function(btn) {
  333. var me = this;
  334. var form = me.getForm(btn);
  335. if (Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == '') {
  336. me.BaseUtil.getRandomNumber(); //自动添加编号
  337. }
  338. },
  339. update: function(btn) {
  340. var mm = this;
  341. var form = Ext.getCmp('form');
  342. if(! mm.FormUtil.checkForm()){
  343. return;
  344. }
  345. var grids = Ext.ComponentQuery.query('gridpanel');
  346. if(grids.length > 0){
  347. var param1 = mm.GridUtil.getGridStore(grids[0]);
  348. var param2 = mm.GridUtil.getGridStore(grids[1]);
  349. mm.onUpdate(param1,param2);
  350. } else {
  351. mm.onUpdate([],[]);
  352. }
  353. /* var form =Ext.getCmp('form');
  354. var reviewresult="",reviewitem="",index=1,length=items.length,systemresult="",count=0,reviewlength=0,radioValue=0;
  355. Ext.Array.each(form.items.items,function(item){
  356. if(item.groupkind == 'review'){
  357. var checked=item.items.items[1].getChecked()[0];
  358. radioValue=checked.inputValue?checked.inputValue:0;
  359. if(index<length){
  360. reviewitem+=item.items.items[0].value+"#";
  361. reviewresult+=radioValue+"#";
  362. count+=Number(radioValue);
  363. }else {
  364. reviewitem+=item.items.items[0].value;
  365. reviewresult+=radioValue;
  366. count+=Number(radioValue);
  367. }
  368. if(radioValue!=0){
  369. reviewlength++;
  370. }
  371. index++;
  372. }
  373. });
  374. // count=parseFloat(count+'.00' )/reviewlength;
  375. // if(count==3){
  376. // systemresult="<center><h5>评审等级: A</h5> 共"+length+"条评审项;评审"+reviewlength+"项;<br/>这么牛啊!果断开搞啊是不 !有奔头!</center>";
  377. // }else if(count>2){
  378. // systemresult="<center><h5>评审等级: B+</h5> 共"+length+"条评审项;评审"+reviewlength+"项;<br/>还可以风险很小!可以搞搞</center>";
  379. // }else if(count==2){
  380. // systemresult="<center><h5>评审等级: B</h5> 共"+length+"条评审项;评审"+reviewlength+"项;<br/>一般般!需要注意啊!</center>";
  381. // }else if(count>1){
  382. // systemresult="<center><h5>评审等级: B-</h5> 共"+length+"条评审项;评审"+reviewlength+"项;<br/>不行啊!真是不行!</center>";
  383. // }else{
  384. // systemresult="<center><h5>评审等级: C</h5> 共"+length+"条评审项;评审"+reviewlength+"项;<br/>果断不行,赚钱是好的,投资需谨慎啊!</center>";
  385. // }
  386. // Ext.getCmp('pr_systemresult').setValue(systemresult);
  387. Ext.getCmp('pr_reviewitem').setValue(reviewitem);
  388. Ext.getCmp('pr_reviewresult').setValue(reviewresult);*/
  389. },
  390. onUpdate:function(param1,param2){
  391. var me = this;
  392. var form = Ext.getCmp('form');
  393. param1 = param1 == null ? [] : "[" + param1.toString() + "]";
  394. param2 = param2 == null ? [] : "[" + param2.toString() + "]";
  395. if(form.getForm().isValid()){
  396. //form里面数据
  397. Ext.each(form.items.items, function(item){
  398. if(item.xtype == 'numberfield'){
  399. //number类型赋默认值,不然sql无法执行
  400. if(item.value == null || item.value == ''){
  401. item.setValue(0);
  402. }
  403. }
  404. });
  405. var r = form.getValues();
  406. //去除ignore字段
  407. var keys = Ext.Object.getKeys(r), f;
  408. Ext.each(keys, function(k){
  409. f = form.down('#' + k);
  410. if(f && f.logic == 'ignore') {
  411. delete r[k];
  412. }
  413. });
  414. if(!me.FormUtil.contains(form.updateUrl, '?caller=', true)){
  415. form.updateUrl = form.updateUrl + "?caller=" + caller;
  416. }
  417. me.FormUtil.update(r, param1,param2);
  418. }else{
  419. me.FormUtil.checkForm();
  420. }
  421. },
  422. PlanMainTask: function(btn) {
  423. var form = btn.ownerCt.ownerCt;
  424. var id = Ext.getCmp('pr_id').getValue();
  425. Ext.Ajax.request({
  426. url: basePath + form.planTaskUrl,
  427. params: {
  428. id: id
  429. },
  430. method: 'post',
  431. callback: function(options, success, response) {
  432. var localJson = new Ext.decode(response.responseText);
  433. if (localJson.success) {
  434. Ext.Msg.alert('提示', '下达研发任务书成功!', window.location.reload());
  435. } else {
  436. if (localJson.exceptionInfo) {
  437. var str = localJson.exceptionInfo;
  438. if (str.trim().substr(0, 12) == 'AFTERSUCCESS') { //特殊情况:操作成功,但是出现警告,允许刷新页面
  439. str = str.replace('AFTERSUCCESS', '');
  440. submitSuccess(function() {
  441. window.location.reload();
  442. });
  443. }
  444. showMessage("提示", str);
  445. return;
  446. }
  447. }
  448. }
  449. });
  450. }
  451. });