vxe-table 4.21.2 → 4.21.4

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 (51) hide show
  1. package/dist/all.esm.js +142 -97
  2. package/dist/style.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/table/module/custom/hook.js +4 -0
  5. package/es/table/module/export/export-panel.js +3 -2
  6. package/es/table/module/export/hook.js +13 -7
  7. package/es/table/module/filter/hook.js +97 -79
  8. package/es/table/render/index.js +16 -6
  9. package/es/table/src/table.js +5 -0
  10. package/es/table/src/util.js +1 -0
  11. package/es/ui/index.js +1 -1
  12. package/es/ui/src/dom.js +1 -1
  13. package/es/ui/src/log.js +1 -1
  14. package/lib/index.umd.js +157 -103
  15. package/lib/index.umd.min.js +1 -1
  16. package/lib/style.css +1 -1
  17. package/lib/table/module/custom/hook.js +6 -0
  18. package/lib/table/module/custom/hook.min.js +1 -1
  19. package/lib/table/module/export/export-panel.js +3 -2
  20. package/lib/table/module/export/export-panel.min.js +1 -1
  21. package/lib/table/module/export/hook.js +15 -7
  22. package/lib/table/module/export/hook.min.js +1 -1
  23. package/lib/table/module/filter/hook.js +111 -86
  24. package/lib/table/module/filter/hook.min.js +1 -1
  25. package/lib/table/render/index.js +17 -4
  26. package/lib/table/render/index.min.js +1 -1
  27. package/lib/table/src/table.js +1 -1
  28. package/lib/table/src/table.min.js +1 -1
  29. package/lib/table/src/util.js +1 -0
  30. package/lib/table/src/util.min.js +1 -1
  31. package/lib/ui/index.js +1 -1
  32. package/lib/ui/index.min.js +1 -1
  33. package/lib/ui/src/dom.js +1 -1
  34. package/lib/ui/src/dom.min.js +1 -1
  35. package/lib/ui/src/log.js +1 -1
  36. package/lib/ui/src/log.min.js +1 -1
  37. package/package.json +2 -2
  38. package/packages/table/module/custom/hook.ts +4 -0
  39. package/packages/table/module/export/export-panel.ts +3 -2
  40. package/packages/table/module/export/hook.ts +12 -7
  41. package/packages/table/module/filter/hook.ts +94 -75
  42. package/packages/table/render/index.ts +16 -6
  43. package/packages/table/src/table.ts +5 -0
  44. package/packages/table/src/util.ts +1 -0
  45. package/packages/ui/src/dom.ts +1 -1
  46. /package/es/{iconfont.1787677402393.ttf → iconfont.1788399047071.ttf} +0 -0
  47. /package/es/{iconfont.1787677402393.woff → iconfont.1788399047071.woff} +0 -0
  48. /package/es/{iconfont.1787677402393.woff2 → iconfont.1788399047071.woff2} +0 -0
  49. /package/lib/{iconfont.1787677402393.ttf → iconfont.1788399047071.ttf} +0 -0
  50. /package/lib/{iconfont.1787677402393.woff → iconfont.1788399047071.woff} +0 -0
  51. /package/lib/{iconfont.1787677402393.woff2 → iconfont.1788399047071.woff2} +0 -0
package/dist/all.esm.js CHANGED
@@ -47,7 +47,7 @@ function getDefaultConfig(val1, def1) {
47
47
  return XEUtils.eqNull(val1) ? def1 : val1;
48
48
  }
49
49
 
50
- const version = "4.21.2";
50
+ const version = "4.21.4";
51
51
  VxeUI.version = version;
52
52
  VxeUI.tableVersion = version;
