vxe-table 3.12.16 → 3.12.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/edit/mixin.js +5 -5
  6. package/es/table/src/body.js +60 -47
  7. package/es/table/src/methods.js +123 -24
  8. package/es/table/src/table.js +101 -23
  9. package/es/table/style.css +26 -0
  10. package/es/table/style.min.css +1 -1
  11. package/es/ui/index.js +1 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-table/style.css +26 -0
  14. package/es/vxe-table/style.min.css +1 -1
  15. package/lib/index.css +1 -1
  16. package/lib/index.min.css +1 -1
  17. package/lib/index.umd.js +350 -113
  18. package/lib/index.umd.min.js +1 -1
  19. package/lib/style.css +1 -1
  20. package/lib/style.min.css +1 -1
  21. package/lib/table/module/edit/mixin.js +10 -5
  22. package/lib/table/module/edit/mixin.min.js +1 -1
  23. package/lib/table/src/body.js +71 -59
  24. package/lib/table/src/body.min.js +1 -1
  25. package/lib/table/src/methods.js +141 -23
  26. package/lib/table/src/methods.min.js +1 -1
  27. package/lib/table/src/table.js +126 -24
  28. package/lib/table/src/table.min.js +1 -1
  29. package/lib/table/style/style.css +26 -0
  30. package/lib/table/style/style.min.css +1 -1
  31. package/lib/ui/index.js +1 -1
  32. package/lib/ui/index.min.js +1 -1
  33. package/lib/ui/src/log.js +1 -1
  34. package/lib/ui/src/log.min.js +1 -1
  35. package/lib/vxe-table/style/style.css +26 -0
  36. package/lib/vxe-table/style/style.min.css +1 -1
  37. package/package.json +1 -1
  38. package/packages/table/module/edit/mixin.ts +5 -5
  39. package/packages/table/src/body.ts +62 -48
  40. package/packages/table/src/methods.ts +125 -24
  41. package/packages/table/src/table.ts +108 -24
  42. package/styles/components/table.scss +26 -0
  43. /package/es/{iconfont.1739333092714.ttf → iconfont.1739428244406.ttf} +0 -0
  44. /package/es/{iconfont.1739333092714.woff → iconfont.1739428244406.woff} +0 -0
  45. /package/es/{iconfont.1739333092714.woff2 → iconfont.1739428244406.woff2} +0 -0
  46. /package/lib/{iconfont.1739333092714.ttf → iconfont.1739428244406.ttf} +0 -0
  47. /package/lib/{iconfont.1739333092714.woff → iconfont.1739428244406.woff} +0 -0
  48. /package/lib/{iconfont.1739333092714.woff2 → iconfont.1739428244406.woff2} +0 -0
@@ -393,7 +393,8 @@ function updateAfterListIndex($xeTable) {
393
393
  level: 0,
394
394
  height: 0,
395
395
  resizeHeight: 0,
396
- oTop: 0
396
+ oTop: 0,
397
+ expandHeight: 0
397
398
  };
398
399
  fullAllDataRowIdData[rowid] = rest;
399
400
  fullDataRowIdData[rowid] = rest;
@@ -445,7 +446,8 @@ function updateAfterDataIndex($xeTable) {
445
446
  level: 0,
446
447
  height: 0,
447
448
  resizeHeight: 0,
448
- oTop: 0
449
+ oTop: 0,
450
+ expandHeight: 0
449
451
  };
450
452
  fullAllDataRowIdData[rowid] = rest;
451
453
  fullDataRowIdData[rowid] = rest;
