vxe-table 3.18.1 → 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 (63) 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/src/column.js +2 -0
  6. package/es/table/src/columnInfo.js +1 -0
  7. package/es/table/src/footer.js +7 -5
  8. package/es/table/src/header.js +67 -28
  9. package/es/table/src/methods.js +233 -39
  10. package/es/table/src/props.js +23 -6
  11. package/es/table/src/table.js +43 -19
  12. package/es/table/src/util.js +70 -2
  13. package/es/table/style.css +11 -17
  14. package/es/table/style.min.css +1 -1
  15. package/es/ui/index.js +1 -1
  16. package/es/ui/src/log.js +1 -1
  17. package/es/vxe-table/style.css +11 -17
  18. package/es/vxe-table/style.min.css +1 -1
  19. package/lib/index.css +1 -1
  20. package/lib/index.min.css +1 -1
  21. package/lib/index.umd.js +482 -94
  22. package/lib/index.umd.min.js +1 -1
  23. package/lib/style.css +1 -1
  24. package/lib/style.min.css +1 -1
  25. package/lib/table/src/column.js +2 -0
  26. package/lib/table/src/column.min.js +1 -1
  27. package/lib/table/src/columnInfo.js +1 -0
  28. package/lib/table/src/columnInfo.min.js +1 -1
  29. package/lib/table/src/footer.js +7 -5
  30. package/lib/table/src/header.js +82 -25
  31. package/lib/table/src/header.min.js +1 -1
  32. package/lib/table/src/methods.js +259 -42
  33. package/lib/table/src/methods.min.js +1 -1
  34. package/lib/table/src/props.js +11 -3
  35. package/lib/table/src/props.min.js +1 -1
  36. package/lib/table/src/table.js +46 -16
  37. package/lib/table/src/table.min.js +1 -1
  38. package/lib/table/src/util.js +74 -2
  39. package/lib/table/src/util.min.js +1 -1
  40. package/lib/table/style/style.css +11 -17
  41. package/lib/table/style/style.min.css +1 -1
  42. package/lib/ui/index.js +1 -1
  43. package/lib/ui/index.min.js +1 -1
  44. package/lib/ui/src/log.js +1 -1
  45. package/lib/ui/src/log.min.js +1 -1
  46. package/lib/vxe-table/style/style.css +11 -17
  47. package/lib/vxe-table/style/style.min.css +1 -1
  48. package/package.json +1 -1
  49. package/packages/table/src/column.ts +4 -2
  50. package/packages/table/src/columnInfo.ts +1 -0
  51. package/packages/table/src/footer.ts +11 -9
  52. package/packages/table/src/header.ts +76 -34
  53. package/packages/table/src/methods.ts +245 -40
  54. package/packages/table/src/props.ts +29 -12
  55. package/packages/table/src/table.ts +53 -16
  56. package/packages/table/src/util.ts +76 -2
  57. package/styles/components/table.scss +33 -55
  58. /package/es/{iconfont.1756272539382.ttf → iconfont.1756452257212.ttf} +0 -0
  59. /package/es/{iconfont.1756272539382.woff → iconfont.1756452257212.woff} +0 -0
  60. /package/es/{iconfont.1756272539382.woff2 → iconfont.1756452257212.woff2} +0 -0
  61. /package/lib/{iconfont.1756272539382.ttf → iconfont.1756452257212.ttf} +0 -0
  62. /package/lib/{iconfont.1756272539382.woff → iconfont.1756452257212.woff} +0 -0
  63. /package/lib/{iconfont.1756272539382.woff2 → iconfont.1756452257212.woff2} +0 -0
@@ -40,13 +40,22 @@ function handleUpdateMergeBodyCells ($xeTable: VxeTableConstructor & VxeTablePri
40
40
  $xeTable.setMergeCells(merges)
41
41
  }
42
42
 
