vxe-table 3.18.0 → 3.18.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 (83) 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/edit/mixin.js +58 -20
  6. package/es/table/module/filter/mixin.js +12 -10
  7. package/es/table/module/menu/mixin.js +16 -9
  8. package/es/table/module/validator/mixin.js +4 -2
  9. package/es/table/src/column.js +2 -0
  10. package/es/table/src/columnInfo.js +1 -0
  11. package/es/table/src/footer.js +7 -5
  12. package/es/table/src/header.js +67 -28
  13. package/es/table/src/methods.js +577 -85
  14. package/es/table/src/props.js +23 -6
  15. package/es/table/src/store.js +8 -0
  16. package/es/table/src/table.js +67 -26
  17. package/es/table/src/util.js +70 -2
  18. package/es/table/style.css +11 -17
  19. package/es/table/style.min.css +1 -1
  20. package/es/ui/index.js +1 -1
  21. package/es/ui/src/log.js +1 -1
  22. package/es/vxe-table/style.css +11 -17
  23. package/es/vxe-table/style.min.css +1 -1
  24. package/lib/index.css +1 -1
  25. package/lib/index.min.css +1 -1
  26. package/lib/index.umd.js +1002 -200
  27. package/lib/index.umd.min.js +1 -1
  28. package/lib/style.css +1 -1
  29. package/lib/style.min.css +1 -1
  30. package/lib/table/module/edit/mixin.js +55 -16
  31. package/lib/table/module/edit/mixin.min.js +1 -1
  32. package/lib/table/module/filter/mixin.js +12 -10
  33. package/lib/table/module/filter/mixin.min.js +1 -1
  34. package/lib/table/module/menu/mixin.js +20 -13
  35. package/lib/table/module/menu/mixin.min.js +1 -1
  36. package/lib/table/module/validator/mixin.js +4 -2
  37. package/lib/table/module/validator/mixin.min.js +1 -1
  38. package/lib/table/src/column.js +2 -0
  39. package/lib/table/src/column.min.js +1 -1
  40. package/lib/table/src/columnInfo.js +1 -0
  41. package/lib/table/src/columnInfo.min.js +1 -1
  42. package/lib/table/src/footer.js +7 -5
  43. package/lib/table/src/header.js +82 -25
  44. package/lib/table/src/header.min.js +1 -1
  45. package/lib/table/src/methods.js +647 -94
  46. package/lib/table/src/methods.min.js +1 -1
  47. package/lib/table/src/props.js +11 -3
  48. package/lib/table/src/props.min.js +1 -1
  49. package/lib/table/src/store.js +15 -0
  50. package/lib/table/src/store.min.js +1 -0
  51. package/lib/table/src/table.js +74 -25
  52. package/lib/table/src/table.min.js +1 -1
  53. package/lib/table/src/util.js +74 -2
  54. package/lib/table/src/util.min.js +1 -1
  55. package/lib/table/style/style.css +11 -17
  56. package/lib/table/style/style.min.css +1 -1
  57. package/lib/ui/index.js +1 -1
  58. package/lib/ui/index.min.js +1 -1
  59. package/lib/ui/src/log.js +1 -1
  60. package/lib/ui/src/log.min.js +1 -1
  61. package/lib/vxe-table/style/style.css +11 -17
  62. package/lib/vxe-table/style/style.min.css +1 -1
  63. package/package.json +1 -1
  64. package/packages/table/module/edit/mixin.ts +59 -23
  65. package/packages/table/module/filter/mixin.ts +17 -13
  66. package/packages/table/module/menu/mixin.ts +16 -9
  67. package/packages/table/module/validator/mixin.ts +8 -4
  68. package/packages/table/src/column.ts +4 -2
  69. package/packages/table/src/columnInfo.ts +1 -0
  70. package/packages/table/src/footer.ts +11 -9
  71. package/packages/table/src/header.ts +76 -34
  72. package/packages/table/src/methods.ts +607 -90
  73. package/packages/table/src/props.ts +29 -12
  74. package/packages/table/src/store.ts +15 -0
  75. package/packages/table/src/table.ts +79 -24
  76. package/packages/table/src/util.ts +76 -2
  77. package/styles/components/table.scss +33 -55
  78. /package/es/{iconfont.1756083626568.ttf → iconfont.1756452257212.ttf} +0 -0
  79. /package/es/{iconfont.1756083626568.woff → iconfont.1756452257212.woff} +0 -0
  80. /package/es/{iconfont.1756083626568.woff2 → iconfont.1756452257212.woff2} +0 -0
  81. /package/lib/{iconfont.1756083626568.ttf → iconfont.1756452257212.ttf} +0 -0
  82. /package/lib/{iconfont.1756083626568.woff → iconfont.1756452257212.woff} +0 -0
  83. /package/lib/{iconfont.1756083626568.woff2 → iconfont.1756452257212.woff2} +0 -0
