@kdcloudjs/table 1.0.2 → 1.1.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 (71) hide show
  1. package/dist/@kdcloudjs/table.css +1 -1
  2. package/dist/@kdcloudjs/table.js +271 -187
  3. package/dist/@kdcloudjs/table.js.map +1 -1
  4. package/dist/@kdcloudjs/table.min.css +1 -1
  5. package/dist/@kdcloudjs/table.min.js +7 -7
  6. package/dist/@kdcloudjs/table.min.js.map +1 -1
  7. package/es/table/base/calculations.js +1 -1
  8. package/es/table/base/empty.js +2 -2
  9. package/es/table/base/header.js +7 -11
  10. package/es/table/base/html-table.js +13 -22
  11. package/es/table/base/styles.d.ts +10 -0
  12. package/es/table/base/styles.js +13 -3
  13. package/es/table/common-views.js +2 -2
  14. package/es/table/pipeline/features/columnDrag.js +62 -21
  15. package/es/table/pipeline/features/contextMenu.js +37 -22
  16. package/es/table/pipeline/features/multiSelect.js +85 -79
  17. package/es/table/pipeline/features/rowDetail.js +2 -1
  18. package/es/table/pipeline/features/rowGrouping.js +2 -1
  19. package/es/table/pipeline/features/treeMode.js +3 -2
  20. package/es/table/pipeline/pipeline.d.ts +4 -0
  21. package/es/table/pipeline/pipeline.js +17 -0
  22. package/es/table/pivot/pivot-utils/convert-utils.js +4 -2
  23. package/lib/table/base/calculations.js +1 -1
  24. package/lib/table/base/empty.js +2 -2
  25. package/lib/table/base/header.js +8 -11
  26. package/lib/table/base/html-table.js +14 -22
  27. package/lib/table/base/styles.d.ts +10 -0
  28. package/lib/table/base/styles.js +13 -3
  29. package/lib/table/common-views.js +1 -1
  30. package/lib/table/pipeline/features/columnDrag.js +63 -22
  31. package/lib/table/pipeline/features/contextMenu.js +37 -22
  32. package/lib/table/pipeline/features/multiSelect.js +81 -75
  33. package/lib/table/pipeline/features/rowDetail.js +3 -1
  34. package/lib/table/pipeline/features/rowGrouping.js +3 -1
  35. package/lib/table/pipeline/features/treeMode.js +4 -2
  36. package/lib/table/pipeline/pipeline.d.ts +4 -0
  37. package/lib/table/pipeline/pipeline.js +17 -0
  38. package/lib/table/pivot/pivot-utils/convert-utils.js +6 -2
  39. package/package.json +1 -1
  40. package/es/table/pipeline/features/__test__/multiSelect.test.d.ts +0 -1
  41. package/es/table/pipeline/features/__test__/multiSelect.test.js +0 -152
  42. package/es/table/pipeline/features/__test__/rowDetail.test.d.ts +0 -1
  43. package/es/table/pipeline/features/__test__/rowDetail.test.js +0 -223
  44. package/es/table/pipeline/features/__test__/rowGrouping.test.d.ts +0 -1
  45. package/es/table/pipeline/features/__test__/rowGrouping.test.js +0 -120
  46. package/es/table/pipeline/features/__test__/singleSelect.test.d.ts +0 -1
  47. package/es/table/pipeline/features/__test__/singleSelect.test.js +0 -191
  48. package/es/table/pipeline/features/__test__/sort.test.d.ts +0 -1
  49. package/es/table/pipeline/features/__test__/sort.test.js +0 -213
  50. package/es/table/pipeline/features/__test__/tips.test.d.ts +0 -1
  51. package/es/table/pipeline/features/__test__/tips.test.js +0 -123
  52. package/es/table/pipeline/features/__test__/treeMode.test.d.ts +0 -1
  53. package/es/table/pipeline/features/__test__/treeMode.test.js +0 -202
  54. package/es/table/pipeline/features/filter/__test__/Filter.test.d.ts +0 -1
  55. package/es/table/pipeline/features/filter/__test__/Filter.test.js +0 -29
  56. package/lib/table/pipeline/features/__test__/multiSelect.test.d.ts +0 -1
  57. package/lib/table/pipeline/features/__test__/multiSelect.test.js +0 -163
  58. package/lib/table/pipeline/features/__test__/rowDetail.test.d.ts +0 -1
  59. package/lib/table/pipeline/features/__test__/rowDetail.test.js +0 -230
  60. package/lib/table/pipeline/features/__test__/rowGrouping.test.d.ts +0 -1
  61. package/lib/table/pipeline/features/__test__/rowGrouping.test.js +0 -129
  62. package/lib/table/pipeline/features/__test__/singleSelect.test.d.ts +0 -1
  63. package/lib/table/pipeline/features/__test__/singleSelect.test.js +0 -201
  64. package/lib/table/pipeline/features/__test__/sort.test.d.ts +0 -1
  65. package/lib/table/pipeline/features/__test__/sort.test.js +0 -220
  66. package/lib/table/pipeline/features/__test__/tips.test.d.ts +0 -1
  67. package/lib/table/pipeline/features/__test__/tips.test.js +0 -133
  68. package/lib/table/pipeline/features/__test__/treeMode.test.d.ts +0 -1
  69. package/lib/table/pipeline/features/__test__/treeMode.test.js +0 -206
  70. package/lib/table/pipeline/features/filter/__test__/Filter.test.d.ts +0 -1
  71. package/lib/table/pipeline/features/filter/__test__/Filter.test.js +0 -36