53
53
  VxeUI.setConfig({
@@ -591,7 +591,7 @@ function getTpImg() {
591
591
  return tpImgEl;
592
592
  }
593
593
  function getPropClass(property, params) {
594
- return property ? XEUtils.isFunction(property) ? property(params) : property : '';
594
+ return property ? (XEUtils.isFunction(property) ? property(params) : property) || '' : '';
595
595
  }
596
596
  function getClsRE(cls) {
597
597
  if (!reClsMap[cls]) {
@@ -769,7 +769,7 @@ function wheelScrollTopTo(diffNum, cb) {
769
769
  }
770
770
 
771
771
  const { log } = VxeUI;
772
- const tableVersion = `table v${"4.21.2"}`;
772
+ const tableVersion = `table v${"4.21.4"}`;
773
773
  function createComponentLog(name) {
774
774
  const uiVersion = VxeUI.uiVersion ? `ui v${VxeUI.uiVersion}` : '';
775
775
  const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
@@ -1208,6 +1208,7 @@ function createReactData$2() {
1208
1208
  customColumnList: [],
1209
1209
  // 当前选中的筛选列
1210
1210
  filterStore: {
1211
+ targetEl: null,
1211
1212
  isAllSelected: false,
1212
1213
  isIndeterminate: false,
1213
1214
  style: null,
@@ -8025,9 +8026,10 @@ var TableExportPanelComponent = defineVxeComponent({
8025
8026
  const { hasMerge, columns } = storeData;
8026
8027
  const checkedAll = computeCheckedAll.value;
8027
8028
  const supportMerge = computeSupportMerge.value;
8028
- const expColumns = XEUtils.searchTree(columns, (column) => column.checked, { children: 'children', mapChildren: 'childNodes', original: true });
8029
+ // 内部导出使用 _columns -> _children 为自定义子集
8030
+ const expColumns = XEUtils.searchTree(columns, (column) => column.checked, { children: 'children', mapChildren: '_children', original: true });
8029
8031
  return Object.assign({}, defaultOptions, {
8030
- columns: expColumns,
8032
+ _columns: expColumns,
8031
8033
  isMerge: hasMerge && supportMerge && checkedAll ? defaultOptions.isMerge : false
8032
8034
  });
8033
8035
  };
@@ -8680,6 +8682,92 @@ hooks$7.add('tableFilterModule', {
8680
8682
  const { props, reactData, internalData } = $xeTable;
8681
8683
  const { refElem, refTableFilter } = $xeTable.getRefMaps();
8682
8684
  const { computeFilterOpts, computeMouseOpts } = $xeTable.getComputeMaps();
8685
+ const updatePopupStyle = () => {
8686
+ const { filterStore } = reactData;
8687
+ const { elemStore } = internalData;
8688
+ const { column, targetEl } = filterStore;
8689
+ if (!column || !targetEl) {
8690
+ return nextTick();
8691
+ }
8692
+ const tableEl = refElem.value;
8693
+ const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
8694
+ const filterOpts = computeFilterOpts.value;
8695
+ const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts;
8696
+ const currEl = targetEl;
8697
+ const tableRect = tableEl.getBoundingClientRect();
8698
+ const filterRender = column ? column.filterRender : null;
8699
+ const compConf = filterRender && isEnableConf(filterRender) ? renderer$5.get(filterRender.name) : null;
8700
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
8701
+ if (!headerScrollElem) {
8702
+ return nextTick();
8703
+ }
8704
+ const tableFilter = refTableFilter.value;
8705
+ const filterWrapperElem = tableFilter ? tableFilter.getRefMaps().refElem.value : null;
8706
+ if (!filterWrapperElem) {
8707
+ return nextTick();
8708
+ }
8709
+ const btnRect = currEl.getBoundingClientRect();
8710
+ const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
8711
+ const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
8712
+ const filterWidth = filterWrapperElem.offsetWidth;
8713
+ const centerWidth = currEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
8714
+ let left = 0;
8715
+ let top = 0;
8716
+ let maxHeight = 0;
8717
+ /**
8718
+ * 是否显示筛选按钮图标
8719
+ * 如果不存在图标,则相对单元格居中显示
8720
+ */
8721
+ if (transfer) {
8722
+ left = btnRect.left - centerWidth + scrollLeft;
8723
+ top = btnRect.top + currEl.clientHeight + scrollTop;
8724
+ 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));
8725
+ if (left < 16) {
8726
+ left = 16;
8727
+ }
8728
+ else if (left > (visibleWidth - filterWidth - 16)) {
8729
+ left = visibleWidth - filterWidth - 16;
8730
+ }
8731
+ }
8732
+ else {
8733
+ left = btnRect.left - tableRect.left - centerWidth;
8734
+ top = btnRect.top - tableRect.top + currEl.clientHeight;
8735
+ maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
8736
+ if (left < 1) {
8737
+ left = 1;
8738
+ }
8739
+ else if (left > (tableEl.clientWidth - filterWidth - 1)) {
8740
+ left = tableEl.clientWidth - filterWidth - 1;
8741
+ }
8742
+ if ($xeGGWrapper) {
8743
+ const wrapperEl = $xeGGWrapper.getRefMaps().refElem.value;
8744
+ if (wrapperEl) {
8745
+ const wrapperRect = wrapperEl.getBoundingClientRect();
8746
+ top += tableRect.top - wrapperRect.top;
8747
+ }
8748
+ }
8749
+ }
8750
+ const fStys = {
8751
+ top: toCssUnit(top),
8752
+ left: toCssUnit(left)
8753
+ };
8754
+ if (zIndex) {
8755
+ fStys.zIndex = zIndex;
8756
+ }
8757
+ filterStore.style = fStys;
8758
+ // 筛选面板是自适应表格高度
8759
+ if (compConf ? !compConf.tableFilterAutoHeight : false) {
8760
+ maxHeight = 0;
8761
+ }
8762
+ else {
8763
+ if (customMaxHeight) {
8764
+ maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
8765
+ }
8766
+ }
8767
+ // 判断面板不能大于表格高度
8768
+ filterStore.maxHeight = maxHeight;
8769
+ return nextTick();
8770
+ };
8683
8771
  const filterPrivateMethods = {
8684
8772
  checkFilterOptions() {
8685
8773
  const { filterStore } = reactData;
@@ -8692,96 +8780,21 @@ hooks$7.add('tableFilterModule', {
8692
8780
  },
8693
8781
  handleOpenFilterColumn(evnt, btnEl, colEl, column, params) {
8694
8782
  const { initStore, filterStore } = reactData;
8695
- const { elemStore } = internalData;
8696
8783
  if (filterStore.column === column && filterStore.visible) {
8697
8784
  filterStore.visible = false;
8698
8785
  }
8699
8786
  else {
8700
- const tableEl = refElem.value;
8701
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
8702
- const filterOpts = computeFilterOpts.value;
8703
- const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts;
8704
8787
  const currEl = btnEl || colEl;
8705
- const tableRect = tableEl.getBoundingClientRect();
8706
- const filterRender = column ? column.filterRender : null;
8707
- const compConf = filterRender && isEnableConf(filterRender) ? renderer$5.get(filterRender.name) : null;
8708
8788
  $xeTable.handleFilterOptions(column);
8709
8789
  internalData._currFilterParams = params;
8790
+ filterStore.targetEl = currEl;
8710
8791
  filterStore.style = null;
8711
8792
  filterStore.visible = true;
8712
8793
  initStore.filter = true;
8713
- nextTick(() => {
8714
- const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
8715
- if (!headerScrollElem) {
8716
- return;
8717
- }
8718
- const tableFilter = refTableFilter.value;
8719
- const filterWrapperElem = tableFilter ? tableFilter.getRefMaps().refElem.value : null;
8720
- if (!filterWrapperElem) {
8721
- return;
8722
- }
8723
- const btnRect = currEl.getBoundingClientRect();
8724
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
8725
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
8726
- const filterWidth = filterWrapperElem.offsetWidth;
8727
- const centerWidth = btnEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
8728
- let left = 0;
8729
- let top = 0;
8730
- let maxHeight = 0;
8731
- /**
8732
- * 是否显示筛选按钮图标
8733
- * 如果不存在图标,则相对单元格居中显示
8734
- */
8735
- if (transfer) {
8736
- left = btnRect.left - centerWidth + scrollLeft;
8737
- top = btnRect.top + currEl.clientHeight + scrollTop;
8738
- 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));
8739
- if (left < 16) {
8740
- left = 16;
8741
- }
8742
- else if (left > (visibleWidth - filterWidth - 16)) {
8743
- left = visibleWidth - filterWidth - 16;
8744
- }
8745
- }
8746
- else {
8747
- left = btnRect.left - tableRect.left - centerWidth;
8748
- top = btnRect.top - tableRect.top + currEl.clientHeight;
8749
- maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
8750
- if (left < 1) {
8751
- left = 1;
8752
- }
8753
- else if (left > (tableEl.clientWidth - filterWidth - 1)) {
8754
- left = tableEl.clientWidth - filterWidth - 1;
8755
- }
8756
- if ($xeGGWrapper) {
8757
- const wrapperEl = $xeGGWrapper.getRefMaps().refElem.value;
8758
- if (wrapperEl) {
8759
- const wrapperRect = wrapperEl.getBoundingClientRect();
8760
- top += tableRect.top - wrapperRect.top;
8761
- }
8762
- }
8763
- }
8764
- const fStys = {
8765
- top: toCssUnit(top),
8766
- left: toCssUnit(left)
8767
- };
8768
- if (zIndex) {
8769
- fStys.zIndex = zIndex;
8770
- }
8771
- filterStore.style = fStys;
8772
- // 筛选面板是自适应表格高度
8773
- if (compConf ? !compConf.tableFilterAutoHeight : false) {
8774
- maxHeight = 0;
8775
- }
8776
- else {
8777
- if (customMaxHeight) {
8778
- maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
8779
- }
8780
- }
8781
- // 判断面板不能大于表格高度
8782
- filterStore.maxHeight = maxHeight;
8783
- });
8784
8794
  }
8795
+ nextTick(() => {
8796
+ updatePopupStyle();
8797
+ });
8785
8798
  $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt);
8786
8799
  },
8787
8800
  /**
@@ -8939,6 +8952,13 @@ hooks$7.add('tableFilterModule', {
8939
8952
  $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt);
8940
8953
  }
8941
8954
  }
8955
+ },
8956
+ handleFilterStyle() {
8957
+ const { filterStore } = reactData;
8958
+ if (!filterStore.visible) {
8959
+ return nextTick();
8960
+ }
8961
+ return updatePopupStyle();
8942
8962
  }
8943
8963
  };
8944
8964
  const filterMethods = {
@@ -10824,7 +10844,7 @@ const tableExportMethodKeys = ['exportData', 'importByFile', 'importData', 'save
10824
10844
  hooks$4.add('tableExportModule', {
10825
10845
  setupTable($xeTable) {
10826
10846
  const { props, reactData, internalData } = $xeTable;
10827
- const { computeTreeOpts, computePrintOpts, computeExportOpts, computeImportOpts, computeCustomOpts, computeSeqOpts, computeRadioOpts, computeCheckboxOpts, computeColumnOpts, computeAggregateOpts } = $xeTable.getComputeMaps();
10847
+ const { computeTreeOpts, computePrintOpts, computeExportOpts, computeImportOpts, computeSeqOpts, computeRadioOpts, computeCheckboxOpts, computeColumnOpts, computeAggregateOpts } = $xeTable.getComputeMaps();
10828
10848
  const getSeq = (cellValue, row, $rowIndex, column, $columnIndex) => {
10829
10849
  const seqOpts = computeSeqOpts.value;
10830
10850
  const seqMd = seqOpts.seqMethod || column.seqMethod;
@@ -11781,9 +11801,9 @@ hooks$4.add('tableExportModule', {
11781
11801
  const { initStore, isGroup, rowGroupList, footerTableData, exportStore, exportParams } = reactData;
11782
11802
  const { collectColumn, mergeBodyList, mergeFooterList } = internalData;
11783
11803
  const exportOpts = computeExportOpts.value;
11804
+ const printOpts = computePrintOpts.value;
11784
11805
  const hasTree = !!treeConfig;
11785
11806
  const hasRowGroup = rowGroupList.length > 0;
11786
- const customOpts = computeCustomOpts.value;
11787
11807
  const selectRecords = $xeTable.getCheckboxRecords();
11788
11808
  const proxyOpts = $xeGGWrapper ? $xeGGWrapper.getComputeMaps().computeProxyOpts.value : {};
11789
11809
  const hasFooter = !!footerTableData.length;
@@ -11804,9 +11824,9 @@ hooks$4.add('tableExportModule', {
11804
11824
  warnLog$4('vxe.error.delProp', ['isAllExpand', 'isTreeAllExpanded']);
11805
11825
  defOpts.isTreeAllExpanded = defOpts.isAllExpand;
11806
11826
  }
11807
- const types = defOpts.types || XEUtils.keys(exportOpts._typeMaps);
11827
+ const types = isPrint ? [] : (defOpts.types || XEUtils.keys(exportOpts._typeMaps));
11808
11828
  const modes = defOpts.modes || [];
11809
- const checkMethod = customOpts.checkMethod;
11829
+ const checkMethod = (isPrint ? printOpts : exportOpts).checkMethod;
11810
11830
  const exportColumns = collectColumn.slice(0);
11811
11831
  const { columns, excludeFields, includeFields, extraFields } = defOpts;
11812
11832
  // 处理类型
@@ -11913,10 +11933,10 @@ hooks$4.add('tableExportModule', {
11913
11933
  }
11914
11934
  }
11915
11935
  if (!modeList.some(item => item.value === mode)) {
11916
- exportParams.mode = modeList[0].value;
11936
+ exportParams.mode = modeList.length ? modeList[0].value : '';
11917
11937
  }
11918
11938
  if (!typeList.some(item => item.value === type)) {
11919
- exportParams.type = typeList[0].value;
11939
+ exportParams.type = typeList.length ? typeList[0].value : '';
11920
11940
  }
11921
11941
  if (!exportParams.widthMode) {
11922
11942
  exportParams.widthMode = '';
@@ -12005,7 +12025,13 @@ hooks$4.add('tableExportModule', {
12005
12025
  }
12006
12026
  let isCustomCol = false;
12007
12027
  let customCols = [];
12008
- if (columns) {
12028
+ const _columns = opts._columns;
12029
+ if (_columns) {
12030
+ // 内部导出使用 _columns -> _children 为自定义子集
12031
+ isCustomCol = true;
12032
+ customCols = XEUtils.searchTree(_columns, () => true, { children: '_children', mapChildren: 'childNodes', original: true });
12033
+ }
12034
+ else if (columns) {
12009
12035
  isCustomCol = true;
12010
12036
  customCols = XEUtils.searchTree(columns, () => true, { children: 'children', mapChildren: 'childNodes', original: true });
12011
12037
  }
@@ -14119,6 +14145,10 @@ VxeUI.hooks.add('tableCustomModule', {
14119
14145
  handleUpdateCustomColumn,
14120
14146
  handleCustomStyle() {
14121
14147
  const reactData = $xeTable.reactData;
14148
+ const { customStore } = reactData;
14149
+ if (!customStore.visible) {
14150
+ return nextTick();
14151
+ }
14122
14152
  reactData.isCustomDragStatus = false;
14123
14153
  return updatePopupStyle();
14124
14154
  }
@@ -15505,16 +15535,26 @@ renderer$2.mixin({
15505
15535
  ];
15506
15536
  },
15507
15537
  renderTableCell(renderOpts, params) {
15508
- const { row, column } = params;
15538
+ const { $table, row, column } = params;
15539
+ const { props } = renderOpts;
15540
+ const { computeSize } = $table.getComputeMaps();
15541
+ const customSize = props ? props.size : null;
15542
+ const vSize = customSize || computeSize.value;
15509
15543
  const cellValue = XEUtils.get(row, column.field);
15510
15544
  return h('span', {
15511
- class: 'vxe-color-picker--readonly'
15545
+ class: ['vxe-color-picker--readonly', {
15546
+ [`size--${vSize}`]: vSize
15547
+ }]
15512
15548
  }, [
15513
15549
  h('div', {
15514
- class: 'vxe-color-picker--readonly-color',
15515
- style: {
15516
- backgroundColor: cellValue
15517
- }
15550
+ class: ['vxe-color-picker--readonly-color', {
15551
+ 'is--empty': !cellValue
15552
+ }],
15553
+ style: cellValue
15554
+ ? {
15555
+ backgroundColor: cellValue
15556
+ }
15557
+ : undefined
15518
15558
  })
15519
15559
  ]);
15520
15560
  }
@@ -24019,6 +24059,11 @@ var VxeTableComponent = defineVxeComponent({
24019
24059
  }
24020
24060
  };
24021
24061
  const handleGlobalScrollEvent = (evnt) => {
24062
+ const { filterStore } = reactData;
24063
+ const filterOpts = computeFilterOpts.value;
24064
+ if (filterStore.visible && filterOpts.transfer) {
24065
+ $xeTable.handleFilterStyle();
24066
+ }
24022
24067
  reUpdateCustomStyleEvent(evnt);
24023
24068
  };
24024
24069
  /**