vxe-table 3.15.1 → 3.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/filter/mixin.js +29 -10
  6. package/es/table/module/filter/panel.js +173 -142
  7. package/es/table/src/methods.js +31 -7
  8. package/es/table/style.css +18 -0
  9. package/es/table/style.min.css +1 -1
  10. package/es/ui/index.js +1 -1
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-table/style.css +18 -0
  13. package/es/vxe-table/style.min.css +1 -1
  14. package/lib/index.css +1 -1
  15. package/lib/index.min.css +1 -1
  16. package/lib/index.umd.js +226 -142
  17. package/lib/index.umd.min.js +1 -1
  18. package/lib/style.css +1 -1
  19. package/lib/style.min.css +1 -1
  20. package/lib/table/module/filter/mixin.js +33 -9
  21. package/lib/table/module/filter/mixin.min.js +1 -1
  22. package/lib/table/module/filter/panel.js +153 -122
  23. package/lib/table/module/filter/panel.min.js +1 -1
  24. package/lib/table/src/methods.js +36 -7
  25. package/lib/table/src/methods.min.js +1 -1
  26. package/lib/table/style/style.css +18 -0
  27. package/lib/table/style/style.min.css +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/lib/vxe-table/style/style.css +18 -0
  33. package/lib/vxe-table/style/style.min.css +1 -1
  34. package/package.json +2 -2
  35. package/packages/table/module/filter/mixin.ts +27 -10
  36. package/packages/table/module/filter/panel.ts +178 -143
  37. package/packages/table/src/methods.ts +31 -7
  38. package/styles/components/table-module/filter.scss +16 -0
  39. package/styles/components/table.scss +6 -1
  40. /package/es/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
  41. /package/es/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
  42. /package/es/{iconfont.1744336394111.woff2 → iconfont.1744428010256.woff2} +0 -0
  43. /package/lib/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
  44. /package/lib/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
  45. /package/lib/{iconfont.1744336394111.woff2 → iconfont.1744428010256.woff2} +0 -0
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.15.1";
2223
+ const version = "3.15.2";
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.15.1"}`;
2846
+ const log_version = `table v${"3.15.2"}`;
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
@@ -8476,7 +8476,11 @@ const Methods = {
8476
8476
  handleReserveStatus($xeTable);
8477
8477
  $xeTable.checkSelectionStatus();
8478
8478
  return new Promise(resolve => {
8479
- this.$nextTick().then(() => $xeTable.recalculate()).then(() => {
8479
+ this.$nextTick().then(() => handleRecalculateLayout($xeTable, false)).then(() => {
8480
+ calcCellHeight($xeTable);
8481
+ updateRowOffsetTop($xeTable);
8482
+ return handleRecalculateLayout($xeTable, false);
8483
+ }).then(() => {
8480
8484
  let targetScrollLeft = lastScrollLeft;
8481
8485
  let targetScrollTop = lastScrollTop;
8482
8486
  const virtualXOpts = $xeTable.computeVirtualXOpts;
@@ -8489,8 +8493,7 @@ const Methods = {
8489
8493
  targetScrollTop = 0;
8490
8494
  }
8491
8495
  reactData.isRowLoading = false;
8492
- calcCellHeight($xeTable);
8493
- updateRowOffsetTop($xeTable);
8496
+ handleRecalculateLayout($xeTable, false);
8494
8497
  // 是否变更虚拟滚动
8495
8498
  if (oldScrollYLoad === sYLoad) {
8496
8499
  restoreScrollLocation($xeTable, targetScrollLeft, targetScrollTop).then(() => {
@@ -12645,6 +12648,12 @@ const Methods = {
12645
12648
  const {
12646
12649
  column: newValue
12647
12650
  } = params;
12651
+ const {
12652
+ trigger
12653
+ } = currentColumnOpts;
12654
+ if (trigger === 'manual') {
12655
+ return;
12656
+ }
12648
12657
  const isChange = oldValue !== newValue;
12649
12658
  if (!beforeRowMethod || beforeRowMethod({
12650
12659
  column: newValue,
@@ -12674,6 +12683,12 @@ const Methods = {
12674
12683
  const {
12675
12684
  row: newValue
12676
12685
  } = params;
12686
+ const {
12687
+ trigger
12688
+ } = currentRowOpts;
12689
+ if (trigger === 'manual') {
12690
+ return;
12691
+ }
12677
12692
  const isChange = oldValue !== newValue;
12678
12693
  if (!beforeRowMethod || beforeRowMethod({
12679
12694
  row: newValue,
@@ -14691,7 +14706,8 @@ const Methods = {
14691
14706
  const $xeTable = this;
14692
14707
  const internalData = $xeTable;
14693
14708
  const {
14694
- treeExpandLazyLoadedMaps
14709
+ treeExpandLazyLoadedMaps,
14710
+ treeEATime
14695
14711
  } = internalData;
14696
14712
  const treeOpts = $xeTable.computeTreeOpts;
14697
14713
  const {
@@ -14700,7 +14716,8 @@ const Methods = {
14700
14716
  } = params;
14701
14717
  const {
14702
14718
  lazy,
14703
- trigger
14719
+ trigger,
14720
+ accordion
14704
14721
  } = treeOpts;
14705
14722
  if (trigger === 'manual') {
14706
14723
  return;
@@ -14711,7 +14728,17 @@ const Methods = {
14711
14728
  const expanded = !$xeTable.isTreeExpandByRow(row);
14712
14729
  const columnIndex = $xeTable.getColumnIndex(column);
14713
14730
  const $columnIndex = $xeTable.getVMColumnIndex(column);
14714
- $xeTable.setTreeExpand(row, expanded);
14731
+ if (treeEATime) {
14732
+ clearTimeout(treeEATime);
14733
+ }
14734
+ $xeTable.setTreeExpand(row, expanded).then(() => {
14735
+ if (accordion) {
14736
+ internalData.treeEATime = setTimeout(() => {
14737
+ internalData.treeEATime = undefined;
14738
+ $xeTable.scrollToRow(row);
14739
+ }, 20);
14740
+ }
14741
+ });
14715
14742
  $xeTable.dispatchEvent('toggle-tree-expand', {
14716
14743
  expanded,
14717
14744
  column,
@@ -15594,7 +15621,8 @@ const Methods = {
15594
15621
  if (isScrollXBig && mouseOpts.area) {
15595
15622
  errLog('vxe.error.notProp', ['mouse-config.area']);
15596
15623
  }
15597
- $xeTable.$nextTick(() => {
15624
+ calcScrollbar($xeTable);
15625
+ return $xeTable.$nextTick(() => {
15598
15626
  updateStyle($xeTable);
15599
15627
  });
15600
15628
  }
@@ -15713,6 +15741,7 @@ const Methods = {
15713
15741
  if (isScrollYBig && mouseOpts.area) {
15714
15742
  errLog('vxe.error.notProp', ['mouse-config.area']);
15715
15743
  }
15744
+ calcScrollbar($xeTable);
15716
15745
  return $xeTable.$nextTick().then(() => {
15717
15746
  updateStyle($xeTable);
15718
15747
  });
@@ -19493,28 +19522,169 @@ const renderPopupPanel = (h, _vm) => {
19493
19522
  const {
19494
19523
  getI18n: filter_panel_getI18n,
19495
19524
  getIcon: filter_panel_getIcon,
19496
- renderer: panel_renderer
19525
+ renderer: panel_renderer,
19526
+ globalMixins
19497
19527
  } = core_.VxeUI;
19528
+ function renderOptions($xeFilterPanel, h, filterRender, compConf) {
19529
+ const props = $xeFilterPanel;
19530
+ const $xeTable = $xeFilterPanel.$xeTable;
19531
+ const tableInternalData = $xeTable;
19532
+ const {
19533
+ filterStore
19534
+ } = props;
19535
+ const {
19536
+ column,
19537
+ multiple,
19538
+ maxHeight
19539
+ } = filterStore;
19540
+ const slots = column ? column.slots : null;
19541
+ const filterSlot = slots ? slots.filter : null;
19542
+ const params = Object.assign({}, tableInternalData._currFilterParams, {
19543
+ $panel: $xeFilterPanel,
19544
+ $table: $xeTable
19545
+ });
19546
+ const rtFilter = compConf ? compConf.renderTableFilter || compConf.renderFilter : null;
19547
+ if (filterSlot) {
19548
+ return [h('div', {
19549
+ class: 'vxe-table--filter-template',
19550
+ style: maxHeight ? {
19551
+ maxHeight: `${maxHeight}px`
19552
+ } : {}
19553
+ }, $xeTable.callSlot(filterSlot, params, h))];
19554
+ } else if (rtFilter) {
19555
+ return [h('div', {
19556
+ class: 'vxe-table--filter-template',
19557
+ style: maxHeight ? {
19558
+ maxHeight: `${maxHeight}px`
19559
+ } : {}
19560
+ }, getSlotVNs(rtFilter.call($xeTable, h, filterRender, params)))];
19561
+ }
19562
+ const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some(item => item._checked);
19563
+ const isAllIndeterminate = multiple && filterStore.isIndeterminate;
19564
+ return [h('ul', {
19565
+ class: 'vxe-table--filter-header'
19566
+ }, [h('li', {
19567
+ class: ['vxe-table--filter-option', {
19568
+ 'is--checked': isAllChecked,
19569
+ 'is--indeterminate': isAllIndeterminate
19570
+ }],
19571
+ attrs: {
19572
+ title: filter_panel_getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
19573
+ },
19574
+ on: {
19575
+ click: evnt => {
19576
+ $xeFilterPanel.changeAllOption(evnt, !filterStore.isAllSelected);
19577
+ }
19578
+ }
19579
+ }, (multiple ? [h('span', {
19580
+ class: ['vxe-checkbox--icon', isAllIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19581
+ })] : []).concat([h('span', {
19582
+ class: 'vxe-checkbox--label'
19583
+ }, filter_panel_getI18n('vxe.table.allFilter'))]))]), h('ul', {
19584
+ class: 'vxe-table--filter-body',
19585
+ style: maxHeight ? {
19586
+ maxHeight: `${maxHeight}px`
19587
+ } : {}
19588
+ }, filterStore.options.map(item => {
19589
+ const isChecked = item._checked;
19590
+ const isIndeterminate = false;
19591
+ return h('li', {
19592
+ class: ['vxe-table--filter-option', {
19593
+ 'is--checked': isChecked
19594
+ }],
19595
+ attrs: {
19596
+ title: item.label
19597
+ },
19598
+ on: {
19599
+ click: evnt => {
19600
+ $xeFilterPanel.changeOption(evnt, !item._checked, item);
19601
+ }
19602
+ }
19603
+ }, (multiple ? [h('span', {
19604
+ class: ['vxe-checkbox--icon', isIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19605
+ })] : []).concat([h('span', {
19606
+ class: 'vxe-checkbox--label'
19607
+ }, formatText(item.label, 1))]));
19608
+ }))];
19609
+ }
19610
+ function renderFooter($xeFilterPanel, h) {
19611
+ const props = $xeFilterPanel;
19612
+ const $xeTable = $xeFilterPanel.$xeTable;
19613
+ const {
19614
+ filterStore
19615
+ } = props;
19616
+ const {
19617
+ column,
19618
+ multiple
19619
+ } = filterStore;
19620
+ const filterOpts = $xeTable.computeFilterOpts;
19621
+ const hasCheckOption = $xeFilterPanel.computeHasCheckOption;
19622
+ const filterRender = column.filterRender;
19623
+ const compConf = isEnableConf(filterRender) ? panel_renderer.get(filterRender.name) : null;
19624
+ const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
19625
+ return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true) ? [h('div', {
19626
+ class: 'vxe-table--filter-footer'
19627
+ }, [h('button', {
19628
+ class: {
19629
+ 'is--disabled': isDisabled
19630
+ },
19631
+ attrs: {
19632
+ disabled: isDisabled
19633
+ },
19634
+ on: {
19635
+ click: $xeFilterPanel.confirmFilter
19636
+ }
19637
+ }, filterOpts.confirmButtonText || filter_panel_getI18n('vxe.table.confirmFilter')), h('button', {
19638
+ on: {
19639
+ click: $xeFilterPanel.resetFilter
19640
+ }
19641
+ }, filterOpts.resetButtonText || filter_panel_getI18n('vxe.table.resetFilter'))])] : [];
19642
+ }
19498
19643
  /* harmony default export */ var filter_panel = ({
19499
19644
  name: 'VxeTableFilterPanel',
19645
+ mixins: [globalMixins.sizeMixin],
19500
19646
  props: {
19501
19647
  filterStore: Object
19502
19648
  },
19649
+ inject: {
19650
+ $xeTable: {
19651
+ default: null
19652
+ }
19653
+ },
19503
19654
  computed: {
19504
- hasCheckOption() {
19655
+ computeHasCheckOption() {
19505
19656
  const {
19506
19657
  filterStore
19507
19658
  } = this;
19508
19659
  return filterStore && filterStore.options.some(option => option.checked);
19509
19660
  }
19510
19661
  },
19662
+ mounted() {
19663
+ const $xeFilterPanel = this;
19664
+ const $xeTable = $xeFilterPanel.$xeTable;
19665
+ const filterOpts = $xeTable.computeFilterOpts;
19666
+ const {
19667
+ transfer
19668
+ } = filterOpts;
19669
+ const el = this.$refs.refElem;
19670
+ if (transfer && el) {
19671
+ document.body.appendChild(el);
19672
+ }
19673
+ },
19674
+ beforeDestroy() {
19675
+ const el = this.$refs.refElem;
19676
+ if (el && el.parentNode) {
19677
+ el.parentNode.removeChild(el);
19678
+ }
19679
+ },
19511
19680
  render(h) {
19512
- const $panel = this;
19513
- const $xeTable = this.$parent;
19681
+ const $xeFilterPanel = this;
19682
+ const props = $xeFilterPanel;
19683
+ const $xeTable = $xeFilterPanel.$xeTable;
19514
19684
  const tableInternalData = $xeTable;
19515
19685
  const {
19516
19686
  filterStore
19517
- } = this;
19687
+ } = props;
19518
19688
  const {
19519
19689
  visible,
19520
19690
  multiple,
@@ -19524,137 +19694,27 @@ const {
19524
19694
  const compConf = isEnableConf(filterRender) ? panel_renderer.get(filterRender.name) : null;
19525
19695
  const filterClassName = compConf ? compConf.tableFilterClassName || compConf.filterClassName : '';
19526
19696
  const params = Object.assign({}, tableInternalData._currFilterParams, {
19527
- $panel,
19697
+ $panel: $xeFilterPanel,
19528
19698
  $table: $xeTable
19529
19699
  });
19700
+ const tableProps = $xeTable;
19701
+ const vSize = $xeFilterPanel.computeSize;
19530
19702
  const filterOpts = $xeTable.computeFilterOpts;
19531
19703
  const {
19532
19704
  destroyOnClose
19533
19705
  } = filterOpts;
19534
19706
  return h('div', {
19707
+ ref: 'refElem',
19535
19708
  class: ['vxe-table--filter-wrapper', 'filter--prevent-default', compConf && compConf.className ? compConf.className : '', getClass(filterClassName, params), {
19536
- 'is--animat': $xeTable.animat,
19709
+ [`size--${vSize}`]: vSize,
19710
+ 'is--animat': tableProps.animat,
19537
19711
  'is--multiple': multiple,
19538
19712
  'is--active': visible
19539
19713
  }],
19540
19714
  style: filterStore.style
19541
- }, filterStore.visible && (destroyOnClose ? visible : true) && column ? this.renderOptions(h, filterRender, compConf).concat(this.renderFooter(h)) : []);
19715
+ }, filterStore.visible && (destroyOnClose ? visible : true) && column ? renderOptions($xeFilterPanel, h, filterRender, compConf).concat(renderFooter($xeFilterPanel, h)) : []);
19542
19716
  },
19543
19717
  methods: {
19544
- renderOptions(h, filterRender, compConf) {
19545
- const $panel = this;
19546
- const $xeTable = this.$parent;
19547
- const tableInternalData = $xeTable;
19548
- const {
19549
- filterStore
19550
- } = this;
19551
- const {
19552
- column,
19553
- multiple,
19554
- maxHeight
19555
- } = filterStore;
19556
- const slots = column ? column.slots : null;
19557
- const filterSlot = slots ? slots.filter : null;
19558
- const params = Object.assign({}, tableInternalData._currFilterParams, {
19559
- $panel,
19560
- $table: $xeTable
19561
- });
19562
- const rtFilter = compConf ? compConf.renderTableFilter || compConf.renderFilter : null;
19563
- if (filterSlot) {
19564
- return [h('div', {
19565
- class: 'vxe-table--filter-template',
19566
- style: maxHeight ? {
19567
- maxHeight: `${maxHeight}px`
19568
- } : {}
19569
- }, $xeTable.callSlot(filterSlot, params, h))];
19570
- } else if (rtFilter) {
19571
- return [h('div', {
19572
- class: 'vxe-table--filter-template',
19573
- style: maxHeight ? {
19574
- maxHeight: `${maxHeight}px`
19575
- } : {}
19576
- }, getSlotVNs(rtFilter.call($xeTable, h, filterRender, params)))];
19577
- }
19578
- const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some(item => item._checked);
19579
- const isAllIndeterminate = multiple && filterStore.isIndeterminate;
19580
- return [h('ul', {
19581
- class: 'vxe-table--filter-header'
19582
- }, [h('li', {
19583
- class: ['vxe-table--filter-option', {
19584
- 'is--checked': isAllChecked,
19585
- 'is--indeterminate': isAllIndeterminate
19586
- }],
19587
- attrs: {
19588
- title: filter_panel_getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
19589
- },
19590
- on: {
19591
- click: evnt => {
19592
- this.changeAllOption(evnt, !filterStore.isAllSelected);
19593
- }
19594
- }
19595
- }, (multiple ? [h('span', {
19596
- class: ['vxe-checkbox--icon', isAllIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19597
- })] : []).concat([h('span', {
19598
- class: 'vxe-checkbox--label'
19599
- }, filter_panel_getI18n('vxe.table.allFilter'))]))]), h('ul', {
19600
- class: 'vxe-table--filter-body',
19601
- style: maxHeight ? {
19602
- maxHeight: `${maxHeight}px`
19603
- } : {}
19604
- }, filterStore.options.map(item => {
19605
- const isChecked = item._checked;
19606
- const isIndeterminate = false;
19607
- return h('li', {
19608
- class: ['vxe-table--filter-option', {
19609
- 'is--checked': isChecked
19610
- }],
19611
- attrs: {
19612
- title: item.label
19613
- },
19614
- on: {
19615
- click: evnt => {
19616
- this.changeOption(evnt, !item._checked, item);
19617
- }
19618
- }
19619
- }, (multiple ? [h('span', {
19620
- class: ['vxe-checkbox--icon', isIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19621
- })] : []).concat([h('span', {
19622
- class: 'vxe-checkbox--label'
19623
- }, formatText(item.label, 1))]));
19624
- }))];
19625
- },
19626
- renderFooter(h) {
19627
- const $xeTable = this.$parent;
19628
- const {
19629
- hasCheckOption,
19630
- filterStore
19631
- } = this;
19632
- const {
19633
- column,
19634
- multiple
19635
- } = filterStore;
19636
- const filterOpts = $xeTable.computeFilterOpts;
19637
- const filterRender = column.filterRender;
19638
- const compConf = isEnableConf(filterRender) ? panel_renderer.get(filterRender.name) : null;
19639
- const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
19640
- return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true) ? [h('div', {
19641
- class: 'vxe-table--filter-footer'
19642
- }, [h('button', {
19643
- class: {
19644
- 'is--disabled': isDisabled
19645
- },
19646
- attrs: {
19647
- disabled: isDisabled
19648
- },
19649
- on: {
19650
- click: this.confirmFilter
19651
- }
19652
- }, filterOpts.confirmButtonText || filter_panel_getI18n('vxe.table.confirmFilter')), h('button', {
19653
- on: {
19654
- click: this.resetFilter
19655
- }
19656
- }, filterOpts.resetButtonText || filter_panel_getI18n('vxe.table.resetFilter'))])] : [];
19657
- },
19658
19718
  // 全部筛选事件
19659
19719
  filterCheckAllEvent(evnt, value) {
19660
19720
  const filterStore = this.filterStore;
@@ -19725,12 +19785,12 @@ const {
19725
19785
  const {
19726
19786
  getI18n: import_panel_getI18n,
19727
19787
  getIcon: import_panel_getIcon,
19728
- globalMixins,
19788
+ globalMixins: import_panel_globalMixins,
19729
19789
  renderEmptyElement: import_panel_renderEmptyElement
19730
19790
  } = core_.VxeUI;
19731
19791
  /* harmony default export */ var import_panel = ({
19732
19792
  name: 'VxeTableImportPanel',
19733
- mixins: [globalMixins.sizeMixin],
19793
+ mixins: [import_panel_globalMixins.sizeMixin],
19734
19794
  props: {
19735
19795
  defaultOptions: Object,
19736
19796
  storeData: Object
@@ -20668,6 +20728,16 @@ const {
20668
20728
  filterStore.visible = false;
20669
20729
  } else {
20670
20730
  const el = $xeTable.$refs.refElem;
20731
+ const {
20732
+ scrollTop,
20733
+ scrollLeft,
20734
+ visibleHeight,
20735
+ visibleWidth
20736
+ } = getDomNode();
20737
+ const filterOpts = $xeTable.computeFilterOpts;
20738
+ const {
20739
+ transfer
20740
+ } = filterOpts;
20671
20741
  const tableRect = el.getBoundingClientRect();
20672
20742
  const btnElem = evnt.currentTarget;
20673
20743
  const {
@@ -20715,23 +20785,37 @@ const {
20715
20785
  return;
20716
20786
  }
20717
20787
  const btnRect = btnElem.getBoundingClientRect();
20718
- const filterWidth = filterWrapperElem.offsetWidth;
20719
20788
  const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
20720
20789
  const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
20790
+ const filterWidth = filterWrapperElem.offsetWidth;
20721
20791
  const centerWidth = filterWidth / 2;
20722
- let left = btnRect.left - tableRect.left - centerWidth;
20723
- const top = btnRect.top - tableRect.top + btnElem.clientHeight;
20724
- // 判断面板不能大于表格高度
20725
- const maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
20726
- if (left < 1) {
20727
- left = 1;
20728
- } else if (left > el.clientWidth - filterWidth - 1) {
20729
- left = el.clientWidth - filterWidth - 1;
20792
+ let left = 0;
20793
+ let top = 0;
20794
+ let maxHeight = 0;
20795
+ if (transfer) {
20796
+ left = btnRect.left - centerWidth + scrollLeft;
20797
+ top = btnRect.top + btnElem.clientHeight + scrollTop;
20798
+ maxHeight = Math.min(Math.max(tableRect.height, Math.floor(visibleHeight / 2)), Math.max(80, visibleHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 28));
20799
+ if (left < 16) {
20800
+ left = 16;
20801
+ } else if (left > visibleWidth - filterWidth - 16) {
20802
+ left = visibleWidth - filterWidth - 16;
20803
+ }
20804
+ } else {
20805
+ left = btnRect.left - tableRect.left - centerWidth;
20806
+ top = btnRect.top - tableRect.top + btnElem.clientHeight;
20807
+ maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
20808
+ if (left < 1) {
20809
+ left = 1;
20810
+ } else if (left > el.clientWidth - filterWidth - 1) {
20811
+ left = el.clientWidth - filterWidth - 1;
20812
+ }
20730
20813
  }
20731
20814
  filterStore.style = {
20732
20815
  top: toCssUnit(top),
20733
20816
  left: toCssUnit(left)
20734
20817
  };
20818
+ // 判断面板不能大于表格高度
20735
20819
  filterStore.maxHeight = maxHeight;
20736
20820
  });
20737
20821
  }