vxe-table 4.1.0-beta.0 → 4.1.2

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 (68) hide show
  1. package/README.md +1 -0
  2. package/README.zh-TW.md +1 -0
  3. package/es/edit/src/hook.js +2 -2
  4. package/es/export/src/hook.js +24 -0
  5. package/es/export/src/util.js +20 -8
  6. package/es/footer/src/footer.js +4 -4
  7. package/es/form/src/form.js +13 -6
  8. package/es/form/src/render.js +4 -4
  9. package/es/grid/src/grid.js +48 -1
  10. package/es/header/src/header.js +7 -5
  11. package/es/select/src/select.js +5 -5
  12. package/es/table/src/body.js +18 -14
  13. package/es/table/src/props.js +4 -1
  14. package/es/table/src/table.js +212 -89
  15. package/es/v-x-e-table/src/conf.js +2 -1
  16. package/es/validator/src/hook.js +12 -5
  17. package/helper/vetur/attributes.json +16 -204
  18. package/helper/vetur/tags.json +3 -65
  19. package/lib/edit/src/hook.js +2 -2
  20. package/lib/edit/src/hook.min.js +1 -1
  21. package/lib/export/src/hook.js +28 -0
  22. package/lib/export/src/hook.min.js +1 -1
  23. package/lib/export/src/util.js +21 -7
  24. package/lib/export/src/util.min.js +1 -1
  25. package/lib/footer/src/footer.js +4 -4
  26. package/lib/footer/src/footer.min.js +1 -1
  27. package/lib/form/src/form.js +23 -6
  28. package/lib/form/src/form.min.js +1 -1
  29. package/lib/form/src/render.js +4 -4
  30. package/lib/form/src/render.min.js +1 -1
  31. package/lib/grid/src/grid.js +56 -1
  32. package/lib/grid/src/grid.min.js +1 -1
  33. package/lib/header/src/header.js +7 -5
  34. package/lib/header/src/header.min.js +1 -1
  35. package/lib/index.umd.js +451 -182
  36. package/lib/index.umd.min.js +1 -1
  37. package/lib/select/src/select.js +5 -5
  38. package/lib/table/src/body.js +18 -14
  39. package/lib/table/src/body.min.js +1 -1
  40. package/lib/table/src/props.js +4 -1
  41. package/lib/table/src/props.min.js +1 -1
  42. package/lib/table/src/table.js +272 -120
  43. package/lib/table/src/table.min.js +1 -1
  44. package/lib/v-x-e-table/src/conf.js +2 -1
  45. package/lib/v-x-e-table/src/conf.min.js +1 -1
  46. package/lib/validator/src/hook.js +12 -5
  47. package/lib/validator/src/hook.min.js +1 -1
  48. package/package.json +3 -3
  49. package/packages/edit/src/hook.ts +2 -2
  50. package/packages/export/src/hook.ts +24 -0
  51. package/packages/export/src/util.ts +17 -5
  52. package/packages/footer/src/footer.ts +4 -4
  53. package/packages/form/src/form.ts +10 -6
  54. package/packages/form/src/render.ts +4 -4
  55. package/packages/grid/src/grid.ts +48 -1
  56. package/packages/header/src/header.ts +7 -5
  57. package/packages/select/src/select.ts +5 -5
  58. package/packages/table/src/body.ts +18 -14
  59. package/packages/table/src/props.ts +4 -1
  60. package/packages/table/src/table.ts +215 -88
  61. package/packages/v-x-e-table/src/conf.ts +2 -1
  62. package/packages/validator/src/hook.ts +9 -5
  63. package/types/column.d.ts +5 -1
  64. package/types/form-item.d.ts +5 -1
  65. package/types/form.d.ts +5 -1
  66. package/types/modal.d.ts +4 -5
  67. package/types/table.d.ts +41 -10
  68. 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;
