CombiningAndBreaking.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. /**
  2. *条码拆分
  3. */
  4. Ext.define('erp.view.core.button.CombiningAndBreaking', {
  5. extend : 'Ext.Button',
  6. alias : 'widget.erpCombiningAndBreakingButton',
  7. iconCls : 'x-button-icon-check',
  8. cls : 'x-btn-gray',
  9. id : 'CombiningAndBreaking',
  10. text : $I18N.common.button.erpCombiningAndBreakingButton,
  11. style : {
  12. marginLeft : '10px'
  13. },
  14. width:110,
  15. FormUtil: Ext.create('erp.util.FormUtil'),
  16. GridUtil: Ext.create('erp.util.GridUtil'),
  17. initComponent : function() {
  18. this.callParent(arguments);
  19. },
  20. handler: function(btn){
  21. var me = this;
  22. var bool = false;
  23. var or_barcode;
  24. var or_baremain;
  25. var grid = Ext.getCmp('batchDealGridPanel');
  26. var items = grid.selModel.getSelection();
  27. var count = items.length;
  28. var id ;
  29. var win = new Ext.window.Window({
  30. id: 'wincab',
  31. height: '70%',
  32. width: '70%',
  33. maximizable: false,
  34. title:'<span>条码拆分</span>',
  35. buttonAlign: 'center',
  36. layout: 'column',
  37. bodyStyle:"background-color:#F5F5F5;",
  38. items: [{
  39. xtype: 'gridpanel',
  40. id: 'grid1',
  41. anchor : '100% 70%',
  42. columnWidth:1,
  43. columns: [
  44. {
  45. style :"text-align:center",
  46. text: 'ID',
  47. width: 0,
  48. hidden : true,
  49. dataIndex: 'bar_id',
  50. ignore: true,
  51. },{
  52. style :"text-align:center",
  53. text: '条码',
  54. flex : 7,
  55. id:'bar_code1',
  56. dataIndex: 'bar_code',
  57. logic:"necessaryField",
  58. editor: {
  59. xtype: "textfield",
  60. hideTrigger: true,
  61. store: null,
  62. queryMode: "local"
  63. }
  64. },{
  65. style :"text-align:center",
  66. text: '数量',
  67. flex : 3,
  68. dataIndex: 'bar_remain',
  69. xtype: 'numbercolumn',
  70. align: "left",
  71. renderer : function(val, meta, record) {
  72. var v1 = record.get('bar_remain');
  73. var v2 = record.get('bar_code');
  74. var v;
  75. if (v2 != null && v2 !='' && v1 == 0 ) {
  76. v = 0;
  77. } else{
  78. v=v1;
  79. }
  80. return v;
  81. }
  82. }],
  83. GridUtil: Ext.create('erp.util.GridUtil'),
  84. listeners:{
  85. edit:function(ed,d){
  86. var grid = Ext.getCmp('grid1');
  87. var sum = 0;
  88. if(d.field == 'bar_code'){
  89. if(d.value != null && d.value != ''){
  90. me.FormUtil.getFieldValue("barcode","nvl(max(bar_remain),0)","bar_code='"+d.value+"' and bar_status <> -2 and bar_status <> -1","bar_remain",d.record);
  91. me.add1EmptyItems(grid);
  92. var items = grid.getStore().data.items;//获取store里面的数据
  93. Ext.each(items, function(item) {
  94. sum+= item.data['bar_remain'];
  95. });
  96. Ext.getCmp("barNumber").setValue(sum);
  97. }
  98. }
  99. },
  100. },
  101. dbfinds: [],
  102. columnLines: true,
  103. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  104. clicksToEdit: 1
  105. }),
  106. Ext.create('erp.view.core.plugin.CopyPasteMenu')],
  107. store: new Ext.data.Store({
  108. fields: ['bar_id', 'bar_code', 'bar_remain'],
  109. data: [{},{}]
  110. }),
  111. onGridItemClick: function(selModel, record){// grid行选择
  112. this.GridUtil.onGridItemClick(selModel, record);
  113. },
  114. /*necessaryFields:['bar_code', 'bar_remain','bar_id'],*/
  115. },
  116. {
  117. fieldLabel:"需拆分数量",
  118. labelStyle:"color:red;",
  119. labelWidth:80,
  120. xtype:"textfield",
  121. minValue: 0,
  122. allowBlank:false,
  123. columnWidth:.45,
  124. name : 'barNumber',
  125. id:'barNumber',
  126. autoStripChars:true,
  127. hideTrigger:true,
  128. margin:'10px 0px 5px 0px'
  129. },{
  130. xtype: 'gridpanel',
  131. id: 'grid',
  132. anchor : '100% 70%',
  133. columnWidth:1,
  134. multiSelect: true,
  135. multiselected: [],
  136. forceFit : true,
  137. checkOnly:true,
  138. columns: [
  139. {
  140. style :"text-align:center",
  141. text: 'ID',
  142. width: 0,
  143. hidden : true,
  144. dataIndex: 'bar_id',
  145. ignore: true,
  146. },{
  147. style :"text-align:center",
  148. text: '新条码',
  149. flex : 7,
  150. dataIndex: 'bar_code',
  151. logic:"necessaryField",
  152. editor: {
  153. xtype: "displayfield",
  154. hideTrigger: true,
  155. store: null,
  156. queryMode: "local"
  157. }
  158. },{
  159. style :"text-align:center",
  160. text: '数量',
  161. logic:"necessaryField",
  162. flex : 3,
  163. dataIndex: 'bar_remain',
  164. editor: {
  165. xtype: "displayfield",
  166. hideTrigger: true,
  167. store: null,
  168. queryMode: "local"
  169. },
  170. xtype: 'numbercolumn',
  171. align: "left",
  172. format: ""
  173. }],
  174. GridUtil: Ext.create('erp.util.GridUtil'),
  175. listeners:{
  176. beforeedit:function(editor, e, eOpts){
  177. return false;//不可编辑
  178. }
  179. },
  180. selType:'checkboxmodel',
  181. dbfinds: [],
  182. columnLines: true,
  183. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  184. clicksToEdit: 10
  185. }),
  186. Ext.create('erp.view.core.plugin.CopyPasteMenu')],
  187. store: new Ext.data.Store({
  188. fields: ['bar_id', 'bar_code', 'bar_remain'],
  189. data: []
  190. }),
  191. onGridItemClick: function(selModel, record){// grid行选择
  192. this.GridUtil.onGridItemClick(selModel, record);
  193. },
  194. /*necessaryFields:['bar_code', 'bar_remain','bar_id'],*/
  195. }],
  196. buttons : [{
  197. text : '确定',
  198. id :'confirmcab',
  199. handler : function(btn) {
  200. var barArr = new Array(); //getComponent
  201. var remains = 0;
  202. var count = 0; //上面form的数据
  203. var number = Ext.getCmp('barNumber').value;
  204. if(number == null || number ==''){
  205. Ext.Msg.alert('温馨提示',
  206. '请输入拆分数量');
  207. return;
  208. }
  209. var grid = Ext.getCmp('grid1');
  210. var items = grid.getStore().data.items;
  211. Ext.each(items, function(item, index){
  212. if(this.data['bar_remain'] == '0'){
  213. barArr.push(""+items[index].data['bar_code']+"");
  214. }
  215. });
  216. if(barArr != null && barArr != ''){
  217. showError("条码"+barArr +"不存在或者状态无效");
  218. return;
  219. }
  220. Ext.each(items, function(item, index){
  221. if(this.data['bar_code'] != null && this.data['bar_code'] != ''
  222. && this.data['bar_remain'] != '0' && this.data['bar_remain'] != 0){
  223. barArr.push("'"+items[index].data['bar_code']+"'");
  224. remains +=items[index].data['bar_remain'];
  225. count++;
  226. }
  227. });
  228. var re=/^\d+(,\d+)*$/;
  229. var sum=0;
  230. number=number.replace(/,/ig,',');
  231. if(count ==1){
  232. var count1= number.length - number.replace(',',"").length;
  233. if(count1 == 0 && (number == remains)){
  234. Ext.Msg.alert('温馨提示',
  235. '不允许拆将条码拆分为本身');
  236. return;
  237. }
  238. }
  239. if(re.test(number)){
  240. var str = new Array();
  241. str = number.split( "," );
  242. for (var i = 0; i < str.length; i++ )
  243. {
  244. sum+=parseFloat(str[i]);
  245. }}else{
  246. boolb = false;
  247. showError("请输入正确的拆分数量,例如20,30,40");
  248. return;
  249. }
  250. if (sum <= 0) {
  251. Ext.Msg.alert('温馨提示',
  252. '拆分数量必须大于0');
  253. return;
  254. }else if(sum != remains){
  255. Ext.Msg.alert('温馨提示',
  256. '需拆分数量之和必须等于条码原数量之和');
  257. return;
  258. }
  259. //暂时去掉
  260. /*if(remains>sum){
  261. number = number+','+(remains-sum);
  262. }*/
  263. if (barArr) {
  264. me.combiningAndBreaking(barArr,remains,number);
  265. }
  266. }
  267. },{
  268. xtype: 'checkboxfield',
  269. name: 'autoPrint',
  270. id:'autoPrint',
  271. boxLabel: '自动打印条码',
  272. style:'margin-left:50px',
  273. checked:true
  274. },{
  275. text : '打印新条码',
  276. id : 'printNew',
  277. iconCls: 'x-button-icon-print',
  278. disabled : true,
  279. handler : function(btn) {
  280. var me = this;
  281. caller = 'Barcode!BaPrint';
  282. me.idS = '';
  283. var lps_Barcaller = 'Barcode!Print';
  284. var bool = false;
  285. var grid = Ext.getCmp('grid');
  286. var items = grid.selModel.getSelection();
  287. var idArray = [];
  288. Ext.each(items, function(item, index){
  289. if(this.data['bar_id'] != null && this.data['bar_id'] != ''
  290. && this.data['bar_id'] != '0' && this.data['bar_id'] != 0){
  291. bool = true;
  292. idArray.push(this.data['bar_id']);
  293. }
  294. });
  295. if(bool){
  296. var idS = idArray.toString();
  297. //me.print(idS,lps_Barcaller);
  298. me.idS = idS;
  299. me.zplPrint(lps_Barcaller);
  300. }else{
  301. showError("没有需要打印的行,请先拆分出新条码");
  302. }
  303. },
  304. zplPrint:function(caller){//zpl打印语句
  305. // 获取选择打印文件,用户选择分辨率,和打印机
  306. var me = this;
  307. if(!me.window){
  308. setup_web_print(function(printers,selected_printer){
  309. me.window = Ext.create('Ext.window.Window', {
  310. autoShow: true,
  311. title: '选择打印模板',
  312. width: 400,
  313. height: 300,
  314. layout: 'anchor',
  315. id :'template-win2',
  316. closeAction:'hide',
  317. items: [{
  318. anchor:'100% 100%',
  319. xtype:'form',
  320. buttonAlign : 'center',
  321. items:[{
  322. xtype: 'combo',
  323. id: 'printers',
  324. fieldLabel: '打印机列表',
  325. store: Ext.create('Ext.data.Store', {
  326. autoLoad: true,
  327. fields: ['display', 'value'],
  328. data:printers
  329. }),
  330. queryMode: 'local',
  331. displayField: 'display',
  332. valueField: 'value',
  333. width:361,
  334. allowBlank:false,
  335. value:selected_printer.uid,
  336. selectOnFocus:true,//用户不能自己输入,只能选择列表中有的记录
  337. style:'margin-left:15px;margin-top:15px;'
  338. },{
  339. xtype: 'combo',
  340. id: 'dpi',
  341. fieldLabel: '打印机分辨率',
  342. style:'margin-left:15px;margin-top:15px;',
  343. store: Ext.create('Ext.data.Store', {
  344. fields: ['display', 'value'],
  345. data : [{"display": '203dpi', "value": '203'},
  346. {"display": '300dpi', "value": '300'},
  347. {"display": '600dpi', "value": '600'},
  348. {"display": '1200dpi', "value": '1200'}]
  349. }),
  350. displayField: 'display',
  351. valueField: 'value',
  352. queryMode: 'local',
  353. value:resolutionCookie||'203',
  354. width:361,
  355. allowBlank:false,
  356. selectOnFocus:true//用户不能自己输入,只能选择列表中有的记录
  357. }]
  358. }],
  359. buttonAlign: 'center',
  360. buttons: [{
  361. text: '确定',
  362. handler: function(b) {
  363. var printers = Ext.getCmp('printers');
  364. var dpi = Ext.getCmp('dpi');
  365. if(printers && printers.value!= null){
  366. me.zebraPrint(caller,printers.value,dpi.value);
  367. b.ownerCt.ownerCt.close();
  368. }else{
  369. alert("请选择打印机 ");
  370. }
  371. }
  372. }, {
  373. text: '取消',
  374. handler: function(b) {
  375. b.ownerCt.ownerCt.close();
  376. }
  377. }]
  378. });
  379. });
  380. }else if(me.window.isHidden()){
  381. me.window.show();
  382. }
  383. },
  384. zebraPrint:function(caller,printer,dpi){
  385. var me = this;
  386. var params = new Object();
  387. params['condition'] = 'bar_id in ('+me.idS +")";
  388. sendData(caller,printer,dpi,params);
  389. }
  390. },
  391. {
  392. text : '取消',
  393. id : 'cancle',
  394. handler : function(btn) {
  395. var win = btn.ownerCt.ownerCt;
  396. win.close();
  397. }
  398. }
  399. ],
  400. listeners : {/*
  401. beforerender:function(){
  402. Ext.each(items, function(item, index){
  403. if(this.data['bar_id'] != null && this.data['bar_id'] != ''
  404. && this.data['bar_id'] != '0' && this.data['bar_id'] != 0){
  405. id = this.data['bar_id'];
  406. or_barcode = this.data['bar_code'];
  407. or_baremain = this.data['bar_remain'];
  408. var barcode = 'barcode'+index;
  409. var bar_remain = 'bar_remain'+index;
  410. Ext.getCmp(barcode).setValue(or_barcode);
  411. Ext.getCmp(bar_remain).setValue(or_baremain);
  412. }
  413. });
  414. var grid = Ext.getCmp("grid");
  415. if(grid.selModel && grid.selModel.views == null){
  416. grid.selModel.views = [];
  417. }
  418. }
  419. */}
  420. });
  421. win.show();
  422. /*win.on("close",function(){
  423. var grid = Ext.getCmp("batchDealGridPanel");
  424. if(grid){
  425. caller = 'BarcodeStatus!query';
  426. grid.ownerCt.down('form').onQuery();
  427. }
  428. });*/
  429. /* }else{
  430. showError("没有勾选需要拆分的行,请勾选");
  431. }*/
  432. },
  433. combiningAndBreaking: function(ids,remains,number){ //对应id集,总数量,需拆分的数量集合
  434. var me=this;
  435. ids = ids.toString();
  436. me.setLoading(true);
  437. Ext.Ajax.request({
  438. url : basePath +'scm/reserve/combiningAndBreaking.action',
  439. params: {
  440. ids:ids,
  441. total_remain: remains,
  442. every_remain: number
  443. },
  444. method : 'post',
  445. timeout: 360000,
  446. callback : function(options,success,response){
  447. me.setLoading(false);
  448. var res = new Ext.decode(response.responseText);
  449. if(res.success){
  450. var data = res.data;
  451. Ext.MessageBox.alert('提示', '条码拆分成功!',function(){
  452. var ids = new Array();
  453. for(var i= 0;i<data.length;i++){
  454. ids.push(data[i].BAR_ID);
  455. }
  456. me.loadData(ids);
  457. Ext.getCmp('printNew').enable();
  458. Ext.getCmp('confirmcab').setDisabled(true);
  459. var status = Ext.getCmp('autoPrint').value;
  460. if(status){
  461. var lps_Barcaller = 'Barcode!Print';
  462. var grid = Ext.getCmp("grid");
  463. var items = grid.store.data.items;
  464. var idArray = [];
  465. Ext.each(items, function(item, index){
  466. var id=item.data['bar_id'];
  467. if(id != null && id != ''&& id != '0' && id != 0){
  468. idArray.push(id);
  469. }
  470. })
  471. var idS = idArray.toString();
  472. //me.print(idS,lps_Barcaller);
  473. me.idS = idS;
  474. me.zplPrint(lps_Barcaller);
  475. }
  476. });
  477. }else if(res.exceptionInfo){
  478. showError(res.exceptionInfo);return;
  479. }
  480. }
  481. });
  482. },
  483. selModel: Ext.create('Ext.selection.CheckboxModel',{
  484. checkOnly : true,
  485. ignoreRightMouseSelection : false,
  486. listeners:{
  487. selectionchange:function(selModel, selected, options){
  488. selModel.view.ownerCt.summary();
  489. selModel.view.ownerCt.selectall = false;
  490. }
  491. },
  492. getEditor: function(){
  493. return null;
  494. },
  495. onHeaderClick: function(headerCt, header, e) {
  496. if (header.isCheckerHd) {
  497. e.stopEvent();
  498. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  499. if (isChecked && this.getSelection().length > 0) {//先全选,再筛选后再全选时,无法响应的bug
  500. this.deselectAll(true);
  501. } else {
  502. this.selectAll(true);
  503. this.view.ownerCt.selectall = true;
  504. }
  505. }
  506. }
  507. }),
  508. setLoading : function(b) {
  509. var mask = this.mask;
  510. if (!mask) {
  511. this.mask = mask = new Ext.LoadMask(Ext.getBody(), {
  512. msg : "处理中,请稍后...",
  513. msgCls : 'z-index:10000;'
  514. });
  515. }
  516. if (b)
  517. mask.show();
  518. else
  519. mask.hide();
  520. },
  521. zplPrint:function(caller){//zpl打印语句
  522. // 获取选择打印文件,用户选择分辨率,和打印机
  523. var me = this;
  524. if(!me.window){
  525. setup_web_print(function(printers,selected_printer){
  526. me.window = Ext.create('Ext.window.Window', {
  527. autoShow: true,
  528. title: '选择打印模板',
  529. width: 400,
  530. height: 300,
  531. layout: 'anchor',
  532. id :'template-win3',
  533. closeAction:'hide',
  534. items: [{
  535. anchor:'100% 100%',
  536. xtype:'form',
  537. buttonAlign : 'center',
  538. items:[{
  539. xtype: 'combo',
  540. id: 'printers',
  541. fieldLabel: '打印机列表',
  542. store: Ext.create('Ext.data.Store', {
  543. autoLoad: true,
  544. fields: ['display', 'value'],
  545. data:printers
  546. }),
  547. queryMode: 'local',
  548. displayField: 'display',
  549. valueField: 'value',
  550. width:361,
  551. allowBlank:false,
  552. value:selected_printer.uid,
  553. selectOnFocus:true,//用户不能自己输入,只能选择列表中有的记录
  554. style:'margin-left:15px;margin-top:15px;'
  555. },{
  556. xtype: 'combo',
  557. id: 'dpi',
  558. fieldLabel: '打印机分辨率',
  559. style:'margin-left:15px;margin-top:15px;',
  560. store: Ext.create('Ext.data.Store', {
  561. fields: ['display', 'value'],
  562. data : [{"display": '203dpi', "value": '203'},
  563. {"display": '300dpi', "value": '300'},
  564. {"display": '600dpi', "value": '600'},
  565. {"display": '1200dpi', "value": '1200'}]
  566. }),
  567. displayField: 'display',
  568. valueField: 'value',
  569. queryMode: 'local',
  570. value:resolutionCookie||'203',
  571. width:361,
  572. allowBlank:false,
  573. selectOnFocus:true//用户不能自己输入,只能选择列表中有的记录
  574. }]
  575. }],
  576. buttonAlign: 'center',
  577. buttons: [{
  578. text: '确定',
  579. handler: function(b) {
  580. var printers = Ext.getCmp('printers');
  581. var dpi = Ext.getCmp('dpi');
  582. if(printers && printers.value!= null){
  583. me.zebraPrint(caller,printers.value,dpi.value);
  584. b.ownerCt.ownerCt.close();
  585. }else{
  586. alert("请选择打印机 ");
  587. }
  588. }
  589. }, {
  590. text: '取消',
  591. handler: function(b) {
  592. b.ownerCt.ownerCt.close();
  593. }
  594. }]
  595. });
  596. });
  597. }else if(me.window.isHidden()){
  598. me.window.show();
  599. }
  600. },
  601. zebraPrint:function(caller,printer,dpi){
  602. var me = this;
  603. var params = new Object();
  604. params['condition'] = 'bar_id in ('+me.idS +")";
  605. sendData(caller,printer,dpi,params);
  606. },
  607. loadData: function(value) {
  608. var me = this;
  609. me.getFieldsValues("barcode",
  610. 'bar_id, bar_code, bar_remain', "bar_id in (" +value+") order by bar_id desc", [], function(data){
  611. var datas = Ext.JSON.decode(data), _datas = [];
  612. var grid = Ext.getCmp('grid');
  613. if(datas.length > 0) {
  614. var keys = Ext.Object.getKeys(datas[0]);
  615. Ext.Array.each(datas, function(d){
  616. var obj = {};
  617. Ext.Array.each(keys, function(key){
  618. obj[key.toLowerCase()] = d[key];
  619. });
  620. _datas.push(obj);
  621. });
  622. }
  623. store = grid.getStore();
  624. _datas.length > 0 && grid.store.loadData(_datas);
  625. grid.store.each(function(){
  626. this.dirty = true;
  627. });
  628. });
  629. },
  630. getFieldsValues: function(caller, fields, condition, data, fn){
  631. Ext.Ajax.request({
  632. url : basePath + 'common/getFieldsDatas.action',
  633. async: false,
  634. params: {
  635. caller: caller,
  636. fields: fields,
  637. condition: condition
  638. },
  639. method : 'post',
  640. callback : function(options,success,response){
  641. var localJson = new Ext.decode(response.responseText);
  642. if(localJson.exceptionInfo){
  643. showError(localJson.exceptionInfo);return;
  644. }
  645. if(localJson.success){
  646. data = localJson.data;
  647. fn && fn.call(null, localJson.data);
  648. }
  649. }
  650. });
  651. },
  652. add1EmptyItems: function(grid, count, append){
  653. var store = grid.store,
  654. items = store.data.items, arr = new Array();
  655. var detno = grid.detno;
  656. count = count || 1;
  657. append = append === undefined ? true : false;
  658. if(typeof grid.sequenceFn === 'function')
  659. grid.sequenceFn.call(grid, count);
  660. else {
  661. if(detno){
  662. var index = items.length == 0 ? 0 : Number(store.last().get(detno));
  663. for(var i=0;i < count;i++ ){
  664. var o = new Object();
  665. o[detno] = index + i + 1;
  666. arr.push(o);
  667. }
  668. } else {
  669. for(var i=0;i < count;i++ ){
  670. var o = new Object();
  671. arr.push(o);
  672. }
  673. }
  674. store.loadData(arr, append);
  675. var i = 0;
  676. store.each(function(item, x){
  677. if(item.index) {
  678. i = item.index;
  679. } else {
  680. if (i) {
  681. item.index = i++;
  682. } else {
  683. item.index = x;
  684. }
  685. }
  686. });
  687. }
  688. },
  689. });