MakePlan.js 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.pm.make.MakePlan', {
  3. extend: 'Ext.app.Controller',
  4. requires: ['erp.util.BaseUtil', 'erp.util.FormUtil', 'erp.util.RenderUtil'],
  5. views:[
  6. 'pm.make.MakePlan','common.datalist.GridPanel','common.datalist.Toolbar','core.button.VastAudit','core.button.VastDelete',
  7. 'core.button.VastPrint','core.button.VastReply','core.button.VastSubmit','core.button.ResAudit','core.form.FtField',
  8. 'core.grid.TfColumn','core.grid.YnColumn','core.trigger.DbfindTrigger','core.form.FtDateField','core.form.FtFindField',
  9. 'core.form.FtNumberField', 'core.form.MonthDateField','common.batchDeal.Form','core.form.MonthDateField','core.form.ConMonthDateField','core.trigger.DbfindTrigger','core.form.ConDateField'
  10. ],
  11. init:function(){
  12. this.BaseUtil = Ext.create('erp.util.BaseUtil');
  13. this.FormUtil = Ext.create('erp.util.FormUtil');
  14. this.control({
  15. 'erpDatalistGridPanel': {
  16. itemclick: this.onGridItemClick,
  17. afterrender:function(grid){
  18. if(Ext.isIE){
  19. document.body.attachEvent('onkeydown', function(){
  20. if(window.event.ctrlKey && window.event.keyCode == 67){//Ctrl + C
  21. var e = window.event;
  22. if(e.srcElement) {
  23. window.clipboardData.setData('text', e.srcElement.innerHTML);
  24. }
  25. }
  26. });
  27. } else {
  28. grid.getEl().dom.addEventListener("mouseover", function(e){
  29. if(e.ctrlKey){
  30. var Contextvalue=e.target.textContent==""?e.target.value:e.target.textContent;
  31. textarea_text = parent.document.getElementById("textarea_text");
  32. textarea_text.value=Contextvalue;
  33. textarea_text.focus();
  34. textarea_text.select();
  35. }
  36. });
  37. }
  38. }
  39. },
  40. 'erpVastDeleteButton': {
  41. click: function(btn){
  42. var dlwin = new Ext.window.Window({
  43. id : 'dlwin',
  44. title: btn.text,
  45. height: "100%",
  46. width: "80%",
  47. maximizable : true,
  48. buttonAlign : 'center',
  49. layout : 'anchor',
  50. items: [{
  51. tag : 'iframe',
  52. frame : true,
  53. anchor : '100% 100%',
  54. layout : 'fit',
  55. html : '<iframe id="iframe_dl_'+caller+'" src="'+basePath+'jsps/common/vastDatalist.jsp?urlcondition='+condition+'&whoami='+caller+'" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
  56. }],
  57. buttons : [{
  58. text: btn.text,
  59. iconCls: btn.iconCls,
  60. cls: 'x-btn-gray-1',
  61. handler: function(){
  62. }
  63. },{
  64. text : '关 闭',
  65. iconCls: 'x-button-icon-close',
  66. cls: 'x-btn-gray',
  67. handler : function(){
  68. Ext.getCmp('dlwin').close();
  69. }
  70. }]
  71. });
  72. dlwin.show();
  73. }
  74. },
  75. 'button[id=query]':{
  76. beforerender:function(btn){
  77. btn.handler=function(){
  78. var form=btn.ownerCt.ownerCt;
  79. if(form){
  80. var condition=form.getCondition();
  81. if(!Ext.isEmpty(condition)) {
  82. var grid=Ext.getCmp('grid');
  83. grid.getCount(caller,condition);
  84. }
  85. }
  86. };
  87. }
  88. },
  89. 'button[id=searchlist]': {
  90. beforerender:function(btn){
  91. btn.hidden=true;
  92. },
  93. //searchlist存在很多问题
  94. click: function(){
  95. this.showSearchListWin();
  96. }
  97. },
  98. 'button[id=customize]': {
  99. click: function(){
  100. this.showCustomizeWin();
  101. }
  102. },
  103. 'button[id=relativelist]':{
  104. beforerender:function(btn){
  105. btn.hidden=true;
  106. }
  107. },
  108. 'dbfindtrigger[name=sl_label]': {
  109. afterrender: function(t){
  110. t.dbBaseCondition = 'sl_caller=\'' + caller + '\'';
  111. }
  112. }
  113. });
  114. },
  115. showCustomizeWin:function(){
  116. var me = this, win = this.CustomizeWin, grid = Ext.getCmp('grid');
  117. if(!win){
  118. var ablecolumns=new Array(),unselectcolumns=grid.basecolumns;
  119. Ext.Array.each(grid.columns,function(item){
  120. if(item.text && item.text.indexOf('&#160')<0){
  121. ablecolumns.push(item);
  122. }
  123. });
  124. unselectcolumns.splice(0,ablecolumns.length);
  125. this.CustomizeWin=win = Ext.create('Ext.window.Window', {
  126. title: '<div align="center">个性设置</div>',
  127. height: screen.height*0.7,
  128. width: screen.width*0.7*0.9,
  129. layout:'border',
  130. closeAction:'hide',
  131. items:[{
  132. region:'center',
  133. layout:{
  134. type: 'hbox',
  135. align: 'stretch',
  136. padding: 5
  137. },
  138. defaults : { flex : 1 },
  139. items:[{
  140. xtype:'grid',
  141. multiSelect: true,
  142. id: 'fromgrid',
  143. title:'可选项',
  144. flex:0.7,
  145. cls: 'custom-grid',
  146. store:Ext.create('Ext.data.Store', {
  147. fields: [{name:'dataIndex',type:'string'},{name:'text',type:'string'},{name:'width',type:'number'}],
  148. data: unselectcolumns,
  149. filterOnLoad: false
  150. }),
  151. plugins: [Ext.create('erp.view.core.grid.HeaderFilter')],
  152. viewConfig: {
  153. plugins: {
  154. ptype: 'gridviewdragdrop',
  155. dragGroup: 'togrid',
  156. dropGroup: 'togrid'
  157. }
  158. },
  159. stripeRows: false,
  160. columnLines:true,
  161. columns:[{
  162. dataIndex:'dataIndex',
  163. cls :"x-grid-header-1",
  164. text:'字段名称',
  165. width:120,
  166. filter: {
  167. xtype : 'textfield'
  168. }
  169. },{
  170. dataIndex:'text',
  171. text:'描述',
  172. cls :"x-grid-header-1",
  173. flex:1,
  174. filter: {
  175. xtype : 'textfield'
  176. }
  177. },{
  178. dataIndex:'width',
  179. text:'宽度',
  180. width:60,
  181. cls :"x-grid-header-1",
  182. align:'right',
  183. editor: {
  184. xtype: 'numberfield',
  185. format:0
  186. },
  187. filter: {
  188. xtype : 'textfield'
  189. }
  190. }]
  191. },{
  192. xtype:'grid',
  193. multiSelect: true,
  194. id: 'togrid',
  195. stripeRows: true,
  196. columnLines:true,
  197. title:'显示项',
  198. store:Ext.create('Ext.data.Store', {
  199. fields: [{name:'dataIndex',type:'string'},{name:'text',type:'string'},{name:'width',type:'number'},
  200. {name:'orderby',type:'string'},{name:'priority',type:'string'}],
  201. data:ablecolumns,
  202. filterOnLoad: false
  203. }),
  204. necessaryField:'dataIndex',
  205. plugins: [Ext.create('erp.view.core.grid.HeaderFilter'),
  206. Ext.create('Ext.grid.plugin.CellEditing', {
  207. clicksToEdit: 1
  208. })],
  209. viewConfig: {
  210. plugins: {
  211. ptype: 'gridviewdragdrop',
  212. dragGroup: 'togrid',
  213. dropGroup: 'togrid'
  214. }
  215. },
  216. columns:[{
  217. dataIndex:'dataIndex',
  218. text:'字段名称',
  219. cls :"x-grid-header-1",
  220. width:120,
  221. filter: {
  222. xtype : 'textfield'
  223. }
  224. },{
  225. dataIndex:'text',
  226. text:'描述',
  227. cls :"x-grid-header-1",
  228. flex:1,
  229. filter: {
  230. xtype : 'textfield'
  231. }
  232. },{
  233. dataIndex:'width',
  234. text:'宽度',
  235. width:60,
  236. xtype:'numbercolumn',
  237. align:'right',
  238. cls :"x-grid-header-1",
  239. filter: {
  240. xtype : 'textfield'
  241. },
  242. editable:true,
  243. format: '0',
  244. editor: {
  245. xtype: 'numberfield',
  246. hideTrigger: true
  247. },
  248. },
  249. {
  250. dataIndex:'orderby',
  251. text:'排序',
  252. width:60,
  253. xtype:'combocolumn',
  254. cls :"x-grid-header-1",
  255. filter: {
  256. xtype : 'textfield'
  257. },
  258. renderer:function(val){
  259. if(val=='ASC'){
  260. return '<img src="' + basePath + 'resource/images/16/up.png">' +
  261. '<span style="color:red;padding-left:2px">升序</span>';
  262. } else if(val=='DESC') {
  263. return '<img src="' + basePath + 'resource/images/16/down.png">' +
  264. '<span style="color:red;padding-left:2px">降序</span>';
  265. }
  266. },
  267. editor:{
  268. xtype:'combo',
  269. queryMode: 'local',
  270. displayField: 'display',
  271. valueField: 'value',
  272. store:Ext.create('Ext.data.Store', {
  273. fields: ['value', 'display'],
  274. data : [{value:"ASC", display:"升序"},
  275. {value:"DESC", display:"降序"}]
  276. })
  277. }
  278. },{
  279. dataIndex:'priority',
  280. text:'优先级',
  281. width:60,
  282. align:'right',
  283. cls :"x-grid-header-1",
  284. filter: {
  285. xtype : 'textfield'
  286. },
  287. editor:{
  288. xtype:'combo',
  289. queryMode: 'local',
  290. displayField: 'display',
  291. valueField: 'value',
  292. store:Ext.create('Ext.data.Store', {
  293. fields: ['value', 'display'],
  294. data : [{value:"1", display:"1"},
  295. {value:"2", display:"2"},
  296. {value:"3", display:"3"},
  297. {value:"4", display:"4"},
  298. {value:"5", display:"5"},
  299. {value:"6", display:"6"},
  300. {value:"7", display:"7"},
  301. {value:"8", display:"8"},
  302. {value:"9", display:"9"},]
  303. })
  304. }
  305. }]
  306. }]
  307. }],
  308. buttonAlign:'center',
  309. buttons:['->',{
  310. text:'重置',
  311. scope:this,
  312. handler:function(btn){
  313. warnMsg('重置列表将还原配置,确认重置吗?', function(btn){
  314. if(btn == 'yes'){
  315. Ext.Ajax.request({
  316. url : basePath + 'common/resetEmpsDataListDetails.action',
  317. params: {
  318. caller:caller
  319. },
  320. method : 'post',
  321. callback : function(options,success,response){
  322. var localJson = new Ext.decode(response.responseText);
  323. if(localJson.success){
  324. showMessage('提示','重置成功!',1000);
  325. window.location.reload();
  326. } else {
  327. if(localJson.exceptionInfo){
  328. var str = localJson.exceptionInfo;
  329. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  330. str = str.replace('AFTERSUCCESS', '');
  331. showError(str);
  332. } else {
  333. showError(str);return;
  334. }
  335. }
  336. }
  337. }
  338. });
  339. }
  340. });
  341. }
  342. },{
  343. style:'margin-left:5px;',
  344. text:'保存',
  345. scope:this,
  346. handler:function(btn){
  347. var grid=Ext.getCmp('togrid'),fromgrid=Ext.getCmp('fromgrid');
  348. var jsonGridData = new Array(),datas=new Array();
  349. var form = Ext.getCmp('form');
  350. grid.getStore().each(function(item){//将grid里面各行的数据获取并拼成jsonGridData
  351. var data = {
  352. dde_field:item.data.dataIndex,
  353. dde_width:item.data.width,
  354. dde_orderby:item.data.orderby,
  355. dde_priority:item.data.priority
  356. };
  357. item.dirty=false;
  358. jsonGridData.push(Ext.JSON.encode(data));
  359. datas.push(item.data);
  360. });
  361. Ext.Ajax.request({
  362. url : basePath + 'common/saveEmpsDataListDetails.action',
  363. params : {
  364. caller:caller,
  365. data:unescape(jsonGridData.toString())
  366. },
  367. method : 'post',
  368. callback : function(options,success,response){
  369. var localJson = new Ext.decode(response.responseText);
  370. if(localJson.success){
  371. showMessage('提示','保存成功!',1000);
  372. window.location.reload();
  373. }
  374. }
  375. });
  376. }
  377. },{
  378. style:'margin-left:5px;',
  379. text:'关闭',
  380. handler:function(btn){
  381. btn.ownerCt.ownerCt.hide();
  382. }
  383. },'->']
  384. });
  385. }
  386. win.show();
  387. },
  388. onGridItemClick: function(selModel, record){
  389. //打开小窗口 编辑 分拆工单
  390. var ma_code=record.data.ma_code;
  391. Ext.create('Ext.window.Window',{
  392. width:850,
  393. height:'80%',
  394. iconCls:'x-grid-icon-partition',
  395. title:'<h1>工单拆分</h1>',
  396. id:'win',
  397. items:[{
  398. xtype:'form',
  399. layout:'column',
  400. region:'north',
  401. frame:true,
  402. defaults:{
  403. xtype:'textfield',
  404. columnWidth:0.5,
  405. readOnly:true,
  406. fieldStyle:'background:#f0f0f0;border: 0px solid #8B8970;color:blue;'
  407. },
  408. items:[{
  409. fieldLabel:'制造单号',
  410. value:record.data.ma_code,
  411. id:'macode'
  412. },{
  413. fieldLabel:'物料编号' ,
  414. value:record.data.ma_prodcode
  415. },{
  416. fieldLabel:'物料名称',
  417. value:record.data.pr_detail
  418. },{
  419. fieldLabel:'订单编号' ,
  420. value:record.data.ma_salecode
  421. },{
  422. fieldLabel:'订单序号',
  423. value:record.data.ma_saledetno
  424. },{
  425. fieldLabel:'制单数量',
  426. value:record.data.ma_qty,
  427. id:'ma_qty'
  428. },{
  429. fieldLabel:'已完工数',
  430. value:record.data.ma_madeqty,
  431. id:'ma_madeqty'
  432. }]
  433. },{
  434. xtype:'form',
  435. layout:'column',
  436. frame:true,
  437. id:'planform',
  438. defaults:{
  439. xtype:'textfield',
  440. columnWidth:0.26,
  441. readOnly:false,
  442. labelAlign:'right',
  443. fieldStyle:'background:#FFFAFA;color:#515151;'
  444. },
  445. items:[{
  446. fieldLabel:'计划开工日期',
  447. xtype:'datefield',
  448. id:'ma_planbegindate',
  449. name:'ma_planbegindate',
  450. value:record.data.ma_planbegindate
  451. },{
  452. fieldLabel:'计划完工日期',
  453. xtype:'datefield',
  454. id:'ma_planenddate',
  455. name:'ma_planenddate',
  456. value:record.data.ma_planenddate
  457. },{
  458. fieldLabel:'线别',
  459. id:'ma_teamcode',
  460. name:'ma_teamcode',
  461. labelWidth:50,
  462. columnWidth:0.2,
  463. xtype:'dbfindtrigger',
  464. value:record.data.ma_teamcode
  465. },{
  466. id:'ma_id',
  467. xtype:'hidden',
  468. name:'ma_id',
  469. value:record.data.ma_id
  470. },{
  471. xtype:'button',
  472. columnWidth:0.12,
  473. text:'保存',
  474. width:60,
  475. iconCls: 'x-button-icon-save',
  476. margin:'0 0 0 30',
  477. handler:function(btn){
  478. var store=Ext.getCmp('smallgrid').getStore();
  479. var count=0;
  480. var jsonData=new Array();
  481. var dd,version;
  482. Ext.Array.each(store.data.items,function(item){
  483. if(item.data.ma_planbegindate!=null&&item.data.ma_qty>0){
  484. version=item.data.ma_version;
  485. if(!version){
  486. dd=new Object();
  487. //说明是新增批次
  488. dd['ma_planbegindate']=Ext.Date.format(item.data.ma_planbegindate, 'Y-m-d');
  489. if(item.data.ma_planenddate!=null){
  490. dd['ma_planenddate']=Ext.Date.format(item.data.ma_planenddate, 'Y-m-d');
  491. }else{
  492. dd['ma_planenddate']=null;
  493. }
  494. dd['ma_qty']=item.data.ma_qty;
  495. dd['ma_teamcode']=item.data.ma_teamcode;
  496. jsonData.push(Ext.JSON.encode(dd));
  497. count+=Number(item.data.ma_qty);
  498. }
  499. }
  500. });
  501. var r=Ext.getCmp('planform').getValues();
  502. var params=new Object();
  503. params.formdata = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  504. params.data = unescape(jsonData.toString().replace(/\\/g,"%"));
  505. var assqty=Number(record.data.ma_qty)-Number(record.data.ma_madeqty);
  506. if(count>assqty){
  507. showError('分拆数量不能大于未完工数!') ;
  508. return;
  509. }else{
  510. Ext.Ajax.request({
  511. url : basePath +'pm/make/splitMake.action',
  512. params : params,
  513. method : 'post',
  514. callback : function(options,success,response){
  515. var localJson = new Ext.decode(response.responseText);
  516. if(localJson.success){
  517. saveSuccess(function(){
  518. //add成功后刷新页面进入可编辑的页面
  519. Ext.create('erp.util.GridUtil').loadNewStore(Ext.getCmp('smallgrid'),{
  520. caller:'MakeSplit',
  521. condition:"ma_version='"+ma_code+"' order by ma_id desc"
  522. });
  523. });
  524. } else if(localJson.exceptionInfo){
  525. var str = localJson.exceptionInfo;
  526. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  527. str = str.replace('AFTERSUCCESS', '');
  528. saveSuccess(function(){
  529. //add成功后刷新页面进入可编辑的页面
  530. Ext.create('erp.util.GridUtil').loadNewStore(Ext.getCmp('smallgrid'),{
  531. caller:'MakeSplit',
  532. condition:"ma_version='"+ma_code+"' order by ma_id desc"
  533. });
  534. });
  535. showError(str);
  536. } else {
  537. showError(str);
  538. return;
  539. }
  540. } else{
  541. saveFailure();
  542. }
  543. }
  544. });
  545. }
  546. }
  547. },{
  548. xtype:'button',
  549. columnWidth:0.1,
  550. text:'关闭',
  551. width:60,
  552. iconCls: 'x-button-icon-close',
  553. margin:'0 0 0 10',
  554. handler:function(btn){
  555. Ext.getCmp('win').close();
  556. }
  557. }]
  558. },{
  559. xtype:'gridpanel',
  560. region:'south',
  561. id:'smallgrid',
  562. layout:'fit',
  563. height:0.45*(window.height),
  564. autoScroll:true,
  565. columnLines:true,
  566. store:Ext.create('Ext.data.Store',{
  567. fields:[{name:'ma_planbegindate',type:'date'},{name:'ma_planenddate',type:'date'},{name:'ma_teamcode',type:'string'},{name:'ma_qty',type:'int'},{name:'ma_code',type:'string'},{name:'ma_version',type:'string'}],
  568. data:[]
  569. }),
  570. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  571. clicksToEdit: 1,
  572. listeners:{
  573. 'edit':function(editor,e,Opts){
  574. var record=e.record;
  575. var version=record.data.ma_version;
  576. if(version){
  577. e.record.reject();
  578. Ext.Msg.alert('提示','不能修改已拆分工单!');
  579. }
  580. }
  581. }
  582. })],
  583. tbar: [{
  584. tooltip: '添加批次',
  585. iconCls: 'x-button-icon-add',
  586. width:25,
  587. handler : function() {
  588. var store = Ext.getCmp('smallgrid').getStore();
  589. var r = new Object();
  590. r.ma_planbegindate=null;
  591. r.ma_planenddate=null;
  592. r.ma_qty=null;
  593. r.ma_code=null;
  594. store.insert(store.getCount(), r);
  595. }
  596. }, {
  597. tooltip: '删除批次',
  598. width:25,
  599. itemId: 'delete',
  600. iconCls: 'x-button-icon-delete',
  601. handler: function(btn) {
  602. var sm = Ext.getCmp('smallgrid').getSelectionModel();
  603. //ma_version 存在则不让删除
  604. var store=Ext.getCmp('smallgrid').getStore();
  605. store.remove(sm.getSelection());
  606. if (store.getCount() > 0) {
  607. sm.select(0);
  608. }
  609. },
  610. disabled: true
  611. }],
  612. listeners:{
  613. itemmousedown:function(selmodel, record){
  614. selmodel.ownerCt.down('#delete').setDisabled(false);
  615. }
  616. },
  617. columns:[{
  618. dataIndex:'ma_planbegindate',
  619. header:'计划开工日期',
  620. xtype:'datecolumn',
  621. width:120,
  622. editable:true,
  623. renderer:function(val,meta,record){
  624. if(record.data.ma_version){
  625. meta.tdCls = "x-grid-cell-renderer-cl";
  626. }
  627. if(val)
  628. return Ext.Date.format(val, 'Y-m-d');
  629. else return null;
  630. },
  631. editor:{
  632. xtype: 'datefield',
  633. format:'Y-m-d'
  634. },
  635. },{
  636. dataIndex:'ma_planenddate',
  637. header:'计划完工日期',
  638. xtype:'datecolumn',
  639. width:120,
  640. editable:true,
  641. renderer:function(val,meta,record){
  642. if(record.data.ma_version){
  643. meta.tdCls = "x-grid-cell-renderer-cl";
  644. }
  645. if(val)
  646. return Ext.Date.format(val, 'Y-m-d');
  647. else return null;
  648. },
  649. format:'Y-m-d',
  650. editor:{
  651. xtype: 'datefield',
  652. format:'Y-m-d'
  653. }
  654. },{
  655. dataIndex:'ma_qty',
  656. header:'数量',
  657. width:120,
  658. xtype:'numbercolumn',
  659. editable:true,
  660. renderer:function(val,meta,record){
  661. if(record.data.ma_version){
  662. meta.tdCls = "x-grid-cell-renderer-cl";
  663. }
  664. return val;
  665. },
  666. editor:{
  667. xtype:'numberfield',
  668. format:'0',
  669. hideTrigger: true
  670. }
  671. },{
  672. dataIndex:'ma_teamcode',
  673. header:'线别',
  674. width:120,
  675. editable:true,
  676. renderer:function(val,meta,record){
  677. if(record.data.ma_version){
  678. meta.tdCls = "x-grid-cell-renderer-cl";
  679. }
  680. return val;
  681. },
  682. dbfind:'MakeTeam|ct_varchar50_1',
  683. editor:{
  684. xtype:'dbfindtrigger',
  685. hideTrigger: false,
  686. name:'ma_teamcode',
  687. which:'grid',
  688. dbfind:'MakeTeam|ct_varchar50_1',
  689. listeners: {
  690. aftertrigger: function(t, d) {
  691. var record = Ext.getCmp('smallgrid').selModel.lastSelected;
  692. record.set('ma_teamcode', d.data.CT_VARCHAR50_1);
  693. }
  694. }
  695. }
  696. },{
  697. dataIndex:'ma_code',
  698. header:'制造单号',
  699. width:150,
  700. renderer:function(val,meta,record){
  701. if(record.data.ma_version){
  702. meta.tdCls = "x-grid-cell-renderer-cl";
  703. }
  704. return val;
  705. },
  706. },{
  707. dataIndex:'ma_version',
  708. header:'原始工单',
  709. width:150,
  710. editable:false
  711. }]
  712. }]
  713. }).show();
  714. //给grid 赋值
  715. Ext.create('erp.util.GridUtil').loadNewStore(Ext.getCmp('smallgrid'),{
  716. caller:'MakeSplit',
  717. condition:"ma_version='"+ma_code+"' order by ma_id desc"
  718. });
  719. },
  720. openUrl: function(record) {
  721. var me = this, value = record.data[keyField];
  722. var formCondition = keyField + "IS" + value ;
  723. var gridCondition = pfField + "IS" + value;
  724. if(!Ext.isEmpty(pfField) && pfField.indexOf('+') > -1) {//多条件传入维护界面//vd_vsid@vd_id+vd_class@vd_class
  725. var arr = pfField.split('+'),ff = [],k = [];
  726. Ext.Array.each(arr, function(r){
  727. ff = r.split('@');
  728. k.push(ff[0] + 'IS\'' + record.get(ff[1]) + '\'');
  729. });
  730. gridCondition = k.join(' AND ');
  731. }
  732. var panelId = caller + keyField + "_" + value + gridCondition;
  733. var panel = Ext.getCmp(panelId);
  734. var main = parent.Ext.getCmp("content-panel");
  735. if(!main){
  736. main = parent.parent.Ext.getCmp("content-panel");
  737. }
  738. if(!panel){
  739. var title = "";
  740. if (value.toString().length>4) {
  741. title = value.toString().substring(value.toString().length-4);
  742. } else {
  743. title = value;
  744. }
  745. var myurl = '';
  746. if(me.BaseUtil.contains(url, '?', true)){
  747. myurl = url + '&formCondition='+formCondition+'&gridCondition='+gridCondition;
  748. } else {
  749. myurl = url + '?formCondition='+formCondition+'&gridCondition='+gridCondition;
  750. }
  751. myurl += "&datalistId=" + main.getActiveTab().id;
  752. main.getActiveTab().currentStore = me.getCurrentStore(value);//用于单据翻页
  753. if(main._mobile) {
  754. main.addPanel(me.BaseUtil.getActiveTab().title+'('+title+')', myurl, panelId);
  755. } else {
  756. panel = {
  757. title : me.BaseUtil.getActiveTab().title+'('+title+')',
  758. tag : 'iframe',
  759. tabConfig:{tooltip:me.BaseUtil.getActiveTab().tabConfig.tooltip+'('+keyField + "=" + value+')'},
  760. frame : true,
  761. border : false,
  762. layout : 'fit',
  763. iconCls : 'x-tree-icon-tab-tab1',
  764. html : '<iframe id="iframe_maindetail_'+caller+"_"+value+'" src="' + myurl + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
  765. closable : true,
  766. listeners : {
  767. close : function(){
  768. if(!main){
  769. main = parent.parent.Ext.getCmp("content-panel");
  770. }
  771. main.setActiveTab(main.getActiveTab().id);
  772. }
  773. }
  774. };
  775. this.openTab(panel, panelId);
  776. }
  777. }else{
  778. main.setActiveTab(panel);
  779. }
  780. },
  781. openQueryUrl: function(record) {
  782. var me = this, arr = keyField.split('+'),ff = [],k = [];//vd_vsid@vd_id+vd_class@vd_class
  783. Ext.Array.each(arr, function(r){
  784. ff = r.split('@');
  785. k.push(ff[0] + '=' + record.get(ff[1]));
  786. });
  787. var myurl = k.join('&');
  788. var panelId = caller + "_" + myurl;
  789. var panel = Ext.getCmp(panelId);
  790. var main = parent.Ext.getCmp("content-panel");
  791. if(!main){
  792. main = parent.parent.Ext.getCmp("content-panel");
  793. }
  794. if(!panel){
  795. var title = me.BaseUtil.getActiveTab().title + '-查询';
  796. if(contains(url, '?', true)){
  797. myurl = url + '&' + myurl;
  798. } else {
  799. myurl = url + '?' + myurl;
  800. }
  801. if (main._mobile) {
  802. main.addPanel(title, myurl, panelId);
  803. } else {
  804. panel = {
  805. title : title,
  806. tag : 'iframe',
  807. tabConfig: {tooltip: title},
  808. frame : true,
  809. border : false,
  810. layout : 'fit',
  811. iconCls : 'x-tree-icon-tab-tab1',
  812. html : '<iframe src="' + myurl + '" height="100%" width="100%" frameborder="0" style="border-width: 0px;padding: 0px;" scrolling="auto"></iframe>',
  813. closable : true,
  814. listeners : {
  815. close : function(){
  816. if(!main){
  817. main = parent.parent.Ext.getCmp("content-panel");
  818. }
  819. main.setActiveTab(main.getActiveTab().id);
  820. }
  821. }
  822. };
  823. this.openTab(panel, panelId);
  824. }
  825. } else {
  826. main.setActiveTab(panel);
  827. }
  828. },
  829. openTab : function (panel,id){
  830. var o = (typeof panel == "string" ? panel : id || panel.id);
  831. var main = parent.Ext.getCmp("content-panel");
  832. /*var tab = main.getComponent(o); */
  833. if(!main) {
  834. main =parent.parent.Ext.getCmp("content-panel");
  835. }
  836. var tab = main.getComponent(o);
  837. if (tab) {
  838. main.setActiveTab(tab);
  839. } else if(typeof panel!="string"){
  840. panel.id = o;
  841. var p = main.add(panel);
  842. main.setActiveTab(p);
  843. }
  844. },
  845. getCurrentStore: function(value){
  846. var grid = Ext.getCmp('grid');
  847. var items = grid.store.data.items;
  848. var array = new Array();
  849. var o = null;
  850. Ext.each(items, function(item, index){
  851. o = new Object();
  852. o.selected = false;
  853. if(index == 0){
  854. o.prev = null;
  855. } else {
  856. o.prev = items[index-1].data[keyField];
  857. }
  858. if(index == items.length - 1){
  859. o.next = null;
  860. } else {
  861. o.next = items[index+1].data[keyField];
  862. }
  863. var v = item.data[keyField];
  864. o.value = v;
  865. if(v == value)
  866. o.selected = true;
  867. array.push(o);
  868. });
  869. return array;
  870. },
  871. showSearchListWin: function(){
  872. var me = this, win = this.searchWin;
  873. if (!win){
  874. win = this.searchWin = Ext.create('Ext.window.Window', {
  875. title: '高级查询',
  876. height: screen.height*0.7*0.8,
  877. width: screen.width*0.7*0.6,
  878. maximizable : true,
  879. closable: false,
  880. buttonAlign : 'center',
  881. layout : 'border',
  882. bodyStyle: 'background:#f1f1f1;',
  883. tools: [{
  884. type: 'close',
  885. handler: function(e, el, header, tool){
  886. tool.ownerCt.ownerCt.down('grid').setEffectData();//保留已选择的条件
  887. tool.ownerCt.ownerCt.hide();
  888. }
  889. }],
  890. items: [{
  891. xtype: 'form',
  892. region: 'north',
  893. layout: 'column',
  894. bodyStyle: 'background:#f1f1f1;',
  895. maxHeight: 100,
  896. buttonAlign: 'center',
  897. buttons: [{
  898. name: 'query',
  899. id: 'query',
  900. text: $I18N.common.button.erpQueryButton,
  901. iconCls: 'x-button-icon-query',
  902. cls: 'x-btn-gray',
  903. handler: function(btn){
  904. Ext.getCmp('grid').getCount(caller);
  905. btn.ownerCt.ownerCt.ownerCt.hide();
  906. }
  907. },{
  908. cls: 'x-btn-gray',
  909. text: '清空',
  910. handler: function(btn){
  911. btn.ownerCt.ownerCt.ownerCt.down('grid').store.loadData([{},{},{},{},{},{},{},{},{},{}]);
  912. Ext.getCmp('grid').getCount(caller);
  913. }
  914. },{
  915. cls: 'x-btn-gray',
  916. text: '关闭',
  917. handler: function(btn){
  918. btn.ownerCt.ownerCt.ownerCt.down('grid').setEffectData();
  919. btn.ownerCt.ownerCt.ownerCt.hide();
  920. }
  921. },{
  922. xtype: 'radio',
  923. name: 'separator',
  924. boxLabel: '与',
  925. checked: true,
  926. inputValue: 'AND',
  927. getCheckValue: function(){
  928. return this.checked ? 'AND' : 'OR';
  929. }
  930. },{
  931. xtype: 'radio',
  932. name: 'separator',
  933. boxLabel: '或',
  934. inputValue: 'OR'
  935. }]
  936. }, me.getSearchListGrid()]
  937. });
  938. Ext.getCmp('grid').searchGrid = win.down('grid');
  939. }
  940. win.show();
  941. win.down('grid').loadData();
  942. },
  943. getGridColumns : function() {
  944. var grid = Ext.getCmp('grid'), columns = grid.headerCt.getGridColumns(), data = [];
  945. Ext.each(columns, function(){
  946. if(this.dataIndex && this.getWidth() > 0) {
  947. data.push({
  948. display : this.text,
  949. value : this.text,
  950. column : this
  951. });
  952. }
  953. });
  954. return data;
  955. },
  956. getSearchListGrid: function(){
  957. var data = this.getGridColumns();
  958. var grid = Ext.create('Ext.grid.Panel', {
  959. maxHeight: 350,
  960. region: 'center',
  961. store: Ext.create('Ext.data.Store', {
  962. fields:[{
  963. name: 'sl_label',
  964. type: 'string'
  965. },{
  966. name: 'sl_field',
  967. type: 'string'
  968. },{
  969. name: 'sl_type',
  970. type: 'string'
  971. },{
  972. name: 'sl_dbfind',
  973. type: 'string'
  974. },{
  975. name: 'union',
  976. type: 'string'
  977. },{
  978. name: 'value'
  979. }],
  980. data: []
  981. }),
  982. columns: [{
  983. text: '条件',
  984. flex: 2,
  985. dataIndex: 'sl_label',
  986. editor: {
  987. xtype: 'combo',
  988. store : Ext.create('Ext.data.Store', {
  989. fields : [ 'display', 'value', 'column' ],
  990. data : data
  991. }),
  992. editable: false,
  993. displayField : 'display',
  994. valueField : 'value',
  995. queryMode : 'local'
  996. },
  997. renderer : function(val, meta, record, x, y, store, view) {
  998. if (val) {
  999. var column = view.ownerCt.headerCt.getHeaderAtIndex(y);
  1000. if(column && typeof column.getEditor != 'undefined') {
  1001. var editor = column.getEditor(record);
  1002. if (editor && editor.lastSelection.length > 0) {
  1003. var cm = editor.lastSelection[0].get('column'),
  1004. field = cm.dataIndex;
  1005. if (record.get('sl_field') != field)
  1006. record.set('sl_field', field);
  1007. var t = 'S';
  1008. if(cm.xtype == 'datecolumn' || cm.xtype == 'datetimecolumn') {
  1009. t = 'D';
  1010. } else if(cm.xtype == 'numbercolumn') {
  1011. t = 'N';
  1012. }
  1013. if (record.get('sl_type') != t)
  1014. record.set('sl_type', t);
  1015. }
  1016. }
  1017. } else {
  1018. if (record.get('sl_field')) {
  1019. record.set('sl_field', null);
  1020. }
  1021. }
  1022. return val;
  1023. },
  1024. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  1025. if (type == 'click' || type == 'dbclick') {
  1026. return true;
  1027. }
  1028. return false;
  1029. }
  1030. },{
  1031. text: '',
  1032. hidden: true,
  1033. dataIndex: 'sl_field',
  1034. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  1035. return false;
  1036. }
  1037. },{
  1038. text: '',
  1039. hidden: true,
  1040. dataIndex: 'sl_type',
  1041. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  1042. return false;
  1043. }
  1044. },{
  1045. text: '关系',
  1046. flex: 1,
  1047. dataIndex: 'union',
  1048. xtype:'combocolumn',
  1049. editor: {
  1050. xtype: 'combo',
  1051. store: Ext.create('Ext.data.Store', {
  1052. fields: ['display', 'value'],
  1053. data : [{"display": '等于', "value": '='},
  1054. {"display": '大于', "value": '>'},
  1055. {"display": '大于等于', "value": '>='},
  1056. {"display": '小于', "value": '<'},
  1057. {"display": '小于等于', "value": '<='},
  1058. {"display": '不等于', "value": '<>'},
  1059. {"display": '介于', "value": 'Between And'},
  1060. {"display": '包含', "value": 'like'},
  1061. {"display": '不包含', "value": 'not like'},
  1062. {"display": '开头是', "value": 'begin like'},
  1063. {"display": '开头不是', "value": 'begin not like'},
  1064. {"display": '结尾是', "value": 'end like'},
  1065. {"display": '结尾不是', "value": 'end not like'}]
  1066. }),
  1067. displayField: 'display',
  1068. valueField: 'value',
  1069. queryMode: 'local',
  1070. editable: false,
  1071. value: 'like'
  1072. },
  1073. /* renderer : function(v) {
  1074. var r = v;
  1075. switch(v) {
  1076. case 'like':
  1077. r = 'Like';break;
  1078. case '=':
  1079. r = '等于';break;
  1080. case '>':
  1081. r = '大于';break;
  1082. case '>=':
  1083. r = '大于等于';break;
  1084. case '<':
  1085. r = '小于';break;
  1086. case '<=':
  1087. r = '小于等于';break;
  1088. case '<>':
  1089. r = '不等于';break;
  1090. case 'Between And':
  1091. r = '介于';break;
  1092. }
  1093. return r;
  1094. },*/
  1095. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  1096. if (type == 'click' || type == 'dbclick') {
  1097. return true;
  1098. }
  1099. return false;
  1100. }
  1101. },{
  1102. text: '值',
  1103. flex: 3,
  1104. dataIndex: 'value',
  1105. renderer: function(val){
  1106. if(Ext.isDate(val)){
  1107. return Ext.Date.format(val, 'Y-m-d');
  1108. }
  1109. return val;
  1110. },
  1111. processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
  1112. if (type == 'click' || type == 'dbclick') {
  1113. var s = view.ownerCt.selModel, m = s.getSelection(), n = [];
  1114. Ext.Array.each(m, function(){
  1115. n.push(this);
  1116. });
  1117. n.push(view.ownerCt.store.getAt(recordIndex));
  1118. s.select(n);
  1119. return true;
  1120. }
  1121. return false;
  1122. }
  1123. }],
  1124. columnLines: true,
  1125. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  1126. clicksToEdit: 1,
  1127. listeners: {
  1128. beforeedit: function(e){
  1129. if(e.field == 'value'){
  1130. var record = e.record;
  1131. var column = e.column;
  1132. if(record.data['union'] == null || record.data['union'] == ''){
  1133. record.set('union', 'like');
  1134. }
  1135. var f = record.data['sl_field'];
  1136. switch(record.data['sl_type']){
  1137. case 'D':
  1138. switch(record.data['union']){
  1139. case 'Between And':
  1140. column.setEditor(new erp.view.core.form.FtDateField({
  1141. id: f,
  1142. name: f
  1143. }));break;
  1144. default:
  1145. column.setEditor(new Ext.form.field.Date({
  1146. id: f,
  1147. name: f
  1148. }));break;
  1149. }
  1150. break;
  1151. case 'S':
  1152. switch(record.data['union']){
  1153. case 'Between And':
  1154. column.setEditor(new erp.view.core.form.FtField({
  1155. id: f,
  1156. name: f,
  1157. value: e.value
  1158. }));break;
  1159. default:
  1160. column.setEditor(new Ext.form.field.Text({
  1161. id: f,
  1162. name: f
  1163. }));break;
  1164. }
  1165. break;
  1166. case 'N':
  1167. switch(record.data['union']){
  1168. case 'Between And':
  1169. column.setEditor(new erp.view.core.form.FtNumberField({
  1170. id: f,
  1171. name: f
  1172. }));break;
  1173. default:
  1174. column.setEditor(new Ext.form.field.Number({
  1175. id: f,
  1176. name: f
  1177. }));break;
  1178. }
  1179. break;
  1180. case 'T':
  1181. column.dbfind = record.get('sl_dbfind');
  1182. switch(record.data['union']){
  1183. case 'Between And':
  1184. column.setEditor(new erp.view.core.form.FtFindField({
  1185. id: f,
  1186. name: f
  1187. }));break;
  1188. default:
  1189. column.setEditor(new erp.view.core.trigger.DbfindTrigger({
  1190. id: f,
  1191. name: f
  1192. }));break;
  1193. }
  1194. break;
  1195. default:
  1196. column.setEditor(null);
  1197. }
  1198. }
  1199. }
  1200. }
  1201. }),
  1202. selModel: Ext.create('Ext.selection.CheckboxModel',{
  1203. }),
  1204. setEffectData: function(){
  1205. var me = this;
  1206. var datas = new Array();
  1207. Ext.each(me.selModel.getSelection(), function(item){
  1208. var data = item.data;
  1209. if(!Ext.isEmpty(data.sl_label) && !Ext.isEmpty(data.union) && !Ext.isEmpty(data.value)){
  1210. datas.push(data);
  1211. }
  1212. });
  1213. me.effectdata = datas;
  1214. },
  1215. getEffectData: function(){
  1216. return this.effectdata || new Array();
  1217. },
  1218. loadData: function(){
  1219. if(!this.effectdata) {
  1220. this.store.add([{},{},{},{},{},{},{},{},{},{}]);
  1221. }
  1222. },
  1223. /**
  1224. * 将数据拼成Sql条件语句
  1225. */
  1226. getCondition: function(){
  1227. this.setEffectData();
  1228. var condition = '';
  1229. var separator = this.up('window').down('form').down('radio').getCheckValue();
  1230. Ext.each(this.effectdata, function(data){
  1231. if(data.union == 'Between And'){
  1232. var v1 = data.value.split('~')[0];
  1233. var v2 = data.value.split('~')[1];
  1234. if(data.sl_type == 'D'){
  1235. if(condition == ''){
  1236. condition = '(' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
  1237. + v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
  1238. } else {
  1239. condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
  1240. + v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
  1241. }
  1242. } else if(data.sl_type == 'N'){
  1243. if(condition == ''){
  1244. condition = '(' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
  1245. } else {
  1246. condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
  1247. }
  1248. } else{
  1249. if(condition == ''){
  1250. condition = '(' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
  1251. } else {
  1252. condition += ' ' + separator + ' (' + data.sl_field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
  1253. }
  1254. }
  1255. } else {
  1256. if(data.sl_type == 'D'){
  1257. var v = data.value, field = data.sl_field;
  1258. if(Ext.isDate(v)) {
  1259. v = Ext.Date.format(v, 'Y-m-d');
  1260. }
  1261. if(data.union == '<' || data.union == '<=' || data.union == '>' || data.union == '>='){
  1262. v = "to_date('" + v + "','yyyy-MM-dd')";
  1263. }else {
  1264. v = Ext.Date.format(data.value, 'Ymd');
  1265. field = "to_char(" + field + ",'yyyymmdd')";
  1266. }
  1267. if(condition == ''){
  1268. condition = '(' + field + data.union + v + ') ';
  1269. } else {
  1270. condition += ' ' + separator +' (' + field + data.union + v + ') ';
  1271. }
  1272. } else {
  1273. var v = data.value;
  1274. if(data.union == 'like' || data.union=='not like'){
  1275. v = " '%" + data.value + "%'";
  1276. }else if(data.union =='begin like' || data.union =='begin not like'){
  1277. v = " '" + data.value + "%'";
  1278. data.union=data.union.substring(5);
  1279. }else if(data.union =='end like' || data.union=='end not like'){
  1280. v = " '%" + data.value + "'";
  1281. data.union=data.union.substring(3);
  1282. }else {
  1283. v = " '" + data.value + "'";
  1284. }
  1285. if(condition == ''){
  1286. condition = '(' + data.sl_field + " " + data.union + v + ") ";
  1287. } else {
  1288. condition += ' ' + separator +' (' + data.sl_field + " " + data.union + v + ") ";
  1289. }
  1290. }
  1291. }
  1292. });
  1293. return condition;
  1294. }
  1295. });
  1296. return grid;
  1297. },
  1298. getFilterCondition: function(){
  1299. var fields = Ext.getCmp('grid').plugins[0].fields;
  1300. var items = new Array();
  1301. Ext.each(Ext.Object.getKeys(fields), function(key){
  1302. var item = fields[key];
  1303. if(item.value != null && item.value.toString().trim() != ''){
  1304. items.push({
  1305. xtype: item.xtype,
  1306. id: item.itemId,
  1307. fieldLabel: item.fieldLabel,
  1308. fieldStyle: item.fieldStyle,
  1309. value: item.value,
  1310. columnWidth: 0.5,
  1311. cls: 'form-field-border',
  1312. listeners: {
  1313. change: function(f){
  1314. Ext.getCmp(item.id).setValue(f.value);
  1315. }
  1316. }
  1317. });
  1318. }
  1319. });
  1320. return items;
  1321. }
  1322. });