@jetlinks-web/components 3.1.14 → 3.2.0

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 (63) hide show
  1. package/es/EditTable/CellRender.js +69 -3
  2. package/es/EditTable/EditTable.js +108 -165
  3. package/es/EditTable/FormItem.js +234 -96
  4. package/es/EditTable/consts.js +13 -13
  5. package/es/EditTable/context.js +3 -2
  6. package/es/EditTable/fieldPool.js +166 -0
  7. package/es/EditTable/hooks/index.js +4 -2
  8. package/es/EditTable/hooks/useValidate.js +121 -51
  9. package/es/EditTable/hooks/useVirtualTreeTable.js +111 -0
  10. package/es/EditTable/index.js +0 -4
  11. package/es/EditTable/style/body.js +15 -2
  12. package/es/EditTable/style/form.js +2 -2
  13. package/es/EditTable/style/header.js +2 -2
  14. package/es/EditTable/style/table.js +2 -1
  15. package/es/Icon/icon.js +3 -3
  16. package/es/ProTable/Content.js +3 -4
  17. package/es/ProTable/ProTable.js +5 -0
  18. package/es/ProTable/setting.js +1 -1
  19. package/es/Search/Advanced/index.js +2 -1
  20. package/es/Search/Search.js +2 -1
  21. package/es/VirtualTable/Table.js +367 -0
  22. package/es/VirtualTable/VirtualBody.js +94 -0
  23. package/es/VirtualTable/data.js +43 -1
  24. package/es/VirtualTable/index.js +1 -1
  25. package/es/VirtualTable/style/index.js +6 -0
  26. package/es/VirtualTable/useTreeData.js +243 -0
  27. package/es/VirtualTable/useVirtualScroll.js +159 -0
  28. package/lib/EditTable/CellRender.js +69 -3
  29. package/lib/EditTable/EditTable.js +108 -165
  30. package/lib/EditTable/FormItem.js +234 -96
  31. package/lib/EditTable/consts.js +13 -13
  32. package/lib/EditTable/context.js +3 -2
  33. package/lib/EditTable/fieldPool.js +173 -0
  34. package/lib/EditTable/hooks/index.js +15 -2
  35. package/lib/EditTable/hooks/useValidate.js +120 -50
  36. package/lib/EditTable/hooks/useVirtualTreeTable.js +117 -0
  37. package/lib/EditTable/index.js +0 -4
  38. package/lib/EditTable/style/body.js +15 -2
  39. package/lib/EditTable/style/form.js +2 -2
  40. package/lib/EditTable/style/header.js +2 -2
  41. package/lib/EditTable/style/table.js +2 -1
  42. package/lib/Icon/icon.js +3 -3
  43. package/lib/ProTable/Content.js +3 -4
  44. package/lib/ProTable/ProTable.js +5 -0
  45. package/lib/ProTable/setting.js +1 -1
  46. package/lib/Search/Advanced/index.js +2 -1
  47. package/lib/Search/Search.js +2 -1
  48. package/lib/VirtualTable/Table.js +374 -0
  49. package/lib/VirtualTable/VirtualBody.js +100 -0
  50. package/lib/VirtualTable/data.js +44 -2
  51. package/lib/VirtualTable/index.js +4 -4
  52. package/lib/VirtualTable/style/index.js +6 -0
  53. package/lib/VirtualTable/useTreeData.js +250 -0
  54. package/lib/VirtualTable/useVirtualScroll.js +165 -0
  55. package/package.json +3 -3
  56. package/es/EditTable/Body.js +0 -312
  57. package/es/EditTable/Header.js +0 -164
  58. package/es/EditTable/HeaderRender.js +0 -12
  59. package/es/VirtualTable/VirtualTable.js +0 -407
  60. package/lib/EditTable/Body.js +0 -312
  61. package/lib/EditTable/Header.js +0 -164
  62. package/lib/EditTable/HeaderRender.js +0 -12
  63. package/lib/VirtualTable/VirtualTable.js +0 -407
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
+ var _vue = require("vue");
11
+ var _antDesignVue = require("ant-design-vue");
12
+ var _table = require("ant-design-vue/lib/table");
13
+ var _useVirtualScroll = require("./useVirtualScroll");
14
+ var _useTreeData = require("./useTreeData");
15
+ // 展开图标组件
16
+ var ExpandIcon = (0, _vue.defineComponent)({
17
+ name: 'VirtualExpandIcon',
18
+ props: {
19
+ expanded: Boolean,
20
+ hasChildren: Boolean,
21
+ onExpand: Function,
22
+ prefixCls: {
23
+ type: String,
24
+ default: 'ant-table'
25
+ }
26
+ },
27
+ setup: function setup(props) {
28
+ var handleClick = function handleClick(e) {
29
+ var _props$onExpand;
30
+ e.stopPropagation();
31
+ (_props$onExpand = props.onExpand) === null || _props$onExpand === void 0 ? void 0 : _props$onExpand.call(props);
32
+ };
33
+ return function () {
34
+ if (!props.hasChildren) {
35
+ // 占位符,保持对齐
36
+ return (0, _vue.createVNode)("span", {
37
+ "class": "".concat(props.prefixCls, "-row-expand-icon ").concat(props.prefixCls, "-row-expand-icon-spaced")
38
+ }, null);
39
+ }
40
+ return (0, _vue.createVNode)("button", {
41
+ "type": "button",
42
+ "class": ["".concat(props.prefixCls, "-row-expand-icon"), props.expanded ? "".concat(props.prefixCls, "-row-expand-icon-expanded") : "".concat(props.prefixCls, "-row-expand-icon-collapsed")],
43
+ "onClick": handleClick,
44
+ "aria-expanded": props.expanded
45
+ }, null);
46
+ };
47
+ }
48
+ });
49
+ /**
50
+ * 虚拟滚动 Table 组件
51
+ * 完全兼容 a-table 的所有功能,同时支持大数据虚拟滚动
52
+ * 支持树形数据的虚拟滚动
53
+ */
54
+ var _default = exports.default = (0, _vue.defineComponent)({
55
+ name: 'JVirtualTable',
56
+ inheritAttrs: false,
57
+ props: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _table.tableProps)()), {}, {
58
+ virtual: {
59
+ type: [Boolean, Object],
60
+ default: false
61
+ }
62
+ }),
63
+ emits: ['expandedRowsChange', 'expand'],
64
+ setup: function setup(props, _ref) {
65
+ var _virtualConfig$value, _virtualConfig$value2, _virtualConfig$value3;
66
+ var attrs = _ref.attrs,
67
+ slots = _ref.slots,
68
+ expose = _ref.expose,
69
+ emit = _ref.emit;
70
+ // Table ref
71
+ var tableRef = (0, _vue.ref)();
72
+ var scrollContainerRef = (0, _vue.ref)();
73
+ // 解析虚拟滚动配置
74
+ var virtualConfig = (0, _vue.computed)(function () {
75
+ if (!props.virtual) return null;
76
+ if (typeof props.virtual === 'boolean') {
77
+ return props.virtual ? {
78
+ itemHeight: 54,
79
+ overscan: 5,
80
+ threshold: 100
81
+ } : null;
82
+ }
83
+ return {
84
+ itemHeight: props.virtual.itemHeight || 54,
85
+ overscan: props.virtual.overscan || 5,
86
+ threshold: props.virtual.threshold || 100
87
+ };
88
+ });
89
+ // 获取容器高度
90
+ var containerHeight = (0, _vue.computed)(function () {
91
+ var _props$scroll;
92
+ if (!((_props$scroll = props.scroll) !== null && _props$scroll !== void 0 && _props$scroll.y)) return 0;
93
+ var y = props.scroll.y;
94
+ if (typeof y === 'number') return y;
95
+ // 解析 '500px' 这样的字符串
96
+ var num = parseInt(String(y), 10);
97
+ return isNaN(num) ? 0 : num;
98
+ });
99
+ // 获取子节点字段名
100
+ var childrenColumnName = (0, _vue.computed)(function () {
101
+ return props.childrenColumnName || 'children';
102
+ });
103
+ // 获取 rowKey
104
+ var rowKeyProp = (0, _vue.computed)(function () {
105
+ return props.rowKey || 'key';
106
+ });
107
+ // 判断是否为树形数据
108
+ var isTreeData = (0, _vue.computed)(function () {
109
+ var data = props.dataSource || [];
110
+ return data.some(function (item) {
111
+ var children = item[childrenColumnName.value];
112
+ return children && Array.isArray(children) && children.length > 0;
113
+ });
114
+ });
115
+ // 使用树形数据 hook
116
+ var treeDataResult = (0, _useTreeData.useTreeData)({
117
+ data: toRef(props, 'dataSource'),
118
+ childrenColumnName: childrenColumnName.value,
119
+ rowKey: rowKeyProp.value,
120
+ defaultExpandedRowKeys: props.defaultExpandedRowKeys,
121
+ expandedRowKeys: props.expandedRowKeys ? toRef(props, 'expandedRowKeys') : undefined,
122
+ defaultExpandAllRows: props.defaultExpandAllRows,
123
+ onExpandedRowsChange: function onExpandedRowsChange(keys) {
124
+ emit('expandedRowsChange', keys);
125
+ }
126
+ });
127
+ // 处理展开/折叠
128
+ var handleExpand = function handleExpand(node) {
129
+ treeDataResult.toggle(node.key);
130
+ emit('expand', !node.expanded, node.record);
131
+ };
132
+ // 判断是否启用虚拟滚动
133
+ var shouldEnableVirtual = (0, _vue.computed)(function () {
134
+ var _props$scroll2, _props$dataSource;
135
+ if (!virtualConfig.value) return false;
136
+ if (!((_props$scroll2 = props.scroll) !== null && _props$scroll2 !== void 0 && _props$scroll2.y)) return false;
137
+ // 对于树形数据,使用扁平化后的数据长度
138
+ var dataLength = isTreeData.value ? treeDataResult.flattenedData.value.length : ((_props$dataSource = props.dataSource) === null || _props$dataSource === void 0 ? void 0 : _props$dataSource.length) || 0;
139
+ return dataLength >= virtualConfig.value.threshold;
140
+ });
141
+ // 虚拟滚动的数据数量(树形数据使用扁平化后的长度)
142
+ var itemCount = (0, _vue.computed)(function () {
143
+ var _props$dataSource2;
144
+ if (isTreeData.value) {
145
+ return treeDataResult.flattenedData.value.length;
146
+ }
147
+ return ((_props$dataSource2 = props.dataSource) === null || _props$dataSource2 === void 0 ? void 0 : _props$dataSource2.length) || 0;
148
+ });
149
+ // 初始化虚拟滚动
150
+ var virtualScroll = (0, _useVirtualScroll.useVirtualScroll)({
151
+ itemCount: itemCount,
152
+ containerHeight: containerHeight,
153
+ itemHeight: ((_virtualConfig$value = virtualConfig.value) === null || _virtualConfig$value === void 0 ? void 0 : _virtualConfig$value.itemHeight) || 54,
154
+ overscan: ((_virtualConfig$value2 = virtualConfig.value) === null || _virtualConfig$value2 === void 0 ? void 0 : _virtualConfig$value2.overscan) || 5,
155
+ threshold: ((_virtualConfig$value3 = virtualConfig.value) === null || _virtualConfig$value3 === void 0 ? void 0 : _virtualConfig$value3.threshold) || 100
156
+ });
157
+ // 查找并监听滚动容器
158
+ var findScrollContainer = function findScrollContainer() {
159
+ if (!tableRef.value) return null;
160
+ // 查找 .ant-table-body 元素(这是实际的滚动容器)
161
+ var tableElement = tableRef.value.$el || tableRef.value;
162
+ var scrollBody = tableElement.querySelector('.ant-table-body');
163
+ return scrollBody;
164
+ };
165
+ // 设置滚动监听
166
+ var setupScrollListener = function setupScrollListener() {
167
+ (0, _vue.nextTick)(function () {
168
+ var container = findScrollContainer();
169
+ if (container) {
170
+ scrollContainerRef.value = container;
171
+ container.addEventListener('scroll', virtualScroll.handleScroll);
172
+ }
173
+ });
174
+ };
175
+ // 移除滚动监听
176
+ var removeScrollListener = function removeScrollListener() {
177
+ if (scrollContainerRef.value) {
178
+ scrollContainerRef.value.removeEventListener('scroll', virtualScroll.handleScroll);
179
+ scrollContainerRef.value = undefined;
180
+ }
181
+ };
182
+ // 监听虚拟滚动启用状态变化
183
+ (0, _vue.watch)(shouldEnableVirtual, function (enabled) {
184
+ if (enabled) {
185
+ setupScrollListener();
186
+ } else {
187
+ removeScrollListener();
188
+ }
189
+ });
190
+ // 生命周期
191
+ (0, _vue.onMounted)(function () {
192
+ if (shouldEnableVirtual.value) {
193
+ setupScrollListener();
194
+ }
195
+ });
196
+ (0, _vue.onBeforeUnmount)(function () {
197
+ removeScrollListener();
198
+ });
199
+ // 暴露方法
200
+ expose({
201
+ scrollTo: virtualScroll.scrollTo,
202
+ scrollToIndex: virtualScroll.scrollToIndex,
203
+ // 树形数据相关方法
204
+ expand: treeDataResult.expand,
205
+ collapse: treeDataResult.collapse,
206
+ toggle: treeDataResult.toggle,
207
+ expandAll: treeDataResult.expandAll,
208
+ collapseAll: treeDataResult.collapseAll,
209
+ expandTo: treeDataResult.expandTo,
210
+ isExpanded: treeDataResult.isExpanded
211
+ });
212
+ // 渲染函数
213
+ return function () {
214
+ var _props$indentSize;
215
+ // 不使用虚拟滚动的情况
216
+ if (!shouldEnableVirtual.value) {
217
+ return (0, _vue.createVNode)(_antDesignVue.Table, (0, _objectSpread2.default)((0, _objectSpread2.default)({
218
+ "ref": tableRef
219
+ }, attrs), props), slots);
220
+ }
221
+ // 使用虚拟滚动
222
+ var startIndex = virtualScroll.startIndex,
223
+ endIndex = virtualScroll.endIndex,
224
+ offsetY = virtualScroll.offsetY,
225
+ totalHeight = virtualScroll.totalHeight;
226
+ // 准备虚拟滚动数据
227
+ var virtualDataSource;
228
+ var needsCustomIndent = false;
229
+ var indentSize = (_props$indentSize = props.indentSize) !== null && _props$indentSize !== void 0 ? _props$indentSize : 15;
230
+ if (isTreeData.value) {
231
+ // 树形数据:使用扁平化后的数据
232
+ var flatData = treeDataResult.flattenedData.value;
233
+ var visibleNodes = flatData.slice(startIndex.value, endIndex.value);
234
+ // 使用 Proxy 代理原始 record,确保修改能同步到原始数据
235
+ virtualDataSource = visibleNodes.map(function (node) {
236
+ return new Proxy(node.record, {
237
+ get: function get(target, prop) {
238
+ if (prop === '__virtual_tree_node__') {
239
+ return node;
240
+ }
241
+ return Reflect.get(target, prop);
242
+ },
243
+ set: function set(target, prop, value) {
244
+ if (prop !== '__virtual_tree_node__') {
245
+ return Reflect.set(target, prop, value);
246
+ }
247
+ return true;
248
+ },
249
+ has: function has(target, prop) {
250
+ if (prop === '__virtual_tree_node__') {
251
+ return true;
252
+ }
253
+ return Reflect.has(target, prop);
254
+ },
255
+ ownKeys: function ownKeys(target) {
256
+ return [].concat((0, _toConsumableArray2.default)(Reflect.ownKeys(target)), ['__virtual_tree_node__']);
257
+ },
258
+ getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {
259
+ if (prop === '__virtual_tree_node__') {
260
+ return {
261
+ configurable: true,
262
+ enumerable: false,
263
+ value: node
264
+ };
265
+ }
266
+ return Reflect.getOwnPropertyDescriptor(target, prop);
267
+ }
268
+ });
269
+ });
270
+ needsCustomIndent = true;
271
+ } else {
272
+ // 普通数据:直接切片
273
+ virtualDataSource = (props.dataSource || []).slice(startIndex.value, endIndex.value);
274
+ }
275
+ // 处理列,添加树形展开功能
276
+ var processedColumns = props.columns;
277
+ if (needsCustomIndent && processedColumns && processedColumns.length > 0) {
278
+ // 克隆 columns,修改第一列以添加展开按钮和缩进
279
+ processedColumns = processedColumns.map(function (col, colIndex) {
280
+ if (colIndex === 0) {
281
+ var originalRender = col.customRender;
282
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, col), {}, {
283
+ customRender: function customRender(renderProps) {
284
+ var record = renderProps.record,
285
+ text = renderProps.text,
286
+ index = renderProps.index;
287
+ var treeNode = record.__virtual_tree_node__;
288
+ if (!treeNode) {
289
+ // 非树形数据行,使用原始渲染
290
+ if (originalRender) {
291
+ return originalRender(renderProps);
292
+ }
293
+ return text;
294
+ }
295
+ var level = treeNode.level,
296
+ hasChildren = treeNode.hasChildren,
297
+ expanded = treeNode.expanded;
298
+ var indentStyle = {
299
+ paddingLeft: "".concat(level * indentSize, "px"),
300
+ display: 'inline-flex',
301
+ alignItems: 'center'
302
+ };
303
+ var content = originalRender ? originalRender(renderProps) : text;
304
+ return (0, _vue.createVNode)("span", {
305
+ "style": indentStyle
306
+ }, [(0, _vue.createVNode)(ExpandIcon, {
307
+ "expanded": expanded,
308
+ "hasChildren": hasChildren,
309
+ "onExpand": function onExpand() {
310
+ return handleExpand(treeNode);
311
+ }
312
+ }, null), (0, _vue.createVNode)("span", null, [content])]);
313
+ }
314
+ });
315
+ }
316
+ return col;
317
+ });
318
+ }
319
+ // 自定义 body 组件
320
+ var customComponents = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props.components || {}), {}, {
321
+ body: {
322
+ wrapper: function wrapper(bodyProps, _ref2) {
323
+ var _processedColumns, _bodySlots$default, _processedColumns2;
324
+ var bodySlots = _ref2.slots;
325
+ // 计算底部占位高度
326
+ var accumulatedHeight = offsetY.value;
327
+ for (var i = startIndex.value; i < endIndex.value; i++) {
328
+ accumulatedHeight += virtualScroll.getItemHeight(i);
329
+ }
330
+ var bottomHeight = totalHeight.value - accumulatedHeight;
331
+ return (0, _vue.createVNode)("tbody", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, bodyProps), {}, {
332
+ "class": "ant-table-tbody"
333
+ }), [offsetY.value > 0 && (0, _vue.createVNode)("tr", {
334
+ "aria-hidden": "true",
335
+ "style": {
336
+ height: 0
337
+ }
338
+ }, [(0, _vue.createVNode)("td", {
339
+ "style": {
340
+ padding: 0,
341
+ border: 0,
342
+ height: "".concat(offsetY.value, "px")
343
+ },
344
+ "colSpan": ((_processedColumns = processedColumns) === null || _processedColumns === void 0 ? void 0 : _processedColumns.length) || 1
345
+ }, null)]), (_bodySlots$default = bodySlots.default) === null || _bodySlots$default === void 0 ? void 0 : _bodySlots$default.call(bodySlots), bottomHeight > 0 && (0, _vue.createVNode)("tr", {
346
+ "aria-hidden": "true",
347
+ "style": {
348
+ height: 0
349
+ }
350
+ }, [(0, _vue.createVNode)("td", {
351
+ "style": {
352
+ padding: 0,
353
+ border: 0,
354
+ height: "".concat(bottomHeight, "px")
355
+ },
356
+ "colSpan": ((_processedColumns2 = processedColumns) === null || _processedColumns2 === void 0 ? void 0 : _processedColumns2.length) || 1
357
+ }, null)])]);
358
+ }
359
+ }
360
+ });
361
+ // 移除树形数据的 children 配置,因为我们自己处理
362
+ var tableProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
363
+ dataSource: virtualDataSource,
364
+ columns: processedColumns,
365
+ components: customComponents
366
+ }, isTreeData.value ? {
367
+ childrenColumnName: '__disabled__'
368
+ } : {});
369
+ return (0, _vue.createVNode)(_antDesignVue.Table, (0, _objectSpread2.default)((0, _objectSpread2.default)({
370
+ "ref": tableRef
371
+ }, attrs), tableProps), slots);
372
+ };
373
+ }
374
+ });
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _vue = require("vue");
8
+ var _useVirtualScroll = require("./useVirtualScroll");
9
+ /**
10
+ * 虚拟滚动 Body 组件
11
+ * 用于替代 Table 的默认 body
12
+ */
13
+ var _default = exports.default = (0, _vue.defineComponent)({
14
+ name: 'VirtualBody',
15
+ props: {
16
+ data: {
17
+ type: Array,
18
+ required: true
19
+ },
20
+ scrollY: {
21
+ type: Number,
22
+ required: true
23
+ },
24
+ itemHeight: {
25
+ type: [Number, Function],
26
+ default: 54
27
+ },
28
+ overscan: {
29
+ type: Number,
30
+ default: 5
31
+ },
32
+ threshold: {
33
+ type: Number,
34
+ default: 100
35
+ }
36
+ },
37
+ setup: function setup(props, _ref) {
38
+ var slots = _ref.slots;
39
+ var itemCount = (0, _vue.computed)(function () {
40
+ return props.data.length;
41
+ });
42
+ // 初始化虚拟滚动
43
+ var virtualScroll = (0, _useVirtualScroll.useVirtualScroll)({
44
+ itemCount: itemCount,
45
+ containerHeight: props.scrollY,
46
+ itemHeight: props.itemHeight,
47
+ overscan: props.overscan,
48
+ threshold: props.threshold
49
+ });
50
+ // 判断是否启用虚拟滚动
51
+ var isVirtualEnabled = (0, _vue.computed)(function () {
52
+ return props.data.length >= (props.threshold || 100);
53
+ });
54
+ return function () {
55
+ var _slots$default2;
56
+ var data = props.data;
57
+ if (!isVirtualEnabled.value) {
58
+ var _slots$default;
59
+ // 数据量小,不使用虚拟滚动,渲染所有行
60
+ return (0, _vue.createVNode)("tbody", {
61
+ "class": "ant-table-tbody"
62
+ }, [(_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)]);
63
+ }
64
+ // 使用虚拟滚动
65
+ var startIndex = virtualScroll.startIndex,
66
+ endIndex = virtualScroll.endIndex,
67
+ offsetY = virtualScroll.offsetY,
68
+ totalHeight = virtualScroll.totalHeight,
69
+ visibleCount = virtualScroll.visibleCount;
70
+ // 计算底部占位高度
71
+ var bottomHeight = totalHeight.value - offsetY.value;
72
+ var accumulatedHeight = offsetY.value;
73
+ for (var i = startIndex.value; i < endIndex.value; i++) {
74
+ accumulatedHeight += virtualScroll.getItemHeight(i);
75
+ }
76
+ var actualBottomHeight = totalHeight.value - accumulatedHeight;
77
+ return (0, _vue.createVNode)("tbody", {
78
+ "class": "ant-table-tbody"
79
+ }, [offsetY.value > 0 && (0, _vue.createVNode)("tr", {
80
+ "aria-hidden": "true",
81
+ "class": "ant-table-virtual-placeholder"
82
+ }, [(0, _vue.createVNode)("td", {
83
+ "style": {
84
+ padding: 0,
85
+ border: 0,
86
+ height: "".concat(offsetY.value, "px")
87
+ }
88
+ }, null)]), (_slots$default2 = slots.default) === null || _slots$default2 === void 0 ? void 0 : _slots$default2.call(slots), actualBottomHeight > 0 && (0, _vue.createVNode)("tr", {
89
+ "aria-hidden": "true",
90
+ "class": "ant-table-virtual-placeholder"
91
+ }, [(0, _vue.createVNode)("td", {
92
+ "style": {
93
+ padding: 0,
94
+ border: 0,
95
+ height: "".concat(actualBottomHeight, "px")
96
+ }
97
+ }, null)])]);
98
+ };
99
+ }
100
+ });
@@ -4,10 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.flattenTree = exports.findAllChildren = void 0;
7
+ exports.flattenTree = exports.findAllChildren = exports._headerProps = exports._contentProps = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
10
  var _lodashEs = require("lodash");
