vxe-table 4.0.30 → 4.1.1

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 (127) hide show
  1. package/README.md +1 -0
  2. package/README.zh-TW.md +1 -0
  3. package/es/button/style.css +2 -2
  4. package/es/checkbox/style.css +1 -1
  5. package/es/edit/src/hook.js +2 -2
  6. package/es/export/src/hook.js +24 -0
  7. package/es/export/src/util.js +20 -8
  8. package/es/export/style.css +1 -1
  9. package/es/filter/src/hook.js +2 -2
  10. package/es/filter/style.css +2 -2
  11. package/es/footer/src/footer.js +4 -4
  12. package/es/form/src/form.js +13 -6
  13. package/es/form/src/render.js +4 -4
  14. package/es/grid/src/grid.js +48 -1
  15. package/es/header/src/header.js +7 -5
  16. package/es/header/style.css +3 -10
  17. package/es/input/style.css +4 -4
  18. package/es/menu/style.css +1 -1
  19. package/es/modal/style.css +1 -1
  20. package/es/pager/style.css +2 -2
  21. package/es/radio/style.css +1 -1
  22. package/es/select/src/select.js +5 -5
  23. package/es/select/style.css +1 -1
  24. package/es/style.css +1 -1
  25. package/es/style.min.css +1 -1
  26. package/es/table/src/body.js +18 -14
  27. package/es/table/src/emits.js +1 -0
  28. package/es/table/src/props.js +4 -1
  29. package/es/table/src/table.js +219 -89
  30. package/es/table/style.css +15 -12
  31. package/es/toolbar/style.css +1 -1
  32. package/es/v-x-e-table/src/conf.js +2 -1
  33. package/es/v-x-e-table/src/renderer.js +4 -4
  34. package/es/validator/src/hook.js +12 -5
  35. package/helper/vetur/attributes.json +16 -204
  36. package/helper/vetur/tags.json +3 -65
  37. package/lib/button/style/style.css +2 -2
  38. package/lib/button/style/style.min.css +1 -1
  39. package/lib/checkbox/style/style.css +1 -1
  40. package/lib/checkbox/style/style.min.css +1 -1
  41. package/lib/edit/src/hook.js +2 -2
  42. package/lib/edit/src/hook.min.js +1 -1
  43. package/lib/export/src/hook.js +28 -0
  44. package/lib/export/src/hook.min.js +1 -1
  45. package/lib/export/src/util.js +21 -7
  46. package/lib/export/src/util.min.js +1 -1
  47. package/lib/export/style/style.css +1 -1
  48. package/lib/export/style/style.min.css +1 -1
  49. package/lib/filter/src/hook.js +8 -2
  50. package/lib/filter/src/hook.min.js +1 -1
  51. package/lib/filter/style/style.css +2 -2
  52. package/lib/filter/style/style.min.css +1 -1
  53. package/lib/footer/src/footer.js +4 -4
  54. package/lib/footer/src/footer.min.js +1 -1
  55. package/lib/form/src/form.js +23 -6
  56. package/lib/form/src/form.min.js +1 -1
  57. package/lib/form/src/render.js +4 -4
  58. package/lib/form/src/render.min.js +1 -1
  59. package/lib/grid/src/grid.js +56 -1
  60. package/lib/grid/src/grid.min.js +1 -1
  61. package/lib/header/src/header.js +7 -5
  62. package/lib/header/src/header.min.js +1 -1
  63. package/lib/header/style/style.css +3 -10
  64. package/lib/header/style/style.min.css +1 -1
  65. package/lib/index.umd.js +561 -186
  66. package/lib/index.umd.min.js +1 -1
  67. package/lib/input/style/style.css +4 -4
  68. package/lib/input/style/style.min.css +1 -1
  69. package/lib/menu/style/style.css +1 -1
  70. package/lib/menu/style/style.min.css +1 -1
  71. package/lib/modal/style/style.css +1 -1
  72. package/lib/modal/style/style.min.css +1 -1
  73. package/lib/pager/style/style.css +2 -2
  74. package/lib/pager/style/style.min.css +1 -1
  75. package/lib/radio/style/style.css +1 -1
  76. package/lib/radio/style/style.min.css +1 -1
  77. package/lib/select/src/select.js +5 -5
  78. package/lib/select/style/style.css +1 -1
  79. package/lib/select/style/style.min.css +1 -1
  80. package/lib/style.css +1 -1
  81. package/lib/style.min.css +1 -1
  82. package/lib/table/src/body.js +18 -14
  83. package/lib/table/src/body.min.js +1 -1
  84. package/lib/table/src/emits.js +1 -1
  85. package/lib/table/src/emits.min.js +1 -1
  86. package/lib/table/src/props.js +4 -1
  87. package/lib/table/src/props.min.js +1 -1
  88. package/lib/table/src/table.js +288 -120
  89. package/lib/table/src/table.min.js +1 -1
  90. package/lib/table/style/style.css +15 -12
  91. package/lib/table/style/style.min.css +1 -1
  92. package/lib/toolbar/style/style.css +1 -1
  93. package/lib/toolbar/style/style.min.css +1 -1
  94. package/lib/v-x-e-table/src/conf.js +2 -1
  95. package/lib/v-x-e-table/src/conf.min.js +1 -1
  96. package/lib/v-x-e-table/src/renderer.js +4 -4
  97. package/lib/v-x-e-table/src/renderer.min.js +1 -1
  98. package/lib/validator/src/hook.js +12 -5
  99. package/lib/validator/src/hook.min.js +1 -1
  100. package/package.json +4 -4
  101. package/packages/edit/src/hook.ts +2 -2
  102. package/packages/export/src/hook.ts +24 -0
  103. package/packages/export/src/util.ts +17 -5
  104. package/packages/filter/src/hook.ts +2 -2
  105. package/packages/footer/src/footer.ts +4 -4
  106. package/packages/form/src/form.ts +10 -6
  107. package/packages/form/src/render.ts +4 -4
  108. package/packages/grid/src/grid.ts +48 -1
  109. package/packages/header/src/header.ts +7 -5
  110. package/packages/select/src/select.ts +5 -5
  111. package/packages/table/src/body.ts +18 -14
  112. package/packages/table/src/emits.ts +1 -0
  113. package/packages/table/src/props.ts +4 -1
  114. package/packages/table/src/table.ts +222 -88
  115. package/packages/v-x-e-table/src/conf.ts +2 -1
  116. package/packages/v-x-e-table/src/renderer.ts +4 -4
  117. package/packages/validator/src/hook.ts +9 -5
  118. package/styles/header.scss +9 -12
  119. package/styles/table.scss +9 -3
  120. package/styles/variable.scss +2 -2
  121. package/types/column.d.ts +5 -1
  122. package/types/form-item.d.ts +5 -1
  123. package/types/form.d.ts +5 -1
  124. package/types/grid.d.ts +4 -0
  125. package/types/modal.d.ts +4 -5
  126. package/types/table.d.ts +53 -11
  127. package/types/validator.d.ts +5 -1