@@ -551,6 +553,7 @@ function updateStyle($xeTable) {
551
553
  const emptyPlaceholderElem = $xeTable.$refs.refEmptyPlaceholder;
552
554
  const cellOffsetWidth = $xeTable.computeCellOffsetWidth;
553
555
  const mouseOpts = $xeTable.computeMouseOpts;
556
+ const expandOpts = $xeTable.computeExpandOpts;
554
557
  const bodyWrapperElem = (0, _util.getRefElem)(elemStore['main-body-wrapper']);
555
558
  const bodyTableElem = (0, _util.getRefElem)(elemStore['main-body-table']);
556
559
  if (emptyPlaceholderElem) {
@@ -620,6 +623,11 @@ function updateStyle($xeTable) {
620
623
  yBottomCornerEl.style.top = `${headerHeight + bodyHeight}px`;
621
624
  yBottomCornerEl.style.display = footerHeight ? 'block' : '';
622
625
  }
626
+ const rowExpandEl = $xeTable.$refs.refRowExpandElem;
627
+ if (rowExpandEl) {
628
+ rowExpandEl.style.height = `${bodyHeight}px`;
629
+ rowExpandEl.style.top = `${headerHeight}px`;
630
+ }
623
631
  containerList.forEach((name, index) => {
624
632
  const fixedType = index > 0 ? name : '';
625
633
  const layoutList = ['header', 'body', 'footer'];
@@ -729,7 +737,7 @@ function updateStyle($xeTable) {
729
737
  let isOptimizeMode = false;
730
738
  // 如果是使用优化模式
731
739
  if (scrollXLoad || scrollYLoad || isAllOverflow) {
732
- if (expandColumn || spanMethod || footerSpanMethod) {
740
+ if (expandColumn && expandOpts.mode !== 'fixed' || spanMethod || footerSpanMethod) {
733
741
  // 如果不支持优化模式
734
742
  } else {
735
743
  isOptimizeMode = true;
@@ -855,6 +863,15 @@ function updateStyle($xeTable) {
855
863
  }
856
864
  return $xeTable.$nextTick();
857
865
  }
866
+ function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
867
+ const reactData = $xeTable;
868
+ const {
869
+ rowHeightStore
870
+ } = reactData;
871
+ if (sizeEl && sizeEl.clientHeight) {
872
+ rowHeightStore[sizeKey] = sizeEl.clientHeight;
873
+ }
874
+ }
858
875
  function computeRowHeight($xeTable) {
859
876
  const reactData = $xeTable;
860
877
  const {
@@ -890,7 +907,9 @@ function handleVirtualYVisible($xeTable, currScrollTop) {
890
907
  const reactData = $xeTable;
891
908
  const internalData = $xeTable;
892
909
  const {
893
- isAllOverflow
910
+ isAllOverflow,
911
+ expandColumn,
912
+ rowExpandedMaps
894
913
  } = reactData;
895
914
  const {
896
915
  elemStore,
@@ -898,6 +917,7 @@ function handleVirtualYVisible($xeTable, currScrollTop) {
898
917
  afterFullData,
899
918
  fullAllDataRowIdData
900
919
  } = internalData;
920
+ const expandOpts = $xeTable.computeExpandOpts;
901
921
  const rowOpts = $xeTable.computeRowOpts;
902
922
  const cellOpts = $xeTable.computeCellOpts;
903
923
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
@@ -910,7 +930,7 @@ function handleVirtualYVisible($xeTable, currScrollTop) {
910
930
  let offsetTop = 0;
911
931
  let visibleSize = 0;
912
932
  const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height;
913
- if (!isCustomCellHeight && isAllOverflow) {
933
+ if (!isCustomCellHeight && !expandColumn && isAllOverflow) {
914
934
  toVisibleIndex = Math.floor(scrollTop / defaultRowHeight);
915
935
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
916
936
  } else {
@@ -928,6 +948,10 @@ function handleVirtualYVisible($xeTable, currScrollTop) {
928
948
  break;
929
949
  }
930
950
  }
951
+ // 是否展开行
952
+ if (expandColumn && rowExpandedMaps[rowid]) {
953
+ offsetTop += rowRest.expandHeight || expandOpts.height || 0;
954
+ }
931
955
  }
932
956
  }
933
957
  return {
@@ -1627,9 +1651,18 @@ function handleRecalculateLayout($xeTable, reFull) {
1627
1651
  if (!el || !el.clientWidth) {
1628
1652
  return $xeTable.$nextTick();
1629
1653
  }
1654
+ const varEl = $xeTable.$refs.refVarElem;
1655
+ if (varEl) {
1656
+ const [defEl, mediumEl, smallEl, miniEl] = varEl.children;
1657
+ calcVarRowHeightConfig($xeTable, 'default', defEl);
1658
+ calcVarRowHeightConfig($xeTable, 'medium', mediumEl);
1659
+ calcVarRowHeightConfig($xeTable, 'small', smallEl);
1660
+ calcVarRowHeightConfig($xeTable, 'mini', miniEl);
1661
+ }
1630
1662
  calcCellWidth($xeTable);
1631
1663
  autoCellWidth($xeTable);
1632
1664
  updateStyle($xeTable);
1665
+ updateRowExpandStyle($xeTable);
1633
1666
  return computeScrollLoad($xeTable).then(() => {
1634
1667
  if (reFull === true) {
1635
1668
  // 初始化时需要在列计算之后再执行优化运算,达到最优显示效果
@@ -1637,6 +1670,7 @@ function handleRecalculateLayout($xeTable, reFull) {
1637
1670
  calcCellWidth($xeTable);
1638
1671
  autoCellWidth($xeTable);
1639
1672
  updateStyle($xeTable);
1673
+ updateRowExpandStyle($xeTable);
1640
1674
  return computeScrollLoad($xeTable);
1641
1675
  }
1642
1676
  });
@@ -2119,7 +2153,7 @@ function calcCellWidth($xeTable) {
2119
2153
  el.removeAttribute('data-calc-col');
2120
2154
  }
2121
2155
  }
2122
- const handleUpdateColResize = ($xeTable, evnt, params) => {
2156
+ function handleUpdateColResize($xeTable, evnt, params) {
2123
2157
  $xeTable.analyColumnWidth();
2124
2158
  $xeTable.recalculate(true).then(() => {
2125
2159
  $xeTable.saveCustomStore('update:width');
@@ -2129,8 +2163,8 @@ const handleUpdateColResize = ($xeTable, evnt, params) => {
2129
2163
  $xeTable.dispatchEvent('resizable-change', params, evnt);
2130
2164
  setTimeout(() => $xeTable.recalculate(true), 300);
2131
2165
  });
2132
- };
2133
- const handleUpdateRowResize = ($xeTable, evnt, params) => {
2166
+ }
2167
+ function handleUpdateRowResize($xeTable, evnt, params) {
2134
2168
  const reactData = $xeTable;
2135
2169
  reactData.resizeHeightFlag++;
2136
2170
  $xeTable.recalculate(true).then(() => {
@@ -2138,7 +2172,74 @@ const handleUpdateRowResize = ($xeTable, evnt, params) => {
2138
2172
  $xeTable.dispatchEvent('row-resizable-change', params, evnt);
2139
2173
  setTimeout(() => $xeTable.recalculate(true), 300);
2140
2174
  });
2141
- };
2175
+ }
2176
+ function updateRowExpandStyle($xeTable) {
2177
+ const reactData = $xeTable;
2178
+ const internalData = $xeTable;
2179
+ const {
2180
+ expandColumn,
2181
+ scrollYLoad,
2182
+ rowExpandedMaps
2183
+ } = reactData;
2184
+ const expandOpts = $xeTable.computeExpandOpts;
2185
+ const rowOpts = $xeTable.computeRowOpts;
2186
+ const cellOpts = $xeTable.computeCellOpts;
2187
+ const defaultRowHeight = $xeTable.computeDefaultRowHeight;
2188
+ const {
2189
+ mode
2190
+ } = expandOpts;
2191
+ if (expandColumn && mode === 'fixed') {
2192
+ const {
2193
+ elemStore,
2194
+ afterFullData,
2195
+ fullAllDataRowIdData
2196
+ } = internalData;
2197
+ const rowExpandEl = $xeTable.$refs.refRowExpandElem;
2198
+ const bodyScrollElem = (0, _util.getRefElem)(elemStore['main-body-scroll']);
2199
+ if (rowExpandEl && bodyScrollElem) {
2200
+ let isUpdateHeight = false;
2201
+ if (scrollYLoad) {
2202
+ let offsetTop = 0;
2203
+ for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
2204
+ const row = afterFullData[rIndex];
2205
+ const rowid = (0, _util.getRowid)($xeTable, row);
2206
+ const rowRest = fullAllDataRowIdData[rowid] || {};
2207
+ rowRest.oTop = offsetTop;
2208
+ offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
2209
+ // 是否展开行
2210
+ if (expandColumn && rowExpandedMaps[rowid]) {
2211
+ offsetTop += rowRest.expandHeight || expandOpts.height || 0;
2212
+ }
2213
+ }
2214
+ }
2215
+ _xeUtils.default.arrayEach(rowExpandEl.children, reEl => {
2216
+ const expandEl = reEl;
2217
+ const rowid = expandEl.getAttribute('rowid') || '';
2218
+ const rowRest = fullAllDataRowIdData[rowid];
2219
+ if (rowRest) {
2220
+ const expandHeight = expandEl.offsetHeight + 1;
2221
+ if (scrollYLoad) {
2222
+ expandEl.style.top = (0, _dom.toCssUnit)(rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight));
2223
+ } else {
2224
+ const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
2225
+ if (trEl) {
2226
+ expandEl.style.top = (0, _dom.toCssUnit)(trEl.offsetTop + trEl.offsetHeight);
2227
+ }
2228
+ }
2229
+ if (!isUpdateHeight) {
2230
+ if (rowRest.expandHeight !== expandHeight) {
2231
+ isUpdateHeight = true;
2232
+ }
2233
+ }
2234
+ rowRest.expandHeight = expandHeight;
2235
+ }
2236
+ });
2237
+ if (isUpdateHeight) {
2238
+ reactData.rowExpandHeightFlag++;
2239
+ }
2240
+ }
2241
+ }
2242
+ }
2142
2243
  const Methods = {
2143
2244
  callSlot(slotFunc, params, h, vNodes) {
2144
2245
  if (slotFunc) {
@@ -2567,7 +2668,8 @@ const Methods = {
2567
2668
  level,
2568
2669
  height: 0,
2569
2670
  resizeHeight: 0,
2570
- oTop: 0
2671
+ oTop: 0,
2672
+ expandHeight: 0
2571
2673
  };
2572
2674
  }
2573
2675
  cacheItem.row = row;
@@ -2673,7 +2775,8 @@ const Methods = {
2673
2775
  level: parentLevel + nodes.length,
2674
2776
  height: 0,
2675
2777
  resizeHeight: 0,
2676
- oTop: 0
2778
+ oTop: 0,
2779
+ expandHeight: 0
2677
2780
  };
2678
2781
  fullDataRowIdData[rowid] = rest;
2679
2782
  fullAllDataRowIdData[rowid] = rest;
@@ -4778,6 +4881,7 @@ const Methods = {
4778
4881
  const el = $xeTable.$refs.refElem;
4779
4882
  if (el && el.clientWidth) {
4780
4883
  autoCellWidth($xeTable);
4884
+ updateRowExpandStyle($xeTable);
4781
4885
  }
4782
4886
  if (rceTimeout) {
4783
4887
  clearTimeout(rceTimeout);
@@ -9157,6 +9261,7 @@ const Methods = {
9157
9261
  isRight,
9158
9262
  direction
9159
9263
  }, params);
9264
+ updateRowExpandStyle($xeTable);
9160
9265
  checkLastSyncScroll($xeTable, isRollX, isRollY);
9161
9266
  if (rowOpts.isHover || highlightHoverRow) {
9162
9267
  $xeTable.clearHoverRow();
@@ -9223,6 +9328,7 @@ const Methods = {
9223
9328
  const rightScrollElem = (0, _util.getRefElem)(elemStore['right-body-scroll']);
9224
9329
  const headerScrollElem = (0, _util.getRefElem)(elemStore['main-header-scroll']);
9225
9330
  const footerScrollElem = (0, _util.getRefElem)(elemStore['main-footer-scroll']);
9331
+ const rowExpandEl = $xeTable.$refs.refRowExpandElem;
9226
9332
  if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
9227
9333
  return;
9228
9334
  }
@@ -9269,6 +9375,7 @@ const Methods = {
9269
9375
  (0, _dom.setScrollTop)(rightScrollElem, scrollTop);
9270
9376
  }
9271
9377
  (0, _dom.setScrollTop)(yHandleEl, scrollTop);
9378
+ (0, _dom.setScrollTop)(rowExpandEl, scrollTop);
9272
9379
  if (scrollYLoad) {
9273
9380
  $xeTable.triggerScrollYEvent(evnt);
9274
9381
  }
@@ -9418,6 +9525,7 @@ const Methods = {
9418
9525
  const leftScrollElem = (0, _util.getRefElem)(elemStore['left-body-scroll']);
9419
9526
  const bodyScrollElem = (0, _util.getRefElem)(elemStore['main-body-scroll']);
9420
9527
  const rightScrollElem = (0, _util.getRefElem)(elemStore['right-body-scroll']);
9528
+ const rowExpandEl = $xeTable.$refs.refRowExpandElem;
9421
9529
  if (!xHandleEl) {
9422
9530
  return;
9423
9531
  }
@@ -9453,6 +9561,7 @@ const Methods = {
9453
9561
  (0, _dom.setScrollTop)(bodyScrollElem, currTopNum);
9454
9562
  (0, _dom.setScrollTop)(leftScrollElem, currTopNum);
9455
9563
  (0, _dom.setScrollTop)(rightScrollElem, currTopNum);
9564
+ (0, _dom.setScrollTop)(rowExpandEl, currTopNum);
9456
9565
  if (scrollYLoad) {
9457
9566
  $xeTable.triggerScrollYEvent(evnt);
9458
9567
  }
@@ -9461,16 +9570,6 @@ const Methods = {
9461
9570
  fixed: ''
9462
9571
  });
9463
9572
  });
9464
- // internalData.inWheelScroll = true
9465
- // setScrollTop(yHandleEl, scrollTop)
9466
- // setScrollTop(bodyScrollElem, scrollTop)
9467
- // setScrollTop(leftScrollElem, scrollTop)
9468
- // setScrollTop(rightScrollElem, scrollTop)
9469
- // loadScrollYData($xeTable, scrollTop)
9470
- // $xeTable.handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, {
9471
- // type: 'footer',
9472
- // fixed: ''
9473
- // })
9474
9573
  }
9475
9574
  },
9476
9575
  triggerVirtualScrollXEvent(evnt) {
@@ -9545,6 +9644,7 @@ const Methods = {
9545
9644
  const leftScrollElem = (0, _util.getRefElem)(elemStore['left-body-scroll']);
9546
9645
  const bodyScrollElem = (0, _util.getRefElem)(elemStore['main-body-scroll']);
9547
9646
  const rightScrollElem = (0, _util.getRefElem)(elemStore['right-body-scroll']);
9647
+ const rowExpandEl = $xeTable.$refs.refRowExpandElem;
9548
9648
  const xHandleEl = $xeTable.$refs.refScrollXHandleElem;
9549
9649
  const wrapperEl = evnt.currentTarget;
9550
9650
  const {
@@ -9561,6 +9661,7 @@ const Methods = {
9561
9661
  (0, _dom.setScrollTop)(bodyScrollElem, scrollTop);
9562
9662
  (0, _dom.setScrollTop)(leftScrollElem, scrollTop);
9563
9663
  (0, _dom.setScrollTop)(rightScrollElem, scrollTop);
9664
+ (0, _dom.setScrollTop)(rowExpandEl, scrollTop);
9564
9665
  if (scrollYLoad) {
9565
9666
  $xeTable.triggerScrollYEvent(evnt);
9566
9667
  }
@@ -9576,6 +9677,7 @@ const Methods = {
9576
9677
  isAllOverflow
9577
9678
  } = reactData;
9578
9679
  handleTableColumn($xeTable);
9680
+ $xeTable.updateScrollXSpace();
9579
9681
  return $xeTable.$nextTick().then(() => {
9580
9682
  handleTableColumn($xeTable);
9581
9683
  $xeTable.updateScrollXSpace();
@@ -9643,6 +9745,7 @@ const Methods = {
9643
9745
  updateScrollYData() {
9644
9746
  const $xeTable = this;
9645
9747
  $xeTable.handleTableData();
9748
+ $xeTable.updateScrollYSpace();
9646
9749
  return $xeTable.$nextTick().then(() => {
9647
9750
  $xeTable.handleTableData();
9648
9751
  $xeTable.updateScrollYSpace();
@@ -9655,7 +9758,9 @@ const Methods = {
9655
9758
  const internalData = $xeTable;
9656
9759
  const {
9657
9760
  isAllOverflow,
9658
- scrollYLoad
9761
+ scrollYLoad,
9762
+ expandColumn,
9763
+ rowExpandedMaps
9659
9764
  } = reactData;
9660
9765
  const {
9661
9766
  scrollYStore,
@@ -9667,6 +9772,7 @@ const Methods = {
9667
9772
  const {
9668
9773
  startIndex
9669
9774
  } = scrollYStore;
9775
+ const expandOpts = $xeTable.computeExpandOpts;
9670
9776
  const rowOpts = $xeTable.computeRowOpts;
9671
9777
  const cellOpts = $xeTable.computeCellOpts;
9672
9778
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
@@ -9676,7 +9782,7 @@ const Methods = {
9676
9782
  let ySpaceHeight = 0;
9677
9783
  if (scrollYLoad) {
9678
9784
  const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height;
9679
- if (!isCustomCellHeight && isAllOverflow) {
9785
+ if (!isCustomCellHeight && !expandColumn && isAllOverflow) {
9680
9786
  ySpaceHeight = afterFullData.length * defaultRowHeight;
9681
9787
  topSpaceHeight = Math.max(0, startIndex * defaultRowHeight);
9682
9788
  } else {
@@ -9685,12 +9791,20 @@ const Methods = {
9685
9791
  const rowid = (0, _util.getRowid)($xeTable, row);
9686
9792
  const rowRest = fullAllDataRowIdData[rowid] || {};
9687
9793
  ySpaceHeight += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
9794
+ // 是否展开行
9795
+ if (expandColumn && rowExpandedMaps[rowid]) {
9796
+ ySpaceHeight += rowRest.expandHeight || expandOpts.height || 0;
9797
+ }
9688
9798
  }
9689
9799
  for (let i = 0; i < startIndex; i++) {
9690
9800
  const row = afterFullData[i];
9691
9801
  const rowid = (0, _util.getRowid)($xeTable, row);
9692
9802
  const rowRest = fullAllDataRowIdData[rowid] || {};
9693
9803
  topSpaceHeight += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
9804
+ // 是否展开行
9805
+ if (expandColumn && rowExpandedMaps[rowid]) {
9806
+ topSpaceHeight += rowRest.expandHeight || expandOpts.height || 0;
9807
+ }
9694
9808
  }
9695
9809
  }
9696
9810
  } else {
@@ -9715,6 +9829,10 @@ const Methods = {
9715
9829
  if (scrollYSpaceEl) {
9716
9830
  scrollYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : '';
9717
9831
  }
9832
+ const rowExpandYSpaceEl = $xeTable.$refs.refRowExpandYSpaceElem;
9833
+ if (rowExpandYSpaceEl) {
9834
+ rowExpandYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : '';
9835
+ }
9718
9836
  return $xeTable.$nextTick().then(() => {
9719
9837
  updateStyle($xeTable);
9720
9838
  });