@@ -10,7 +10,7 @@ export const tableProps = {
10
10
  // 表格的最小高度
11
11
  minHeight: {
12
12
  type: [Number, String],
13
- default: () => getConfig().table.minHeight
13
+ default: () => null
14
14
  },
15
15
  // 表格的最大高度
16
16
  maxHeight: [Number, String],
@@ -129,20 +129,37 @@ export const tableProps = {
129
129
  headerRowStyle: [Object, Function],
130
130
  // 给表尾行附加样式
131
131
  footerRowStyle: [Object, Function],
132
- // 合并指定单元格
132
+ // 用于分组表头,显示为自定义列头,配合 mergeHeaderCells 灵活实现自定义合并
133
+ showCustomHeader: {
134
+ type: Boolean,
135
+ default: () => getConfig().table.showCustomHeader
136
+ },
137
+ // 临时合并指定的表头单元格
138
+ mergeHeaderCells: Array,
139
+ // 临时合并指定的单元格
133
140
  mergeCells: Array,
134
- // 合并指定的表尾
141
+ // 临时合并指定的表尾单元格
142
+ mergeFooterCells: Array,
135
143
  mergeFooterItems: Array,
136
144
  // 自定义合并行或列的方法
137
145
  spanMethod: Function,
138
146
  // 表尾合并行或列
139
147
  footerSpanMethod: Function,
140
148
  // 设置所有内容过长时显示为省略号
141
- showOverflow: { type: [Boolean, String], default: () => getConfig().table.showOverflow },
149
+ showOverflow: {
150
+ type: [Boolean, String],
151
+ default: () => getConfig().table.showOverflow
152
+ },
142
153
  // 设置表头所有内容过长时显示为省略号
143
- showHeaderOverflow: { type: [Boolean, String], default: () => getConfig().table.showHeaderOverflow },
154
+ showHeaderOverflow: {
155
+ type: [Boolean, String],
156
+ default: () => getConfig().table.showHeaderOverflow
157
+ },
144
158
  // 设置表尾所有内容过长时显示为省略号
145
- showFooterOverflow: { type: [Boolean, String], default: () => getConfig().table.showFooterOverflow },
159
+ showFooterOverflow: {
160
+ type: [Boolean, String],
161
+ default: () => getConfig().table.showFooterOverflow
162
+ },
146
163
  /** 高级属性 */
147
164
  /**
148
165
  * (即将废弃)columnKey 已废弃,被 column-config.useKey 替换
@@ -0,0 +1,8 @@
1
+ // 跨表拖拽
2
+ export const crossTableDragRowGlobal = {
3
+ row: null
4
+ };
5
+ export function getCrossTableDragRowInfo($xeTable) {
6
+ const crossTableDragRowInfo = $xeTable.crossTableDragRowInfo;
7
+ return crossTableDragRowInfo;
8
+ }
@@ -10,6 +10,7 @@ import TableFooterComponent from './footer';
10
10
  import { tableProps } from './props';
11
11
  import { getSlotVNs } from '../../ui/src/vn';
12
12
  import { warnLog, errLog } from '../../ui/src/log';
13
+ import { crossTableDragRowGlobal, getCrossTableDragRowInfo } from './store';
13
14
  import TableCustomPanelComponent from '../module/custom/panel';
14
15
  import TableFilterPanelComponent from '../module/filter/panel';
15
16
  import TableImportPanelComponent from '../module/export/import-panel';
@@ -30,12 +31,19 @@ function handleUpdateMergeBodyCells($xeTable, merges) {
30
31
  internalData.mergeBodyCellMaps = {};
31
32
  $xeTable.setMergeCells(merges);
32
33
  }
34
+ function handleUpdateMergeHeaderCells($xeTable, merges) {
35
+ const internalData = $xeTable;
36
+ internalData.mergeHeaderList = [];
37
+ internalData.mergeHeaderMaps = {};
38
+ internalData.mergeHeaderCellMaps = {};
39
+ $xeTable.setMergeHeaderCells(merges);
40
+ }
33
41
  function handleUpdateMergeFooterCells($xeTable, merges) {
34
42
  const internalData = $xeTable;
35
43
  internalData.mergeFooterList = [];
36
44
  internalData.mergeFooterMaps = {};
37
45
  internalData.mergeFooterCellMaps = {};
38
- $xeTable.setMergeFooterItems(merges);
46
+ $xeTable.setMergeFooterCells(merges);
39
47
  }
40
48
  function handleKeyField($xeTable) {
41
49
  const internalData = $xeTable;
@@ -119,6 +127,7 @@ function renderEmptyBody(h, $xeTable) {
119
127
  const renderDragTipContents = (h, $xeTable) => {
120
128
  const props = $xeTable;
121
129
  const reactData = $xeTable;
130
+ const crossTableDragRowInfo = getCrossTableDragRowInfo($xeTable);
122
131
  const { dragConfig } = props;
123
132
  const { dragRow, dragCol, dragTipText } = reactData;
124
133
  const columnDragOpts = $xeTable.computeColumnDragOpts;
@@ -127,8 +136,9 @@ const renderDragTipContents = (h, $xeTable) => {
127
136
  const rTipSlot = rowDragSlots.tip || (dragConfig && dragConfig.slots ? dragConfig.slots.rowTip : null);
128
137
  const columnDragSlots = columnDragOpts.slots || {};
129
138
  const cTipSlot = columnDragSlots.tip;
130
- if (dragRow && rTipSlot) {
131
- return $xeTable.callSlot(rTipSlot, { row: dragRow }, h);
139
+ const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null);
140
+ if (dRow && rTipSlot) {
141
+ return $xeTable.callSlot(rTipSlot, { row: dRow }, h);
132
142
  }
133
143
  if (dragCol && cTipSlot) {
134
144
  return $xeTable.callSlot(cTipSlot, { column: dragCol }, h);
@@ -137,11 +147,13 @@ const renderDragTipContents = (h, $xeTable) => {
137
147
  };
138
148
  const renderDragTip = (h, $xeTable) => {
139
149
  const reactData = $xeTable;
150
+ const crossTableDragRowInfo = getCrossTableDragRowInfo($xeTable);
140
151
  const { dragRow, dragCol } = reactData;
141
152
  const rowOpts = $xeTable.computeRowOpts;
142
153
  const columnOpts = $xeTable.computeColumnOpts;
143
154
  const rowDragOpts = $xeTable.computeRowDragOpts;
144
155
  const columnDragOpts = $xeTable.computeColumnDragOpts;
156
+ const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null);
145
157
  if (rowOpts.drag || columnOpts.drag) {
146
158
  return h('div', {
147
159
  class: 'vxe-table--drag-wrapper'
@@ -158,7 +170,7 @@ const renderDragTip = (h, $xeTable) => {
158
170
  'is--guides': columnDragOpts.showGuidesStatus
159
171
  }]
160
172
  }),
161
- (dragRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
173
+ (dRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
162
174
  ? h('div', {
163
175
  ref: 'refDragTipElem',
164
176
  class: 'vxe-table--drag-sort-tip'
@@ -170,7 +182,7 @@ const renderDragTip = (h, $xeTable) => {
170
182
  class: 'vxe-table--drag-sort-tip-status'
171
183
  }, [
172
184
  h('span', {
173
- class: ['vxe-table--drag-sort-tip-normal-status', dragRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
185
+ class: ['vxe-table--drag-sort-tip-normal-status', dRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
174
186
  }),
175
187
  h('span', {
176
188
  class: ['vxe-table--drag-sort-tip-sub-status', getIcon().TABLE_DRAG_STATUS_SUB_ROW]
@@ -326,7 +338,10 @@ function renderScrollX(h, $xeTable) {
326
338
  ref: 'refScrollXSpaceElem',
327
339
  class: 'vxe-table--scroll-x-space'
328
340
  })
329
- ])
341
+ ]),
342
+ h('div', {
343
+ class: 'vxe-table--scroll-x-handle-appearance'
344
+ })
330
345
  ]),
331
346
  h('div', {
332
347
  ref: 'refScrollXRightCornerElem',
@@ -470,9 +485,7 @@ export default {
470
485
  },
471
486
  data() {
472
487
  const xID = XEUtils.uniqueId();
473
- return {
474
- xID,
475
- tId: xID,
488
+ const reactData = {
476
489
  // 低性能的静态列
477
490
  staticColumns: [],
478
491
  // 渲染的列分组
@@ -493,6 +506,8 @@ export default {
493
506
  scrollbarWidth: 0,
494
507
  // 横向滚动条的高度
495
508
  scrollbarHeight: 0,
509
+ // 最后滚动时间戳
510
+ lastScrollTime: 0,
496
511
  // 行高
497
512
  rowHeight: 0,
498
513
  // 表格父容器的高度
@@ -518,9 +533,13 @@ export default {
518
533
  expandColumn: null,
519
534
  checkboxColumn: null,
520
535
  radioColumn: null,
521
- hasFixedColumn: false,
522
536
  // 树节点列信息
523
537
  treeNodeColumn: null,
538
+ hasFixedColumn: false,
539
+ // 刷新列标识,当列筛选被改变时,触发表格刷新数据
540
+ upDataFlag: 0,
541
+ // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
542
+ reColumnFlag: 0,
524
543
  // 初始化标识
525
544
  initStore: {
526
545
  filter: false,
@@ -528,11 +547,6 @@ export default {
528
547
  export: false,
529
548
  custom: false
530
549
  },
531
- customColumnList: [],
532
- // 刷新列标识,当列筛选被改变时,触发表格刷新数据
533
- upDataFlag: 0,
534
- // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
535
- reColumnFlag: 0,
536
550
  // 自定义列相关的信息
537
551
  customStore: {
538
552
  btnEl: null,
@@ -546,6 +560,7 @@ export default {
546
560
  oldFixedMaps: {},
547
561
  oldVisibleMaps: {}
548
562
  },
563
+ customColumnList: [],
549
564
  // 当前选中的筛选列
550
565
  filterStore: {
551
566
  isAllSelected: false,
@@ -614,6 +629,7 @@ export default {
614
629
  tooltipStore: {
615
630
  row: null,
616
631
  column: null,
632
+ content: null,
617
633
  visible: false,
618
634
  currOpts: {}
619
635
  },
@@ -646,8 +662,8 @@ export default {
646
662
  columns: [],
647
663
  isPrint: false,
648
664
  hasFooter: false,
649
- hasTree: false,
650
665
  hasMerge: false,
666
+ hasTree: false,
651
667
  hasColgroup: false,
652
668
  visible: false
653
669
  },
@@ -678,6 +694,7 @@ export default {
678
694
  pendingRowFlag: 1,
679
695
  insertRowFlag: 1,
680
696
  removeRowFlag: 1,
697
+ mergeHeadFlag: 1,
681
698
  mergeBodyFlag: 1,
682
699
  mergeFootFlag: 1,
683
700
  rowHeightStore: {
@@ -694,23 +711,24 @@ export default {
694
711
  scrollXLeft: 0,
695
712
  scrollXWidth: 0,
696
713
  isScrollXBig: false,
714
+ lazScrollLoading: false,
697
715
  rowExpandHeightFlag: 1,
698
716
  calcCellHeightFlag: 1,
699
717
  resizeHeightFlag: 1,
700
718
  resizeWidthFlag: 1,
701
719
  isCustomStatus: false,
702
- isDragRowMove: false,
720
+ isCrossDragRow: false,
703
721
  dragRow: null,
704
- isDragColMove: false,
722
+ isCrossDragCol: false,
705
723
  dragCol: null,
706
724
  dragTipText: '',
707
725
  isDragResize: false,
708
726
  isRowLoading: false,
709
- isColLoading: false,
710
- reScrollFlag: 0,
711
- reLayoutFlag: 0,
712
- footFlag: 0
727
+ isColLoading: false
713
728
  };
729
+ return Object.assign(Object.assign({ xID }, reactData), {
730
+ // 私有属性
731
+ reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal });
714
732
  },
715
733
  computed: Object.assign(Object.assign({}, {}), { tableId() {
716
734
  return this.computeTableId;
@@ -1389,9 +1407,21 @@ export default {
1389
1407
  const $xeTable = this;
1390
1408
  handleUpdateMergeBodyCells($xeTable, value);
1391
1409
  },
1392
- mergeFooterItems(value) {
1410
+ mergeHeaderCells(value) {
1393
1411
  const $xeTable = this;
1394
- handleUpdateMergeFooterCells($xeTable, value);
1412
+ handleUpdateMergeHeaderCells($xeTable, value);
1413
+ },
1414
+ mergeFooterCells() {
1415
+ this.mergeFooteCellFlag++;
1416
+ },
1417
+ mergeFooterItems() {
1418
+ this.mergeFooteCellFlag++;
1419
+ },
1420
+ mergeFooteCellFlag() {
1421
+ const $xeTable = this;
1422
+ const props = $xeTable;
1423
+ const mFooterCells = props.mergeFooterCells || props.mergeFooterItems;
1424
+ handleUpdateMergeFooterCells($xeTable, mFooterCells || []);
1395
1425
  },
1396
1426
  computeRowGroupFields(val) {
1397
1427
  const $xeTable = this;
@@ -1435,6 +1465,7 @@ export default {
1435
1465
  const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
1436
1466
  const keyboardOpts = $xeTable.computeKeyboardOpts;
1437
1467
  const aggregateOpts = $xeTable.computeAggregateOpts;
1468
+ const rowDragOpts = $xeTable.computeRowDragOpts;
1438
1469
  const { groupFields } = aggregateOpts;
1439
1470
  if (props.rowId) {
1440
1471
  warnLog('vxe.error.delProp', ['row-id', 'row-config.keyField']);
@@ -1540,7 +1571,10 @@ export default {
1540
1571
  }
1541
1572
  }
1542
1573
  if (treeConfig && rowOpts.drag && !treeOpts.transform) {
1543
- warnLog('vxe.error.notSupportProp', ['column-config.drag', 'tree-config.transform=false', 'tree-config.transform=true']);
1574
+ warnLog('vxe.error.notSupportProp', ['row-config.drag', 'tree-config.transform=false', 'tree-config.transform=true']);
1575
+ }
1576
+ if (treeConfig && rowDragOpts.isCrossTableDrag && !rowDragOpts.isCrossDrag) {
1577
+ errLog('vxe.error.reqSupportProp', ['tree-config & row-drag-config.isCrossTableDrag', 'row-drag-config.isCrossDrag']);
1544
1578
  }
1545
1579
  if (props.dragConfig) {
1546
1580
  warnLog('vxe.error.delProp', ['drag-config', 'row-drag-config']);
@@ -1834,6 +1868,7 @@ export default {
1834
1868
  const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore } = reactData;
1835
1869
  const { leftList, rightList } = columnStore;
1836
1870
  const loadingSlot = slots.loading;
1871
+ const rowDragOpts = $xeTable.computeRowDragOpts;
1837
1872
  const tableTipConfig = $xeTable.computeTableTipConfig;
1838
1873
  const validTipConfig = $xeTable.computeValidTipConfig;
1839
1874
  const validOpts = $xeTable.computeValidOpts;
@@ -1853,6 +1888,11 @@ export default {
1853
1888
  const columnDragOpts = $xeTable.computeColumnDragOpts;
1854
1889
  const scrollbarXToTop = $xeTable.computeScrollbarXToTop;
1855
1890
  const scrollbarYToLeft = $xeTable.computeScrollbarYToLeft;
1891
+ const { isCrossTableDrag } = rowDragOpts;
1892
+ const rwOns = {};
1893
+ if (isCrossTableDrag && !tableData.length) {
1894
+ rwOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent;
1895
+ }
1856
1896
  return h('div', {
1857
1897
  ref: 'refElem',
1858
1898
  class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
@@ -1919,7 +1959,8 @@ export default {
1919
1959
  ]),
1920
1960
  h('div', {
1921
1961
  key: 'tw',
1922
- class: 'vxe-table--render-wrapper'
1962
+ class: 'vxe-table--render-wrapper',
1963
+ on: rwOns
1923
1964
  }, scrollbarXToTop
1924
1965
  ? [
1925
1966
  renderScrollX(h, $xeTable),
@@ -80,14 +80,19 @@ export function createInternalData() {
80
80
  sourceDataRowIdData: {},
81
81
  fullColumnIdData: {},
82
82
  fullColumnFieldData: {},
83
+ // 合并表头单元格的数据
84
+ mergeHeaderList: [],
85
+ mergeHeaderMaps: {},
86
+ // 已合并单元格数据集合
87
+ mergeHeaderCellMaps: {},
83
88
  // 合并单元格的数据
84
89
  mergeBodyList: [],
85
90
  mergeBodyMaps: {},
91
+ // 已合并单元格数据集合
92
+ mergeBodyCellMaps: {},
86
93
  // 合并表尾的数据
87
94
  mergeFooterList: [],
88
95
  mergeFooterMaps: {},
89
- // 已合并单元格数据集合
90
- mergeBodyCellMaps: {},
91
96
  // 已合并表尾数据集合
92
97
  mergeFooterCellMaps: {},
93
98
  // 已展开的行集合
@@ -181,6 +186,69 @@ export const convertHeaderColumnToRows = (originColumns) => {
181
186
  });
182
187
  return rows;
183
188
  };
189
+ export function convertHeaderToGridRows(spanColumns) {
190
+ const rSize = spanColumns.length;
191
+ const cSize = spanColumns[0].reduce((sum, cell) => sum + cell.colSpan, 0);
192
+ const occupiedRows = [];
193
+ const fullRows = [];
194
+ for (let rIndex = 0; rIndex < rSize; rIndex++) {
195
+ const oCols = [];
196
+ const dCols = [];
197
+ for (let cIndex = 0; cIndex < cSize; cIndex++) {
198
+ oCols.push(false);
199
+ dCols.push('');
200
+ }
201
+ occupiedRows.push(oCols);
202
+ fullRows.push(dCols);
203
+ }
204
+ for (let rIndex = 0; rIndex < rSize; rIndex++) {
205
+ let currColIndex = 0;
206
+ for (const column of spanColumns[rIndex]) {
207
+ const { colSpan, rowSpan } = column;
208
+ let startColIndex = -1;
209
+ for (let ccIndex = currColIndex; ccIndex <= cSize - colSpan; ccIndex++) {
210
+ let oFlag = true;
211
+ for (let csIndex = 0; csIndex < colSpan; csIndex++) {
212
+ if (occupiedRows[rIndex][ccIndex + csIndex]) {
213
+ oFlag = false;
214
+ break;
215
+ }
216
+ }
217
+ if (oFlag) {
218
+ startColIndex = ccIndex;
219
+ break;
220
+ }
221
+ }
222
+ if (startColIndex === -1) {
223
+ for (let j = 0; j <= cSize - colSpan; j++) {
224
+ let oFlag = true;
225
+ for (let k = 0; k < colSpan; k++) {
226
+ if (occupiedRows[rIndex][j + k]) {
227
+ oFlag = false;
228
+ break;
229
+ }
230
+ }
231
+ if (oFlag) {
232
+ startColIndex = j;
233
+ break;
234
+ }
235
+ }
236
+ if (startColIndex === -1) {
237
+ // error
238
+ break;
239
+ }
240
+ }
241
+ for (let srIndex = rIndex; srIndex < rIndex + rowSpan; srIndex++) {
242
+ for (let scIndex = startColIndex; scIndex < startColIndex + colSpan; scIndex++) {
243
+ occupiedRows[srIndex][scIndex] = true;
244
+ fullRows[srIndex][scIndex] = column;
245
+ }
246
+ }
247
+ currColIndex = startColIndex + colSpan;
248
+ }
249
+ }
250
+ return fullRows;
251
+ }
184
252
  export function restoreScrollLocation($xeTable, scrollLeft, scrollTop) {
185
253
  const internalData = $xeTable;
186
254
  if (scrollLeft || scrollTop) {
@@ -2216,9 +2216,6 @@
2216
2216
  overflow-x: scroll;
2217
2217
  height: 18px;
2218
2218
  }
2219
- .vxe-table .vxe-table--scroll-x-wrapper {
2220
- height: 100%;
2221
- }
2222
2219
  .vxe-table .vxe-table--scroll-y-handle,
2223
2220
  .vxe-table .vxe-table--scroll-y-wrapper {
2224
2221
  width: 100%;
@@ -2459,9 +2456,6 @@
2459
2456
  right: auto;
2460
2457
  left: -0.3em;
2461
2458
  }
2462
- .vxe-table--fixed-right-wrapper .vxe-header--column:last-child > .vxe-cell--col-resizable {
2463
- left: 0;
2464
- }
2465
2459
 
2466
2460
  .vxe-body--column .vxe-cell--row-resizable {
2467
2461
  position: absolute;
@@ -2868,8 +2862,7 @@
2868
2862
  .vxe-table--render-default.border--default .vxe-table--scroll-y-bottom-corner, .vxe-table--render-default.border--full .vxe-table--scroll-y-bottom-corner, .vxe-table--render-default.border--outer .vxe-table--scroll-y-bottom-corner, .vxe-table--render-default.border--inner .vxe-table--scroll-y-bottom-corner {
2869
2863
  border-top: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
2870
2864
  }
2871
- .vxe-table--render-default.border--default .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--full .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--outer .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--inner .vxe-table--scroll-x-wrapper::after {
2872
- content: "";
2865
+ .vxe-table--render-default.border--default .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--full .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--outer .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--inner .vxe-table--scroll-x-handle-appearance {
2873
2866
  position: absolute;
2874
2867
  left: 0;
2875
2868
  width: 100%;
@@ -2877,11 +2870,11 @@
2877
2870
  z-index: 1;
2878
2871
  pointer-events: none;
2879
2872
  }
2880
- .vxe-table--render-default.border--default.sx-pos--top .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--full.sx-pos--top .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--outer.sx-pos--top .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--inner.sx-pos--top .vxe-table--scroll-x-wrapper::after {
2873
+ .vxe-table--render-default.border--default.sx-pos--top .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--full.sx-pos--top .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--outer.sx-pos--top .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--inner.sx-pos--top .vxe-table--scroll-x-handle-appearance {
2881
2874
  top: 0;
2882
2875
  border-bottom: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
2883
2876
  }
2884
- .vxe-table--render-default.border--default.sx-pos--bottom .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--full.sx-pos--bottom .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--outer.sx-pos--bottom .vxe-table--scroll-x-wrapper::after, .vxe-table--render-default.border--inner.sx-pos--bottom .vxe-table--scroll-x-wrapper::after {
2877
+ .vxe-table--render-default.border--default.sx-pos--bottom .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--full.sx-pos--bottom .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--outer.sx-pos--bottom .vxe-table--scroll-x-handle-appearance, .vxe-table--render-default.border--inner.sx-pos--bottom .vxe-table--scroll-x-handle-appearance {
2885
2878
  bottom: 0;
2886
2879
  height: calc(100% + var(--vxe-ui-table-border-width));
2887
2880
  border-top: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
@@ -2930,8 +2923,7 @@
2930
2923
  width: calc(100% + 1px);
2931
2924
  left: -1px;
2932
2925
  }
2933
- .vxe-table--render-default.border--default .vxe-table--scroll-y-wrapper::after, .vxe-table--render-default.border--full .vxe-table--scroll-y-wrapper::after {
2934
- content: "";
2926
+ .vxe-table--render-default.border--default .vxe-table--scroll-y-handle-appearance, .vxe-table--render-default.border--full .vxe-table--scroll-y-handle-appearance {
2935
2927
  position: absolute;
2936
2928
  top: 0;
2937
2929
  width: 100%;
@@ -2939,11 +2931,11 @@
2939
2931
  z-index: 1;
2940
2932
  pointer-events: none;
2941
2933
  }
2942
- .vxe-table--render-default.border--default.sy-pos--left .vxe-table--scroll-y-wrapper::after, .vxe-table--render-default.border--full.sy-pos--left .vxe-table--scroll-y-wrapper::after {
2934
+ .vxe-table--render-default.border--default.sy-pos--left .vxe-table--scroll-y-handle-appearance, .vxe-table--render-default.border--full.sy-pos--left .vxe-table--scroll-y-handle-appearance {
2943
2935
  left: 0;
2944
2936
  border-right: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
2945
2937
  }
2946
- .vxe-table--render-default.border--default.sy-pos--right .vxe-table--scroll-y-wrapper::after, .vxe-table--render-default.border--full.sy-pos--right .vxe-table--scroll-y-wrapper::after {
2938
+ .vxe-table--render-default.border--default.sy-pos--right .vxe-table--scroll-y-handle-appearance, .vxe-table--render-default.border--full.sy-pos--right .vxe-table--scroll-y-handle-appearance {
2947
2939
  right: 0;
2948
2940
  width: calc(100% + var(--vxe-ui-table-border-width));
2949
2941
  border-left: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
@@ -3511,8 +3503,8 @@
3511
3503
  position: absolute;
3512
3504
  left: 50%;
3513
3505
  font-size: 12px;
3514
- line-height: 1.2em;
3515
- transform: translateX(-50%);
3506
+ line-height: 1em;
3507
+ transform: translate(-50%, -50%);
3516
3508
  text-align: left;
3517
3509
  z-index: 4;
3518
3510
  padding: 0 var(--vxe-ui-table-cell-padding-default);
@@ -3524,7 +3516,7 @@
3524
3516
  pointer-events: auto;
3525
3517
  }
3526
3518
  .vxe-table--render-default .vxe-body--column .vxe-cell--valid-error-theme-beautify {
3527
- padding: 0.2em 0.6em 0.3em 0.6em;
3519
+ padding: 0.2em 0.6em 0.25em 0.6em;
3528
3520
  color: #fff;
3529
3521
  background-color: var(--vxe-ui-table-validate-error-color);
3530
3522
  }
@@ -3549,9 +3541,11 @@
3549
3541
  }
3550
3542
  .vxe-table--render-default.valid-msg--single .vxe-body--row:last-child .vxe-cell--valid-error-tip {
3551
3543
  bottom: 100%;
3544
+ transform: translate(-50%, 50%);
3552
3545
  }
3553
3546
  .vxe-table--render-default.valid-msg--single .vxe-body--row:last-child:first-child .vxe-cell--valid-error-tip {
3554
3547
  bottom: auto;
3548
+ transform: translate(-50%, -50%);
3555
3549
  }
3556
3550
  .vxe-table--render-default.valid-msg--full .vxe-body--row:last-child .vxe-cell--valid-error-tip {
3557
3551
  top: calc(100% - 1.3em);