@@ -301,6 +301,7 @@ var _default = (0, _vue.defineComponent)({
301
301
  treeExpandedReserveRowMap: {},
302
302
  // 完整数据、条件处理后
303
303
  tableFullData: [],
304
+ treeFullData: [],
304
305
  afterFullData: [],
305
306
  tableSynchData: [],
306
307
  tableSourceData: [],
@@ -362,7 +363,10 @@ var _default = (0, _vue.defineComponent)({
362
363
  };
363
364
  });
364
365
  var computeColumnOpts = (0, _vue.computed)(function () {
365
- return Object.assign({}, props.columnConfig);
366
+ return Object.assign({}, _conf.default.table.columnConfig, props.columnConfig);
367
+ });
368
+ var computeRowOpts = (0, _vue.computed)(function () {
369
+ return Object.assign({}, _conf.default.table.rowConfig, props.rowConfig);
366
370
  });
367
371
  var computeResizableOpts = (0, _vue.computed)(function () {
368
372
  return Object.assign({}, _conf.default.table.resizableConfig, props.resizableConfig);
@@ -559,6 +563,8 @@ var _default = (0, _vue.defineComponent)({
559
563
  computeValidOpts: computeValidOpts,
560
564
  computeSXOpts: computeSXOpts,
561
565
  computeSYOpts: computeSYOpts,
566
+ computeColumnOpts: computeColumnOpts,
567
+ computeRowOpts: computeRowOpts,
562
568
  computeResizableOpts: computeResizableOpts,
563
569
  computeSeqOpts: computeSeqOpts,
564
570
  computeRadioOpts: computeRadioOpts,
@@ -1312,7 +1318,8 @@ var _default = (0, _vue.defineComponent)({
1312
1318
  $index: -1,
1313
1319
  _index: _index,
1314
1320
  items: [],
1315
- parent: null
1321
+ parent: null,
1322
+ level: 0
1316
1323
  };
1317
1324
  }
1318
1325
  });
@@ -1624,7 +1631,7 @@ var _default = (0, _vue.defineComponent)({
1624
1631
  var tWidth = tableWidth; // 如果是使用优化模式
1625
1632
 
1626
1633
  if (fixedType) {
1627
- if (scrollXLoad || scrollYLoad || (allColumnOverflow ? isAllOverflow : allColumnOverflow)) {
1634
+ if (scrollYLoad || (allColumnOverflow ? isAllOverflow : allColumnOverflow)) {
1628
1635
  if (!mergeList.length && !spanMethod && !(keyboardConfig && keyboardOpts.isMerge)) {
1629
1636
  tableColumn = fixedColumn;
1630
1637
  } else {
@@ -1725,16 +1732,10 @@ var _default = (0, _vue.defineComponent)({
1725
1732
  var showTitle = cellOverflow === 'title';
1726
1733
  var showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
1727
1734
  var hasEllipsis_1 = showTitle || showTooltip || showEllipsis;
1728
- var listElem = elemStore[name + "-" + layout + "-list"]; // 滚动的渲染不支持动态行高
1735
+ var listElem = elemStore[name + "-" + layout + "-list"]; // 纵向虚拟滚动不支持动态行高
1729
1736
 
1730
- if (layout === 'header' || layout === 'footer') {
1731
- if (scrollXLoad && !hasEllipsis_1) {
1732
- hasEllipsis_1 = true;
1733
- }
1734
- } else {
1735
- if ((scrollXLoad || scrollYLoad) && !hasEllipsis_1) {
1736
- hasEllipsis_1 = true;
1737
- }
1737
+ if (scrollYLoad && !hasEllipsis_1) {
1738
+ hasEllipsis_1 = true;
1738
1739
  }
1739
1740
 
1740
1741
  if (listElem) {
@@ -2060,7 +2061,7 @@ var _default = (0, _vue.defineComponent)({
2060
2061
  }
2061
2062
 
2062
2063
  if (childRecords) {
2063
- tableMethods.loadChildren(row, childRecords).then(function (childRows) {
2064
+ tableMethods.loadTreeChildren(row, childRecords).then(function (childRows) {
2064
2065
  if (childRows.length && $xetable.findRowIndexOf(treeExpandeds, row) === -1) {
2065
2066
  treeExpandeds.push(row);
2066
2067
  } // 如果当前节点已选中,则展开后子节点也被选中
@@ -2221,30 +2222,67 @@ var _default = (0, _vue.defineComponent)({
2221
2222
  scrollXStore = internalData.scrollXStore,
2222
2223
  lastScrollLeft = internalData.lastScrollLeft,
2223
2224
  lastScrollTop = internalData.lastScrollTop;
2224
- var sYOpts = computeSYOpts.value;
2225
- var tableFullData = datas ? datas.slice(0) : [];
2226
- var scrollYLoad = !treeConfig && !!sYOpts.enabled && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
2225
+ var treeOpts = computeTreeOpts.value;
2226
+ var transform = treeOpts.transform;
2227
+ var treeData = [];
2228
+ var fullData = datas ? datas.slice(0) : [];
2229
+
2230
+ if (treeConfig) {
2231
+ if (transform) {
2232
+ // 树结构自动转换
2233
+ if (process.env.NODE_ENV === 'development') {
2234
+ if (!treeOpts.rowtKey) {
2235
+ (0, _utils.errLog)('vxe.error.reqProp', ['tree-config.rowtKey']);
2236
+ }
2237
+
2238
+ if (!treeOpts.parentKey) {
2239
+ (0, _utils.errLog)('vxe.error.reqProp', ['tree-config.parentKey']);
2240
+ }
2241
+
2242
+ if (!treeOpts.children) {
2243
+ (0, _utils.errLog)('vxe.error.reqProp', ['tree-config.children']);
2244
+ }
2245
+
2246
+ fullData.forEach(function (row) {
2247
+ if (row[treeOpts.children] && row[treeOpts.children].length) {
2248
+ (0, _utils.warnLog)('vxe.error.errConflicts', ['tree-config.transform', "row." + treeOpts.children]);
2249
+ }
2250
+ });
2251
+ }
2252
+
2253
+ treeData = _xeUtils.default.toArrayTree(fullData, {
2254
+ key: treeOpts.rowtKey,
2255
+ parentKey: treeOpts.parentKey,
2256
+ children: treeOpts.children
2257
+ });
2258
+ fullData = treeData.slice(0);
2259
+ } else {
2260
+ treeData = fullData.slice(0);
2261
+ }
2262
+ }
2263
+
2227
2264
  scrollYStore.startIndex = 0;
2228
2265
  scrollYStore.endIndex = 1;
2229
2266
  scrollXStore.startIndex = 0;
2230
2267
  scrollXStore.endIndex = 1;
2231
2268
  editStore.insertList = [];
2232
- editStore.removeList = []; // 全量数据
2269
+ editStore.removeList = [];
2270
+ var sYLoad = updateScrollYStatus(fullData);
2271
+ reactData.scrollYLoad = sYLoad; // 全量数据
2233
2272
 
2234
- internalData.tableFullData = tableFullData; // 缓存数据
2273
+ internalData.tableFullData = fullData;
2274
+ internalData.treeFullData = treeData; // 缓存数据
2235
2275
 
2236
- tablePrivateMethods.updateCache(true); // 原始数据
2276
+ tablePrivateMethods.cacheRowMap(true); // 原始数据
2237
2277
 
2238
- internalData.tableSynchData = datas;
2278
+ internalData.tableSynchData = datas; // 克隆原数据,用于显示编辑状态,与编辑值做对比
2239
2279
 
2240
2280
  if (keepSource) {
2241
- internalData.tableSourceData = _xeUtils.default.clone(tableFullData, true);
2281
+ internalData.tableSourceData = _xeUtils.default.clone(fullData, true);
2242
2282
  }
2243
2283
 
2244
- reactData.scrollYLoad = scrollYLoad;
2245
-
2246
2284
  if (process.env.NODE_ENV === 'development') {
2247
- if (scrollYLoad) {
2285
+ if (sYLoad) {
2248
2286
  if (!(props.height || props.maxHeight)) {
2249
2287
  (0, _utils.errLog)('vxe.error.reqProp', ['table.height | table.max-height | table.scroll-y={enabled: false}']);
2250
2288
  }
@@ -2274,8 +2312,8 @@ var _default = (0, _vue.defineComponent)({
2274
2312
  }).then(function () {
2275
2313
  computeScrollLoad();
2276
2314
  }).then(function () {
2277
- // 是否加载了数据
2278
- if (scrollYLoad) {
2315
+ // 是否启用了虚拟滚动
2316
+ if (sYLoad) {
2279
2317
  scrollYStore.endIndex = scrollYStore.visibleSize;
2280
2318
  }
2281
2319
 
@@ -2286,7 +2324,7 @@ var _default = (0, _vue.defineComponent)({
2286
2324
  return tableMethods.recalculate();
2287
2325
  }).then(function () {
2288
2326
  // 是否变更虚拟滚动
2289
- if (oldScrollYLoad === scrollYLoad) {
2327
+ if (oldScrollYLoad === sYLoad) {
2290
2328
  (0, _util.restoreScrollLocation)($xetable, lastScrollLeft, lastScrollTop).then(resolve);
2291
2329
  } else {
2292
2330
  setTimeout(function () {
@@ -2555,6 +2593,136 @@ var _default = (0, _vue.defineComponent)({
2555
2593
  return tableMethods.recalculate();
2556
2594
  });
2557
2595
  };
2596
+
2597
+ var updateScrollYStatus = function updateScrollYStatus(fullData) {
2598
+ var treeConfig = props.treeConfig;
2599
+ var sYOpts = computeSYOpts.value;
2600
+ var treeOpts = computeTreeOpts.value;
2601
+ var transform = treeOpts.transform;
2602
+ var scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && sYOpts.gt < fullData.length;
2603
+ reactData.scrollYLoad = scrollYLoad;
2604
+ return scrollYLoad;
2605
+ };
2606
+
2607
+ var updateVirtualTreeData = function updateVirtualTreeData() {
2608
+ var oldScrollYLoad = reactData.scrollYLoad,
2609
+ treeExpandeds = reactData.treeExpandeds;
2610
+ var treeFullData = internalData.treeFullData;
2611
+ var treeOpts = computeTreeOpts.value;
2612
+ var fullData = [];
2613
+
2614
+ _xeUtils.default.eachTree(treeFullData, function (row, index, items, path, parent) {
2615
+ if (!parent || $xetable.findRowIndexOf(treeExpandeds, parent) > -1) {
2616
+ fullData.push(row);
2617
+ }
2618
+ }, treeOpts);
2619
+
2620
+ var scrollYLoad = updateScrollYStatus(fullData);
2621
+ internalData.tableFullData = scrollYLoad ? fullData : treeFullData;
2622
+
2623
+ if (scrollYLoad || oldScrollYLoad !== scrollYLoad) {
2624
+ return tablePrivateMethods.handleTableData(true).then(function () {
2625
+ return tableMethods.recalculate();
2626
+ });
2627
+ }
2628
+
2629
+ return (0, _vue.nextTick)();
2630
+ };
2631
+ /**
2632
+ * 展开与收起树节点
2633
+ * @param rows
2634
+ * @param expanded
2635
+ * @returns
2636
+ */
2637
+
2638
+
2639
+ var handleBaseTreeExpand = function handleBaseTreeExpand(rows, expanded) {
2640
+ var treeExpandeds = reactData.treeExpandeds,
2641
+ treeLazyLoadeds = reactData.treeLazyLoadeds,
2642
+ treeNodeColumn = reactData.treeNodeColumn;
2643
+ var fullAllDataRowIdData = internalData.fullAllDataRowIdData,
2644
+ tableFullData = internalData.tableFullData;
2645
+ var treeOpts = computeTreeOpts.value;
2646
+ var reserve = treeOpts.reserve,
2647
+ lazy = treeOpts.lazy,
2648
+ hasChild = treeOpts.hasChild,
2649
+ children = treeOpts.children,
2650
+ accordion = treeOpts.accordion,
2651
+ toggleMethod = treeOpts.toggleMethod;
2652
+ var result = [];
2653
+ var columnIndex = tableMethods.getColumnIndex(treeNodeColumn);
2654
+ var $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn);
2655
+ var validRows = toggleMethod ? rows.filter(function (row) {
2656
+ return toggleMethod({
2657
+ $table: $xetable,
2658
+ expanded: expanded,
2659
+ column: treeNodeColumn,
2660
+ columnIndex: columnIndex,
2661
+ $columnIndex: $columnIndex,
2662
+ row: row
2663
+ });
2664
+ }) : rows;
2665
+
2666
+ if (accordion) {
2667
+ validRows = validRows.length ? [validRows[validRows.length - 1]] : []; // 同一级只能展开一个
2668
+
2669
+ var matchObj_1 = _xeUtils.default.findTree(tableFullData, function (item) {
2670
+ return item === validRows[0];
2671
+ }, treeOpts);
2672
+
2673
+ if (matchObj_1) {
2674
+ _xeUtils.default.remove(treeExpandeds, function (item) {
2675
+ return matchObj_1.items.indexOf(item) > -1;
2676
+ });
2677
+ }
2678
+ }
2679
+
2680
+ if (expanded) {
2681
+ validRows.forEach(function (row) {
2682
+ if ($xetable.findRowIndexOf(treeExpandeds, row) === -1) {
2683
+ var rest = fullAllDataRowIdData[(0, _util.getRowid)($xetable, row)];
2684
+ var isLoad = lazy && row[hasChild] && !rest.treeLoaded && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1; // 是否使用懒加载
2685
+
2686
+ if (isLoad) {
2687
+ result.push(handleAsyncTreeExpandChilds(row));
2688
+ } else {
2689
+ if (row[children] && row[children].length) {
2690
+ treeExpandeds.push(row);
2691
+ }
2692
+ }
2693
+ }
2694
+ });
2695
+ } else {
2696
+ _xeUtils.default.remove(treeExpandeds, function (row) {
2697
+ return $xetable.findRowIndexOf(validRows, row) > -1;
2698
+ });
2699
+ }
2700
+
2701
+ if (reserve) {
2702
+ validRows.forEach(function (row) {
2703
+ return handleTreeExpandReserve(row, expanded);
2704
+ });
2705
+ }
2706
+
2707
+ return Promise.all(result).then(function () {
2708
+ return tableMethods.recalculate();
2709
+ });
2710
+ };
2711
+ /**
2712
+ * 虚拟树的展开与收起
2713
+ * @param rows
2714
+ * @param expanded
2715
+ * @returns
2716
+ */
2717
+
2718
+
2719
+ var handleVirtualTreeExpand = function handleVirtualTreeExpand(rows, expanded) {
2720
+ return handleBaseTreeExpand(rows, expanded).then(function () {
2721
+ return updateVirtualTreeData();
2722
+ }).then(function () {
2723
+ return tableMethods.recalculate();
2724
+ });
2725
+ };
2558
2726
  /**
2559
2727
  * 纵向 Y 可视渲染处理
2560
2728
  */
@@ -2704,7 +2872,7 @@ var _default = (0, _vue.defineComponent)({
2704
2872
  _xeUtils.default.clear(row, undefined);
2705
2873
 
2706
2874
  Object.assign(row, tablePrivateMethods.defineField(Object.assign({}, record)));
2707
- tablePrivateMethods.updateCache(true);
2875
+ tablePrivateMethods.cacheRowMap(true);
2708
2876
  } else {
2709
2877
  _xeUtils.default.destructuring(oRow, _xeUtils.default.clone(row, true));
2710
2878
  }
@@ -2724,15 +2892,16 @@ var _default = (0, _vue.defineComponent)({
2724
2892
  /**
2725
2893
  * 用于树结构,给行数据加载子节点
2726
2894
  */
2727
- loadChildren: function loadChildren(row, childRecords) {
2895
+ loadTreeChildren: function loadTreeChildren(row, childRecords) {
2896
+ var keepSource = props.keepSource;
2897
+ var tableSourceData = internalData.tableSourceData,
2898
+ fullDataRowIdData = internalData.fullDataRowIdData,
2899
+ fullAllDataRowIdData = internalData.fullAllDataRowIdData;
2900
+ var treeOpts = computeTreeOpts.value;
2901
+ var children = treeOpts.children;
2902
+ var rest = fullAllDataRowIdData[(0, _util.getRowid)($xetable, row)];
2903
+ var parentLevel = rest ? rest.level : 0;
2728
2904
  return tableMethods.createData(childRecords).then(function (rows) {
2729
- var keepSource = props.keepSource;
2730
- var fullDataRowIdData = internalData.fullDataRowIdData,
2731
- fullAllDataRowIdData = internalData.fullAllDataRowIdData;
2732
- var tableSourceData = internalData.tableSourceData;
2733
- var treeOpts = computeTreeOpts.value;
2734
- var children = treeOpts.children;
2735
-
2736
2905
  if (keepSource) {
2737
2906
  var rowid_1 = (0, _util.getRowid)($xetable, row);
2738
2907
 
@@ -2745,7 +2914,7 @@ var _default = (0, _vue.defineComponent)({
2745
2914
  }
2746
2915
  }
2747
2916
 
2748
- _xeUtils.default.eachTree(rows, function (childRow, index, items, path, parent) {
2917
+ _xeUtils.default.eachTree(rows, function (childRow, index, items, path, parent, nodes) {
2749
2918
  var rowid = (0, _util.getRowid)($xetable, childRow);
2750
2919
  var rest = {
2751
2920
  row: childRow,
@@ -2754,7 +2923,8 @@ var _default = (0, _vue.defineComponent)({
2754
2923
  _index: -1,
2755
2924
  $index: -1,
2756
2925
  items: items,
2757
- parent: parent
2926
+ parent: parent,
2927
+ level: parentLevel + nodes.length
2758
2928
  };
2759
2929
  fullDataRowIdData[rowid] = rest;
2760
2930
  fullAllDataRowIdData[rowid] = rest;
@@ -4035,12 +4205,24 @@ var _default = (0, _vue.defineComponent)({
4035
4205
  */
4036
4206
  closeFilter: function closeFilter() {
4037
4207
  var filterStore = reactData.filterStore;
4208
+ var column = filterStore.column,
4209
+ visible = filterStore.visible;
4038
4210
  Object.assign(filterStore, {
4039
4211
  isAllSelected: false,
4040
4212
  isIndeterminate: false,
4041
4213
  options: [],
4042
4214
  visible: false
4043
4215
  });
4216
+
4217
+ if (visible) {
4218
+ $xetable.dispatchEvent('filter-visible', {
4219
+ column: column,
4220
+ property: column.property,
4221
+ filterList: $xetable.getCheckedFilters(),
4222
+ visible: false
4223
+ }, null);
4224
+ }
4225
+
4044
4226
  return (0, _vue.nextTick)();
4045
4227
  },
4046
4228
 
@@ -4088,10 +4270,10 @@ var _default = (0, _vue.defineComponent)({
4088
4270
  },
4089
4271
 
4090
4272
  /**
4091
- * 重新加载展开行的内容
4273
+ * 重新懒加载展开行,并展开内容
4092
4274
  * @param {Row} row 行对象
4093
4275
  */
4094
- reloadExpandContent: function reloadExpandContent(row) {
4276
+ lazyExpandContent: function lazyExpandContent(row) {
4095
4277
  var expandLazyLoadeds = reactData.expandLazyLoadeds;
4096
4278
  var expandOpts = computeExpandOpts.value;
4097
4279
  var lazy = expandOpts.lazy;
@@ -4105,6 +4287,18 @@ var _default = (0, _vue.defineComponent)({
4105
4287
  return (0, _vue.nextTick)();
4106
4288
  },
4107
4289
 
4290
+ /**
4291
+ * @deprecated 已废弃,请使用 lazyExpandContent
4292
+ */
4293
+ reloadExpandContent: function reloadExpandContent(row) {
4294
+ if (process.env.NODE_ENV === 'development') {
4295
+ (0, _utils.warnLog)('vxe.error.delFunc', ['reloadExpandContent', 'lazyExpandContent']);
4296
+ } // 即将废弃
4297
+
4298
+
4299
+ return tableMethods.lazyExpandContent(row);
4300
+ },
4301
+
4108
4302
  /**
4109
4303
  * 切换展开行
4110
4304
  */
@@ -4269,23 +4463,38 @@ var _default = (0, _vue.defineComponent)({
4269
4463
  },
4270
4464
 
4271
4465
  /**
4272
- * 重新加载树的子节点
4466
+ * 重新懒加载树节点,并展开该节点
4273
4467
  * @param {Row} row 行对象
4274
4468
  */
4275
- reloadTreeChilds: function reloadTreeChilds(row) {
4469
+ lazyTreeChildren: function lazyTreeChildren(row) {
4276
4470
  var treeLazyLoadeds = reactData.treeLazyLoadeds;
4277
4471
  var treeOpts = computeTreeOpts.value;
4278
- var lazy = treeOpts.lazy,
4472
+ var transform = treeOpts.transform,
4473
+ lazy = treeOpts.lazy,
4279
4474
  hasChild = treeOpts.hasChild;
4280
4475
 
4281
4476
  if (lazy && row[hasChild] && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1) {
4282
4477
  tableMethods.clearTreeExpandLoaded(row).then(function () {
4283
4478
  return handleAsyncTreeExpandChilds(row);
4479
+ }).then(function () {
4480
+ if (transform) {
4481
+ return updateVirtualTreeData();
4482
+ }
4483
+ }).then(function () {
4484
+ return tableMethods.recalculate();
4284
4485
  });
4285
4486
  }
4286
4487
 
4287
4488
  return (0, _vue.nextTick)();
4288
4489
  },
4490
+ reloadTreeChilds: function reloadTreeChilds(row) {
4491
+ if (process.env.NODE_ENV === 'development') {
4492
+ (0, _utils.warnLog)('vxe.error.delFunc', ['reloadTreeChilds', 'lazyTreeChildren']);
4493
+ } // 即将废弃
4494
+
4495
+
4496
+ return tableMethods.lazyTreeChildren(row);
4497
+ },
4289
4498
 
4290
4499
  /**
4291
4500
  * 切换/展开树节点
@@ -4324,21 +4533,8 @@ var _default = (0, _vue.defineComponent)({
4324
4533
  * @param {Boolean} expanded 是否展开
4325
4534
  */
4326
4535
  setTreeExpand: function setTreeExpand(rows, expanded) {
4327
- var treeExpandeds = reactData.treeExpandeds,
4328
- treeLazyLoadeds = reactData.treeLazyLoadeds,
4329
- treeNodeColumn = reactData.treeNodeColumn;
4330
- var fullAllDataRowIdData = internalData.fullAllDataRowIdData,
4331
- tableFullData = internalData.tableFullData;
4332
4536
  var treeOpts = computeTreeOpts.value;
4333
- var reserve = treeOpts.reserve,
4334
- lazy = treeOpts.lazy,
4335
- hasChild = treeOpts.hasChild,
4336
- children = treeOpts.children,
4337
- accordion = treeOpts.accordion,
4338
- toggleMethod = treeOpts.toggleMethod;
4339
- var result = [];
4340
- var columnIndex = tableMethods.getColumnIndex(treeNodeColumn);
4341
- var $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn);
4537
+ var transform = treeOpts.transform;
4342
4538
 
4343
4539
  if (rows) {
4344
4540
  if (!_xeUtils.default.isArray(rows)) {
@@ -4346,61 +4542,12 @@ var _default = (0, _vue.defineComponent)({
4346
4542
  }
4347
4543
 
4348
4544
  if (rows.length) {
4349
- var validRows_2 = toggleMethod ? rows.filter(function (row) {
4350
- return toggleMethod({
4351
- $table: $xetable,
4352
- expanded: expanded,
4353
- column: treeNodeColumn,
4354
- columnIndex: columnIndex,
4355
- $columnIndex: $columnIndex,
4356
- row: row
4357
- });
4358
- }) : rows;
4359
-
4360
- if (accordion) {
4361
- validRows_2 = validRows_2.length ? [validRows_2[validRows_2.length - 1]] : []; // 同一级只能展开一个
4362
-
4363
- var matchObj_1 = _xeUtils.default.findTree(tableFullData, function (item) {
4364
- return item === validRows_2[0];
4365
- }, treeOpts);
4366
-
4367
- if (matchObj_1) {
4368
- _xeUtils.default.remove(treeExpandeds, function (item) {
4369
- return matchObj_1.items.indexOf(item) > -1;
4370
- });
4371
- }
4372
- }
4373
-
4374
- if (expanded) {
4375
- validRows_2.forEach(function (row) {
4376
- if ($xetable.findRowIndexOf(treeExpandeds, row) === -1) {
4377
- var rest = fullAllDataRowIdData[(0, _util.getRowid)($xetable, row)];
4378
- var isLoad = lazy && row[hasChild] && !rest.treeLoaded && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1; // 是否使用懒加载
4379
-
4380
- if (isLoad) {
4381
- result.push(handleAsyncTreeExpandChilds(row));
4382
- } else {
4383
- if (row[children] && row[children].length) {
4384
- treeExpandeds.push(row);
4385
- }
4386
- }
4387
- }
4388
- });
4545
+ // 如果为虚拟树
4546
+ if (transform) {
4547
+ return handleVirtualTreeExpand(rows, expanded);
4389
4548
  } else {
4390
- _xeUtils.default.remove(treeExpandeds, function (row) {
4391
- return $xetable.findRowIndexOf(validRows_2, row) > -1;
4392
- });
4393
- }
4394
-
4395
- if (reserve) {
4396
- validRows_2.forEach(function (row) {
4397
- return handleTreeExpandReserve(row, expanded);
4398
- });
4549
+ return handleBaseTreeExpand(rows, expanded);
4399
4550
  }
4400
-
4401
- return Promise.all(result).then(function () {
4402
- return tableMethods.recalculate();
4403
- });
4404
4551
  }
4405
4552
  }
4406
4553
 
@@ -4421,19 +4568,19 @@ var _default = (0, _vue.defineComponent)({
4421
4568
  */
4422
4569
  clearTreeExpand: function clearTreeExpand() {
4423
4570
  var treeExpandeds = reactData.treeExpandeds;
4424
- var tableFullData = internalData.tableFullData;
4571
+ var treeFullData = internalData.treeFullData;
4425
4572
  var treeOpts = computeTreeOpts.value;
4426
4573
  var reserve = treeOpts.reserve;
4427
4574
  var isExists = treeExpandeds.length;
4428
4575
  reactData.treeExpandeds = [];
4429
4576
 
4430
4577
  if (reserve) {
4431
- _xeUtils.default.eachTree(tableFullData, function (row) {
4578
+ _xeUtils.default.eachTree(treeFullData, function (row) {
4432
4579
  return handleTreeExpandReserve(row, false);
4433
4580
  }, treeOpts);
4434
4581
  }
4435
4582
 
4436
- return (0, _vue.nextTick)().then(function () {
4583
+ return updateVirtualTreeData().then(function () {
4437
4584
  if (isExists) {
4438
4585
  tableMethods.recalculate();
4439
4586
  }
@@ -5420,16 +5567,17 @@ var _default = (0, _vue.defineComponent)({
5420
5567
  * 更新数据行的 Map
5421
5568
  * 牺牲数据组装的耗时,用来换取使用过程中的流畅
5422
5569
  */
5423
- updateCache: function updateCache(isSource) {
5570
+ cacheRowMap: function cacheRowMap(isSource) {
5424
5571
  var treeConfig = props.treeConfig;
5425
5572
  var treeOpts = computeTreeOpts.value;
5426
5573
  var fullDataRowIdData = internalData.fullDataRowIdData,
5427
5574
  fullAllDataRowIdData = internalData.fullAllDataRowIdData,
5428
- tableFullData = internalData.tableFullData;
5575
+ tableFullData = internalData.tableFullData,
5576
+ treeFullData = internalData.treeFullData;
5429
5577
  var rowkey = (0, _util.getRowkey)($xetable);
5430
5578
  var isLazy = treeConfig && treeOpts.lazy;
5431
5579
 
5432
- var handleCache = function handleCache(row, index, items, path, parent) {
5580
+ var handleCache = function handleCache(row, index, items, path, parent, nodes) {
5433
5581
  var rowid = (0, _util.getRowid)($xetable, row);
5434
5582
 
5435
5583
  if ((0, _utils.eqEmptyValue)(rowid)) {
@@ -5449,7 +5597,8 @@ var _default = (0, _vue.defineComponent)({
5449
5597
  _index: -1,
5450
5598
  $index: -1,
5451
5599
  items: items,
5452
- parent: parent
5600
+ parent: parent,
5601
+ level: nodes ? nodes.length - 1 : 0
5453
5602
  };
5454
5603
 
5455
5604
  if (isSource) {
@@ -5466,7 +5615,7 @@ var _default = (0, _vue.defineComponent)({
5466
5615
  fullAllDataRowIdData = internalData.fullAllDataRowIdData = {};
5467
5616
 
5468
5617
  if (treeConfig) {
5469
- _xeUtils.default.eachTree(tableFullData, handleCache, treeOpts);
5618
+ _xeUtils.default.eachTree(treeFullData, handleCache, treeOpts);
5470
5619
  } else {
5471
5620
  tableFullData.forEach(handleCache);
5472
5621
  }
@@ -5868,10 +6017,10 @@ var _default = (0, _vue.defineComponent)({
5868
6017
  var column = params.column;
5869
6018
  var titleHelp = column.titleHelp;
5870
6019
 
5871
- if (titleHelp.message) {
6020
+ if (titleHelp.content || titleHelp.message) {
5872
6021
  var tooltipStore = internalData.tooltipStore;
5873
6022
  var $tooltip = refTooltip.value;
5874
- var content = (0, _utils.getFuncText)(titleHelp.message);
6023
+ var content = (0, _utils.getFuncText)(titleHelp.content || titleHelp.message);
5875
6024
  handleTargetEnterEvent();
5876
6025
  tooltipStore.visible = true;
5877
6026
 
@@ -6616,6 +6765,20 @@ var _default = (0, _vue.defineComponent)({
6616
6765
  return false;
6617
6766
  }
6618
6767
  };
6768
+
6769
+ if (process.env.NODE_ENV === 'development') {
6770
+ 'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(function (name) {
6771
+ $xetable[name] = function () {
6772
+ (0, _utils.errLog)('vxe.error.reqModule', ['Export']);
6773
+ };
6774
+ });
6775
+ 'clearValidate,fullValidate,validate'.split(',').forEach(function (name) {
6776
+ $xetable[name] = function () {
6777
+ (0, _utils.errLog)('vxe.error.reqModule', ['Validator']);
6778
+ };
6779
+ });
6780
+ }
6781
+
6619
6782
  Object.assign($xetable, tableMethods, tablePrivateMethods);
6620
6783
  /**
6621
6784
  * 渲染浮固定列
@@ -6879,6 +7042,7 @@ var _default = (0, _vue.defineComponent)({
6879
7042
  if (process.env.NODE_ENV === 'development') {
6880
7043
  var customOpts = computeCustomOpts.value;
6881
7044
  var mouseOpts = computeMouseOpts.value;
7045
+ var rowOpts = computeRowOpts.value;
6882
7046
 
6883
7047
  if (!props.id && props.customConfig && (customOpts.storage === true || customOpts.storage && customOpts.storage.resizable || customOpts.storage && customOpts.storage.visible)) {
6884
7048
  (0, _utils.errLog)('vxe.error.reqProp', ['id']);
@@ -6888,6 +7052,10 @@ var _default = (0, _vue.defineComponent)({
6888
7052
  (0, _utils.errLog)('vxe.error.noTree', ['checkbox-config.range']);
6889
7053
  }
6890
7054
 
7055
+ if (rowOpts.height && !props.showOverflow) {
7056
+ (0, _utils.warnLog)('vxe.error.notProp', ['table.show-overflow']);
7057
+ }
7058
+
6891
7059
  if (!$xetable.handleUpdateCellAreas) {
6892
7060
  if (props.clipConfig) {
6893
7061
  (0, _utils.warnLog)('vxe.error.notProp', ['clip-config']);