43
+ function handleUpdateMergeHeaderCells ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) {
44
+ const internalData = $xeTable as unknown as TableInternalData
45
+
46
+ internalData.mergeHeaderList = []
47
+ internalData.mergeHeaderMaps = {}
48
+ internalData.mergeHeaderCellMaps = {}
49
+ $xeTable.setMergeHeaderCells(merges)
50
+ }
51
+
43
52
  function handleUpdateMergeFooterCells ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) {
44
53
  const internalData = $xeTable as unknown as TableInternalData
45
54
 
46
55
  internalData.mergeFooterList = []
47
56
  internalData.mergeFooterMaps = {}
48
57
  internalData.mergeFooterCellMaps = {}
49
- $xeTable.setMergeFooterItems(merges)
58
+ $xeTable.setMergeFooterCells(merges)
50
59
  }
51
60
 
52
61
  function handleKeyField ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
@@ -358,7 +367,10 @@ function renderScrollX (h: CreateElement, $xeTable: VxeTableConstructor & VxeTab
358
367
  ref: 'refScrollXSpaceElem',
359
368
  class: 'vxe-table--scroll-x-space'
360
369
  })
361
- ])
370
+ ]),
371
+ h('div', {
372
+ class: 'vxe-table--scroll-x-handle-appearance'
373
+ })
362
374
  ]),