11
+ var _table = require("ant-design-vue/es/table");
11
12
  // 扁平化数据
12
13
 
13
14
  var _flattenTree = exports.flattenTree = function flattenTree(tree) {
@@ -44,4 +45,45 @@ var findAllChildren = exports.findAllChildren = function findAllChildren() {
44
45
  }
45
46
  recursive(parentId);
46
47
  return result;
47
- };
48
+ };
49
+ var _headerProps = exports._headerProps = {
50
+ mode: {
51
+ type: [String, undefined],
52
+ default: undefined
53
+ },
54
+ modeValue: {
55
+ type: String,
56
+ default: 'TABLE'
57
+ }
58
+ };
59
+ var _contentProps = exports._contentProps = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _table.tableProps)()), _headerProps), {}, {
60
+ dataSource: {
61
+ type: Array,
62
+ default: function _default() {
63
+ return [];
64
+ }
65
+ },
66
+ columns: {
67
+ type: Array,
68
+ default: function _default() {
69
+ return [];
70
+ }
71
+ },
72
+ expandedRowKeys: {
73
+ type: Array,
74
+ default: function _default() {
75
+ return [];
76
+ }
77
+ },
78
+ rowSelection: {
79
+ type: Object
80
+ },
81
+ rowKey: {
82
+ type: [String, Function],
83
+ default: 'id'
84
+ },
85
+ height: {
86
+ type: Number,
87
+ default: 500
88
+ }
89
+ });
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _VirtualTable = _interopRequireDefault(require("./VirtualTable.js"));
9
- _VirtualTable.default.install = function (app) {
10
- app.component(_VirtualTable.default.name, _VirtualTable.default);
8
+ var _Table = _interopRequireDefault(require("./Table"));
9
+ _Table.default.install = function (app) {
10
+ app.component(_Table.default.name, _Table.default);
11
11
  };
12
- var _default = exports.default = _VirtualTable.default;
12
+ var _default = exports.default = _Table.default;
@@ -12,9 +12,11 @@ var genVirtualTableStyle = function genVirtualTableStyle() {
12
12
  display: 'flex',
13
13
  'flex-direction': 'column',
14
14
  '.virtual-table-header': {
15
+ overflow: 'hidden',
15
16
  '.ant-table': {
16
17
  '.ant-table-container': {
17
18
  '.ant-table-content': {
19
+ overflow: 'hidden !important',
18
20
  '.ant-table-tbody': {
19
21
  display: 'none'
20
22
  }
@@ -27,6 +29,10 @@ var genVirtualTableStyle = function genVirtualTableStyle() {
27
29
  position: 'relative',
28
30
  'min-height': '100px'
29
31
  },
32
+ '.virtual-table-header-fixed': {
33
+ // 位移的容器,提升位移动画性能
34
+ 'will-change': 'transform'
35
+ },
30
36
  '.virtual-table-row-expand-icon': {
31
37
  'margin-right': '8px',
32
38
  'font-size': 'relative',