vxe-table 3.10.7 → 3.10.9

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 (40) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/custom/panel.js +3 -2
  3. package/es/table/src/body.js +4 -8
  4. package/es/table/src/cell.js +7 -3
  5. package/es/table/src/footer.js +2 -4
  6. package/es/table/src/header.js +2 -2
  7. package/es/table/src/methods.js +206 -79
  8. package/es/ui/index.js +1 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/lib/index.umd.js +225 -100
  11. package/lib/index.umd.min.js +1 -1
  12. package/lib/style.css +1 -1
  13. package/lib/table/module/custom/panel.js +2 -1
  14. package/lib/table/module/custom/panel.min.js +1 -1
  15. package/lib/table/src/body.js +4 -8
  16. package/lib/table/src/body.min.js +1 -1
  17. package/lib/table/src/cell.js +10 -3
  18. package/lib/table/src/cell.min.js +1 -1
  19. package/lib/table/src/footer.js +2 -4
  20. package/lib/table/src/footer.min.js +1 -1
  21. package/lib/table/src/header.js +2 -2
  22. package/lib/table/src/methods.js +204 -81
  23. package/lib/table/src/methods.min.js +1 -1
  24. package/lib/ui/index.js +1 -1
  25. package/lib/ui/index.min.js +1 -1
  26. package/lib/ui/src/log.js +1 -1
  27. package/lib/ui/src/log.min.js +1 -1
  28. package/package.json +2 -2
  29. package/packages/table/module/custom/panel.ts +5 -2
  30. package/packages/table/src/body.ts +4 -8
  31. package/packages/table/src/cell.ts +9 -5
  32. package/packages/table/src/footer.ts +2 -4
  33. package/packages/table/src/header.ts +2 -2
  34. package/packages/table/src/methods.ts +210 -77
  35. /package/es/{iconfont.1731028570313.ttf → iconfont.1731143527990.ttf} +0 -0
  36. /package/es/{iconfont.1731028570313.woff → iconfont.1731143527990.woff} +0 -0
  37. /package/es/{iconfont.1731028570313.woff2 → iconfont.1731143527990.woff2} +0 -0
  38. /package/lib/{iconfont.1731028570313.ttf → iconfont.1731143527990.ttf} +0 -0
  39. /package/lib/{iconfont.1731028570313.woff → iconfont.1731143527990.woff} +0 -0
  40. /package/lib/{iconfont.1731028570313.woff2 → iconfont.1731143527990.woff2} +0 -0
@@ -321,6 +321,16 @@ function clearRowDropOrigin($xeTable) {
321
321
  });
322
322
  }
323
323
  }
324
+ function updateRowDropOrigin($xeTable, row) {
325
+ const el = $xeTable.$el;
326
+ if (el) {
327
+ const clss = 'row--drag-origin';
328
+ const rowid = getRowid($xeTable, row);
329
+ XEUtils.arrayEach(el.querySelectorAll(`[rowid="${rowid}"]`), (elem) => {
330
+ addClass(elem, clss);
331
+ });
332
+ }
333
+ }
324
334
  function clearRowDropTarget($xeTable) {
325
335
  const el = $xeTable.$el;
326
336
  if (el) {
@@ -330,6 +340,17 @@ function clearRowDropTarget($xeTable) {
330
340
  });
331
341
  }
332
342
  }
