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
@@ -266,6 +266,7 @@ export default defineComponent({
266
266
  treeExpandedReserveRowMap: {},
267
267
  // 完整数据、条件处理后
268
268
  tableFullData: [],
269
+ treeFullData: [],
269
270
  afterFullData: [],
270
271
  tableSynchData: [],
271
272
  tableSourceData: [],
@@ -327,7 +328,10 @@ export default defineComponent({
327
328
  };
328
329
  });
329
330
  var computeColumnOpts = computed(function () {
330
- return Object.assign({}, props.columnConfig);
331
+ return Object.assign({}, GlobalConfig.table.columnConfig, props.columnConfig);
332
+ });
333
+ var computeRowOpts = computed(function () {
334
+ return Object.assign({}, GlobalConfig.table.rowConfig, props.rowConfig);
331
335
  });
332
336
  var computeResizableOpts = computed(function () {
333
337
  return Object.assign({}, GlobalConfig.table.resizableConfig, props.resizableConfig);
@@ -500,6 +504,8 @@ export default defineComponent({
500
504
  computeValidOpts: computeValidOpts,
501
505
  computeSXOpts: computeSXOpts,
502
506
  computeSYOpts: computeSYOpts,
507
+ computeColumnOpts: computeColumnOpts,
508
+ computeRowOpts: computeRowOpts,
503
509
  computeResizableOpts: computeResizableOpts,
504
510
  computeSeqOpts: computeSeqOpts,
505
511
  computeRadioOpts: computeRadioOpts,
@@ -1084,7 +1090,7 @@ export default defineComponent({
1084
1090
  rest._index = _index;
1085
1091
  }
1086
1092
  else {
1087
- fullDataRowIdData[rowid] = { row: row, rowid: rowid, index: -1, $index: -1, _index: _index, items: [], parent: null };
1093
+ fullDataRowIdData[rowid] = { row: row, rowid: rowid, index: -1, $index: -1, _index: _index, items: [], parent: null, level: 0 };
1088
1094
  }
1089
1095
  });
1090
1096
  };
@@ -1284,7 +1290,7 @@ export default defineComponent({
1284
1290
  var tWidth = tableWidth;
1285
1291
  // 如果是使用优化模式
1286
1292
  if (fixedType) {
1287
- if (scrollXLoad || scrollYLoad || (allColumnOverflow ? isAllOverflow : allColumnOverflow)) {
1293
+ if (scrollYLoad || (allColumnOverflow ? isAllOverflow : allColumnOverflow)) {
1288
1294
  if (!mergeList.length && !spanMethod && !(keyboardConfig && keyboardOpts.isMerge)) {
1289
1295
  tableColumn = fixedColumn;
1290
1296
  }
@@ -1376,16 +1382,9 @@ export default defineComponent({
1376
1382
  var showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
1377
1383
  var hasEllipsis_1 = showTitle || showTooltip || showEllipsis;
1378
1384
  var listElem = elemStore[name + "-" + layout + "-list"];
1379
- // 滚动的渲染不支持动态行高
1380
- if (layout === 'header' || layout === 'footer') {
1381
- if (scrollXLoad && !hasEllipsis_1) {
1382
- hasEllipsis_1 = true;
1383
- }
1384
- }
1385
- else {
1386
- if ((scrollXLoad || scrollYLoad) && !hasEllipsis_1) {
1387
- hasEllipsis_1 = true;
1388
- }
1385
+ // 纵向虚拟滚动不支持动态行高
1386
+ if (scrollYLoad && !hasEllipsis_1) {
1387
+ hasEllipsis_1 = true;
1389
1388
  }
1390
1389
  if (listElem) {
1391
1390
  XEUtils.arrayEach(listElem.querySelectorAll("." + column_2.id), function (elem) {
@@ -1634,7 +1633,7 @@ export default defineComponent({
1634
1633
  childRecords = [];
1635
1634
  }
1636
1635
  if (childRecords) {
1637
- tableMethods.loadChildren(row, childRecords).then(function (childRows) {
1636
+ tableMethods.loadTreeChildren(row, childRecords).then(function (childRows) {
1638
1637
  if (childRows.length && $xetable.findRowIndexOf(treeExpandeds, row) === -1) {
1639
1638
  treeExpandeds.push(row);
1640
1639
  }
@@ -1755,27 +1754,57 @@ export default defineComponent({
1755
1754
  var keepSource = props.keepSource, treeConfig = props.treeConfig;
1756
1755
  var editStore = reactData.editStore, oldScrollYLoad = reactData.scrollYLoad;
1757
1756
  var scrollYStore = internalData.scrollYStore, scrollXStore = internalData.scrollXStore, lastScrollLeft = internalData.lastScrollLeft, lastScrollTop = internalData.lastScrollTop;
1758
- var sYOpts = computeSYOpts.value;
1759
- var tableFullData = datas ? datas.slice(0) : [];
1760
- var scrollYLoad = !treeConfig && !!sYOpts.enabled && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
1757
+ var treeOpts = computeTreeOpts.value;
1758
+ var transform = treeOpts.transform;
1759
+ var treeData = [];
1760
+ var fullData = datas ? datas.slice(0) : [];
1761
+ if (treeConfig) {
1762
+ if (transform) {
1763
+ // 树结构自动转换
1764
+ if (process.env.NODE_ENV === 'development') {
1765
+ if (!treeOpts.rowtKey) {
1766
+ errLog('vxe.error.reqProp', ['tree-config.rowtKey']);
1767
+ }
1768
+ if (!treeOpts.parentKey) {
1769
+ errLog('vxe.error.reqProp', ['tree-config.parentKey']);
1770
+ }
1771
+ if (!treeOpts.children) {
1772
+ errLog('vxe.error.reqProp', ['tree-config.children']);
1773
+ }
1774
+ fullData.forEach(function (row) {
1775
+ if (row[treeOpts.children] && row[treeOpts.children].length) {
1776
+ warnLog('vxe.error.errConflicts', ['tree-config.transform', "row." + treeOpts.children]);
1777
+ }
1778
+ });
1779
+ }
1780
+ treeData = XEUtils.toArrayTree(fullData, { key: treeOpts.rowtKey, parentKey: treeOpts.parentKey, children: treeOpts.children });
1781
+ fullData = treeData.slice(0);
1782
+ }
1783
+ else {
1784
+ treeData = fullData.slice(0);
1785
+ }
1786
+ }
1761
1787
  scrollYStore.startIndex = 0;
1762
1788
  scrollYStore.endIndex = 1;
1763
1789
  scrollXStore.startIndex = 0;
1764
1790
  scrollXStore.endIndex = 1;
1765
1791
  editStore.insertList = [];
1766
1792
  editStore.removeList = [];
1793
+ var sYLoad = updateScrollYStatus(fullData);
1794
+ reactData.scrollYLoad = sYLoad;
1767
1795
  // 全量数据
1768
- internalData.tableFullData = tableFullData;
1796
+ internalData.tableFullData = fullData;
1797
+ internalData.treeFullData = treeData;
1769
1798
  // 缓存数据
1770
- tablePrivateMethods.updateCache(true);
1799
+ tablePrivateMethods.cacheRowMap(true);
1771
1800
  // 原始数据
1772
1801
  internalData.tableSynchData = datas;
1802
+ // 克隆原数据,用于显示编辑状态,与编辑值做对比
1773
1803
  if (keepSource) {
1774
- internalData.tableSourceData = XEUtils.clone(tableFullData, true);
1804
+ internalData.tableSourceData = XEUtils.clone(fullData, true);
1775
1805
  }
1776
- reactData.scrollYLoad = scrollYLoad;
1777
1806
  if (process.env.NODE_ENV === 'development') {
1778
- if (scrollYLoad) {
1807
+ if (sYLoad) {
1779
1808
  if (!(props.height || props.maxHeight)) {
1780
1809
  errLog('vxe.error.reqProp', ['table.height | table.max-height | table.scroll-y={enabled: false}']);
1781
1810
  }
@@ -1801,8 +1830,8 @@ export default defineComponent({
1801
1830
  }).then(function () {
1802
1831
  computeScrollLoad();
1803
1832
  }).then(function () {
1804
- // 是否加载了数据
1805
- if (scrollYLoad) {
1833
+ // 是否启用了虚拟滚动
1834
+ if (sYLoad) {
1806
1835
  scrollYStore.endIndex = scrollYStore.visibleSize;
1807
1836
  }
1808
1837
  handleReserveStatus();
@@ -1812,7 +1841,7 @@ export default defineComponent({
1812
1841
  .then(function () { return tableMethods.recalculate(); })
1813
1842
  .then(function () {
1814
1843
  // 是否变更虚拟滚动
1815
- if (oldScrollYLoad === scrollYLoad) {
1844
+ if (oldScrollYLoad === sYLoad) {
1816
1845
  restoreScrollLocation($xetable, lastScrollLeft, lastScrollTop).then(resolve);
1817
1846
  }
1818
1847
  else {
@@ -2029,6 +2058,95 @@ export default defineComponent({
2029
2058
  return tableMethods.recalculate();
2030
2059
  });
2031
2060
  };
2061
+ var updateScrollYStatus = function (fullData) {
2062
+ var treeConfig = props.treeConfig;
2063
+ var sYOpts = computeSYOpts.value;
2064
+ var treeOpts = computeTreeOpts.value;
2065
+ var transform = treeOpts.transform;
2066
+ var scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && sYOpts.gt < fullData.length;
2067
+ reactData.scrollYLoad = scrollYLoad;
2068
+ return scrollYLoad;
2069
+ };
2070
+ var updateVirtualTreeData = function () {
2071
+ var oldScrollYLoad = reactData.scrollYLoad, treeExpandeds = reactData.treeExpandeds;
2072
+ var treeFullData = internalData.treeFullData;
2073
+ var treeOpts = computeTreeOpts.value;
2074
+ var fullData = [];
2075
+ XEUtils.eachTree(treeFullData, function (row, index, items, path, parent) {
2076
+ if (!parent || $xetable.findRowIndexOf(treeExpandeds, parent) > -1) {
2077
+ fullData.push(row);
2078
+ }
2079
+ }, treeOpts);
2080
+ var scrollYLoad = updateScrollYStatus(fullData);
2081
+ internalData.tableFullData = scrollYLoad ? fullData : treeFullData;
2082
+ if (scrollYLoad || oldScrollYLoad !== scrollYLoad) {
2083
+ return tablePrivateMethods.handleTableData(true).then(function () { return tableMethods.recalculate(); });
2084
+ }
2085
+ return nextTick();
2086
+ };
2087
+ /**
2088
+ * 展开与收起树节点
2089
+ * @param rows
2090
+ * @param expanded
2091
+ * @returns
2092
+ */
2093
+ var handleBaseTreeExpand = function (rows, expanded) {
2094
+ var treeExpandeds = reactData.treeExpandeds, treeLazyLoadeds = reactData.treeLazyLoadeds, treeNodeColumn = reactData.treeNodeColumn;
2095
+ var fullAllDataRowIdData = internalData.fullAllDataRowIdData, tableFullData = internalData.tableFullData;
2096
+ var treeOpts = computeTreeOpts.value;
2097
+ var reserve = treeOpts.reserve, lazy = treeOpts.lazy, hasChild = treeOpts.hasChild, children = treeOpts.children, accordion = treeOpts.accordion, toggleMethod = treeOpts.toggleMethod;
2098
+ var result = [];
2099
+ var columnIndex = tableMethods.getColumnIndex(treeNodeColumn);
2100
+ var $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn);
2101
+ var validRows = toggleMethod ? rows.filter(function (row) { return toggleMethod({ $table: $xetable, expanded: expanded, column: treeNodeColumn, columnIndex: columnIndex, $columnIndex: $columnIndex, row: row }); }) : rows;
2102
+ if (accordion) {
2103
+ validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
2104
+ // 同一级只能展开一个
2105
+ var matchObj_1 = XEUtils.findTree(tableFullData, function (item) { return item === validRows[0]; }, treeOpts);
2106
+ if (matchObj_1) {
2107
+ XEUtils.remove(treeExpandeds, function (item) { return matchObj_1.items.indexOf(item) > -1; });
2108
+ }
2109
+ }
2110
+ if (expanded) {
2111
+ validRows.forEach(function (row) {
2112
+ if ($xetable.findRowIndexOf(treeExpandeds, row) === -1) {
2113
+ var rest = fullAllDataRowIdData[getRowid($xetable, row)];
2114
+ var isLoad = lazy && row[hasChild] && !rest.treeLoaded && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1;
2115
+ // 是否使用懒加载
2116
+ if (isLoad) {
2117
+ result.push(handleAsyncTreeExpandChilds(row));
2118
+ }
2119
+ else {
2120
+ if (row[children] && row[children].length) {
2121
+ treeExpandeds.push(row);
2122
+ }
2123
+ }
2124
+ }
2125
+ });
2126
+ }
2127
+ else {
2128
+ XEUtils.remove(treeExpandeds, function (row) { return $xetable.findRowIndexOf(validRows, row) > -1; });
2129
+ }
2130
+ if (reserve) {
2131
+ validRows.forEach(function (row) { return handleTreeExpandReserve(row, expanded); });
2132
+ }
2133
+ return Promise.all(result).then(function () {
2134
+ return tableMethods.recalculate();
2135
+ });
2136
+ };
2137
+ /**
2138
+ * 虚拟树的展开与收起
2139
+ * @param rows
2140
+ * @param expanded
2141
+ * @returns
2142
+ */
2143
+ var handleVirtualTreeExpand = function (rows, expanded) {
2144
+ return handleBaseTreeExpand(rows, expanded).then(function () {
2145
+ return updateVirtualTreeData();
2146
+ }).then(function () {
2147
+ return tableMethods.recalculate();
2148
+ });
2149
+ };
2032
2150
  /**
2033
2151
  * 纵向 Y 可视渲染处理
2034
2152
  */
@@ -2147,7 +2265,7 @@ export default defineComponent({
2147
2265
  tableSourceData[rowIndex] = record;
2148
2266
  XEUtils.clear(row, undefined);
2149
2267
  Object.assign(row, tablePrivateMethods.defineField(Object.assign({}, record)));
2150
- tablePrivateMethods.updateCache(true);
2268
+ tablePrivateMethods.cacheRowMap(true);
2151
2269
  }
2152
2270
  else {
2153
2271
  XEUtils.destructuring(oRow, XEUtils.clone(row, true));
@@ -2166,13 +2284,14 @@ export default defineComponent({
2166
2284
  /**
2167
2285
  * 用于树结构,给行数据加载子节点
2168
2286
  */
2169
- loadChildren: function (row, childRecords) {
2287
+ loadTreeChildren: function (row, childRecords) {
2288
+ var keepSource = props.keepSource;
2289
+ var tableSourceData = internalData.tableSourceData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
2290
+ var treeOpts = computeTreeOpts.value;
2291
+ var children = treeOpts.children;
2292
+ var rest = fullAllDataRowIdData[getRowid($xetable, row)];
2293
+ var parentLevel = rest ? rest.level : 0;
2170
2294
  return tableMethods.createData(childRecords).then(function (rows) {
2171
- var keepSource = props.keepSource;
2172
- var fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
2173
- var tableSourceData = internalData.tableSourceData;
2174
- var treeOpts = computeTreeOpts.value;
2175
- var children = treeOpts.children;
2176
2295
  if (keepSource) {
2177
2296
  var rowid_1 = getRowid($xetable, row);
2178
2297
  var matchObj = XEUtils.findTree(tableSourceData, function (item) { return rowid_1 === getRowid($xetable, item); }, treeOpts);
@@ -2180,9 +2299,9 @@ export default defineComponent({
2180
2299
  matchObj.item[children] = XEUtils.clone(rows, true);
2181
2300
  }
2182
2301
  }
2183
- XEUtils.eachTree(rows, function (childRow, index, items, path, parent) {
2302
+ XEUtils.eachTree(rows, function (childRow, index, items, path, parent, nodes) {
2184
2303
  var rowid = getRowid($xetable, childRow);
2185
- var rest = { row: childRow, rowid: rowid, index: -1, _index: -1, $index: -1, items: items, parent: parent };
2304
+ var rest = { row: childRow, rowid: rowid, index: -1, _index: -1, $index: -1, items: items, parent: parent, level: parentLevel + nodes.length };
2186
2305
  fullDataRowIdData[rowid] = rest;
2187
2306
  fullAllDataRowIdData[rowid] = rest;
2188
2307
  }, treeOpts);
@@ -3197,12 +3316,16 @@ export default defineComponent({
3197
3316
  */
3198
3317
  closeFilter: function () {
3199
3318
  var filterStore = reactData.filterStore;
3319
+ var column = filterStore.column, visible = filterStore.visible;
3200
3320
  Object.assign(filterStore, {
3201
3321
  isAllSelected: false,
3202
3322
  isIndeterminate: false,
3203
3323
  options: [],
3204
3324
  visible: false
3205
3325
  });
3326
+ if (visible) {
3327
+ $xetable.dispatchEvent('filter-visible', { column: column, property: column.property, filterList: $xetable.getCheckedFilters(), visible: false }, null);
3328
+ }
3206
3329
  return nextTick();
3207
3330
  },
3208
3331
  /**
@@ -3238,10 +3361,10 @@ export default defineComponent({
3238
3361
  return nextTick();
3239
3362
  },
3240
3363
  /**
3241
- * 重新加载展开行的内容
3364
+ * 重新懒加载展开行,并展开内容
3242
3365
  * @param {Row} row 行对象
3243
3366
  */
3244
- reloadExpandContent: function (row) {
3367
+ lazyExpandContent: function (row) {
3245
3368
  var expandLazyLoadeds = reactData.expandLazyLoadeds;
3246
3369
  var expandOpts = computeExpandOpts.value;
3247
3370
  var lazy = expandOpts.lazy;
@@ -3251,6 +3374,16 @@ export default defineComponent({
3251
3374
  }
3252
3375
  return nextTick();
3253
3376
  },
3377
+ /**
3378
+ * @deprecated 已废弃,请使用 lazyExpandContent
3379
+ */
3380
+ reloadExpandContent: function (row) {
3381
+ if (process.env.NODE_ENV === 'development') {
3382
+ warnLog('vxe.error.delFunc', ['reloadExpandContent', 'lazyExpandContent']);
3383
+ }
3384
+ // 即将废弃
3385
+ return tableMethods.lazyExpandContent(row);
3386
+ },
3254
3387
  /**
3255
3388
  * 切换展开行
3256
3389
  */
@@ -3373,19 +3506,33 @@ export default defineComponent({
3373
3506
  return nextTick();
3374
3507
  },
3375
3508
  /**
3376
- * 重新加载树的子节点
3509
+ * 重新懒加载树节点,并展开该节点
3377
3510
  * @param {Row} row 行对象
3378
3511
  */
3379
- reloadTreeChilds: function (row) {
3512
+ lazyTreeChildren: function (row) {
3380
3513
  var treeLazyLoadeds = reactData.treeLazyLoadeds;
3381
3514
  var treeOpts = computeTreeOpts.value;
3382
- var lazy = treeOpts.lazy, hasChild = treeOpts.hasChild;
3515
+ var transform = treeOpts.transform, lazy = treeOpts.lazy, hasChild = treeOpts.hasChild;
3383
3516
  if (lazy && row[hasChild] && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1) {
3384
- tableMethods.clearTreeExpandLoaded(row)
3385
- .then(function () { return handleAsyncTreeExpandChilds(row); });
3517
+ tableMethods.clearTreeExpandLoaded(row).then(function () {
3518
+ return handleAsyncTreeExpandChilds(row);
3519
+ }).then(function () {
3520
+ if (transform) {
3521
+ return updateVirtualTreeData();
3522
+ }
3523
+ }).then(function () {
3524
+ return tableMethods.recalculate();
3525
+ });
3386
3526
  }
3387
3527
  return nextTick();
3388
3528
  },
3529
+ reloadTreeChilds: function (row) {
3530
+ if (process.env.NODE_ENV === 'development') {
3531
+ warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'lazyTreeChildren']);
3532
+ }
3533
+ // 即将废弃
3534
+ return tableMethods.lazyTreeChildren(row);
3535
+ },
3389
3536
  /**
3390
3537
  * 切换/展开树节点
3391
3538
  */
@@ -3417,53 +3564,20 @@ export default defineComponent({
3417
3564
  * @param {Boolean} expanded 是否展开
3418
3565
  */
3419
3566
  setTreeExpand: function (rows, expanded) {
3420
- var treeExpandeds = reactData.treeExpandeds, treeLazyLoadeds = reactData.treeLazyLoadeds, treeNodeColumn = reactData.treeNodeColumn;
3421
- var fullAllDataRowIdData = internalData.fullAllDataRowIdData, tableFullData = internalData.tableFullData;
3422
3567
  var treeOpts = computeTreeOpts.value;
3423
- var reserve = treeOpts.reserve, lazy = treeOpts.lazy, hasChild = treeOpts.hasChild, children = treeOpts.children, accordion = treeOpts.accordion, toggleMethod = treeOpts.toggleMethod;
3424
- var result = [];
3425
- var columnIndex = tableMethods.getColumnIndex(treeNodeColumn);
3426
- var $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn);
3568
+ var transform = treeOpts.transform;
3427
3569
  if (rows) {
3428
3570
  if (!XEUtils.isArray(rows)) {
3429
3571
  rows = [rows];
3430
3572
  }
3431
3573
  if (rows.length) {
3432
- var validRows_2 = toggleMethod ? rows.filter(function (row) { return toggleMethod({ $table: $xetable, expanded: expanded, column: treeNodeColumn, columnIndex: columnIndex, $columnIndex: $columnIndex, row: row }); }) : rows;
3433
- if (accordion) {
3434
- validRows_2 = validRows_2.length ? [validRows_2[validRows_2.length - 1]] : [];
3435
- // 同一级只能展开一个
3436
- var matchObj_1 = XEUtils.findTree(tableFullData, function (item) { return item === validRows_2[0]; }, treeOpts);
3437
- if (matchObj_1) {
3438
- XEUtils.remove(treeExpandeds, function (item) { return matchObj_1.items.indexOf(item) > -1; });
3439
- }
3440
- }
3441
- if (expanded) {
3442
- validRows_2.forEach(function (row) {
3443
- if ($xetable.findRowIndexOf(treeExpandeds, row) === -1) {
3444
- var rest = fullAllDataRowIdData[getRowid($xetable, row)];
3445
- var isLoad = lazy && row[hasChild] && !rest.treeLoaded && $xetable.findRowIndexOf(treeLazyLoadeds, row) === -1;
3446
- // 是否使用懒加载
3447
- if (isLoad) {
3448
- result.push(handleAsyncTreeExpandChilds(row));
3449
- }
3450
- else {
3451
- if (row[children] && row[children].length) {
3452
- treeExpandeds.push(row);
3453
- }
3454
- }
3455
- }
3456
- });
3574
+ // 如果为虚拟树
3575
+ if (transform) {
3576
+ return handleVirtualTreeExpand(rows, expanded);
3457
3577
  }
3458
3578
  else {
3459
- XEUtils.remove(treeExpandeds, function (row) { return $xetable.findRowIndexOf(validRows_2, row) > -1; });
3460
- }
3461
- if (reserve) {
3462
- validRows_2.forEach(function (row) { return handleTreeExpandReserve(row, expanded); });
3579
+ return handleBaseTreeExpand(rows, expanded);
3463
3580
  }
3464
- return Promise.all(result).then(function () {
3465
- return tableMethods.recalculate();
3466
- });
3467
3581
  }
3468
3582
  }
3469
3583
  return nextTick();
@@ -3481,15 +3595,15 @@ export default defineComponent({
3481
3595
  */
3482
3596
  clearTreeExpand: function () {
3483
3597
  var treeExpandeds = reactData.treeExpandeds;
3484
- var tableFullData = internalData.tableFullData;
3598
+ var treeFullData = internalData.treeFullData;
3485
3599
  var treeOpts = computeTreeOpts.value;
3486
3600
  var reserve = treeOpts.reserve;
3487
3601
  var isExists = treeExpandeds.length;
3488
3602
  reactData.treeExpandeds = [];
3489
3603
  if (reserve) {
3490
- XEUtils.eachTree(tableFullData, function (row) { return handleTreeExpandReserve(row, false); }, treeOpts);
3604
+ XEUtils.eachTree(treeFullData, function (row) { return handleTreeExpandReserve(row, false); }, treeOpts);
3491
3605
  }
3492
- return nextTick().then(function () {
3606
+ return updateVirtualTreeData().then(function () {
3493
3607
  if (isExists) {
3494
3608
  tableMethods.recalculate();
3495
3609
  }
@@ -4336,13 +4450,13 @@ export default defineComponent({
4336
4450
  * 更新数据行的 Map
4337
4451
  * 牺牲数据组装的耗时,用来换取使用过程中的流畅
4338
4452
  */
4339
- updateCache: function (isSource) {
4453
+ cacheRowMap: function (isSource) {
4340
4454
  var treeConfig = props.treeConfig;
4341
4455
  var treeOpts = computeTreeOpts.value;
4342
- var fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData, tableFullData = internalData.tableFullData;
4456
+ var fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData, tableFullData = internalData.tableFullData, treeFullData = internalData.treeFullData;
4343
4457
  var rowkey = getRowkey($xetable);
4344
4458
  var isLazy = treeConfig && treeOpts.lazy;
4345
- var handleCache = function (row, index, items, path, parent) {
4459
+ var handleCache = function (row, index, items, path, parent, nodes) {
4346
4460
  var rowid = getRowid($xetable, row);
4347
4461
  if (eqEmptyValue(rowid)) {
4348
4462
  rowid = getRowUniqueId();
@@ -4351,7 +4465,7 @@ export default defineComponent({
4351
4465
  if (isLazy && row[treeOpts.hasChild] && XEUtils.isUndefined(row[treeOpts.children])) {
4352
4466
  row[treeOpts.children] = null;
4353
4467
  }
4354
- var rest = { row: row, rowid: rowid, index: treeConfig && parent ? -1 : index, _index: -1, $index: -1, items: items, parent: parent };
4468
+ var rest = { row: row, rowid: rowid, index: treeConfig && parent ? -1 : index, _index: -1, $index: -1, items: items, parent: parent, level: nodes ? nodes.length - 1 : 0 };
4355
4469
  if (isSource) {
4356
4470
  fullDataRowIdData[rowid] = rest;
4357
4471
  }
@@ -4362,7 +4476,7 @@ export default defineComponent({
4362
4476
  }
4363
4477
  fullAllDataRowIdData = internalData.fullAllDataRowIdData = {};
4364
4478
  if (treeConfig) {
4365
- XEUtils.eachTree(tableFullData, handleCache, treeOpts);
4479
+ XEUtils.eachTree(treeFullData, handleCache, treeOpts);
4366
4480
  }
4367
4481
  else {
4368
4482
  tableFullData.forEach(handleCache);
@@ -4647,10 +4761,10 @@ export default defineComponent({
4647
4761
  triggerHeaderHelpEvent: function (evnt, params) {
4648
4762
  var column = params.column;
4649
4763
  var titleHelp = column.titleHelp;
4650
- if (titleHelp.message) {
4764
+ if (titleHelp.content || titleHelp.message) {
4651
4765
  var tooltipStore = internalData.tooltipStore;
4652
4766
  var $tooltip = refTooltip.value;
4653
- var content = getFuncText(titleHelp.message);
4767
+ var content = getFuncText(titleHelp.content || titleHelp.message);
4654
4768
  handleTargetEnterEvent();
4655
4769
  tooltipStore.visible = true;
4656
4770
  if ($tooltip) {
@@ -5244,6 +5358,18 @@ export default defineComponent({
5244
5358
  return false;
5245
5359
  }
5246
5360
  };
5361
+ if (process.env.NODE_ENV === 'development') {
5362
+ 'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(function (name) {
5363
+ $xetable[name] = function () {
5364
+ errLog('vxe.error.reqModule', ['Export']);
5365
+ };
5366
+ });
5367
+ 'clearValidate,fullValidate,validate'.split(',').forEach(function (name) {
5368
+ $xetable[name] = function () {
5369
+ errLog('vxe.error.reqModule', ['Validator']);
5370
+ };
5371
+ });
5372
+ }
5247
5373
  Object.assign($xetable, tableMethods, tablePrivateMethods);
5248
5374
  /**
5249
5375
  * 渲染浮固定列
@@ -5431,12 +5557,16 @@ export default defineComponent({
5431
5557
  if (process.env.NODE_ENV === 'development') {
5432
5558
  var customOpts = computeCustomOpts.value;
5433
5559
  var mouseOpts = computeMouseOpts.value;
5560
+ var rowOpts = computeRowOpts.value;
5434
5561
  if (!props.id && props.customConfig && (customOpts.storage === true || (customOpts.storage && customOpts.storage.resizable) || (customOpts.storage && customOpts.storage.visible))) {
5435
5562
  errLog('vxe.error.reqProp', ['id']);
5436
5563
  }
5437
5564
  if (props.treeConfig && checkboxOpts.range) {
5438
5565
  errLog('vxe.error.noTree', ['checkbox-config.range']);
5439
5566
  }
5567
+ if (rowOpts.height && !props.showOverflow) {
5568
+ warnLog('vxe.error.notProp', ['table.show-overflow']);
5569
+ }
5440
5570
  if (!$xetable.handleUpdateCellAreas) {
5441
5571
  if (props.clipConfig) {
5442
5572
  warnLog('vxe.error.notProp', ['clip-config']);
@@ -79,7 +79,7 @@
79
79
 
80
80
  .vxe-table--render-default .is--disabled.vxe-cell--radio {
81
81
  cursor: not-allowed;
82
- color: #9e7d7d; }
82
+ color: #BFBFBF; }
83
83
  .vxe-table--render-default .is--disabled.vxe-cell--radio .vxe-radio--icon:before {
84
84
  border-color: #dcdfe6;
85
85
  background-color: #f3f3f3; }
@@ -143,7 +143,7 @@
143
143
 
144
144
  .vxe-table--render-default .is--disabled.vxe-cell--checkbox {
145
145
  cursor: not-allowed;
146
- color: #9e7d7d; }
146
+ color: #BFBFBF; }
147
147
  .vxe-table--render-default .is--disabled.vxe-cell--checkbox .vxe-checkbox--icon:before {
148
148
  border-color: #dcdfe6;
149
149
  background-color: #f3f3f3; }
@@ -687,12 +687,12 @@
687
687
  .vxe-table--render-default .vxe-body--column,
688
688
  .vxe-table--render-default .vxe-footer--column {
689
689
  position: relative;
690
- line-height: 24px;
690
+ line-height: 22px;
691
691
  text-align: left; }
692
692
  .vxe-table--render-default .vxe-header--column:not(.col--ellipsis),
693
693
  .vxe-table--render-default .vxe-body--column:not(.col--ellipsis),
694
694
  .vxe-table--render-default .vxe-footer--column:not(.col--ellipsis) {
695
- padding: 12px 0; }
695
+ padding: 13px 0; }
696
696
  .vxe-table--render-default .vxe-header--column.col--current,
697
697
  .vxe-table--render-default .vxe-body--column.col--current,
698
698
  .vxe-table--render-default .vxe-footer--column.col--current {
@@ -761,7 +761,7 @@
761
761
  .vxe-table--render-default.size--medium .vxe-header--column:not(.col--ellipsis),
762
762
  .vxe-table--render-default.size--medium .vxe-body--column:not(.col--ellipsis),
763
763
  .vxe-table--render-default.size--medium .vxe-footer--column:not(.col--ellipsis) {
764
- padding: 10px 0; }
764
+ padding: 11px 0; }
765
765
  .vxe-table--render-default.size--medium .vxe-cell .vxe-default-input,
766
766
  .vxe-table--render-default.size--medium .vxe-cell .vxe-default-textarea,
767
767
  .vxe-table--render-default.size--medium .vxe-cell .vxe-default-select {
@@ -776,7 +776,7 @@
776
776
  .vxe-table--render-default.size--small .vxe-header--column:not(.col--ellipsis),
777
777
  .vxe-table--render-default.size--small .vxe-body--column:not(.col--ellipsis),
778
778
  .vxe-table--render-default.size--small .vxe-footer--column:not(.col--ellipsis) {
779
- padding: 8px 0; }
779
+ padding: 9px 0; }
780
780
  .vxe-table--render-default.size--small .vxe-cell .vxe-default-input,
781
781
  .vxe-table--render-default.size--small .vxe-cell .vxe-default-textarea,
782
782
  .vxe-table--render-default.size--small .vxe-cell .vxe-default-select {
@@ -791,7 +791,7 @@
791
791
  .vxe-table--render-default.size--mini .vxe-header--column:not(.col--ellipsis),
792
792
  .vxe-table--render-default.size--mini .vxe-body--column:not(.col--ellipsis),
793
793
  .vxe-table--render-default.size--mini .vxe-footer--column:not(.col--ellipsis) {
794
- padding: 6px 0; }
794
+ padding: 7px 0; }
795
795
  .vxe-table--render-default.size--mini .vxe-cell .vxe-default-input,
796
796
  .vxe-table--render-default.size--mini .vxe-cell .vxe-default-textarea,
797
797
  .vxe-table--render-default.size--mini .vxe-cell .vxe-default-select {
@@ -969,21 +969,24 @@
969
969
  .vxe-table--render-default.size--medium .vxe-body--column.col--ellipsis > .vxe-cell,
970
970
  .vxe-table--render-default.size--medium .vxe-footer--column.col--ellipsis > .vxe-cell {
971
971
  max-height: 44px; }
972
- .vxe-table--render-default.size--medium .vxe-cell--checkbox .vxe-checkbox--icon,
972
+ .vxe-table--render-default.size--medium .vxe-cell--checkbox .vxe-checkbox--icon {
973
+ font-size: 15px; }
973
974
  .vxe-table--render-default.size--medium .vxe-cell--radio .vxe-radio--icon {
974
975
  font-size: 15px; }
975
976
  .vxe-table--render-default.size--small .vxe-header--column.col--ellipsis > .vxe-cell,
976
977
  .vxe-table--render-default.size--small .vxe-body--column.col--ellipsis > .vxe-cell,
977
978
  .vxe-table--render-default.size--small .vxe-footer--column.col--ellipsis > .vxe-cell {
978
979
  max-height: 40px; }
979
- .vxe-table--render-default.size--small .vxe-cell--checkbox .vxe-checkbox--icon,
980
+ .vxe-table--render-default.size--small .vxe-cell--checkbox .vxe-checkbox--icon {
981
+ font-size: 14px; }
980
982
  .vxe-table--render-default.size--small .vxe-cell--radio .vxe-radio--icon {
981
983
  font-size: 14px; }
982
984
  .vxe-table--render-default.size--mini .vxe-header--column.col--ellipsis > .vxe-cell,
983
985
  .vxe-table--render-default.size--mini .vxe-body--column.col--ellipsis > .vxe-cell,
984
986
  .vxe-table--render-default.size--mini .vxe-footer--column.col--ellipsis > .vxe-cell {
985
987
  max-height: 36px; }
986
- .vxe-table--render-default.size--mini .vxe-cell--checkbox .vxe-checkbox--icon,
988
+ .vxe-table--render-default.size--mini .vxe-cell--checkbox .vxe-checkbox--icon {
989
+ font-size: 14px; }
987
990
  .vxe-table--render-default.size--mini .vxe-cell--radio .vxe-radio--icon {
988
991
  font-size: 14px; }
989
992
  .vxe-table--render-default .vxe-table--empty-placeholder,
@@ -1074,12 +1077,12 @@
1074
1077
  border: 0;
1075
1078
  padding: 0; }
1076
1079
  .vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-default-input {
1077
- height: 24px; }
1080
+ height: 22px; }
1078
1081
  .vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-input .vxe-input--inner {
1079
1082
  border: 0;
1080
1083
  padding-left: 0; }
1081
1084
  .vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-textarea {
1082
- height: 23px; }
1085
+ height: 21px; }
1083
1086
  .vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-textarea .vxe-textarea--inner {
1084
1087
  border: 0; }
1085
1088
  .vxe-table--render-default.vxe-editable .vxe-body--column {
@@ -94,7 +94,7 @@
94
94
 
95
95
  .is--disabled.vxe-custom--option {
96
96
  cursor: not-allowed;
97
- color: #9e7d7d; }
97
+ color: #BFBFBF; }
98
98
  .is--disabled.vxe-custom--option .vxe-checkbox--icon:before {
99
99
  border-color: #dcdfe6;
100
100
  background-color: #f3f3f3; }