@@ -4100,10 +4270,10 @@ var _default = (0, _vue.defineComponent)({
4100
4270
  },
4101
4271
 
4102
4272
  /**
4103
- * 重新加载展开行的内容
4273
+ * 重新懒加载展开行,并展开内容
4104
4274
  * @param {Row} row 行对象
4105
4275
  */
4106
- reloadExpandContent: function reloadExpandContent(row) {
4276
+ reloadRowExpand: function reloadRowExpand(row) {
4107
4277
  var expandLazyLoadeds = reactData.expandLazyLoadeds;
4108
4278
  var expandOpts = computeExpandOpts.value;
4109
4279
  var lazy = expandOpts.lazy;
@@ -4116,6 +4286,14 @@ var _default = (0, _vue.defineComponent)({
4116
4286
 
4117
4287
  return (0, _vue.nextTick)();
4118
4288
  },
4289
+ reloadExpandContent: function reloadExpandContent(row) {
4290
+ if (process.env.NODE_ENV === 'development') {
4291
+ (0, _utils.warnLog)('vxe.error.delFunc', ['reloadExpandContent', 'reloadRowExpand']);
4292
+ } // 即将废弃
4293
+
4294
+
4295
+ return tableMethods.reloadRowExpand(row);
4296
+ },
4119
4297
 
4120
4298
  /**
4121
4299
  * 切换展开行
@@ -4281,23 +4459,38 @@ var _default = (0, _vue.defineComponent)({
4281
4459
  },
4282
4460
 
4283
4461
  /**
4284
- * 重新加载树的子节点
4462
+ * 重新懒加载树节点,并展开该节点
4285
4463
  * @param {Row} row 行对象
4286
4464
  */
4287
- reloadTreeChilds: function reloadTreeChilds(row) {
4465
+ reloadTreeExpand: function reloadTreeExpand(row) {
4288
4466
  var treeLazyLoadeds = reactData.treeLazyLoadeds;
4289
4467
  var treeOpts = computeTreeOpts.value;
4290
- var lazy = treeOpts.lazy,
4468
+ var transform = treeOpts.transform,
4469
+ lazy = treeOpts.lazy,
4291
4470
  hasChild = treeOpts.hasChild;
4292
4471
 
4293
4472
  if (lazy && row[hasChild] && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1) {
4294
4473
  tableMethods.clearTreeExpandLoaded(row).then(function () {
4295
4474
  return handleAsyncTreeExpandChilds(row);
4475
+ }).then(function () {
4476
+ if (transform) {
4477
+ return updateVirtualTreeData();
4478
+ }
4479
+ }).then(function () {
4480
+ return tableMethods.recalculate();
4296
4481
  });
4297
4482
  }
4298
4483
 
4299
4484
  return (0, _vue.nextTick)();
4300
4485
  },
4486
+ reloadTreeChilds: function reloadTreeChilds(row) {
4487
+ if (process.env.NODE_ENV === 'development') {
4488
+ (0, _utils.warnLog)('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
4489
+ } // 即将废弃
4490
+
4491
+
4492
+ return tableMethods.reloadTreeExpand(row);
4493
+ },
4301
4494
 
4302
4495
  /**
4303
4496
  * 切换/展开树节点
@@ -4336,21 +4529,8 @@ var _default = (0, _vue.defineComponent)({
4336
4529
  * @param {Boolean} expanded 是否展开
4337
4530
  */
4338
4531
  setTreeExpand: function setTreeExpand(rows, expanded) {
4339
- var treeExpandeds = reactData.treeExpandeds,
4340
- treeLazyLoadeds = reactData.treeLazyLoadeds,
4341
- treeNodeColumn = reactData.treeNodeColumn;
4342
- var fullAllDataRowIdData = internalData.fullAllDataRowIdData,
4343
- tableFullData = internalData.tableFullData;
4344
4532
  var treeOpts = computeTreeOpts.value;
4345
- var reserve = treeOpts.reserve,
4346
- lazy = treeOpts.lazy,
4347
- hasChild = treeOpts.hasChild,
4348
- children = treeOpts.children,
4349
- accordion = treeOpts.accordion,
4350
- toggleMethod = treeOpts.toggleMethod;
4351
- var result = [];
4352
- var columnIndex = tableMethods.getColumnIndex(treeNodeColumn);
4353
- var $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn);
4533
+ var transform = treeOpts.transform;
4354
4534
 
4355
4535
  if (rows) {
4356
4536
  if (!_xeUtils.default.isArray(rows)) {
@@ -4358,61 +4538,12 @@ var _default = (0, _vue.defineComponent)({
4358
4538
  }
4359
4539
 
4360
4540
  if (rows.length) {
4361
- var validRows_2 = toggleMethod ? rows.filter(function (row) {
4362
- return toggleMethod({
4363
- $table: $xetable,
4364
- expanded: expanded,
4365
- column: treeNodeColumn,
4366
- columnIndex: columnIndex,
4367
- $columnIndex: $columnIndex,
4368
- row: row
4369
- });
4370
- }) : rows;
4371
-
4372
- if (accordion) {
4373
- validRows_2 = validRows_2.length ? [validRows_2[validRows_2.length - 1]] : []; // 同一级只能展开一个
4374
-
4375
- var matchObj_1 = _xeUtils.default.findTree(tableFullData, function (item) {
4376
- return item === validRows_2[0];
4377
- }, treeOpts);
4378
-
4379
- if (matchObj_1) {
4380
- _xeUtils.default.remove(treeExpandeds, function (item) {
4381
- return matchObj_1.items.indexOf(item) > -1;
4382
- });
4383
- }
4384
- }
4385
-
4386
- if (expanded) {
4387
- validRows_2.forEach(function (row) {
4388
- if ($xetable.findRowIndexOf(treeExpandeds, row) === -1) {
4389
- var rest = fullAllDataRowIdData[(0, _util.getRowid)($xetable, row)];
4390
- var isLoad = lazy && row[hasChild] && !rest.treeLoaded && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1; // 是否使用懒加载
4391
-
4392
- if (isLoad) {
4393
- result.push(handleAsyncTreeExpandChilds(row));
4394
- } else {
4395
- if (row[children] && row[children].length) {
4396
- treeExpandeds.push(row);
4397
- }
4398
- }
4399
- }
4400
- });
4541
+ // 如果为虚拟树
4542
+ if (transform) {
4543
+ return handleVirtualTreeExpand(rows, expanded);
4401
4544
  } else {
4402
- _xeUtils.default.remove(treeExpandeds, function (row) {
4403
- return $xetable.findRowIndexOf(validRows_2, row) > -1;
4404
- });
4545
+ return handleBaseTreeExpand(rows, expanded);
4405
4546
  }
4406
-
4407
- if (reserve) {
4408
- validRows_2.forEach(function (row) {
4409
- return handleTreeExpandReserve(row, expanded);
4410
- });
4411
- }
4412
-
4413
- return Promise.all(result).then(function () {
4414
- return tableMethods.recalculate();
4415
- });
4416
4547
  }
4417
4548
  }
4418
4549
 
@@ -4433,19 +4564,19 @@ var _default = (0, _vue.defineComponent)({
4433
4564
  */
4434
4565
  clearTreeExpand: function clearTreeExpand() {
4435
4566
  var treeExpandeds = reactData.treeExpandeds;
4436
- var tableFullData = internalData.tableFullData;
4567
+ var treeFullData = internalData.treeFullData;
4437
4568
  var treeOpts = computeTreeOpts.value;
4438
4569
  var reserve = treeOpts.reserve;
4439
4570
  var isExists = treeExpandeds.length;
4440
4571
  reactData.treeExpandeds = [];
4441
4572
 
4442
4573
  if (reserve) {
4443
- _xeUtils.default.eachTree(tableFullData, function (row) {
4574
+ _xeUtils.default.eachTree(treeFullData, function (row) {
4444
4575
  return handleTreeExpandReserve(row, false);
4445
4576
  }, treeOpts);
4446
4577
  }
4447
4578
 
4448
- return (0, _vue.nextTick)().then(function () {
4579
+ return updateVirtualTreeData().then(function () {
4449
4580
  if (isExists) {
4450
4581
  tableMethods.recalculate();
4451
4582
  }
@@ -5432,16 +5563,17 @@ var _default = (0, _vue.defineComponent)({
5432
5563
  * 更新数据行的 Map
5433
5564
  * 牺牲数据组装的耗时,用来换取使用过程中的流畅
5434
5565
  */
5435
- updateCache: function updateCache(isSource) {
5566
+ cacheRowMap: function cacheRowMap(isSource) {
5436
5567
  var treeConfig = props.treeConfig;
5437
5568
  var treeOpts = computeTreeOpts.value;
5438
5569
  var fullDataRowIdData = internalData.fullDataRowIdData,
5439
5570
  fullAllDataRowIdData = internalData.fullAllDataRowIdData,
5440
- tableFullData = internalData.tableFullData;
5571
+ tableFullData = internalData.tableFullData,
5572
+ treeFullData = internalData.treeFullData;
5441
5573
  var rowkey = (0, _util.getRowkey)($xetable);
5442
5574
  var isLazy = treeConfig && treeOpts.lazy;
5443
5575
 
5444
- var handleCache = function handleCache(row, index, items, path, parent) {
5576
+ var handleCache = function handleCache(row, index, items, path, parent, nodes) {
5445
5577
  var rowid = (0, _util.getRowid)($xetable, row);
5446
5578
 
5447
5579
  if ((0, _utils.eqEmptyValue)(rowid)) {
@@ -5461,7 +5593,8 @@ var _default = (0, _vue.defineComponent)({
5461
5593
  _index: -1,
5462
5594
  $index: -1,
5463
5595
  items: items,
5464
- parent: parent
5596
+ parent: parent,
5597
+ level: nodes ? nodes.length - 1 : 0
5465
5598
  };
5466
5599
 
5467
5600
  if (isSource) {
@@ -5478,7 +5611,7 @@ var _default = (0, _vue.defineComponent)({
5478
5611
  fullAllDataRowIdData = internalData.fullAllDataRowIdData = {};
5479
5612
 
5480
5613
  if (treeConfig) {
5481
- _xeUtils.default.eachTree(tableFullData, handleCache, treeOpts);
5614
+ _xeUtils.default.eachTree(treeFullData, handleCache, treeOpts);
5482
5615
  } else {
5483
5616
  tableFullData.forEach(handleCache);
5484
5617
  }
@@ -5880,10 +6013,10 @@ var _default = (0, _vue.defineComponent)({
5880
6013
  var column = params.column;
5881
6014
  var titleHelp = column.titleHelp;
5882
6015
 
5883
- if (titleHelp.message) {
6016
+ if (titleHelp.content || titleHelp.message) {
5884
6017
  var tooltipStore = internalData.tooltipStore;
5885
6018
  var $tooltip = refTooltip.value;
5886
- var content = (0, _utils.getFuncText)(titleHelp.message);
6019
+ var content = (0, _utils.getFuncText)(titleHelp.content || titleHelp.message);
5887
6020
  handleTargetEnterEvent();
5888
6021
  tooltipStore.visible = true;
5889
6022
 
@@ -6628,6 +6761,20 @@ var _default = (0, _vue.defineComponent)({
6628
6761
  return false;
6629
6762
  }
6630
6763
  };
6764
+
6765
+ if (process.env.NODE_ENV === 'development') {
6766
+ 'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(function (name) {
6767
+ $xetable[name] = function () {
6768
+ (0, _utils.errLog)('vxe.error.reqModule', ['Export']);
6769
+ };
6770
+ });
6771
+ 'clearValidate,fullValidate,validate'.split(',').forEach(function (name) {
6772
+ $xetable[name] = function () {
6773
+ (0, _utils.errLog)('vxe.error.reqModule', ['Validator']);
6774
+ };
6775
+ });
6776
+ }
6777
+
6631
6778
  Object.assign($xetable, tableMethods, tablePrivateMethods);
6632
6779
  /**
6633
6780
  * 渲染浮固定列
@@ -6891,6 +7038,7 @@ var _default = (0, _vue.defineComponent)({
6891
7038
  if (process.env.NODE_ENV === 'development') {
6892
7039
  var customOpts = computeCustomOpts.value;
6893
7040
  var mouseOpts = computeMouseOpts.value;
7041
+ var rowOpts = computeRowOpts.value;
6894
7042
 
6895
7043
  if (!props.id && props.customConfig && (customOpts.storage === true || customOpts.storage && customOpts.storage.resizable || customOpts.storage && customOpts.storage.visible)) {
6896
7044
  (0, _utils.errLog)('vxe.error.reqProp', ['id']);
@@ -6900,6 +7048,10 @@ var _default = (0, _vue.defineComponent)({
6900
7048
  (0, _utils.errLog)('vxe.error.noTree', ['checkbox-config.range']);
6901
7049
  }
6902
7050
 
7051
+ if (rowOpts.height && !props.showOverflow) {
7052
+ (0, _utils.warnLog)('vxe.error.notProp', ['table.show-overflow']);
7053
+ }
7054
+
6903
7055
  if (!$xetable.handleUpdateCellAreas) {
6904
7056
  if (props.clipConfig) {
6905
7057
  (0, _utils.warnLog)('vxe.error.notProp', ['clip-config']);