343
+ function updateRowDropTarget($xeTable, row, dragPos) {
344
+ const el = $xeTable.$el;
345
+ if (el) {
346
+ const clss = 'row--drag-active-target';
347
+ const rowid = getRowid($xeTable, row);
348
+ XEUtils.arrayEach(el.querySelectorAll(`[rowid="${rowid}"]`), (elem) => {
349
+ addClass(elem, clss);
350
+ elem.setAttribute('drag-pos', dragPos);
351
+ });
352
+ }
353
+ }
333
354
  function showRowDropTip(evnt, $xeTable) {
334
355
  const rdTipEl = $xeTable.$refs.refRowDragTipElem;
335
356
  if (!rdTipEl) {
@@ -1785,80 +1806,132 @@ const Methods = {
1785
1806
  * 设置为固定列
1786
1807
  */
1787
1808
  setColumnFixed(fieldOrColumn, fixed) {
1788
- const { isMaxFixedColumn, columnOpts } = this;
1789
- const column = handleFieldOrColumn(this, fieldOrColumn);
1790
- const targetColumn = getRootColumn(this, column);
1791
- if (targetColumn && targetColumn.fixed !== fixed) {
1792
- // 是否超过最大固定列数量
1793
- if (!targetColumn.fixed && isMaxFixedColumn) {
1794
- if (VxeUI.modal) {
1795
- VxeUI.modal.message({
1796
- status: 'error',
1797
- content: getI18n('vxe.table.maxFixedCol', [columnOpts.maxFixedSize])
1798
- });
1809
+ const $xeTable = this;
1810
+ let status = false;
1811
+ const cols = XEUtils.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
1812
+ const columnOpts = $xeTable.computeColumnOpts;
1813
+ const isMaxFixedColumn = $xeTable.computeIsMaxFixedColumn;
1814
+ for (let i = 0; i < cols.length; i++) {
1815
+ const item = cols[i];
1816
+ const column = handleFieldOrColumn($xeTable, item);
1817
+ const targetColumn = getRootColumn($xeTable, column);
1818
+ if (targetColumn && targetColumn.fixed !== fixed) {
1819
+ // 是否超过最大固定列数量
1820
+ if (!targetColumn.fixed && isMaxFixedColumn) {
1821
+ if (VxeUI.modal) {
1822
+ VxeUI.modal.message({
1823
+ status: 'error',
1824
+ content: getI18n('vxe.table.maxFixedCol', [columnOpts.maxFixedSize])
1825
+ });
1826
+ }
1827
+ return $xeTable.$nextTick();
1828
+ }
1829
+ XEUtils.eachTree([targetColumn], (column) => {
1830
+ column.fixed = fixed;
1831
+ });
1832
+ $xeTable.saveCustomStore('update:fixed');
1833
+ if (!status) {
1834
+ status = true;
1799
1835
  }
1800
- return this.$nextTick();
1801
1836
  }
1802
- XEUtils.eachTree([targetColumn], (column) => {
1803
- column.fixed = fixed;
1804
- });
1805
- this.saveCustomStore('update:fixed');
1806
- return this.refreshColumn();
1807
1837
  }
1808
- return this.$nextTick();
1838
+ if (status) {
1839
+ return $xeTable.refreshColumn();
1840
+ }
1841
+ return $xeTable.$nextTick();
1809
1842
  },
1810
1843
  /**
1811
1844
  * 取消指定固定列
1812
1845
  */
1813
1846
  clearColumnFixed(fieldOrColumn) {
1814
- const column = handleFieldOrColumn(this, fieldOrColumn);
1815
- const targetColumn = getRootColumn(this, column);
1816
- if (targetColumn && targetColumn.fixed) {
1817
- XEUtils.eachTree([targetColumn], (column) => {
1818
- column.fixed = null;
1819
- });
1820
- this.saveCustomStore('update:fixed');
1821
- return this.refreshColumn();
1847
+ const $xeTable = this;
1848
+ let status = false;
1849
+ const cols = XEUtils.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
1850
+ cols.forEach(item => {
1851
+ const column = handleFieldOrColumn($xeTable, item);
1852
+ const targetColumn = getRootColumn($xeTable, column);
1853
+ if (targetColumn && targetColumn.fixed) {
1854
+ XEUtils.eachTree([targetColumn], (column) => {
1855
+ column.fixed = null;
1856
+ });
1857
+ $xeTable.saveCustomStore('update:fixed');
1858
+ if (!status) {
1859
+ status = true;
1860
+ }
1861
+ }
1862
+ });
1863
+ if (status) {
1864
+ return $xeTable.refreshColumn();
1822
1865
  }
1823
- return this.$nextTick();
1866
+ return $xeTable.$nextTick();
1824
1867
  },
1825
1868
  /**
1826
1869
  * 隐藏指定列
1827
1870
  */
1828
1871
  hideColumn(fieldOrColumn) {
1829
- const column = handleFieldOrColumn(this, fieldOrColumn);
1830
- if (column && column.visible) {
1831
- column.visible = false;
1832
- return this.handleCustom();
1872
+ const $xeTable = this;
1873
+ let status = false;
1874
+ const cols = XEUtils.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
1875
+ cols.forEach(item => {
1876
+ const column = handleFieldOrColumn($xeTable, item);
1877
+ if (column && column.visible) {
1878
+ column.visible = false;
1879
+ if (!status) {
1880
+ status = true;
1881
+ }
1882
+ }
1883
+ });
1884
+ if (status) {
1885
+ return $xeTable.handleCustom();
1833
1886
  }
1834
- return this.$nextTick();
1887
+ return $xeTable.$nextTick();
1835
1888
  },
1836
1889
  /**
1837
1890
  * 显示指定列
1838
1891
  */
1839
1892
  showColumn(fieldOrColumn) {
1840
- const column = handleFieldOrColumn(this, fieldOrColumn);
1841
- if (column && !column.visible) {
1842
- column.visible = true;
1843
- return this.handleCustom();
1893
+ const $xeTable = this;
1894
+ let status = false;
1895
+ const cols = XEUtils.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
1896
+ cols.forEach(item => {
1897
+ const column = handleFieldOrColumn($xeTable, item);
1898
+ if (column && !column.visible) {
1899
+ column.visible = true;
1900
+ if (!status) {
1901
+ status = true;
1902
+ }
1903
+ }
1904
+ });
1905
+ if (status) {
1906
+ return $xeTable.handleCustom();
1844
1907
  }
1845
- return this.$nextTick();
1908
+ return $xeTable.$nextTick();
1846
1909
  },
1847
1910
  setColumnWidth(fieldOrColumn, width) {
1848
- const column = handleFieldOrColumn(this, fieldOrColumn);
1849
- if (column) {
1850
- const colWidth = XEUtils.toInteger(width);
1851
- let rdWidth = colWidth;
1852
- if (isScale(width)) {
1853
- const { tableBody } = this.$refs;
1854
- const tableBodyElem = tableBody ? tableBody.$el : null;
1855
- const bodyWidth = tableBodyElem ? tableBodyElem.clientWidth - 1 : 0;
1856
- rdWidth = Math.floor(colWidth * bodyWidth);
1911
+ const $xeTable = this;
1912
+ let status = false;
1913
+ const cols = XEUtils.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
1914
+ cols.forEach(item => {
1915
+ const column = handleFieldOrColumn($xeTable, item);
1916
+ if (column) {
1917
+ const colWidth = XEUtils.toInteger(width);
1918
+ let rdWidth = colWidth;
1919
+ if (isScale(width)) {
1920
+ const tableBody = $xeTable.$refs.tableBody;
1921
+ const bodyElem = tableBody ? tableBody.$el : null;
1922
+ const bodyWidth = bodyElem ? bodyElem.clientWidth - 1 : 0;
1923
+ rdWidth = Math.floor(colWidth * bodyWidth);
1924
+ }
1925
+ column.resizeWidth = rdWidth;
1926
+ if (!status) {
1927
+ status = true;
1928
+ }
1857
1929
  }
1858
- column.resizeWidth = rdWidth;
1859
- return this.refreshColumn();
1930
+ });
1931
+ if (status) {
1932
+ return $xeTable.refreshColumn();
1860
1933
  }
1861
- return this.$nextTick();
1934
+ return $xeTable.$nextTick();
1862
1935
  },
1863
1936
  getColumnWidth(fieldOrColumn) {
1864
1937
  const column = handleFieldOrColumn(this, fieldOrColumn);
@@ -4628,7 +4701,7 @@ const Methods = {
4628
4701
  const treeOpts = $xeTable.computeTreeOpts;
4629
4702
  const { transform } = treeOpts;
4630
4703
  const { dragRow } = reactData;
4631
- const { afterFullData, tableFullData, prevDragRow, prevDragPos } = internalData;
4704
+ const { afterFullData, afterTreeFullData, tableFullData, tableFullTreeData, prevDragRow, prevDragPos } = internalData;
4632
4705
  if (prevDragRow && dragRow) {
4633
4706
  // 判断是否有拖动
4634
4707
  if (prevDragRow !== dragRow) {
@@ -4642,18 +4715,36 @@ const Methods = {
4642
4715
  return;
4643
4716
  }
4644
4717
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
4645
- // 移出源位置
4646
- const oafIndex = $xeTable.findRowIndexOf(afterFullData, dragRow);
4647
- const otfIndex = $xeTable.findRowIndexOf(tableFullData, dragRow);
4648
- afterFullData.splice(oafIndex, 1);
4649
- tableFullData.splice(otfIndex, 1);
4650
- // 插新位置
4651
- const pafIndex = $xeTable.findRowIndexOf(afterFullData, prevDragRow);
4652
- const ptfIndex = $xeTable.findRowIndexOf(tableFullData, prevDragRow);
4653
- const nafIndex = pafIndex + dragOffsetIndex;
4654
- const ntfIndex = ptfIndex + dragOffsetIndex;
4655
- afterFullData.splice(nafIndex, 0, dragRow);
4656
- tableFullData.splice(ntfIndex, 0, dragRow);
4718
+ let oafIndex = -1;
4719
+ let nafIndex = -1;
4720
+ if (treeConfig) {
4721
+ // 移出源位置
4722
+ oafIndex = $xeTable.findRowIndexOf(afterTreeFullData, dragRow);
4723
+ const otfIndex = $xeTable.findRowIndexOf(tableFullTreeData, dragRow);
4724
+ afterTreeFullData.splice(oafIndex, 1);
4725
+ tableFullTreeData.splice(otfIndex, 1);
4726
+ // 插新位置
4727
+ const pafIndex = $xeTable.findRowIndexOf(afterTreeFullData, prevDragRow);
4728
+ const ptfIndex = $xeTable.findRowIndexOf(tableFullTreeData, prevDragRow);
4729
+ nafIndex = pafIndex + dragOffsetIndex;
4730
+ const ntfIndex = ptfIndex + dragOffsetIndex;
4731
+ afterTreeFullData.splice(nafIndex, 0, dragRow);
4732
+ tableFullTreeData.splice(ntfIndex, 0, dragRow);
4733
+ }
4734
+ else {
4735
+ // 移出源位置
4736
+ oafIndex = $xeTable.findRowIndexOf(afterFullData, dragRow);
4737
+ const otfIndex = $xeTable.findRowIndexOf(tableFullData, dragRow);
4738
+ afterFullData.splice(oafIndex, 1);
4739
+ tableFullData.splice(otfIndex, 1);
4740
+ // 插新位置
4741
+ const pafIndex = $xeTable.findRowIndexOf(afterFullData, prevDragRow);
4742
+ const ptfIndex = $xeTable.findRowIndexOf(tableFullData, prevDragRow);
4743
+ nafIndex = pafIndex + dragOffsetIndex;
4744
+ const ntfIndex = ptfIndex + dragOffsetIndex;
4745
+ afterFullData.splice(nafIndex, 0, dragRow);
4746
+ tableFullData.splice(ntfIndex, 0, dragRow);
4747
+ }
4657
4748
  reactData.isDragRowMove = true;
4658
4749
  $xeTable.cacheRowMap();
4659
4750
  $xeTable.updateScrollYStatus();
@@ -4704,8 +4795,7 @@ const Methods = {
4704
4795
  const { dragRow } = reactData;
4705
4796
  const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
4706
4797
  const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
4707
- addClass(trEl, 'row--drag-active-target');
4708
- trEl.setAttribute('drag-pos', dragPos);
4798
+ updateRowDropTarget($xeTable, row, dragPos);
4709
4799
  internalData.prevDragRow = row;
4710
4800
  internalData.prevDragPos = dragPos;
4711
4801
  $xeTable.dispatchEvent('row-dragover', {
@@ -4737,7 +4827,7 @@ const Methods = {
4737
4827
  }
4738
4828
  reactData.dragRow = row;
4739
4829
  trEl.draggable = true;
4740
- addClass(trEl, 'row--drag-origin');
4830
+ updateRowDropOrigin($xeTable, row);
4741
4831
  showRowDropTip(evnt, $xeTable);
4742
4832
  updateRowDropTipContent($xeTable, tdEl);
4743
4833
  $xeTable.dispatchEvent('row-dragstart', params, evnt);
@@ -5594,7 +5684,7 @@ const Methods = {
5594
5684
  }
5595
5685
  this.closeTooltip();
5596
5686
  },
5597
- handleScrollEvent(evnt, isRollY, isRollX, params) {
5687
+ handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, params) {
5598
5688
  const $xeTable = this;
5599
5689
  const props = $xeTable;
5600
5690
  const { highlightHoverRow } = props;
@@ -5619,10 +5709,32 @@ const Methods = {
5619
5709
  const bodyWidth = bodyElem ? bodyElem.clientWidth : 0;
5620
5710
  const scrollHeight = bodyElem ? bodyElem.scrollHeight : 0;
5621
5711
  const scrollWidth = bodyElem ? bodyElem.scrollWidth : 0;
5622
- const evntParams = Object.assign({ bodyHeight,
5712
+ let isTop = false;
5713
+ let isBottom = false;
5714
+ let isLeft = false;
5715
+ let isRight = false;
5716
+ if (isRollX) {
5717
+ isLeft = scrollLeft <= 0;
5718
+ if (!isTop) {
5719
+ isRight = scrollLeft + bodyWidth >= scrollWidth;
5720
+ }
5721
+ $xeTable.checkScrolling();
5722
+ }
5723
+ else {
5724
+ isTop = scrollTop <= 0;
5725
+ if (!isTop) {
5726
+ isBottom = scrollTop + bodyHeight >= scrollHeight;
5727
+ }
5728
+ }
5729
+ const evntParams = Object.assign({ scrollTop,
5730
+ scrollLeft,
5731
+ bodyHeight,
5623
5732
  bodyWidth,
5624
5733
  scrollHeight,
5625
- scrollWidth, isX: isRollX, isY: isRollY }, params);
5734
+ scrollWidth, isX: isRollX, isY: isRollY, isTop,
5735
+ isBottom,
5736
+ isLeft,
5737
+ isRight }, params);
5626
5738
  $xeTable.dispatchEvent('scroll', evntParams, evnt);
5627
5739
  },
5628
5740
  /**
@@ -5667,11 +5779,9 @@ const Methods = {
5667
5779
  $xeTable.lastScrollTime = Date.now();
5668
5780
  $xeTable.handleSyncScrollX(scrollLeft);
5669
5781
  $xeTable.triggerScrollXEvent(evnt);
5670
- $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
5782
+ $xeTable.handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, {
5671
5783
  type: 'table',
5672
- fixed: '',
5673
- scrollTop,
5674
- scrollLeft
5784
+ fixed: ''
5675
5785
  });
5676
5786
  },
5677
5787
  debounceScrollYCalculate: XEUtils.debounce(function () {
@@ -5701,11 +5811,9 @@ const Methods = {
5701
5811
  $xeTable.lastScrollTime = Date.now();
5702
5812
  $xeTable.handleSyncScrollY(scrollTop);
5703
5813
  $xeTable.triggerScrollYEvent(evnt);
5704
- $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
5814
+ $xeTable.handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, {
5705
5815
  type: 'table',
5706
- fixed: '',
5707
- scrollTop,
5708
- scrollLeft
5816
+ fixed: ''
5709
5817
  });
5710
5818
  },
5711
5819
  /**
@@ -5901,16 +6009,35 @@ const Methods = {
5901
6009
  * @param {Number} scrollTop 上距离
5902
6010
  */
5903
6011
  scrollTo(scrollLeft, scrollTop) {
6012
+ const $xeTable = this;
5904
6013
  const { $refs } = this;
5905
- const { tableBody, rightBody, tableFooter } = $refs;
6014
+ const { tableBody, tableHeader, leftBody, rightBody, tableFooter } = $refs;
5906
6015
  const tableBodyElem = tableBody ? tableBody.$el : null;
6016
+ const leftBodyElem = leftBody ? leftBody.$el : null;
5907
6017
  const rightBodyElem = rightBody ? rightBody.$el : null;
6018
+ const tableHeaderElem = tableHeader ? tableHeader.$el : null;
5908
6019
  const tableFooterElem = tableFooter ? tableFooter.$el : null;
5909
6020
  if (XEUtils.isNumber(scrollLeft)) {
5910
- setScrollLeft(tableFooterElem || tableBodyElem, scrollLeft);
6021
+ const xHandleEl = $xeTable.$refs.refScrollXHandleElem;
6022
+ if (xHandleEl) {
6023
+ setScrollLeft(xHandleEl, scrollLeft);
6024
+ }
6025
+ else {
6026
+ setScrollLeft(tableBodyElem, scrollLeft);
6027
+ setScrollLeft(tableHeaderElem, scrollLeft);
6028
+ setScrollLeft(tableFooterElem, scrollLeft);
6029
+ }
5911
6030
  }
5912
6031
  if (XEUtils.isNumber(scrollTop)) {
5913
- setScrollTop(rightBodyElem || tableBodyElem, scrollTop);
6032
+ const yHandleEl = $xeTable.$refs.refScrollYHandleElem;
6033
+ if (yHandleEl) {
6034
+ setScrollTop(yHandleEl, scrollTop);
6035
+ }
6036
+ else {
6037
+ setScrollTop(tableBodyElem, scrollTop);
6038
+ setScrollTop(leftBodyElem, scrollTop);
6039
+ setScrollTop(rightBodyElem, scrollTop);
6040
+ }
5914
6041
  }
5915
6042
  if (this.scrollXLoad || this.scrollYLoad) {
5916
6043
  return new Promise(resolve => setTimeout(() => resolve(this.$nextTick()), 50));
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.10.7";
3
+ export const version = "3.10.9";
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.10.7"}`;
3
+ const version = `table v${"3.10.9"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);