@@ -191,7 +191,7 @@ function getHorizontalRenderRange(_ref) {
191
191
  return {
192
192
  leftIndex: leftIndex,
193
193
  leftBlank: leftBlank,
194
- rightIndex: leftIndex + centerCount + flat.right.length,
194
+ rightIndex: leftIndex + centerCount,
195
195
  rightBlank: rightBlank
196
196
  };
197
197
  } // 一顿计算,将表格本次渲染所需要的数据都给算出来(代码写得有点乱,有较大优化空间)
@@ -23,10 +23,10 @@ export function EmptyHtmlTable(_ref) {
23
23
  }, /*#__PURE__*/React.createElement(Colgroup, {
24
24
  descriptors: descriptors
25
25
  }), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", {
26
- className: cx(Classes.tableRow, 'first', 'last', 'no-hover'),
26
+ className: cx(Classes.tableRow, Classes.first, Classes.last, 'no-hover'),
27
27
  "data-rowindex": 0
28
28
  }, /*#__PURE__*/React.createElement("td", {
29
- className: cx(Classes.tableCell, 'first', 'last'),
29
+ className: cx(Classes.tableCell, Classes.first, Classes.last),
30
30
  colSpan: descriptors.length,
31
31
  style: {
32
32
  height: emptyCellHeight !== null && emptyCellHeight !== void 0 ? emptyCellHeight : 200
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
1
2
  import _extends from "@babel/runtime-corejs3/helpers/extends";
2
3
  import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
3
4
  import _flatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/flat";
@@ -241,6 +242,8 @@ export default function TableHeader(_ref2) {
241
242
  var rightFlatCount = flat.right.length;
242
243
 
243
244
  var thead = _mapInstanceProperty(_context4 = headerRenderInfo.leveled).call(_context4, function (wrappedCols, level) {
245
+ var _cx2;
246
+
244
247
  var _wrappedCols = _concatInstanceProperty(wrappedCols).call(wrappedCols); // 左中右区域渲染,分组列可能单独位于一个区域,此时其他区域也需要适配分组的高度
245
248
  // rowspan 需要空白的列头去占位, 需要补充额外的空白列头
246
249
 
@@ -258,6 +261,8 @@ export default function TableHeader(_ref2) {
258
261
  var _a, _b, _c;
259
262
 
260
263
  if (wrapped.type === 'normal') {
264
+ var _cx;
265
+
261
266
  var colIndex = wrapped.colIndex,
262
267
  colSpan = wrapped.colSpan,
263
268
  isLeaf = wrapped.isLeaf,
@@ -277,13 +282,7 @@ export default function TableHeader(_ref2) {
277
282
  var cell = /*#__PURE__*/React.createElement("th", _extends({
278
283
  key: colIndex
279
284
  }, headerCellProps, {
280
- className: cx(Classes.tableHeaderCell, headerCellProps.className, {
281
- first: colIndex === 0,
282
- last: colIndex + colSpan === fullFlatCount,
283
- 'lock-left': colIndex < leftFlatCount || theaderPosition === 'left',
284
- 'lock-right': colIndex >= fullFlatCount - rightFlatCount || theaderPosition === 'right',
285
- leaf: wrapped.isLeaf
286
- }),
285
+ className: cx(Classes.tableHeaderCell, headerCellProps.className, (_cx = {}, _defineProperty(_cx, Classes.first, colIndex === 0), _defineProperty(_cx, Classes.last, colIndex + colSpan === fullFlatCount), _defineProperty(_cx, Classes.lockLeft, colIndex < leftFlatCount || theaderPosition === 'left'), _defineProperty(_cx, Classes.lockRight, colIndex >= fullFlatCount - rightFlatCount || theaderPosition === 'right'), _defineProperty(_cx, Classes.leaf, wrapped.isLeaf), _cx)),
287
286
  colSpan: colSpan,
288
287
  rowSpan: isLeaf ? rowCount - level : undefined,
289
288
  style: _extends(_extends({
@@ -314,10 +313,7 @@ export default function TableHeader(_ref2) {
314
313
 
315
314
  return /*#__PURE__*/React.createElement("tr", {
316
315
  key: level,
317
- className: cx(Classes.tableHeaderRow, {
318
- first: level === 0,
319
- last: level === rowCount - 1
320
- })
316
+ className: cx(Classes.tableHeaderRow, (_cx2 = {}, _defineProperty(_cx2, Classes.first, level === 0), _defineProperty(_cx2, Classes.last, level === rowCount - 1), _cx2))
321
317
  }, headerCells);
322
318
  });
323
319
 
@@ -1,4 +1,5 @@
1
1
  import _extends from "@babel/runtime-corejs3/helpers/extends";
2
+ import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
2
3
  import _flatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/flat";
3
4
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
4
5
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
@@ -31,17 +32,12 @@ export function HtmlTable(_ref) {
31
32
  }), /*#__PURE__*/React.createElement(tbodyHtmlTag, null, _mapInstanceProperty(data).call(data, renderRow)));
32
33
 
33
34
  function renderRow(record, i) {
34
- var _context;
35
+ var _cx, _context;
35
36
 
36
37
  var rowIndex = verInfo.offset + i;
37
38
  spanManager.stripUpwards(rowIndex);
38
39
  var rowProps = getRowProps(record, rowIndex);
39
- var rowClass = cx(Classes.tableRow, {
40
- first: rowIndex === verInfo.first,
41
- last: rowIndex === verInfo.last,
42
- even: rowIndex % 2 === 0,
43
- odd: rowIndex % 2 === 1
44
- }, rowProps === null || rowProps === void 0 ? void 0 : rowProps.className);
40
+ var rowClass = cx(Classes.tableRow, (_cx = {}, _defineProperty(_cx, Classes.first, rowIndex === verInfo.first), _defineProperty(_cx, Classes.last, rowIndex === verInfo.last), _defineProperty(_cx, Classes.even, rowIndex % 2 === 0), _defineProperty(_cx, Classes.odd, rowIndex % 2 === 1), _cx), rowProps === null || rowProps === void 0 ? void 0 : rowProps.className);
45
41
 
46
42
  var visibleColumnDescriptor = _concatInstanceProperty(_context = hozInfo.visible).call(_context); // 左中右区域渲染,存在融合单元格时需要适配rowspan属性
47
43
  // 如果固定的列均存在融合单元格,需空白一列做占位,否则融合的单元格不会渲染,导致显示异常
@@ -77,6 +73,8 @@ export function HtmlTable(_ref) {
77
73
  }
78
74
 
79
75
  function renderBodyCell(record, rowIndex, column, colIndex) {
76
+ var _cx2;
77
+
80
78
  var _a, _b, _c;
81
79
 
82
80
  if (spanManager.testSkip(rowIndex, colIndex)) {
@@ -106,20 +104,20 @@ export function HtmlTable(_ref) {
106
104
  if (cellProps.rowSpan != null) {
107
105
  rowSpan = cellProps.rowSpan;
108
106
  }
107
+ }
108
+
109
+ var hasSpan = colSpan > 1 || rowSpan > 1;
110
+
111
+ if (hasSpan) {
112
+ spanManager.add(rowIndex, colIndex, colSpan, rowSpan);
109
113
  } // rowSpan/colSpan 不能过大,避免 rowSpan/colSpan 影响因虚拟滚动而未渲染的单元格
110
114
 
111
115
 
112
116
  rowSpan = Math.min(rowSpan, verInfo.limit - rowIndex);
113
- colSpan = Math.min(colSpan, leftFlatCount + hoz.rightIndex + rightFlatCount - colIndex); // todo: 右侧有列固定的情况下colSpan计算不对,这里先限制一下
117
+ colSpan = Math.min(colSpan, hozInfo.visible.length - colIndex); // todo: 右侧有列固定的情况下colSpan计算不对,这里先限制一下
114
118
 
115
119
  rowSpan = Math.max(rowSpan, 1);
116
120
  colSpan = Math.max(colSpan, 1);
117
- var hasSpan = colSpan > 1 || rowSpan > 1;
118
-
119
- if (hasSpan) {
120
- spanManager.add(rowIndex, colIndex, colSpan, rowSpan);
121
- }
122
-
123
121
  var positionStyle = {};
124
122
  var scrollbarWidth = hasScrollY ? getScrollbarSize().width : 0;
125
123
 
@@ -134,14 +132,7 @@ export function HtmlTable(_ref) {
134
132
  return /*#__PURE__*/React.createElement('td', _extends(_extends(_extends(_extends({
135
133
  key: colIndex
136
134
  }, cellProps), {
137
- className: cx(Classes.tableCell, cellProps.className, {
138
- // class
139
- first: colIndex === 0,
140
- last: colIndex + colSpan === fullFlatCount,
141
- 'lock-left': colIndex < leftFlatCount || tbodyPosition === 'left',
142
- 'lock-right': colIndex >= fullFlatCount - rightFlatCount,
143
- 'row-span': rowSpan > 1
144
- })
135
+ className: cx(Classes.tableCell, cellProps.className, (_cx2 = {}, _defineProperty(_cx2, Classes.first, colIndex === 0), _defineProperty(_cx2, Classes.last, colIndex + colSpan === fullFlatCount), _defineProperty(_cx2, Classes.lockLeft, colIndex < leftFlatCount || tbodyPosition === 'left'), _defineProperty(_cx2, Classes.lockRight, colIndex >= fullFlatCount - rightFlatCount), _defineProperty(_cx2, Classes.rowSpan, rowSpan > 1), _cx2))
145
136
  }), hasSpan ? {
146
137
  colSpan: colSpan,
147
138
  rowSpan: rowSpan
@@ -50,6 +50,16 @@ export declare const Classes: {
50
50
  readonly rowDetailContainer: string;
51
51
  readonly rowDetailItem: string;
52
52
  readonly emptyColCell: string;
53
+ readonly first: string;
54
+ readonly last: string;
55
+ readonly even: string;
56
+ readonly odd: string;
57
+ readonly lockLeft: string;
58
+ readonly lockRight: string;
59
+ readonly rowSpan: string;
60
+ readonly leaf: string;
61
+ readonly expanded: string;
62
+ readonly collapsed: string;
53
63
  };
54
64
  export declare const MenuClasses: {
55
65
  menu: string;
@@ -62,7 +62,17 @@ export var Classes = {
62
62
  fixedRight: "".concat(prefix, "fixed-right"),
63
63
  rowDetailContainer: "".concat(prefix, "row-detail-container"),
64
64
  rowDetailItem: "".concat(prefix, "row-detail-item"),
65
- emptyColCell: "".concat(prefix, "empty-col-cell")
65
+ emptyColCell: "".concat(prefix, "empty-col-cell"),
66
+ first: "".concat(prefix, "first"),
67
+ last: "".concat(prefix, "last"),
68
+ even: "".concat(prefix, "even"),
69
+ odd: "".concat(prefix, "odd"),
70
+ lockLeft: "".concat(prefix, "lock-left"),
71
+ lockRight: "".concat(prefix, "lock-right"),
72
+ rowSpan: "".concat(prefix, "row-span"),
73
+ leaf: "".concat(prefix, "leaf"),
74
+ expanded: "".concat(prefix, "expanded"),
75
+ collapsed: "".concat(prefix, "collapsed")
66
76
  };
67
77
  export var MenuClasses = {
68
78
  menu: "".concat(prefix, "table-menu"),
@@ -81,7 +91,7 @@ var Z = {
81
91
  scrollItem: 30,
82
92
  loadingIndicator: 40
83
93
  };
84
- var outerBorderStyleMixin = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-top: 1px solid #cccccc;\n border-right: 1px solid #cccccc;\n border-bottom: 1px solid #cccccc;\n border-left: 1px solid #cccccc;\n\n td.first,\n th.first {\n border-left: none;\n }\n td.last,\n th.last {\n --border-right: none;\n }\n\n thead tr.first th,\n tbody tr.first td {\n border-top: none;\n }\n &.has-footer tfoot tr.last td {\n border-bottom: none;\n }\n &:not(.has-footer) tbody tr.last td {\n border-bottom: none;\n }\n td.row-span:not(.first){\n border-left: var(---cell-border-vertical);\n }\n td.row-span:not(.last){\n border-right: var(---cell-border-vertical);\n }\n"])));
94
+ var outerBorderStyleMixin = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-top: 1px solid #cccccc;\n border-right: 1px solid #cccccc;\n border-bottom: 1px solid #cccccc;\n border-left: 1px solid #cccccc;\n\n td.", ",\n th.", " {\n border-left: none;\n }\n td.", ",\n th.", " {\n --border-right: none;\n }\n\n thead tr.", " th,\n tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tfoot tr.", " td {\n border-bottom: none;\n }\n &:not(.has-footer) tbody tr.", " td {\n border-bottom: none;\n }\n td.", ":not(.", "){\n border-left: var(---cell-border-vertical);\n }\n td.", ":not(.", "){\n border-right: var(---cell-border-vertical);\n }\n"])), Classes.first, Classes.first, Classes.last, Classes.last, Classes.first, Classes.first, Classes.last, Classes.last, Classes.rowSpan, Classes.first, Classes.rowSpan, Classes.last);
85
95
  export var defaultCSSVariables = {
86
96
  '--row-height': '48px',
87
97
  '--color': '#333',
@@ -111,7 +121,7 @@ export var defaultCSSVariables = {
111
121
  '--header-cell-border-vertical': '1px solid #dfe3e8'
112
122
  };
113
123
  export var variableConst = getCssVariableText(defaultCSSVariables);
114
- export var StyledArtTableWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n user-select:none;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.leaf {\n border-right: none;\n border-bottom: none;\n }\n\n tr.first th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.first {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.first {\n border-left: var(--cell-border-vertical);\n }\n tr.first td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.first td {\n border-top: none;\n }\n &.has-footer tbody tr.last td {\n border-bottom: none;\n }\n\n .lock-left,\n .lock-right {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: auto;\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n \n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder);
124
+ export var StyledArtTableWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n user-select:none;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.", " {\n border-right: none;\n border-bottom: none;\n }\n\n tr.", " th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.", " {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.", " {\n border-left: var(--cell-border-vertical);\n }\n tr.", " td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tbody tr.", " td {\n border-bottom: none;\n }\n\n .", ",\n .", " {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: auto;\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n \n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.leaf, Classes.first, Classes.first, Classes.first, Classes.first, Classes.first, Classes.last, Classes.lockLeft, Classes.lockRight, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder);
115
125
  export var ButtonCSS = css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n ", "\n //#region \u6309\u94AE\n .", "{\n color: var(--color);\n background:#ffffff;\n border:1px solid var(--strong-border-color);\n border-radius: 2px;\n cursor: pointer;\n &:hover{\n color: var(--primary-color);\n border:1px solid var(--primary-color);\n }\n }\n .", " {\n color:#ffffff;\n background-color: var(--primary-color);\n border:none;\n &:hover{\n color:#ffffff;\n background-color: var(--primary-color-level2);\n border:none;\n }\n }\n//#endregion\n"])), variableConst, Classes.button, Classes.buttonPrimary);
116
126
 
117
127
  function getCssVariableText(obj) {
@@ -5,9 +5,9 @@ var _templateObject, _templateObject2, _templateObject3;
5
5
 
6
6
  import React from 'react';
7
7
  import styled from 'styled-components';
8
- import { MenuClasses } from './base/styles';
8
+ import { MenuClasses, Classes } from './base/styles';
9
9
  export var InlineFlexCell = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n"])));
10
- export var ExpansionCell = styled(InlineFlexCell)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n &.leaf {\n cursor: default;\n }\n\n .expansion-icon {\n fill: #999;\n flex: 0 0 16px;\n transition: transform 200ms;\n\n &.expanded {\n transform-origin: center center;\n transform: rotate(90deg);\n }\n }\n"])));
10
+ export var ExpansionCell = styled(InlineFlexCell)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n &.", " {\n cursor: default;\n }\n\n .expansion-icon {\n fill: #999;\n flex: 0 0 16px;\n transition: transform 200ms;\n\n &.", " {\n transform-origin: center center;\n transform: rotate(90deg);\n }\n }\n"])), Classes.leaf, Classes.expanded);
11
11
 
12
12
  function CaretDownIcon(props) {
13
13
  return /*#__PURE__*/React.createElement("svg", _extends({
@@ -1,29 +1,41 @@
1
1
  import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
2
2
  import _extends from "@babel/runtime-corejs3/helpers/extends";
3
+ import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
3
4
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
4
5
  import { makeRecursiveMapper, mergeCellProps, collectNodes, isLeafNode } from '../../utils';
5
6
  import { FILL_COLUMN_CODE } from './autoFill';
6
7
  var stateKey = 'columnDrag';
8
+ var SCROLL_SIZE = 30;
7
9
 
8
- function sortColumns(cloumns, sort) {
9
- var res = new Array(cloumns.length);
10
+ function sortColumns(columns, sort) {
11
+ var res = new Array(columns.length);
10
12
 
11
- while (cloumns.length) {
12
- var cloumn = cloumns.pop();
13
+ var lastColumns = _toConsumableArray(columns);
14
+
15
+ while (columns.length) {
16
+ var cloumn = columns.pop();
13
17
  res[sort[cloumn.code]] = cloumn;
14
18
  }
15
19
 
20
+ if (_filterInstanceProperty(res).call(res, Boolean).length !== lastColumns.length) {
21
+ return lastColumns;
22
+ }
23
+
16
24
  return res;
17
25
  }
18
26
 
27
+ function stopClickPropagation(e) {
28
+ e.stopPropagation();
29
+ }
30
+
19
31
  export function columnDrag() {
20
32
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21
33
  return function (pipeline) {
22
34
  var _pipeline$getStateAtK = pipeline.getStateAtKey(stateKey, {}),
23
- cloumnsSortData = _pipeline$getStateAtK.cloumnsSortData,
24
35
  cloumnsTranslateData = _pipeline$getStateAtK.cloumnsTranslateData;
25
36
 
26
- var columns = pipeline.getColumns(); // if (cloumnsSortData) {
37
+ var columns = pipeline.getColumns();
38
+ var tableBody = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.tableBody; // if (cloumnsSortData) {
27
39
  // columns = sortColumns(columns, cloumnsSortData)
28
40
  // }
29
41
 
@@ -65,28 +77,55 @@ export function columnDrag() {
65
77
  var columns = pipeline.getColumns();
66
78
 
67
79
  var _pipeline$getStateAtK2 = pipeline.getStateAtKey(stateKey, {}),
68
- cloumnsSortData = _pipeline$getStateAtK2.cloumnsSortData,
69
80
  cloumnsTranslateData = _pipeline$getStateAtK2.cloumnsTranslateData;
70
81
 
71
- if (cloumnsSortData) {
72
- columns = sortColumns(columns, cloumnsSortData);
73
- } else {
74
- cloumnsSortData = {};
75
- columns.forEach(function (item, index) {
76
- cloumnsSortData[item.code] = index;
77
- });
78
- }
79
-
82
+ var cloumnsSortData = {};
83
+ columns.forEach(function (item, index) {
84
+ cloumnsSortData[item.code] = index;
85
+ });
80
86
  var currentTarget = e.currentTarget;
81
87
  var rect = e.currentTarget.parentElement.getClientRects()[0];
82
88
  var startX = rect.left;
83
89
  var moveData = [];
84
90
  var allColumns = collectNodes(columns);
91
+ var tableBodyClientRect = tableBody.getBoundingClientRect();
92
+ var startScrollLeft = pipeline.ref.current.domHelper.virtual.scrollLeft;
93
+
94
+ var updateScrollPosition = function updateScrollPosition(client) {
95
+ var clientX = client.clientX;
96
+ var left = tableBodyClientRect.left,
97
+ width = tableBodyClientRect.width;
98
+
99
+ if (clientX + SCROLL_SIZE >= left + width) {
100
+ pipeline.ref.current.domHelper.virtual.scrollLeft += SCROLL_SIZE;
101
+ }
102
+
103
+ if (clientX - SCROLL_SIZE <= left) {
104
+ pipeline.ref.current.domHelper.virtual.scrollLeft -= SCROLL_SIZE;
105
+ }
106
+ };
107
+
108
+ var stopClickPropagationFlag = false;
85
109
 
86
110
  function handleMouseMove(e) {
87
- if (e.clientX - startX < 20) {
111
+ var client = {
112
+ clientX: e.clientX,
113
+ clientY: e.clientY
114
+ };
115
+ var scrollDistance = pipeline.ref.current.domHelper.virtual.scrollLeft - startScrollLeft;
116
+ var leftPosition = startX - scrollDistance; // 表头最左边起点
117
+
118
+ updateScrollPosition(client);
119
+
120
+ if (e.clientX - leftPosition < 20) {
88
121
  return;
89
122
  } else {
123
+ // 阻止列头点击事件,防止拖动后触发列头过滤事件
124
+ if (stopClickPropagationFlag === false) {
125
+ stopClickPropagationFlag = true;
126
+ currentTarget.addEventListener('click', stopClickPropagation);
127
+ }
128
+
90
129
  e.stopPropagation();
91
130
  }
92
131
 
@@ -123,7 +162,7 @@ export function columnDrag() {
123
162
  var replaceIndex = 0;
124
163
  var totalWitdth = getColumnWidth(columns[replaceIndex]);
125
164
 
126
- while (totalWitdth < e.clientX - startX && replaceIndex < columns.length - 1) {
165
+ while (totalWitdth < e.clientX - leftPosition && replaceIndex < columns.length - 1) {
127
166
  replaceIndex++;
128
167
  totalWitdth += getColumnWidth(columns[replaceIndex]);
129
168
  } // 需要取最新startIndex, 不能直接用makeRecursiveMapper提供的startIndex(因为map时还没添加选择列、充满列等后面use添加的列)
@@ -196,7 +235,6 @@ export function columnDrag() {
196
235
 
197
236
  window.requestAnimationFrame(function () {
198
237
  pipeline.setStateAtKey(stateKey, {
199
- cloumnsSortData: cloumnsSortData,
200
238
  cloumnsTranslateData: cloumnsTranslateData
201
239
  });
202
240
  moveData = [startIndex, replaceIndex];
@@ -208,6 +246,11 @@ export function columnDrag() {
208
246
  document.body.removeEventListener('mousemove', handleMouseMove);
209
247
  document.body.removeEventListener('mouseup', handleMouseUp);
210
248
  window.requestAnimationFrame(function () {
249
+ // 取消阻止列头点击事件
250
+ currentTarget.removeEventListener('click', stopClickPropagation);
251
+ stopClickPropagationFlag = false;
252
+ currentTarget = null;
253
+
211
254
  var _moveData = moveData,
212
255
  _moveData2 = _slicedToArray(_moveData, 2),
213
256
  startIndex = _moveData2[0],
@@ -277,14 +320,12 @@ export function columnDrag() {
277
320
  }
278
321
 
279
322
  pipeline.setStateAtKey(stateKey, {
280
- cloumnsSortData: cloumnsSortData,
281
323
  cloumnsTranslateData: null
282
324
  });
283
325
  });
284
326
  document.body.style.userSelect = '';
285
327
  currentTarget.style.opacity = '';
286
328
  currentTarget.style.cursor = '';
287
- currentTarget = null;
288
329
  }
289
330
 
290
331
  document.body.addEventListener('mousemove', handleMouseMove);
@@ -89,20 +89,25 @@ export function contextMenu() {
89
89
  };
90
90
 
91
91
  var showContextMenu = function showContextMenu(e) {
92
- var dataSource = pipeline.getDataSource();
93
- var cellEle = getCellEleForEvent(e);
92
+ var path = getEventPath(e);
93
+ var cellEle = getCellEleInEventPath(path);
94
94
  var code;
95
95
  var rowIndex;
96
+ var isInFooter;
96
97
 
97
98
  if (cellEle) {
98
- code = cellEle.getAttribute('data-code'), rowIndex = cellEle.getAttribute('data-rowindex');
99
+ code = cellEle.getAttribute('data-code');
100
+ rowIndex = cellEle.getAttribute('data-rowindex');
101
+ isInFooter = isElementInsideTheFooter(cellEle);
99
102
  } else {
100
- var rowEle = getRowEleForEvent(e, dataSource);
103
+ var rowEle = getRowEleInEventPath(path);
101
104
  rowIndex = rowEle === null || rowEle === void 0 ? void 0 : rowEle.getAttribute('data-rowindex');
105
+ isInFooter = isElementInsideTheFooter(rowEle);
102
106
  }
103
107
 
108
+ var dataSource = isInFooter ? pipeline.getFooterDataSource() || [] : pipeline.getDataSource();
104
109
  var record = dataSource[rowIndex];
105
- var column = code !== undefined && findByTree(pipeline.getColumns(), function (item, index) {
110
+ var column = code !== undefined && findByTree(pipeline.getColumns(), function (item) {
106
111
  return item.code === code;
107
112
  });
108
113
  var value = column && record && internals.safeGetValue(column, record, rowIndex);
@@ -275,18 +280,6 @@ function isEventFromCurrentPopup(event, ele) {
275
280
 
276
281
  return false;
277
282
  }
278
-
279
- function getCellEleInEventPath(path) {
280
- return getTargetEleInEventPath(path, function (ele) {
281
- return ele && ele.getAttribute('data-role') === 'table-cell';
282
- });
283
- }
284
-
285
- function getRowEleInEventPath(path) {
286
- return getTargetEleInEventPath(path, function (ele) {
287
- return ele && ele.getAttribute('data-role') === 'table-row';
288
- });
289
- }
290
283
  /** 是否点击是外部 end */
291
284
 
292
285
  /** 计算位置 start */
@@ -363,15 +356,37 @@ function keepWithinBounds(popupParent, ePopup, x, y) {
363
356
  /** 获得点击的元素 start */
364
357
 
365
358
 
366
- function getCellEleForEvent(event) {
367
- return getCellEleInEventPath(getEventPath(event));
359
+ function getCellEleInEventPath(path) {
360
+ return getTargetEleInEventPath(path, function (ele) {
361
+ return ele && ele.getAttribute('data-role') === 'table-cell';
362
+ });
368
363
  }
369
364
 
370
- function getRowEleForEvent(event, dataSource) {
371
- return getRowEleInEventPath(getEventPath(event));
365
+ function getRowEleInEventPath(path) {
366
+ return getTargetEleInEventPath(path, function (ele) {
367
+ return ele && ele.getAttribute('data-role') === 'table-row';
368
+ });
372
369
  }
373
370
  /** 获得点击的元素 end */
374
- // 禁止弹出右键菜单
371
+
372
+
373
+ function isElementInsideTheFooter(ele) {
374
+ var pointer = ele;
375
+
376
+ while (pointer) {
377
+ if (pointer.tagName === 'TFOOT') {
378
+ return true;
379
+ }
380
+
381
+ if (pointer.tagName === 'TABLE' || pointer.tagName === 'TBODY') {
382
+ return false;
383
+ }
384
+
385
+ pointer = pointer.parentElement;
386
+ }
387
+
388
+ return false;
389
+ } // 禁止弹出右键菜单
375
390
 
376
391
 
377
392
  function suppressShowContextMenu(e) {