vxe-table 3.13.6 → 3.13.7

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/es/locale/lang/ar-EG.js +2 -1
  2. package/es/locale/lang/de-DE.js +2 -1
  3. package/es/locale/lang/en-US.js +2 -1
  4. package/es/locale/lang/es-ES.js +2 -1
  5. package/es/locale/lang/fr-FR.js +2 -1
  6. package/es/locale/lang/hu-HU.js +2 -1
  7. package/es/locale/lang/hy-AM.js +2 -1
  8. package/es/locale/lang/id-ID.js +2 -1
  9. package/es/locale/lang/it-IT.js +2 -1
  10. package/es/locale/lang/ja-JP.js +2 -1
  11. package/es/locale/lang/ko-KR.js +2 -1
  12. package/es/locale/lang/nb-NO.js +2 -1
  13. package/es/locale/lang/pt-BR.js +2 -1
  14. package/es/locale/lang/ru-RU.js +2 -1
  15. package/es/locale/lang/th-TH.js +2 -1
  16. package/es/locale/lang/ug-CN.js +2 -1
  17. package/es/locale/lang/uk-UA.js +2 -1
  18. package/es/locale/lang/vi-VN.js +2 -1
  19. package/es/locale/lang/zh-CHT.js +2 -1
  20. package/es/locale/lang/zh-CN.js +2 -1
  21. package/es/style.css +1 -1
  22. package/es/table/module/export/mixin.js +2 -2
  23. package/es/table/module/filter/mixin.js +87 -79
  24. package/es/table/module/menu/mixin.js +2 -1
  25. package/es/table/src/methods.js +7 -5
  26. package/es/table/src/table.js +1 -1
  27. package/es/ui/index.js +1 -1
  28. package/es/ui/src/log.js +1 -1
  29. package/lib/index.umd.js +120 -112
  30. package/lib/index.umd.min.js +1 -1
  31. package/lib/locale/lang/ar-EG.js +2 -1
  32. package/lib/locale/lang/ar-EG.min.js +1 -1
  33. package/lib/locale/lang/de-DE.js +2 -1
  34. package/lib/locale/lang/de-DE.min.js +1 -1
  35. package/lib/locale/lang/en-US.js +2 -1
  36. package/lib/locale/lang/en-US.min.js +1 -1
  37. package/lib/locale/lang/en-US.umd.js +2 -1
  38. package/lib/locale/lang/es-ES.js +2 -1
  39. package/lib/locale/lang/es-ES.min.js +1 -1
  40. package/lib/locale/lang/es-ES.umd.js +2 -1
  41. package/lib/locale/lang/fr-FR.js +2 -1
  42. package/lib/locale/lang/fr-FR.min.js +1 -1
  43. package/lib/locale/lang/hu-HU.js +2 -1
  44. package/lib/locale/lang/hu-HU.min.js +1 -1
  45. package/lib/locale/lang/hu-HU.umd.js +2 -1
  46. package/lib/locale/lang/hy-AM.js +2 -1
  47. package/lib/locale/lang/hy-AM.min.js +1 -1
  48. package/lib/locale/lang/id-ID.js +2 -1
  49. package/lib/locale/lang/id-ID.min.js +1 -1
  50. package/lib/locale/lang/it-IT.js +2 -1
  51. package/lib/locale/lang/it-IT.min.js +1 -1
  52. package/lib/locale/lang/ja-JP.js +2 -1
  53. package/lib/locale/lang/ja-JP.min.js +1 -1
  54. package/lib/locale/lang/ja-JP.umd.js +2 -1
  55. package/lib/locale/lang/ko-KR.js +2 -1
  56. package/lib/locale/lang/ko-KR.min.js +1 -1
  57. package/lib/locale/lang/ko-KR.umd.js +2 -1
  58. package/lib/locale/lang/nb-NO.js +2 -1
  59. package/lib/locale/lang/nb-NO.min.js +1 -1
  60. package/lib/locale/lang/pt-BR.js +2 -1
  61. package/lib/locale/lang/pt-BR.min.js +1 -1
  62. package/lib/locale/lang/pt-BR.umd.js +2 -1
  63. package/lib/locale/lang/ru-RU.js +2 -1
  64. package/lib/locale/lang/ru-RU.min.js +1 -1
  65. package/lib/locale/lang/ru-RU.umd.js +2 -1
  66. package/lib/locale/lang/th-TH.js +2 -1
  67. package/lib/locale/lang/th-TH.min.js +1 -1
  68. package/lib/locale/lang/ug-CN.js +2 -1
  69. package/lib/locale/lang/ug-CN.min.js +1 -1
  70. package/lib/locale/lang/uk-UA.js +2 -1
  71. package/lib/locale/lang/uk-UA.min.js +1 -1
  72. package/lib/locale/lang/uk-UA.umd.js +2 -1
  73. package/lib/locale/lang/vi-VN.js +2 -1
  74. package/lib/locale/lang/vi-VN.min.js +1 -1
  75. package/lib/locale/lang/zh-CHT.js +2 -1
  76. package/lib/locale/lang/zh-CHT.min.js +1 -1
  77. package/lib/locale/lang/zh-CHT.umd.js +2 -1
  78. package/lib/locale/lang/zh-CN.js +2 -1
  79. package/lib/locale/lang/zh-CN.min.js +1 -1
  80. package/lib/locale/lang/zh-CN.umd.js +2 -1
  81. package/lib/style.css +1 -1
  82. package/lib/table/module/export/mixin.js +2 -2
  83. package/lib/table/module/export/mixin.min.js +1 -1
  84. package/lib/table/module/filter/mixin.js +105 -99
  85. package/lib/table/module/filter/mixin.min.js +1 -1
  86. package/lib/table/module/menu/mixin.js +2 -1
  87. package/lib/table/module/menu/mixin.min.js +1 -1
  88. package/lib/table/src/methods.js +6 -6
  89. package/lib/table/src/methods.min.js +1 -1
  90. package/lib/table/src/table.js +1 -1
  91. package/lib/table/src/table.min.js +1 -1
  92. package/lib/ui/index.js +1 -1
  93. package/lib/ui/index.min.js +1 -1
  94. package/lib/ui/src/log.js +1 -1
  95. package/lib/ui/src/log.min.js +1 -1
  96. package/package.json +2 -2
  97. package/packages/locale/lang/ar-EG.ts +2 -1
  98. package/packages/locale/lang/de-DE.ts +2 -1
  99. package/packages/locale/lang/en-US.ts +2 -1
  100. package/packages/locale/lang/es-ES.ts +2 -1
  101. package/packages/locale/lang/fr-FR.ts +2 -1
  102. package/packages/locale/lang/hu-HU.ts +2 -1
  103. package/packages/locale/lang/hy-AM.ts +2 -1
  104. package/packages/locale/lang/id-ID.ts +2 -1
  105. package/packages/locale/lang/it-IT.ts +2 -1
  106. package/packages/locale/lang/ja-JP.ts +2 -1
  107. package/packages/locale/lang/ko-KR.ts +2 -1
  108. package/packages/locale/lang/nb-NO.ts +2 -1
  109. package/packages/locale/lang/pt-BR.ts +2 -1
  110. package/packages/locale/lang/ru-RU.ts +2 -1
  111. package/packages/locale/lang/th-TH.ts +2 -1
  112. package/packages/locale/lang/ug-CN.ts +2 -1
  113. package/packages/locale/lang/uk-UA.ts +2 -1
  114. package/packages/locale/lang/vi-VN.ts +2 -1
  115. package/packages/locale/lang/zh-CHT.ts +2 -1
  116. package/packages/locale/lang/zh-CN.ts +2 -1
  117. package/packages/table/module/export/mixin.ts +2 -2
  118. package/packages/table/module/filter/mixin.ts +85 -77
  119. package/packages/table/module/menu/mixin.ts +2 -1
  120. package/packages/table/src/methods.ts +7 -5
  121. package/packages/table/src/table.ts +1 -1
  122. /package/es/{iconfont.1740103990490.ttf → iconfont.1740188839037.ttf} +0 -0
  123. /package/es/{iconfont.1740103990490.woff → iconfont.1740188839037.woff} +0 -0
  124. /package/es/{iconfont.1740103990490.woff2 → iconfont.1740188839037.woff2} +0 -0
  125. /package/lib/{iconfont.1740103990490.ttf → iconfont.1740188839037.ttf} +0 -0
  126. /package/lib/{iconfont.1740103990490.woff → iconfont.1740188839037.woff} +0 -0
  127. /package/lib/{iconfont.1740103990490.woff2 → iconfont.1740188839037.woff2} +0 -0