363
375
  h('div', {
364
376
  ref: 'refScrollXRightCornerElem',
@@ -508,9 +520,8 @@ export default {
508
520
  },
509
521
  data () {
510
522
  const xID = XEUtils.uniqueId()
511
- return {
512
- xID,
513
- tId: xID,
523
+
524
+ const reactData: TableReactData = {
514
525
  // 低性能的静态列
515
526
  staticColumns: [],
516
527
  // 渲染的列分组
@@ -531,6 +542,8 @@ export default {
531
542
  scrollbarWidth: 0,
532
543
  // 横向滚动条的高度
533
544
  scrollbarHeight: 0,
545
+ // 最后滚动时间戳
546
+ lastScrollTime: 0,
534
547
  // 行高
535
548
  rowHeight: 0,
536
549
  // 表格父容器的高度
@@ -556,9 +569,13 @@ export default {
556
569
  expandColumn: null,
557
570
  checkboxColumn: null,
558
571
  radioColumn: null,
559
- hasFixedColumn: false,
560
572
  // 树节点列信息
561
573
  treeNodeColumn: null,
574
+ hasFixedColumn: false,
575
+ // 刷新列标识,当列筛选被改变时,触发表格刷新数据
576
+ upDataFlag: 0,
577
+ // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
578
+ reColumnFlag: 0,
562
579
  // 初始化标识
563
580
  initStore: {
564
581
  filter: false,
@@ -566,11 +583,6 @@ export default {
566
583
  export: false,
567
584
  custom: false
568
585
  },
569
- customColumnList: [],
570
- // 刷新列标识,当列筛选被改变时,触发表格刷新数据
571
- upDataFlag: 0,
572
- // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
573
- reColumnFlag: 0,
574
586
  // 自定义列相关的信息
575
587
  customStore: {
576
588
  btnEl: null,
@@ -584,6 +596,7 @@ export default {
584
596
  oldFixedMaps: {},
585
597
  oldVisibleMaps: {}
586
598
  },
599
+ customColumnList: [],
587
600
  // 当前选中的筛选列
588
601
  filterStore: {
589
602
  isAllSelected: false,
@@ -652,6 +665,7 @@ export default {
652
665
  tooltipStore: {
653
666
  row: null,
654
667
  column: null,
668
+ content: null,
655
669
  visible: false,
656
670
  currOpts: {}
657
671
  },
@@ -684,8 +698,8 @@ export default {
684
698
  columns: [],
685
699
  isPrint: false,
686
700
  hasFooter: false,
687
- hasTree: false,
688
701
  hasMerge: false,
702
+ hasTree: false,
689
703
  hasColgroup: false,
690
704
  visible: false
691
705
  },
@@ -719,6 +733,8 @@ export default {
719
733
  pendingRowFlag: 1,
720
734
  insertRowFlag: 1,
721
735
  removeRowFlag: 1,
736
+
737
+ mergeHeadFlag: 1,
722
738
  mergeBodyFlag: 1,
723
739
  mergeFootFlag: 1,
724
740
 
@@ -738,6 +754,8 @@ export default {
738
754
  scrollXWidth: 0,
739
755
  isScrollXBig: false,
740
756
 
757
+ lazScrollLoading: false,
758
+
741
759
  rowExpandHeightFlag: 1,
742
760
  calcCellHeightFlag: 1,
743
761
  resizeHeightFlag: 1,
@@ -753,12 +771,18 @@ export default {
753
771
 
754
772
  isDragResize: false,
755
773
  isRowLoading: false,
756
- isColLoading: false,
774
+ isColLoading: false
775
+ }
757
776
 
777
+ return {
778
+ xID,
779
+ ...reactData,
780
+
781
+ // 私有属性
758
782
  reScrollFlag: 0,
759
783
  reLayoutFlag: 0,
760
784
  footFlag: 0,
761
-
785
+ mergeFooteCellFlag: 0,
762
786
  crossTableDragRowInfo: crossTableDragRowGlobal
763
787
  }
764
788
  },
@@ -1499,10 +1523,23 @@ export default {
1499
1523
 
1500
1524
  handleUpdateMergeBodyCells($xeTable, value)
1501
1525
  },
1502
- mergeFooterItems (value: any) {
1526
+ mergeHeaderCells (value: any) {
1503
1527
  const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
1504
1528
 
1505
- handleUpdateMergeFooterCells($xeTable, value)
1529
+ handleUpdateMergeHeaderCells($xeTable, value)
1530
+ },
1531
+ mergeFooterCells () {
1532
+ this.mergeFooteCellFlag++
1533
+ },
1534
+ mergeFooterItems () {
1535
+ this.mergeFooteCellFlag++
1536
+ },
1537
+ mergeFooteCellFlag () {
1538
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
1539
+ const props = $xeTable
1540
+
1541
+ const mFooterCells = props.mergeFooterCells || props.mergeFooterItems
1542
+ handleUpdateMergeFooterCells($xeTable, mFooterCells || [])
1506
1543
  },
1507
1544
 
1508
1545
  computeRowGroupFields (val: any) {
@@ -73,6 +73,7 @@ export function createInternalData (): TableInternalData {
73
73
  tableFullColumn: [],
74
74
  // 渲染所有列
75
75
  visibleColumn: [],
76
+
76
77
  // 全量数据集(包括当前和已删除)
77
78
  fullAllDataRowIdData: {},
78
79
  // 数据集(仅当前)
@@ -84,16 +85,22 @@ export function createInternalData (): TableInternalData {
84
85
  fullColumnIdData: {},
85
86
  fullColumnFieldData: {},
86
87
 
88
+ // 合并表头单元格的数据
89
+ mergeHeaderList: [],
90
+ mergeHeaderMaps: {},
91
+ // 已合并单元格数据集合
92
+ mergeHeaderCellMaps: {},
87
93
  // 合并单元格的数据
88
94
  mergeBodyList: [],
89
95
  mergeBodyMaps: {},
96
+ // 已合并单元格数据集合
97
+ mergeBodyCellMaps: {},
90
98
  // 合并表尾的数据
91
99
  mergeFooterList: [],
92
100
  mergeFooterMaps: {},
93
- // 已合并单元格数据集合
94
- mergeBodyCellMaps: {},
95
101
  // 已合并表尾数据集合
96
102
  mergeFooterCellMaps: {},
103
+
97
104
  // 已展开的行集合
98
105
  rowExpandedMaps: {},
99
106
  // 懒加载中的展开行的集合
@@ -194,6 +201,73 @@ export const convertHeaderColumnToRows = (originColumns: any) => {
194
201
  return rows
195
202
  }
196
203
 
204
+ export function convertHeaderToGridRows (spanColumns: VxeTableDefines.ColumnInfo[][]) {
205
+ const rSize = spanColumns.length
206
+ const cSize = spanColumns[0].reduce((sum, cell) => sum + cell.colSpan, 0)
207
+
208
+ const occupiedRows: boolean[][] = []
209
+ const fullRows: any[][] = []
210
+ for (let rIndex = 0; rIndex < rSize; rIndex++) {
211
+ const oCols: boolean[] = []
212
+ const dCols: string[] = []
213
+ for (let cIndex = 0; cIndex < cSize; cIndex++) {
214
+ oCols.push(false)
215
+ dCols.push('')
216
+ }
217
+ occupiedRows.push(oCols)
218
+ fullRows.push(dCols)
219
+ }
220
+
221
+ for (let rIndex = 0; rIndex < rSize; rIndex++) {
222
+ let currColIndex = 0
223
+ for (const column of spanColumns[rIndex]) {
224
+ const { colSpan, rowSpan } = column
225
+ let startColIndex = -1
226
+ for (let ccIndex = currColIndex; ccIndex <= cSize - colSpan; ccIndex++) {
227
+ let oFlag = true
228
+ for (let csIndex = 0; csIndex < colSpan; csIndex++) {
229
+ if (occupiedRows[rIndex][ccIndex + csIndex]) {
230
+ oFlag = false
231
+ break
232
+ }
233
+ }
234
+ if (oFlag) {
235
+ startColIndex = ccIndex
236
+ break
237
+ }
238
+ }
239
+ if (startColIndex === -1) {
240
+ for (let j = 0; j <= cSize - colSpan; j++) {
241
+ let oFlag = true
242
+ for (let k = 0; k < colSpan; k++) {
243
+ if (occupiedRows[rIndex][j + k]) {
244
+ oFlag = false
245
+ break
246
+ }
247
+ }
248
+ if (oFlag) {
249
+ startColIndex = j
250
+ break
251
+ }
252
+ }
253
+ if (startColIndex === -1) {
254
+ // error
255
+ break
256
+ }
257
+ }
258
+
259
+ for (let srIndex = rIndex; srIndex < rIndex + rowSpan; srIndex++) {
260
+ for (let scIndex = startColIndex; scIndex < startColIndex + colSpan; scIndex++) {
261
+ occupiedRows[srIndex][scIndex] = true
262
+ fullRows[srIndex][scIndex] = column
263
+ }
264
+ }
265
+ currColIndex = startColIndex + colSpan
266
+ }
267
+ }
268
+ return fullRows
269
+ }
270
+
197
271
  export function restoreScrollLocation ($xeTable: VxeTableConstructor, scrollLeft: number, scrollTop: number) {
198
272
  const internalData = $xeTable as unknown as TableInternalData
199
273
 
@@ -645,9 +645,6 @@ $btnThemeList: (
645
645
  overflow-x: scroll;
646
646
  height: 18px;
647
647
  }
648
- .vxe-table--scroll-x-wrapper {
649
- height: 100%;
650
- }
651
648
  .vxe-table--scroll-y-handle,
652
649
  .vxe-table--scroll-y-wrapper {
653
650
  width: 100%;
@@ -891,13 +888,6 @@ $btnThemeList: (
891
888
  right: auto;
892
889
  left: -0.3em;
893
890
  }
894
- .vxe-header--column {
895
- &:last-child {
896
- & > .vxe-cell--col-resizable {
897
- left: 0;
898
- }
899
- }
900
- }
901
891
  }
902
892
 
903
893
  .vxe-body--column {
@@ -1415,32 +1405,25 @@ $btnThemeList: (
1415
1405
  .vxe-table--scroll-y-bottom-corner {
1416
1406
  border-top: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1417
1407
  }
1418
- .vxe-table--scroll-x-wrapper {
1419
- &::after {
1420
- content: "";
1421
- position: absolute;
1422
- left: 0;
1423
- width: 100%;
1424
- height: 100%;
1425
- z-index: 1;
1426
- pointer-events: none;
1427
- }
1408
+ .vxe-table--scroll-x-handle-appearance {
1409
+ position: absolute;
1410
+ left: 0;
1411
+ width: 100%;
1412
+ height: 100%;
1413
+ z-index: 1;
1414
+ pointer-events: none;
1428
1415
  }
1429
1416
  &.sx-pos--top {
1430
- .vxe-table--scroll-x-wrapper {
1431
- &::after {
1432
- top: 0;
1433
- border-bottom: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1434
- }
1417
+ .vxe-table--scroll-x-handle-appearance {
1418
+ top: 0;
1419
+ border-bottom: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1435
1420
  }
1436
1421
  }
1437
1422
  &.sx-pos--bottom {
1438
- .vxe-table--scroll-x-wrapper {
1439
- &::after {
1440
- bottom: 0;
1441
- height: calc(100% + var(--vxe-ui-table-border-width));
1442
- border-top: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1443
- }
1423
+ .vxe-table--scroll-x-handle-appearance {
1424
+ bottom: 0;
1425
+ height: calc(100% + var(--vxe-ui-table-border-width));
1426
+ border-top: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1444
1427
  }
1445
1428
  }
1446
1429
  }
@@ -1514,32 +1497,25 @@ $btnThemeList: (
1514
1497
  }
1515
1498
  }
1516
1499
  }
1517
- .vxe-table--scroll-y-wrapper {
1518
- &::after {
1519
- content: "";
1520
- position: absolute;
1521
- top: 0;
1522
- width: 100%;
1523
- height: 100%;
1524
- z-index: 1;
1525
- pointer-events: none;
1526
- }
1500
+ .vxe-table--scroll-y-handle-appearance {
1501
+ position: absolute;
1502
+ top: 0;
1503
+ width: 100%;
1504
+ height: 100%;
1505
+ z-index: 1;
1506
+ pointer-events: none;
1527
1507
  }
1528
1508
  &.sy-pos--left {
1529
- .vxe-table--scroll-y-wrapper {
1530
- &::after {
1531
- left: 0;
1532
- border-right: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1533
- }
1509
+ .vxe-table--scroll-y-handle-appearance {
1510
+ left: 0;
1511
+ border-right: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1534
1512
  }
1535
1513
  }
1536
1514
  &.sy-pos--right {
1537
- .vxe-table--scroll-y-wrapper {
1538
- &::after {
1539
- right: 0;
1540
- width: calc(100% + var(--vxe-ui-table-border-width));
1541
- border-left: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1542
- }
1515
+ .vxe-table--scroll-y-handle-appearance {
1516
+ right: 0;
1517
+ width: calc(100% + var(--vxe-ui-table-border-width));
1518
+ border-left: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1543
1519
  }
1544
1520
  }
1545
1521
  }
@@ -2159,8 +2135,8 @@ $btnThemeList: (
2159
2135
  position: absolute;
2160
2136
  left: 50%;
2161
2137
  font-size: 12px;
2162
- line-height: 1.2em;
2163
- transform: translateX(-50%);
2138
+ line-height: 1em;
2139
+ transform: translate(-50%, -50%);
2164
2140
  text-align: left;
2165
2141
  z-index: 4;
2166
2142
  padding: 0 var(--vxe-ui-table-cell-padding-default);
@@ -2172,7 +2148,7 @@ $btnThemeList: (
2172
2148
  pointer-events: auto;
2173
2149
  }
2174
2150
  .vxe-cell--valid-error-theme-beautify {
2175
- padding: 0.2em 0.6em 0.3em 0.6em;
2151
+ padding: 0.2em 0.6em 0.25em 0.6em;
2176
2152
  color: #fff;
2177
2153
  background-color: var(--vxe-ui-table-validate-error-color);
2178
2154
  .vxe-cell--valid-error-msg {
@@ -2204,10 +2180,12 @@ $btnThemeList: (
2204
2180
  &:last-child {
2205
2181
  .vxe-cell--valid-error-tip {
2206
2182
  bottom: calc(100%);
2183
+ transform: translate(-50%, 50%);
2207
2184
  }
2208
2185
  &:first-child {
2209
2186
  .vxe-cell--valid-error-tip {
2210
2187
  bottom: auto;
2188
+ transform: translate(-50%, -50%);
2211
2189
  }
2212
2190
  }
2213
2191
  }