FeatureValueSet.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.pm.bom.FeatureValueSet', {
  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','pm.bom.FeatureProduct','core.grid.Panel2','core.toolbar.Toolbar',
  9. 'core.button.Save','core.button.Add','core.button.Upload','core.button.LoadFeature',
  10. 'core.button.Submit','core.button.ResSubmit','core.button.Audit','core.button.ResAudit',
  11. 'core.button.Close','core.button.Delete','core.button.Update','core.button.DeleteDetail','core.form.MultiField',
  12. 'core.trigger.DbfindTrigger','core.trigger.TextAreaTrigger','core.form.YnField','core.form.DoubleField'
  13. ],
  14. init:function(){
  15. var me = this;
  16. this.control({
  17. 'erpGridPanel2': {
  18. // afterrender: function(grid){
  19. // alert(grid.getStore().getCount());
  20. // },
  21. itemclick: function(selModel, record){
  22. if(!Ext.getCmp('grid').readOnly){
  23. this.onGridItemClick(selModel, record);
  24. }
  25. }
  26. },
  27. 'dbfindtrigger[name=sfcode]': {
  28. afterrender: function(){
  29. var condition = getUrlParam('condition');
  30. if(condition != null && condition != ''){
  31. var data = condition.split(' AND ');
  32. Ext.getCmp('pr_code').setValue(data[1].split('IS')[1]);
  33. Ext.getCmp('pr_name').setValue(data[2].split('IS')[1]);
  34. Ext.getCmp('id').setValue(data[0].split('IS')[1]);
  35. }
  36. },
  37. },
  38. 'dbfindtrigger[name=fd_value]': {
  39. focus: function(t){
  40. t.setHideTrigger(false);
  41. t.setReadOnly(false);//用disable()可以,但enable()无效
  42. var record = Ext.getCmp('grid').selModel.getLastSelected();
  43. var pr = record.data['fe_code'];
  44. if(pr == null || pr == ''){
  45. showError("请先选择特征ID!");
  46. t.setHideTrigger(true);
  47. t.setReadOnly(true);
  48. } else {
  49. t.dbBaseCondition = "fd_code='" + pr + "'";
  50. if(getUrlParam('fromwhere') == 'SaleDetail') {
  51. t.dbBaseCondition=t.dbBaseCondition+" and nvl(fd_style,' ')<>'研发'";
  52. }
  53. }
  54. }
  55. },
  56. 'field[name=pr_code]': {
  57. change: function(f){
  58. if(f.value != null && f.value != ''){
  59. // var grid = Ext.getCmp('grid');
  60. me.loadFeature(f.value);
  61. } else {
  62. Ext.getCmp('grid').removeAll();
  63. }
  64. }
  65. },
  66. 'button[id=save]': {
  67. afterrender: function(btn){
  68. if(getUrlParam('fromwhere') != null && getUrlParam('fromwhere') != '' &&
  69. getUrlParam('fromwhere') == 'SaleDetail' || getUrlParam("fromwhere") == 'SaleForecastDetail'){
  70. btn.setDisabled(false);
  71. } else {
  72. btn.setDisabled(true);
  73. }
  74. },
  75. click: function(btn){
  76. var grid = Ext.getCmp('grid');
  77. var des = '';
  78. var items = grid.getStore().data.items;
  79. Ext.each(items, function(item, index){
  80. if(item.data.fd_value != null && item.data.fd_value != ''){
  81. if(des == ''){
  82. des += item.data.fe_code + ":" + item.data.fd_valuecode;
  83. } else {
  84. des += '|' + item.data.fe_code + ":" + item.data.fd_valuecode;
  85. }
  86. }
  87. });
  88. var need = '';
  89. Ext.each(items, function(s, index){
  90. if(s.data.sd_custneed != null && s.data.sd_custneed != ''){
  91. if(need == ''){
  92. need += s.data.fe_code + ":" + s.data.sd_custneed;
  93. } else {
  94. need += '|' + s.data.fe_code + ":" + s.data.sd_custneed;
  95. }
  96. }
  97. });
  98. var field = ['sd_specdescription','sd_custneed'];
  99. var fieldvalue = [des,need];
  100. me.saveDesAndNeed(getUrlParam('fromwhere'),field,fieldvalue,'sd_id=' + Ext.getCmp('id').value);
  101. }
  102. },
  103. 'textfield[name=RealCode]':{
  104. change:function(field){
  105. if(field){
  106. Ext.getCmp('find').setDisabled(false);
  107. }
  108. }
  109. },
  110. 'button[id=getrealcode]':{
  111. click: function(btn){
  112. var grid = Ext.getCmp('grid');
  113. var flag = true;
  114. var des = '';
  115. var items = grid.getStore().data.items;
  116. console.log(items);
  117. Ext.each(items, function(item, index){
  118. console.log(item);
  119. if (item.data.fe_code!=null && item.data.fe_code != ''){
  120. if(item.data.fd_value != null && item.data.fd_value != ''){
  121. if(des == ''){
  122. des += item.data.fe_code + ":" + item.data.fd_valuecode;
  123. } else {
  124. des += '|' + item.data.fe_code + ":" + item.data.fd_valuecode;
  125. }
  126. } else {
  127. flag = false;
  128. return;
  129. }
  130. }
  131. });
  132. if(!flag){ showError('必须填写所有的特征项的特征值才能生成料号,特征名称的特征值为空');
  133. return;
  134. }
  135. if(flag && des != ''){
  136. Ext.Ajax.request({//拿到grid的columns
  137. url : basePath + "pm/bom/getRealCode.action",
  138. params: {
  139. prodcode: Ext.getCmp('pr_code').value,
  140. fromwhere: getUrlParam('fromwhere'),
  141. specdescription: des
  142. },
  143. method : 'post',
  144. callback : function(options,success,response){
  145. var res = new Ext.decode(response.responseText);
  146. if(res.exceptionInfo){
  147. showError(res.exceptionInfo);return;
  148. }
  149. if(res.success && res.realCode != null && res.realCode != ''){
  150. Ext.getCmp('RealCode').setValue(res.realCode);
  151. Ext.getCmp('find').setDisabled(false);
  152. }
  153. }
  154. });
  155. }
  156. }
  157. },
  158. 'button[id=ok]':{
  159. afterrender:function(btn){
  160. var grid = parent.Ext.ComponentQuery.query('grid');
  161. if(!grid[0]){
  162. btn.setDisabled(true);
  163. }
  164. },
  165. click: function(btn){
  166. var me = this;
  167. var realcode = Ext.getCmp('RealCode').value;
  168. var grid = parent.Ext.ComponentQuery.query('grid');
  169. var items = grid[0].getStore().data.items;
  170. // alert(parent.windefwweow.location.href);
  171. if(realcode != null && realcode != ''){
  172. // grid[0].selModel.lastSelected.set('sd_prodcode', realcode);
  173. // grid[0].selModel.lastSelected.set('sd_prodid', me.getDescription("Product",'pr_id',"pr_code='" + realcode + "'"));
  174. // grid[0].beforeUpdate();
  175. me.saveDesAndNeed(getUrlParam('fromwhere'),['sd_prodcode','sd_prodid'],
  176. [realcode,me.getDescription("Product",'pr_id',"pr_code='" + realcode + "'")],
  177. 'sd_id='+grid[0].selModel.lastSelected.data.sd_id);
  178. parent.window.location.reload();
  179. } else {
  180. showError('必须先生成料号');return;
  181. }
  182. }
  183. },
  184. 'button[id=cancel]':{
  185. click:function(btn){
  186. var win=parent.Ext.getCmp('win');
  187. if(win) win.close();
  188. else {
  189. var main = parent.Ext.getCmp("content-panel");
  190. main.getActiveTab().close();
  191. }
  192. }
  193. },
  194. 'button[name=refer]':{
  195. click: function(btn){
  196. var description='';
  197. if(btn.id == 'refer1'){
  198. description = Ext.getCmp('pr_specdescription').value;
  199. var des = description == null || description =='' ? null :me.toArrays(null,null,null,description);
  200. me.loadData(des);
  201. } else if(btn.id=='refer2'){
  202. description = Ext.getCmp('sd_specdescription').value;
  203. var des = description == null || description =='' ? null :me.toArrays(null,null,null,description);
  204. me.loadData(des);
  205. } else if(btn.id=='refer3'){
  206. description = Ext.getCmp('sfd_specdescription').value;
  207. var des = description == null || description =='' ? null :me.toArrays(null,null,null,description);
  208. me.loadData(des);
  209. }
  210. }
  211. },
  212. 'button[id=find]': {
  213. click: function(btn){
  214. me.FormUtil.onAdd('BOM' + id, 'BOM多级展开', 'jsps/common/batchDeal.jsp?whoami=BOMStruct!Struct!Query');
  215. }
  216. }
  217. // 'gridcolumn[dataIndex=fd_valuecode]':{
  218. // change: function(field){
  219. // console.log(field);
  220. // }
  221. // }
  222. });
  223. },
  224. onGridItemClick: function(selModel, record){//grid行选择
  225. this.GridUtil.onGridItemClick(selModel, record);
  226. },
  227. getForm: function(btn){
  228. return btn.ownerCt.ownerCt;
  229. },
  230. loadData: function(des, needs){
  231. var me = this;
  232. var items = Ext.getCmp('grid').getStore().data.items;
  233. var fpd = [];
  234. Ext.each(items, function(d, index){
  235. var da = {
  236. fe_code : d.data.fe_code,
  237. fe_name : d.data.fe_name,
  238. };
  239. if(des != null){
  240. Ext.each(des[0], function(de, i){
  241. if(de==d.data.fe_code){
  242. da.fd_valuecode = des[1][i];
  243. var os = me.getFdValues(de, des[1][i]);
  244. da.fd_value=os[0];
  245. da.fd_spec=os[1];
  246. da.fd_remark=os[2];
  247. }
  248. });
  249. } else {
  250. // da.fd_valuecode = d.data.fd_valuecode;
  251. // da.fd_value=d.data.fd_value;
  252. showError('无参考数据'); return;
  253. }
  254. // if(needs != null){
  255. // Ext.each(needs[0], function(de, i){
  256. // if(de==d.data.fe_fecode){
  257. // da.sd_custneed = needs[1][i];
  258. // } else {
  259. // da.sd_custneed = d.data.sd_custneed;
  260. // }
  261. // });
  262. // } else {
  263. // da.sd_custneed = d.data.sd_custneed;
  264. // }
  265. fpd[index] = da;
  266. });
  267. Ext.getCmp('grid').store.loadData(fpd);
  268. },
  269. loadFeature: function(num){
  270. var me = this;
  271. Ext.Ajax.request({//拿到grid的columns
  272. url : basePath + "common/loadNewGridStore.action",
  273. params: {
  274. caller: 'ProdFeature',
  275. condition: "pf_prodcode='" + num + "'"
  276. },
  277. method : 'post',
  278. callback : function(options,success,response){
  279. var res = new Ext.decode(response.responseText);
  280. if(res.exceptionInfo){
  281. showError(res.exceptionInfo);return;
  282. }
  283. var data = res.data;
  284. var fpd = [];
  285. if(data != null && data.length > 0){
  286. Ext.each(data, function(d, index){
  287. var da = {
  288. fe_code : d.pf_fecode,
  289. fe_name : d.fe_name,
  290. };
  291. if(getUrlParam('fromwhere') != 'Product' && getUrlParam('fromwhere') != null && getUrlParam('fromwhere') != ''){
  292. var des = me.toArrays(getUrlParam('fromwhere'),"sd_specdescription","sd_id=" + Ext.getCmp('id').value);
  293. if(des != '' && des != null){//获取之前保存记录
  294. Ext.each(des[0], function(de, i){
  295. if(de==d.pf_fecode){
  296. da.fd_valuecode = des[1][i];
  297. var os = me.getFdValues(de, des[1][i]);
  298. da.fd_value=os[0];
  299. da.fd_spec=os[1];
  300. da.fd_remark=os[2];
  301. }
  302. });
  303. }
  304. var needs = me.toArrays(getUrlParam('fromwhere'),"sd_custneed","sd_id=" + Ext.getCmp('id').value);
  305. if(needs != '' && needs != null){//获取之前保存记录
  306. Ext.each(needs[0], function(de, i){
  307. if(de==d.pf_fecode){
  308. da.sd_custneed = needs[1][i];
  309. }
  310. });
  311. }
  312. if(des=='' && needs==''){//取默认值
  313. var fd = me.getFields('FeatureDetail',['fd_value','fd_valuecode'],
  314. "fd_code='" + d.pf_fecode + "' and fd_ifdefault=-1");
  315. if(fd != ''){
  316. da.fd_valuecode = fd[1];
  317. da.fd_value = fd[0];
  318. }
  319. }
  320. }
  321. fpd[index] = da;
  322. });
  323. Ext.getCmp('grid').store.loadData(fpd);
  324. } else {
  325. showError('没有可载入的特征');return;
  326. }
  327. }
  328. });
  329. },
  330. toArrays:function(tn, field, con, description){
  331. var code = [];
  332. var valuecode = [];
  333. var result = [];
  334. var data = description==null ? this.getDescription(tn, field, con) : description;
  335. if(data != null && data != ''){
  336. var da = data.split('|');
  337. Ext.each(da, function(d, index){
  338. code[index] = d.split(':')[0];
  339. valuecode[index] = d.split(':')[1];
  340. });
  341. result = [code,valuecode];
  342. }
  343. return result;
  344. },
  345. getDescription: function(tn, field, con){
  346. var des = '';
  347. Ext.Ajax.request({//拿到grid的columns
  348. url : basePath + "pm/bom/getDescription.action",
  349. params: {
  350. tablename: tn,
  351. field: field,
  352. condition: con
  353. },
  354. method : 'post',
  355. async: false,
  356. callback : function(options,success,response){
  357. var res = new Ext.decode(response.responseText);
  358. if(res.exceptionInfo){
  359. showError(res.exceptionInfo);return;
  360. }
  361. if(res.success && res.description != null){
  362. des = res.description;
  363. }
  364. }
  365. });
  366. return des;
  367. },
  368. saveDesAndNeed: function(tn, field, fieldvalue, con){
  369. Ext.Ajax.request({//拿到grid的columns
  370. url : basePath + "pm/bom/updateDescription.action",
  371. params: {
  372. tablename: tn,
  373. field: field,
  374. fieldvalue: fieldvalue,
  375. condition: con
  376. },
  377. method : 'post',
  378. callback : function(options,success,response){
  379. var res = new Ext.decode(response.responseText);
  380. if(res.exceptionInfo){
  381. showError(res.exceptionInfo);return;
  382. }
  383. if(res.success){
  384. Ext.Msg.alert('提示','保存成功!');
  385. /*var win = parent.Ext.ComponentQuery.query('window');
  386. if(win){
  387. Ext.each(win, function(){
  388. this.close();
  389. });
  390. } else {
  391. window.close();
  392. }*/
  393. }
  394. }
  395. });
  396. },
  397. getFdValue: function(code, valuecode){//根据特征项code和特征值码获取特征值
  398. var result = '';
  399. Ext.Ajax.request({
  400. url : basePath + "pm/bom/getDescription.action",
  401. params: {
  402. tablename: 'FeatureDetail',
  403. field: 'fd_value',
  404. condition: "fd_code='" + code + "' and fd_valuecode='" + valuecode + "'"
  405. },
  406. method : 'post',
  407. async: false,
  408. callback : function(options,success,response){
  409. var res = new Ext.decode(response.responseText);
  410. if(res.exceptionInfo){
  411. showError(res.exceptionInfo);return;
  412. }
  413. if(res.success){
  414. result = res.description;
  415. }
  416. }
  417. });
  418. return result;
  419. },
  420. getFdValues: function(code, valuecode){//根据特征项code和特征值码获取特征值
  421. var result = '';
  422. Ext.Ajax.request({
  423. url : basePath + "pm/bom/getFields.action",
  424. params: {
  425. tablename: 'FeatureDetail',
  426. field: ['fd_value','fd_spec','fd_remark'],//'fd_value',
  427. condition: "fd_code='" + code + "' and fd_valuecode='" + valuecode + "'"
  428. },
  429. method : 'post',
  430. async: false,
  431. callback : function(options,success,response){
  432. var res = new Ext.decode(response.responseText);
  433. if(res.exceptionInfo){
  434. showError(res.exceptionInfo);return;
  435. }
  436. if(res.success){
  437. result = res.data;
  438. }
  439. }
  440. });
  441. console.log(result);
  442. return result;
  443. },
  444. getFields: function(tn, fields, con){
  445. var des = '';
  446. Ext.Ajax.request({//拿到grid的columns
  447. url : basePath + "pm/bom/getFields.action",
  448. params: {
  449. tablename: tn,
  450. field: fields,
  451. condition: con
  452. },
  453. method : 'post',
  454. async: false,
  455. callback : function(options,success,response){
  456. var res = new Ext.decode(response.responseText);
  457. if(res.exceptionInfo){
  458. showError(res.exceptionInfo);return;
  459. }
  460. if(res.success && res.data != null){
  461. des = res.data;
  462. }
  463. }
  464. });
  465. return des;
  466. }
  467. });