@@ -1,6 +1,6 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { VxeUI } from '../../../ui';
3
- import { toFilters, handleFieldOrColumn } from '../../src/util';
3
+ import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util';
4
4
  import { getDomNode, triggerEvent } from '../../../ui/src/dom';
5
5
  import { isEnableConf } from '../../../ui/src/utils';
6
6
  const { renderer } = VxeUI;
@@ -56,93 +56,101 @@ export default {
56
56
  * @param {Object} params 参数
57
57
  */
58
58
  triggerFilterEvent(evnt, column, params) {
59
+ const $xeTable = this;
60
+ const reactData = $xeTable;
61
+ const internalData = $xeTable;
59
62
  const { filterStore } = this;
60
63
  if (filterStore.column === column && filterStore.visible) {
61
64
  filterStore.visible = false;
62
65
  }
63
66
  else {
64
- const { target: targetElem, pageX } = evnt;
65
- const { filters, filterMultiple, filterRender } = column;
66
- const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
67
- const filterRecoverMethod = column.filterRecoverMethod || (compConf ? (compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod) : null);
68
- const { visibleWidth } = getDomNode();
69
- Object.assign(filterStore, {
70
- args: params,
71
- multiple: filterMultiple,
72
- options: filters,
73
- column,
74
- style: null,
75
- visible: true
76
- });
77
- // 复原状态
78
- filterStore.options.forEach((option) => {
79
- const { _checked, checked } = option;
80
- option._checked = checked;
81
- if (!checked && _checked !== checked) {
82
- if (filterRecoverMethod) {
83
- filterRecoverMethod({ option, column, $table: this });
67
+ const { initStore, filterStore } = reactData;
68
+ const { elemStore } = internalData;
69
+ if (filterStore.column === column && filterStore.visible) {
70
+ filterStore.visible = false;
71
+ }
72
+ else {
73
+ const { clientY, pageX } = evnt;
74
+ const el = $xeTable.$refs.refElem;
75
+ const tableRect = el.getBoundingClientRect();
76
+ const targetElem = evnt.target;
77
+ const { visibleWidth } = getDomNode();
78
+ const { filters, filterMultiple, filterRender } = column;
79
+ const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
80
+ const frMethod = column.filterRecoverMethod || (compConf ? (compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod) : null);
81
+ internalData._currFilterParams = params;
82
+ Object.assign(filterStore, {
83
+ multiple: filterMultiple,
84
+ options: filters,
85
+ column,
86
+ style: null
87
+ });
88
+ // 复原状态
89
+ filterStore.options.forEach((option) => {
90
+ const { _checked, checked } = option;
91
+ option._checked = checked;
92
+ if (!checked && _checked !== checked) {
93
+ if (frMethod) {
94
+ frMethod({ option, column, $table: $xeTable });
95
+ }
84
96
  }
85
- }
86
- });
87
- this.checkFilterOptions();
88
- this.initStore.filter = true;
89
- this.$nextTick(() => {
90
- const { $refs } = this;
91
- const { refTableHeader, refTableBody, filterWrapper } = $refs;
92
- const bodyElem = refTableBody.$el;
93
- const headerElem = refTableHeader ? refTableHeader.$el : null;
94
- if (!bodyElem) {
95
- return;
96
- }
97
- const filterWrapperElem = filterWrapper.$el;
98
- if (!filterWrapperElem) {
99
- return;
100
- }
101
- const filterWidth = filterWrapperElem.offsetWidth;
102
- const filterHeight = filterWrapperElem.offsetHeight;
103
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
104
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
105
- const centerWidth = filterWidth / 2;
106
- const minMargin = 10;
107
- const maxLeft = bodyElem.clientWidth - filterWidth - minMargin;
108
- let left, right;
109
- const style = {
110
- top: `${targetElem.offsetTop + targetElem.offsetParent.offsetTop + targetElem.offsetHeight}px`
111
- };
112
- // 判断面板不能大于表格高度
113
- let maxHeight = null;
114
- const bodyHeight = bodyElem.clientHeight - (headerElem ? headerElem.clientHeight / 2 : 0);
115
- if (filterHeight >= bodyHeight) {
116
- maxHeight = Math.max(40, bodyHeight - (filterFootElem ? filterFootElem.offsetHeight : 0) - (filterHeadElem ? filterHeadElem.offsetHeight : 0));
117
- }
118
- if (column.fixed === 'left') {
119
- left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth;
120
- }
121
- else if (column.fixed === 'right') {
122
- right = (targetElem.offsetParent.offsetWidth - targetElem.offsetLeft) + (targetElem.offsetParent.offsetParent.offsetWidth - targetElem.offsetParent.offsetLeft) - column.renderWidth - centerWidth;
123
- }
124
- else {
125
- left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth - bodyElem.scrollLeft;
126
- }
127
- if (left) {
128
- const overflowWidth = (pageX + filterWidth - centerWidth + minMargin) - visibleWidth;
129
- if (overflowWidth > 0) {
130
- left -= overflowWidth;
97
+ });
98
+ this.checkFilterOptions();
99
+ filterStore.visible = true;
100
+ initStore.filter = true;
101
+ $xeTable.$nextTick(() => {
102
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
103
+ if (!headerScrollElem) {
104
+ return;
131
105
  }
132
- style.left = `${Math.min(maxLeft, Math.max(minMargin, left))}px`;
133
- }
134
- else if (right) {
135
- const overflowWidth = (pageX + filterWidth - centerWidth + minMargin) - visibleWidth;
136
- if (overflowWidth > 0) {
137
- right += overflowWidth;
106
+ const tableFilter = $xeTable.$refs.refTableFilter;
107
+ const filterWrapperElem = tableFilter ? tableFilter.$el : null;
108
+ if (!filterWrapperElem) {
109
+ return;
138
110
  }
139
- style.right = `${Math.max(minMargin, right)}px`;
140
- }
141
- filterStore.style = style;
142
- filterStore.maxHeight = maxHeight;
143
- });
111
+ const filterWidth = filterWrapperElem.offsetWidth;
112
+ const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
113
+ const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
114
+ const centerWidth = filterWidth / 2;
115
+ const minMargin = 10;
116
+ const maxLeft = el.clientWidth - filterWidth - minMargin;
117
+ let left, right;
118
+ const thEl = targetElem.offsetParent;
119
+ const trEl = thEl.offsetParent;
120
+ const style = {
121
+ top: `${targetElem.offsetTop + thEl.offsetTop + targetElem.offsetHeight}px`
122
+ };
123
+ // 判断面板不能大于表格高度
124
+ const maxHeight = Math.max(40, el.clientHeight - (clientY - tableRect.y) - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
125
+ if (column.fixed === 'left') {
126
+ left = targetElem.offsetLeft + thEl.offsetLeft - centerWidth;
127
+ }
128
+ else if (column.fixed === 'right') {
129
+ right = (thEl.offsetWidth - targetElem.offsetLeft) + (trEl.offsetWidth - trEl.offsetLeft) - column.renderWidth - centerWidth;
130
+ }
131
+ else {
132
+ left = targetElem.offsetLeft + thEl.offsetLeft - centerWidth - headerScrollElem.scrollLeft;
133
+ }
134
+ if (left) {
135
+ const overflowWidth = (pageX + filterWidth - centerWidth + minMargin) - visibleWidth;
136
+ if (overflowWidth > 0) {
137
+ left -= overflowWidth;
138
+ }
139
+ style.left = `${Math.min(maxLeft, Math.max(minMargin, left))}px`;
140
+ }
141
+ else if (right) {
142
+ const overflowWidth = (pageX + filterWidth - centerWidth + minMargin) - visibleWidth;
143
+ if (overflowWidth > 0) {
144
+ right += overflowWidth;
145
+ }
146
+ style.right = `${Math.max(minMargin, right)}px`;
147
+ }
148
+ filterStore.style = style;
149
+ filterStore.maxHeight = maxHeight;
150
+ });
151
+ }
152
+ $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt);
144
153
  }
145
- this.emitEvent('filter-visible', { column, field: column.field, property: column.field, filterList: this.getCheckedFilters(), visible: filterStore.visible }, evnt);
146
154
  },
147
155
  handleFilterConfirmFilter(evnt) {
148
156
  const $xeTable = this;
@@ -61,6 +61,7 @@ export default {
61
61
  const internalData = $xeTable;
62
62
  const { $refs, tId, editStore, menuConfig, contextMenu, ctxMenuStore, ctxMenuOpts, mouseConfig, mouseOpts } = this;
63
63
  const { selected } = editStore;
64
+ const tableFilter = $xeTable.$refs.refTableFilter;
64
65
  const layoutList = ['header', 'body', 'footer'];
65
66
  if (isEnableConf(menuConfig) || contextMenu) {
66
67
  if (ctxMenuStore.visible && $refs.refTableMenu && getEventTargetNode(evnt, $refs.refTableMenu.$el).flag) {
@@ -133,7 +134,7 @@ export default {
133
134
  }
134
135
  }
135
136
  }
136
- if ($refs.filterWrapper && !getEventTargetNode(evnt, $refs.filterWrapper.$el).flag) {
137
+ if (tableFilter && !getEventTargetNode(evnt, tableFilter.$el).flag) {
137
138
  this.closeFilter();
138
139
  }
139
140
  this.closeMenu();
@@ -4518,13 +4518,15 @@ const Methods = {
4518
4518
  handleGlobalMousedownEvent(evnt) {
4519
4519
  const { $el, $refs, $xegrid, $toolbar, mouseConfig, editStore, ctxMenuStore, editRules, editOpts, validOpts, areaOpts, filterStore, customStore, getRowNode } = this;
4520
4520
  const { actived } = editStore;
4521
- const { refTableMenu, filterWrapper, customWrapper, refValidTooltip } = $refs;
4521
+ const { customWrapper, refValidTooltip } = $refs;
4522
+ const tableFilter = $refs.refTableFilter;
4523
+ const tableMenu = $refs.refTableMenu;
4522
4524
  // 筛选
4523
- if (filterWrapper) {
4525
+ if (tableFilter) {
4524
4526
  if (getEventTargetNode(evnt, $el, 'vxe-cell--filter').flag) {
4525
4527
  // 如果点击了筛选按钮
4526
4528
  }
4527
- else if (getEventTargetNode(evnt, filterWrapper.$el).flag) {
4529
+ else if (getEventTargetNode(evnt, tableFilter.$el).flag) {
4528
4530
  // 如果点击筛选容器
4529
4531
  }
4530
4532
  else {
@@ -4604,7 +4606,7 @@ const Methods = {
4604
4606
  }
4605
4607
  }
4606
4608
  else if (mouseConfig) {
4607
- if (!getEventTargetNode(evnt, $el).flag && !($xegrid && getEventTargetNode(evnt, $xegrid.$el).flag) && !(refTableMenu && getEventTargetNode(evnt, refTableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
4609
+ if (!getEventTargetNode(evnt, $el).flag && !($xegrid && getEventTargetNode(evnt, $xegrid.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
4608
4610
  if (this.clearSelected) {
4609
4611
  this.clearSelected();
4610
4612
  }
@@ -4623,7 +4625,7 @@ const Methods = {
4623
4625
  }
4624
4626
  }
4625
4627
  // 如果配置了快捷菜单且,点击了其他地方则关闭
4626
- if (ctxMenuStore.visible && refTableMenu && !getEventTargetNode(evnt, refTableMenu.$el).flag) {
4628
+ if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
4627
4629
  this.closeMenu();
4628
4630
  }
4629
4631
  const isActivated = getEventTargetNode(evnt, ($xegrid || this).$el).flag;
@@ -1749,7 +1749,7 @@ export default {
1749
1749
  initStore.filter
1750
1750
  ? h(TableFilterPanelComponent, {
1751
1751
  key: 'tf',
1752
- ref: 'filterWrapper',
1752
+ ref: 'refTableFilter',
1753
1753
  props: {
1754
1754
  filterStore
1755
1755
  }
package/es/ui/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  import { getFuncText } from './src/utils';
3
- export const version = "3.13.6";
3
+ export const version = "3.13.7";
4
4
  VxeUI.version = version;
5
5
  VxeUI.tableVersion = version;
6
6
  VxeUI.setConfig({
package/es/ui/src/log.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const version = `table v${"3.13.6"}`;
3
+ const version = `table v${"3.13.7"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);
package/lib/index.umd.js CHANGED
@@ -2220,7 +2220,7 @@ function getClass(property, params) {
2220
2220
  ;// CONCATENATED MODULE: ./packages/ui/index.ts
2221
2221
 
2222
2222
 
2223
- const version = "3.13.6";
2223
+ const version = "3.13.7";
2224
2224
  core_.VxeUI.version = version;
2225
2225
  core_.VxeUI.tableVersion = version;
2226
2226
  core_.VxeUI.setConfig({
@@ -2843,7 +2843,7 @@ function isNodeElement(elem) {
2843
2843
  const {
2844
2844
  log: log_log
2845
2845
  } = core_.VxeUI;
2846
- const log_version = `table v${"3.13.6"}`;
2846
+ const log_version = `table v${"3.13.7"}`;
2847
2847
  const warnLog = log_log.create('warn', log_version);
2848
2848
  const errLog = log_log.create('error', log_version);
2849
2849
  ;// CONCATENATED MODULE: ./packages/table/src/columnInfo.ts
@@ -10325,16 +10325,16 @@ const Methods = {
10325
10325
  actived
10326
10326
  } = editStore;
10327
10327
  const {
10328
- refTableMenu,
10329
- filterWrapper,
10330
10328
  customWrapper,
10331
10329
  refValidTooltip
10332
10330
  } = $refs;
10331
+ const tableFilter = $refs.refTableFilter;
10332
+ const tableMenu = $refs.refTableMenu;
10333
10333
  // 筛选
10334
- if (filterWrapper) {
10334
+ if (tableFilter) {
10335
10335
  if (getEventTargetNode(evnt, $el, 'vxe-cell--filter').flag) {
10336
10336
  // 如果点击了筛选按钮
10337
- } else if (getEventTargetNode(evnt, filterWrapper.$el).flag) {
10337
+ } else if (getEventTargetNode(evnt, tableFilter.$el).flag) {
10338
10338
  // 如果点击筛选容器
10339
10339
  } else {
10340
10340
  if (!getEventTargetNode(evnt, document.body, 'vxe-table--ignore-clear').flag) {
@@ -10408,7 +10408,7 @@ const Methods = {
10408
10408
  }
10409
10409
  }
10410
10410
  } else if (mouseConfig) {
10411
- if (!getEventTargetNode(evnt, $el).flag && !($xegrid && getEventTargetNode(evnt, $xegrid.$el).flag) && !(refTableMenu && getEventTargetNode(evnt, refTableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
10411
+ if (!getEventTargetNode(evnt, $el).flag && !($xegrid && getEventTargetNode(evnt, $xegrid.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
10412
10412
  if (this.clearSelected) {
10413
10413
  this.clearSelected();
10414
10414
  }
@@ -10429,7 +10429,7 @@ const Methods = {
10429
10429
  }
10430
10430
  }
10431
10431
  // 如果配置了快捷菜单且,点击了其他地方则关闭
10432
- if (ctxMenuStore.visible && refTableMenu && !getEventTargetNode(evnt, refTableMenu.$el).flag) {
10432
+ if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
10433
10433
  this.closeMenu();
10434
10434
  }
10435
10435
  const isActivated = getEventTargetNode(evnt, ($xegrid || this).$el).flag;
@@ -19870,6 +19870,9 @@ const {
19870
19870
  * @param {Object} params 参数
19871
19871
  */
19872
19872
  triggerFilterEvent(evnt, column, params) {
19873
+ const $xeTable = this;
19874
+ const reactData = $xeTable;
19875
+ const internalData = $xeTable;
19873
19876
  const {
19874
19877
  filterStore
19875
19878
  } = this;
@@ -19877,112 +19880,115 @@ const {
19877
19880
  filterStore.visible = false;
19878
19881
  } else {
19879
19882
  const {
19880
- target: targetElem,
19881
- pageX
19882
- } = evnt;
19883
- const {
19884
- filters,
19885
- filterMultiple,
19886
- filterRender
19887
- } = column;
19888
- const compConf = isEnableConf(filterRender) ? mixin_renderer.get(filterRender.name) : null;
19889
- const filterRecoverMethod = column.filterRecoverMethod || (compConf ? compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod : null);
19883
+ initStore,
19884
+ filterStore
19885
+ } = reactData;
19890
19886
  const {
19891
- visibleWidth
19892
- } = getDomNode();
19893
- Object.assign(filterStore, {
19894
- args: params,
19895
- multiple: filterMultiple,
19896
- options: filters,
19897
- column,
19898
- style: null,
19899
- visible: true
19900
- });
19901
- // 复原状态
19902
- filterStore.options.forEach(option => {
19887
+ elemStore
19888
+ } = internalData;
19889
+ if (filterStore.column === column && filterStore.visible) {
19890
+ filterStore.visible = false;
19891
+ } else {
19903
19892
  const {
19904
- _checked,
19905
- checked
19906
- } = option;
19907
- option._checked = checked;
19908
- if (!checked && _checked !== checked) {
19909
- if (filterRecoverMethod) {
19910
- filterRecoverMethod({
19911
- option,
19912
- column,
19913
- $table: this
19914
- });
19915
- }
19916
- }
19917
- });
19918
- this.checkFilterOptions();
19919
- this.initStore.filter = true;
19920
- this.$nextTick(() => {
19893
+ clientY,
19894
+ pageX
19895
+ } = evnt;
19896
+ const el = $xeTable.$refs.refElem;
19897
+ const tableRect = el.getBoundingClientRect();
19898
+ const targetElem = evnt.target;
19921
19899
  const {
19922
- $refs
19923
- } = this;
19900
+ visibleWidth
19901
+ } = getDomNode();
19924
19902
  const {
19925
- refTableHeader,
19926
- refTableBody,
19927
- filterWrapper
19928
- } = $refs;
19929
- const bodyElem = refTableBody.$el;
19930
- const headerElem = refTableHeader ? refTableHeader.$el : null;
19931
- if (!bodyElem) {
19932
- return;
19933
- }
19934
- const filterWrapperElem = filterWrapper.$el;
19935
- if (!filterWrapperElem) {
19936
- return;
19937
- }
19938
- const filterWidth = filterWrapperElem.offsetWidth;
19939
- const filterHeight = filterWrapperElem.offsetHeight;
19940
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
19941
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
19942
- const centerWidth = filterWidth / 2;
19943
- const minMargin = 10;
19944
- const maxLeft = bodyElem.clientWidth - filterWidth - minMargin;
19945
- let left, right;
19946
- const style = {
19947
- top: `${targetElem.offsetTop + targetElem.offsetParent.offsetTop + targetElem.offsetHeight}px`
19948
- };
19949
- // 判断面板不能大于表格高度
19950
- let maxHeight = null;
19951
- const bodyHeight = bodyElem.clientHeight - (headerElem ? headerElem.clientHeight / 2 : 0);
19952
- if (filterHeight >= bodyHeight) {
19953
- maxHeight = Math.max(40, bodyHeight - (filterFootElem ? filterFootElem.offsetHeight : 0) - (filterHeadElem ? filterHeadElem.offsetHeight : 0));
19954
- }
19955
- if (column.fixed === 'left') {
19956
- left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth;
19957
- } else if (column.fixed === 'right') {
19958
- right = targetElem.offsetParent.offsetWidth - targetElem.offsetLeft + (targetElem.offsetParent.offsetParent.offsetWidth - targetElem.offsetParent.offsetLeft) - column.renderWidth - centerWidth;
19959
- } else {
19960
- left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth - bodyElem.scrollLeft;
19961
- }
19962
- if (left) {
19963
- const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19964
- if (overflowWidth > 0) {
19965
- left -= overflowWidth;
19903
+ filters,
19904
+ filterMultiple,
19905
+ filterRender
19906
+ } = column;
19907
+ const compConf = isEnableConf(filterRender) ? mixin_renderer.get(filterRender.name) : null;
19908
+ const frMethod = column.filterRecoverMethod || (compConf ? compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod : null);
19909
+ internalData._currFilterParams = params;
19910
+ Object.assign(filterStore, {
19911
+ multiple: filterMultiple,
19912
+ options: filters,
19913
+ column,
19914
+ style: null
19915
+ });
19916
+ // 复原状态
19917
+ filterStore.options.forEach(option => {
19918
+ const {
19919
+ _checked,
19920
+ checked
19921
+ } = option;
19922
+ option._checked = checked;
19923
+ if (!checked && _checked !== checked) {
19924
+ if (frMethod) {
19925
+ frMethod({
19926
+ option,
19927
+ column,
19928
+ $table: $xeTable
19929
+ });
19930
+ }
19966
19931
  }
19967
- style.left = `${Math.min(maxLeft, Math.max(minMargin, left))}px`;
19968
- } else if (right) {
19969
- const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19970
- if (overflowWidth > 0) {
19971
- right += overflowWidth;
19932
+ });
19933
+ this.checkFilterOptions();
19934
+ filterStore.visible = true;
19935
+ initStore.filter = true;
19936
+ $xeTable.$nextTick(() => {
19937
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
19938
+ if (!headerScrollElem) {
19939
+ return;
19972
19940
  }
19973
- style.right = `${Math.max(minMargin, right)}px`;
19974
- }
19975
- filterStore.style = style;
19976
- filterStore.maxHeight = maxHeight;
19977
- });
19941
+ const tableFilter = $xeTable.$refs.refTableFilter;
19942
+ const filterWrapperElem = tableFilter ? tableFilter.$el : null;
19943
+ if (!filterWrapperElem) {
19944
+ return;
19945
+ }
19946
+ const filterWidth = filterWrapperElem.offsetWidth;
19947
+ const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
19948
+ const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
19949
+ const centerWidth = filterWidth / 2;
19950
+ const minMargin = 10;
19951
+ const maxLeft = el.clientWidth - filterWidth - minMargin;
19952
+ let left, right;
19953
+ const thEl = targetElem.offsetParent;
19954
+ const trEl = thEl.offsetParent;
19955
+ const style = {
19956
+ top: `${targetElem.offsetTop + thEl.offsetTop + targetElem.offsetHeight}px`
19957
+ };
19958
+ // 判断面板不能大于表格高度
19959
+ const maxHeight = Math.max(40, el.clientHeight - (clientY - tableRect.y) - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
19960
+ if (column.fixed === 'left') {
19961
+ left = targetElem.offsetLeft + thEl.offsetLeft - centerWidth;
19962
+ } else if (column.fixed === 'right') {
19963
+ right = thEl.offsetWidth - targetElem.offsetLeft + (trEl.offsetWidth - trEl.offsetLeft) - column.renderWidth - centerWidth;
19964
+ } else {
19965
+ left = targetElem.offsetLeft + thEl.offsetLeft - centerWidth - headerScrollElem.scrollLeft;
19966
+ }
19967
+ if (left) {
19968
+ const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19969
+ if (overflowWidth > 0) {
19970
+ left -= overflowWidth;
19971
+ }
19972
+ style.left = `${Math.min(maxLeft, Math.max(minMargin, left))}px`;
19973
+ } else if (right) {
19974
+ const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19975
+ if (overflowWidth > 0) {
19976
+ right += overflowWidth;
19977
+ }
19978
+ style.right = `${Math.max(minMargin, right)}px`;
19979
+ }
19980
+ filterStore.style = style;
19981
+ filterStore.maxHeight = maxHeight;
19982
+ });
19983
+ }
19984
+ $xeTable.dispatchEvent('filter-visible', {
19985
+ column,
19986
+ field: column.field,
19987
+ property: column.field,
19988
+ filterList: $xeTable.getCheckedFilters(),
19989
+ visible: filterStore.visible
19990
+ }, evnt);
19978
19991
  }
19979
- this.emitEvent('filter-visible', {
19980
- column,
19981
- field: column.field,
19982
- property: column.field,
19983
- filterList: this.getCheckedFilters(),
19984
- visible: filterStore.visible
19985
- }, evnt);
19986
19992
  },
19987
19993
  handleFilterConfirmFilter(evnt) {
19988
19994
  const $xeTable = this;
@@ -20270,6 +20276,7 @@ const {
20270
20276
  const {
20271
20277
  selected
20272
20278
  } = editStore;
20279
+ const tableFilter = $xeTable.$refs.refTableFilter;
20273
20280
  const layoutList = ['header', 'body', 'footer'];
20274
20281
  if (isEnableConf(menuConfig) || contextMenu) {
20275
20282
  if (ctxMenuStore.visible && $refs.refTableMenu && getEventTargetNode(evnt, $refs.refTableMenu.$el).flag) {
@@ -20355,7 +20362,7 @@ const {
20355
20362
  }
20356
20363
  }
20357
20364
  }
20358
- if ($refs.filterWrapper && !getEventTargetNode(evnt, $refs.filterWrapper.$el).flag) {
20365
+ if (tableFilter && !getEventTargetNode(evnt, tableFilter.$el).flag) {
20359
20366
  this.closeFilter();
20360
20367
  }
20361
20368
  this.closeMenu();
@@ -23021,7 +23028,7 @@ function handleExportAndPrint($xeTable, options, isPrint) {
23021
23028
  isMerge: hasMerge,
23022
23029
  useStyle: true,
23023
23030
  current: 'current',
23024
- modes: ['current', 'selected', 'empty'].concat(proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : [])
23031
+ modes: (proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : []).concat(['current', 'selected', 'empty'])
23025
23032
  }, options);
23026
23033
  const types = defOpts.types || external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().keys(exportOpts._typeMaps);
23027
23034
  const modes = defOpts.modes || [];
@@ -23213,7 +23220,7 @@ const convertToRows = originColumns => {
23213
23220
  isMerge: hasMerge,
23214
23221
  useStyle: true,
23215
23222
  current: 'current',
23216
- modes: ['current', 'selected', 'empty'].concat(proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : []),
23223
+ modes: (proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : []).concat(['current', 'selected', 'empty']),
23217
23224
  download: true,
23218
23225
  type: 'csv'
23219
23226
  // filename: '',
@@ -26961,7 +26968,7 @@ function renderBody(h, $xeTable) {
26961
26968
  */
26962
26969
  initStore.filter ? h(filter_panel, {
26963
26970
  key: 'tf',
26964
- ref: 'filterWrapper',
26971
+ ref: 'refTableFilter',
26965
26972
  props: {
26966
26973
  filterStore
26967
26974
  }
@@ -30834,7 +30841,8 @@ const Toolbar = VxeToolbar;
30834
30841
  },
30835
30842
  button: {
30836
30843
  confirm: '确认',
30837
- cancel: '取消'
30844
+ cancel: '取消',
30845
+ clear: '清除'
30838
30846
  },
30839
30847
  filter: {
30840
30848
  search: '搜索'