vxe-table 3.14.4 → 3.15.0-beta.0

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 (140) hide show
  1. package/es/locale/lang/ar-EG.js +3 -1
  2. package/es/locale/lang/de-DE.js +3 -1
  3. package/es/locale/lang/en-US.js +7 -5
  4. package/es/locale/lang/es-ES.js +3 -1
  5. package/es/locale/lang/fr-FR.js +3 -1
  6. package/es/locale/lang/hu-HU.js +3 -1
  7. package/es/locale/lang/hy-AM.js +3 -1
  8. package/es/locale/lang/id-ID.js +3 -1
  9. package/es/locale/lang/it-IT.js +3 -1
  10. package/es/locale/lang/ja-JP.js +3 -1
  11. package/es/locale/lang/ko-KR.js +3 -1
  12. package/es/locale/lang/nb-NO.js +3 -1
  13. package/es/locale/lang/pt-BR.js +3 -1
  14. package/es/locale/lang/ru-RU.js +3 -1
  15. package/es/locale/lang/th-TH.js +3 -1
  16. package/es/locale/lang/ug-CN.js +3 -1
  17. package/es/locale/lang/uk-UA.js +3 -1
  18. package/es/locale/lang/vi-VN.js +3 -1
  19. package/es/locale/lang/zh-CHT.js +3 -1
  20. package/es/locale/lang/zh-CN.js +3 -1
  21. package/es/style.css +1 -1
  22. package/es/table/module/edit/mixin.js +10 -9
  23. package/es/table/module/export/export-panel.js +32 -17
  24. package/es/table/module/export/mixin.js +17 -12
  25. package/es/table/src/body.js +11 -13
  26. package/es/table/src/footer.js +3 -16
  27. package/es/table/src/methods.js +246 -109
  28. package/es/table/src/table.js +50 -25
  29. package/es/table/src/util.js +0 -13
  30. package/es/ui/index.js +2 -2
  31. package/es/ui/src/log.js +1 -1
  32. package/lib/index.umd.js +410 -247
  33. package/lib/index.umd.min.js +1 -1
  34. package/lib/locale/lang/ar-EG.js +3 -1
  35. package/lib/locale/lang/ar-EG.min.js +1 -1
  36. package/lib/locale/lang/de-DE.js +3 -1
  37. package/lib/locale/lang/de-DE.min.js +1 -1
  38. package/lib/locale/lang/en-US.js +7 -5
  39. package/lib/locale/lang/en-US.min.js +1 -1
  40. package/lib/locale/lang/en-US.umd.js +7 -5
  41. package/lib/locale/lang/es-ES.js +3 -1
  42. package/lib/locale/lang/es-ES.min.js +1 -1
  43. package/lib/locale/lang/es-ES.umd.js +3 -1
  44. package/lib/locale/lang/fr-FR.js +3 -1
  45. package/lib/locale/lang/fr-FR.min.js +1 -1
  46. package/lib/locale/lang/hu-HU.js +3 -1
  47. package/lib/locale/lang/hu-HU.min.js +1 -1
  48. package/lib/locale/lang/hu-HU.umd.js +3 -1
  49. package/lib/locale/lang/hy-AM.js +3 -1
  50. package/lib/locale/lang/hy-AM.min.js +1 -1
  51. package/lib/locale/lang/id-ID.js +3 -1
  52. package/lib/locale/lang/id-ID.min.js +1 -1
  53. package/lib/locale/lang/it-IT.js +3 -1
  54. package/lib/locale/lang/it-IT.min.js +1 -1
  55. package/lib/locale/lang/ja-JP.js +3 -1
  56. package/lib/locale/lang/ja-JP.min.js +1 -1
  57. package/lib/locale/lang/ja-JP.umd.js +3 -1
  58. package/lib/locale/lang/ko-KR.js +3 -1
  59. package/lib/locale/lang/ko-KR.min.js +1 -1
  60. package/lib/locale/lang/ko-KR.umd.js +3 -1
  61. package/lib/locale/lang/nb-NO.js +3 -1
  62. package/lib/locale/lang/nb-NO.min.js +1 -1
  63. package/lib/locale/lang/pt-BR.js +3 -1
  64. package/lib/locale/lang/pt-BR.min.js +1 -1
  65. package/lib/locale/lang/pt-BR.umd.js +3 -1
  66. package/lib/locale/lang/ru-RU.js +3 -1
  67. package/lib/locale/lang/ru-RU.min.js +1 -1
  68. package/lib/locale/lang/ru-RU.umd.js +3 -1
  69. package/lib/locale/lang/th-TH.js +3 -1
  70. package/lib/locale/lang/th-TH.min.js +1 -1
  71. package/lib/locale/lang/ug-CN.js +3 -1
  72. package/lib/locale/lang/ug-CN.min.js +1 -1
  73. package/lib/locale/lang/uk-UA.js +3 -1
  74. package/lib/locale/lang/uk-UA.min.js +1 -1
  75. package/lib/locale/lang/uk-UA.umd.js +3 -1
  76. package/lib/locale/lang/vi-VN.js +3 -1
  77. package/lib/locale/lang/vi-VN.min.js +1 -1
  78. package/lib/locale/lang/zh-CHT.js +3 -1
  79. package/lib/locale/lang/zh-CHT.min.js +1 -1
  80. package/lib/locale/lang/zh-CHT.umd.js +3 -1
  81. package/lib/locale/lang/zh-CN.js +3 -1
  82. package/lib/locale/lang/zh-CN.min.js +1 -1
  83. package/lib/locale/lang/zh-CN.umd.js +3 -1
  84. package/lib/style.css +1 -1
  85. package/lib/table/module/edit/mixin.js +9 -9
  86. package/lib/table/module/edit/mixin.min.js +1 -1
  87. package/lib/table/module/export/export-panel.js +29 -17
  88. package/lib/table/module/export/export-panel.min.js +1 -1
  89. package/lib/table/module/export/mixin.js +18 -12
  90. package/lib/table/module/export/mixin.min.js +1 -1
  91. package/lib/table/src/body.js +14 -15
  92. package/lib/table/src/body.min.js +1 -1
  93. package/lib/table/src/footer.js +4 -27
  94. package/lib/table/src/footer.min.js +1 -1
  95. package/lib/table/src/methods.js +278 -114
  96. package/lib/table/src/methods.min.js +1 -1
  97. package/lib/table/src/table.js +52 -25
  98. package/lib/table/src/table.min.js +1 -1
  99. package/lib/table/src/util.js +0 -25
  100. package/lib/table/src/util.min.js +1 -1
  101. package/lib/ui/index.js +2 -2
  102. package/lib/ui/index.min.js +1 -1
  103. package/lib/ui/src/log.js +1 -1
  104. package/lib/ui/src/log.min.js +1 -1
  105. package/package.json +2 -2
  106. package/packages/locale/lang/ar-EG.ts +3 -1
  107. package/packages/locale/lang/de-DE.ts +3 -1
  108. package/packages/locale/lang/en-US.ts +7 -5
  109. package/packages/locale/lang/es-ES.ts +3 -1
  110. package/packages/locale/lang/fr-FR.ts +3 -1
  111. package/packages/locale/lang/hu-HU.ts +3 -1
  112. package/packages/locale/lang/hy-AM.ts +3 -1
  113. package/packages/locale/lang/id-ID.ts +3 -1
  114. package/packages/locale/lang/it-IT.ts +3 -1
  115. package/packages/locale/lang/ja-JP.ts +3 -1
  116. package/packages/locale/lang/ko-KR.ts +3 -1
  117. package/packages/locale/lang/nb-NO.ts +3 -1
  118. package/packages/locale/lang/pt-BR.ts +3 -1
  119. package/packages/locale/lang/ru-RU.ts +3 -1
  120. package/packages/locale/lang/th-TH.ts +3 -1
  121. package/packages/locale/lang/ug-CN.ts +3 -1
  122. package/packages/locale/lang/uk-UA.ts +3 -1
  123. package/packages/locale/lang/vi-VN.ts +3 -1
  124. package/packages/locale/lang/zh-CHT.ts +3 -1
  125. package/packages/locale/lang/zh-CN.ts +3 -1
  126. package/packages/table/module/edit/mixin.ts +10 -9
  127. package/packages/table/module/export/export-panel.ts +33 -17
  128. package/packages/table/module/export/mixin.ts +17 -12
  129. package/packages/table/src/body.ts +11 -13
  130. package/packages/table/src/footer.ts +3 -17
  131. package/packages/table/src/methods.ts +261 -119
  132. package/packages/table/src/table.ts +50 -25
  133. package/packages/table/src/util.ts +0 -14
  134. package/packages/ui/index.ts +1 -1
  135. /package/es/{iconfont.1743393991959.ttf → iconfont.1743578536739.ttf} +0 -0
  136. /package/es/{iconfont.1743393991959.woff → iconfont.1743578536739.woff} +0 -0
  137. /package/es/{iconfont.1743393991959.woff2 → iconfont.1743578536739.woff2} +0 -0
  138. /package/lib/{iconfont.1743393991959.ttf → iconfont.1743578536739.ttf} +0 -0
  139. /package/lib/{iconfont.1743393991959.woff → iconfont.1743578536739.woff} +0 -0
  140. /package/lib/{iconfont.1743393991959.woff2 → iconfont.1743578536739.woff2} +0 -0
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'táblázat vége',
196
196
  expFooterTitle: 'Szükséges a táblázat lábléce?',
197
197
  expOptColgroup: 'Csoportfejléc',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'Ha vannak, a csoportosító szerkezetű fejlécek támogatottak',
199
201
  expOptMerge: 'összeolvad',
200
202
  expMergeTitle: 'Támogatja a cellákat egyesítési struktúrákkal, ha vannak',
201
- expOptAllExpand: 'Szint bővítése',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: 'Ha létezik, támogatja az összes adat kibontását hierarchikus szerkezettel.',
203
205
  expOptUseStyle: 'stílus',
204
206
  expUseStyleTitle: 'A stílusos cellák támogatottak, ha vannak',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: '表尾',
196
196
  expFooterTitle: '是否需要表尾',
197
197
  expOptColgroup: '分组表头',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: '如果存在,则支持带有分组结构的表头',
199
201
  expOptMerge: '合并',
200
202
  expMergeTitle: '如果存在,则支持带有合并结构的单元格',
201
- expOptAllExpand: '展开层级',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '如果存在,则支持将带有层级结构的数据全部展开',
203
205
  expOptUseStyle: '样式',
204
206
  expUseStyleTitle: '如果存在,则支持带样式的单元格',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: '表尾',
196
196
  expFooterTitle: '是否需要表尾',
197
197
  expOptColgroup: '分组表头',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: '如果存在,则支持带有分组结构的表头',
199
201
  expOptMerge: '合并',
200
202
  expMergeTitle: '如果存在,则支持带有合并结构的单元格',
201
- expOptAllExpand: '展开层级',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '如果存在,则支持将带有层级结构的数据全部展开',
203
205
  expOptUseStyle: '样式',
204
206
  expUseStyleTitle: '如果存在,则支持带样式的单元格',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'fine del tavolo',
196
196
  expFooterTitle: 'È necessario un piè di pagina della tabella?',
197
197
  expOptColgroup: 'Intestazione del gruppo',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'Se presenti, sono supportate intestazioni con strutture di raggruppamento',
199
201
  expOptMerge: 'unire',
200
202
  expMergeTitle: 'Supporta celle con strutture di unione, se presenti',
201
- expOptAllExpand: 'Espandi il livello',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: "Se esiste, supporta l'espansione di tutti i dati con una struttura gerarchica.",
203
205
  expOptUseStyle: 'stile',
204
206
  expUseStyleTitle: 'Le celle con stile sono supportate se presenti',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'フッター',
196
196
  expFooterTitle: 'フッターをエクスポート',
197
197
  expOptColgroup: 'グループ分けタイトル',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'グループ分けタイトルを有効にする',
199
201
  expOptMerge: '結合',
200
202
  expMergeTitle: '結合セルを有効にする',
201
- expOptAllExpand: '階層構造',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '階層構造を有効にする',
203
205
  expOptUseStyle: 'スタイル',
204
206
  expUseStyleTitle: 'スタイルを有効にする',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: '표 바닥글',
196
196
  expFooterTitle: '표 바닥글이 필요한지 여부',
197
197
  expOptColgroup: '그룹화된 표 헤더',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: '그룹화된 구조가 있는 표 헤더 지원',
199
201
  expOptMerge: '병합',
200
202
  expMergeTitle: '병합된 셀을 지원하는 경우',
201
- expOptAllExpand: '전체 계층 전개',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '계층 구조가 있는 데이터를 전체 전개 지원',
203
205
  expOptUseStyle: '스타일',
204
206
  expUseStyleTitle: '스타일이 있는 셀을 지원하는 경우',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: '表尾',
196
196
  expFooterTitle: '是否需要表尾',
197
197
  expOptColgroup: '分组表头',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: '如果存在,则支持带有分组结构的表头',
199
201
  expOptMerge: '合并',
200
202
  expMergeTitle: '如果存在,则支持带有合并结构的单元格',
201
- expOptAllExpand: '展开层级',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '如果存在,则支持将带有层级结构的数据全部展开',
203
205
  expOptUseStyle: '样式',
204
206
  expUseStyleTitle: '如果存在,则支持带样式的单元格',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'Rodapé',
196
196
  expFooterTitle: 'Necessita de tabela de rodapé',
197
197
  expOptColgroup: 'Cabeçalho de grupo',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'Se existir, suporta cabeçalhos com estrutura de agrupamento',
199
201
  expOptMerge: 'Mesclar',
200
202
  expMergeTitle: 'Se existir, suporta células com estruturas mescladas',
201
- expOptAllExpand: 'Expandir nós',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: 'Se existir, todos os dados com estrutura de árvore podem ser expandidos',
203
205
  expOptUseStyle: 'Estilos',
204
206
  expUseStyleTitle: 'Se existir, suporta células com estilos',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'конец таблицы',
196
196
  expFooterTitle: 'Нужен ли нижний колонтитул таблицы?',
197
197
  expOptColgroup: 'Заголовок группы',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'Если они присутствуют, поддерживаются заголовки со структурами группировки.',
199
201
  expOptMerge: 'слить',
200
202
  expMergeTitle: 'Поддерживает ячейки со структурами слияния, если они присутствуют.',
201
- expOptAllExpand: 'Развернуть уровень',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: 'Если он существует, он поддерживает расширение всех данных с помощью иерархической структуры.',
203
205
  expOptUseStyle: 'стиль',
204
206
  expUseStyleTitle: 'Стилизованные ячейки поддерживаются, если они есть.',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'ท้ายตาราง',
196
196
  expFooterTitle: 'จำเป็นต้องมีส่วนท้ายของตารางหรือไม่?',
197
197
  expOptColgroup: 'ส่วนหัวของกลุ่ม',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'หากมี รองรับส่วนหัวที่มีโครงสร้างการจัดกลุ่ม',
199
201
  expOptMerge: 'ผสาน',
200
202
  expMergeTitle: 'รองรับเซลล์ที่มีโครงสร้างผสาน หากมี',
201
- expOptAllExpand: 'ขยายระดับ',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: 'หากมีอยู่จะรองรับการขยายข้อมูลทั้งหมดด้วยโครงสร้างแบบลำดับชั้น',
203
205
  expOptUseStyle: 'สไตล์',
204
206
  expUseStyleTitle: 'เซลล์ที่มีสไตล์ได้รับการสนับสนุน หากมี',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'ھۆججەت ئاخىرى',
196
196
  expFooterTitle: 'ھۆججەت ئاخىرى لازىممۇ؟',
197
197
  expOptColgroup: 'ھۆججەت بىشىنى گۇرۇپپىلاش',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'ئەگەر مەۋجۇت بولسا،گۇرۇپپىلانغان ھۆججەت بىشى قۇرۇلمىسىنى قوللايدۇ ',
199
201
  expOptMerge: 'بېرىكتۈرۈش',
200
202
  expMergeTitle: 'ئەگەر مەۋجۇت بولسا برىكتۈرۈلگەن قۇرۇلمىلىق ھۆججەت ئىلمىنتىنى قوللايدۇ ',
201
- expOptAllExpand: 'دەرىجىسىنى ئىچىش',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: 'ئەگەر مەۋجۇت بولسا،دەرىجىسى بولغان بارلىق ئۇچۇرلار ئىچىلىدۇ ',
203
205
  expOptUseStyle: 'نۇسخا',
204
206
  expUseStyleTitle: 'ئەگەر مەۋجۇت بولسا ،نۇسخىسى بولغان ئىلمىنىتلارغا نۇسخا قوشىلىدۇ',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: 'Нижній колонтитул',
196
196
  expFooterTitle: 'Чи потрібен нижній колонтитул',
197
197
  expOptColgroup: 'Групування заголовків',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: 'Якщо є, підтримується групування заголовків',
199
201
  expOptMerge: 'Злиття',
200
202
  expMergeTitle: 'Якщо є, підтримується злиття клітинок',
201
- expOptAllExpand: 'Розгорнути рівні',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: 'Якщо є, підтримується розгортання даних з рівневими структурами',
203
205
  expOptUseStyle: 'Стилі',
204
206
  expUseStyleTitle: 'Якщо є, підтримується використання стилів у клітинках',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: '表尾',
196
196
  expFooterTitle: '是否需要表尾',
197
197
  expOptColgroup: '分组表头',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: '如果存在,则支持带有分组结构的表头',
199
201
  expOptMerge: '合并',
200
202
  expMergeTitle: '如果存在,则支持带有合并结构的单元格',
201
- expOptAllExpand: '展开层级',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '如果存在,则支持将带有层级结构的数据全部展开',
203
205
  expOptUseStyle: '样式',
204
206
  expUseStyleTitle: '如果存在,则支持带样式的单元格',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: '表尾',
196
196
  expFooterTitle: '是否需要表尾',
197
197
  expOptColgroup: '分組表頭',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: '如果存在,則支援帶有分組結構的表頭',
199
201
  expOptMerge: '合併',
200
202
  expMergeTitle: '如果存在,則支援帶有合併結構的儲存格',
201
- expOptAllExpand: '展開層級',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '如果存在,則支援將帶有層級結構的資料全部展開',
203
205
  expOptUseStyle: '樣式',
204
206
  expUseStyleTitle: '如果存在,則支援帶有樣式的儲存格',
@@ -195,10 +195,12 @@ export default {
195
195
  expOptFooter: '表尾',
196
196
  expFooterTitle: '是否需要表尾',
197
197
  expOptColgroup: '分组表头',
198
+ expOptTitle: '列标题',
199
+ expTitleTitle: '是否为列标题,否则显示为列的字段名',
198
200
  expColgroupTitle: '如果存在,则支持带有分组结构的表头',
199
201
  expOptMerge: '合并',
200
202
  expMergeTitle: '如果存在,则支持带有合并结构的单元格',
201
- expOptAllExpand: '展开层级',
203
+ expOptAllExpand: '展开树',
202
204
  expAllExpandTitle: '如果存在,则支持将带有层级结构的数据全部展开',
203
205
  expOptUseStyle: '样式',
204
206
  expUseStyleTitle: '如果存在,则支持带样式的单元格',
@@ -104,8 +104,7 @@ function handleInsertRowAt ($xeTable: VxeTableConstructor & VxeTablePrivateMetho
104
104
  const internalData = $xeTable as unknown as TableInternalData
105
105
 
106
106
  const { treeConfig } = props
107
- const { mergeList } = reactData
108
- const { tableFullTreeData, afterFullData, tableFullData, fullDataRowIdData, fullAllDataRowIdData, insertRowMaps } = internalData
107
+ const { tableFullTreeData, afterFullData, mergeBodyList, tableFullData, fullDataRowIdData, fullAllDataRowIdData, insertRowMaps } = internalData
109
108
  const treeOpts = $xeTable.computeTreeOpts
110
109
  const { transform, rowField, mapChildrenField } = treeOpts
111
110
  const childrenField = treeOpts.children || treeOpts.childrenField
@@ -127,7 +126,7 @@ function handleInsertRowAt ($xeTable: VxeTableConstructor & VxeTablePrivateMetho
127
126
  tableFullData.unshift(item)
128
127
  })
129
128
  // 刷新单元格合并
130
- mergeList.forEach((mergeItem: any) => {
129
+ mergeBodyList.forEach((mergeItem: any) => {
131
130
  const { row: mergeRowIndex } = mergeItem
132
131
  if (mergeRowIndex > 0) {
133
132
  mergeItem.row = mergeRowIndex + newRecords.length
@@ -149,7 +148,7 @@ function handleInsertRowAt ($xeTable: VxeTableConstructor & VxeTablePrivateMetho
149
148
  tableFullData.push(item)
150
149
  })
151
150
  // 刷新单元格合并
152
- mergeList.forEach((mergeItem: any) => {
151
+ mergeBodyList.forEach((mergeItem: any) => {
153
152
  const { row: mergeRowIndex, rowspan: mergeRowspan } = mergeItem
154
153
  if (mergeRowIndex + mergeRowspan > afterFullData.length) {
155
154
  mergeItem.rowspan = mergeRowspan + newRecords.length
@@ -233,7 +232,7 @@ function handleInsertRowAt ($xeTable: VxeTableConstructor & VxeTablePrivateMetho
233
232
  tableFullData.push(...newRecords)
234
233
  }
235
234
  // 刷新单元格合并
236
- mergeList.forEach((mergeItem: any) => {
235
+ mergeBodyList.forEach((mergeItem: any) => {
237
236
  const { row: mergeRowIndex, rowspan: mergeRowspan } = mergeItem
238
237
  if (mergeRowIndex > afIndex) {
239
238
  mergeItem.row = mergeRowIndex + newRecords.length
@@ -256,6 +255,7 @@ function handleInsertRowAt ($xeTable: VxeTableConstructor & VxeTablePrivateMetho
256
255
  $xeTable.updateAfterDataIndex()
257
256
  }
258
257
  $xeTable.updateFooter()
258
+ $xeTable.handleUpdateBodyMerge()
259
259
  $xeTable.checkSelectionStatus()
260
260
  if (reactData.scrollYLoad) {
261
261
  $xeTable.updateScrollYSpace()
@@ -506,8 +506,8 @@ export default {
506
506
  const internalData = $xeTable as unknown as TableInternalData
507
507
 
508
508
  const { treeConfig } = props
509
- const { mergeList, editStore } = reactData
510
- const { tableFullTreeData, selectCheckboxMaps, afterFullData, tableFullData, pendingRowMaps, insertRowMaps, removeRowMaps } = internalData
509
+ const { editStore } = reactData
510
+ const { tableFullTreeData, selectCheckboxMaps, afterFullData, mergeBodyList, tableFullData, pendingRowMaps, insertRowMaps, removeRowMaps } = internalData
511
511
  const checkboxOpts = $xeTable.computeCheckboxOpts
512
512
  const treeOpts = $xeTable.computeTreeOpts
513
513
  const { transform, mapChildrenField } = treeOpts
@@ -572,7 +572,7 @@ export default {
572
572
  const afIndex = this.findRowIndexOf(afterFullData, row)
573
573
  if (afIndex > -1) {
574
574
  // 刷新单元格合并
575
- mergeList.forEach((mergeItem: any) => {
575
+ mergeBodyList.forEach((mergeItem: any) => {
576
576
  const { row: mergeRowIndex, rowspan: mergeRowspan } = mergeItem
577
577
  if (mergeRowIndex > afIndex) {
578
578
  mergeItem.row = mergeRowIndex - 1
@@ -602,9 +602,10 @@ export default {
602
602
  reactData.removeRowFlag++
603
603
  reactData.insertRowFlag++
604
604
  reactData.pendingRowFlag++
605
- $xeTable.updateFooter()
606
605
  $xeTable.cacheRowMap(false)
607
606
  $xeTable.handleTableData(treeConfig && transform)
607
+ $xeTable.updateFooter()
608
+ $xeTable.handleUpdateBodyMerge()
608
609
  if (!(treeConfig && transform)) {
609
610
  $xeTable.updateAfterDataIndex()
610
611
  }
@@ -338,27 +338,27 @@ export default {
338
338
  }),
339
339
  h('vxe-checkbox', {
340
340
  props: {
341
- value: defaultOptions.isFooter,
342
- disabled: !storeData.hasFooter,
343
- title: getI18n('vxe.export.expFooterTitle'),
344
- content: getI18n('vxe.export.expOptFooter')
341
+ value: isHeader ? defaultOptions.isTitle : false,
342
+ disabled: !isHeader,
343
+ title: getI18n('vxe.export.expTitleTitle'),
344
+ content: getI18n('vxe.export.expOptTitle')
345
345
  },
346
346
  on: {
347
347
  input (value: any) {
348
- defaultOptions.isFooter = value
348
+ defaultOptions.isTitle = value
349
349
  }
350
350
  }
351
351
  }),
352
352
  h('vxe-checkbox', {
353
353
  props: {
354
- value: hasEmptyData ? false : defaultOptions.original,
355
- disabled: hasEmptyData,
356
- title: getI18n('vxe.export.expOriginalTitle'),
357
- content: getI18n('vxe.export.expOptOriginal')
354
+ value: isHeader && hasColgroup && supportMerge ? defaultOptions.isColgroup : false,
355
+ disabled: !isHeader || !hasColgroup || !supportMerge,
356
+ title: getI18n('vxe.export.expColgroupTitle'),
357
+ content: getI18n('vxe.export.expOptColgroup')
358
358
  },
359
359
  on: {
360
360
  input (value: any) {
361
- defaultOptions.original = value
361
+ defaultOptions.isColgroup = value
362
362
  }
363
363
  }
364
364
  })
@@ -368,16 +368,14 @@ export default {
368
368
  }, [
369
369
  h('vxe-checkbox', {
370
370
  props: {
371
- // value: supportGroup || (isHeader && hasColgroup && supportMerge) ? defaultOptions.isColgroup : false,
372
- // disabled: !supportGroup && (!isHeader || !hasColgroup || !supportMerge),
373
- value: isHeader && hasColgroup && supportMerge ? defaultOptions.isColgroup : false,
374
- disabled: !isHeader || !hasColgroup || !supportMerge,
375
- title: getI18n('vxe.export.expColgroupTitle'),
376
- content: getI18n('vxe.export.expOptColgroup')
371
+ value: hasEmptyData ? false : defaultOptions.original,
372
+ disabled: hasEmptyData,
373
+ title: getI18n('vxe.export.expOriginalTitle'),
374
+ content: getI18n('vxe.export.expOptOriginal')
377
375
  },
378
376
  on: {
379
377
  input (value: any) {
380
- defaultOptions.isColgroup = value
378
+ defaultOptions.original = value
381
379
  }
382
380
  }
383
381
  }),
@@ -422,6 +420,24 @@ export default {
422
420
  }
423
421
  }
424
422
  })
423
+ ]),
424
+
425
+ h('div', {
426
+ class: 'vxe-table-export--panel-option-row'
427
+ }, [
428
+ h('vxe-checkbox', {
429
+ props: {
430
+ value: defaultOptions.isFooter,
431
+ disabled: !storeData.hasFooter,
432
+ title: getI18n('vxe.export.expFooterTitle'),
433
+ content: getI18n('vxe.export.expOptFooter')
434
+ },
435
+ on: {
436
+ input (value: any) {
437
+ defaultOptions.isFooter = value
438
+ }
439
+ }
440
+ })
425
441
  ])
426
442
  ])
427
443
  ])
@@ -1,6 +1,6 @@
1
1
  import XEUtils from 'xe-utils'
2
2
  import { VxeUI } from '../../../ui'
3
- import { isColumnInfo, mergeBodyMethod, getCellValue } from '../../src/util'
3
+ import { isColumnInfo, getCellValue } from '../../src/util'
4
4
  import { parseFile, formatText, eqEmptyValue } from '../../../ui/src/utils'
5
5
  import { hasClass } from '../../../ui/src/dom'
6
6
  import { createHtmlPage, getExportBlobByContent } from './util'
@@ -220,7 +220,7 @@ function getBooleanValue (cellValue: any) {
220
220
  function getHeaderTitle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, opts: any, column: any) {
221
221
  const columnOpts = $xeTable.computeColumnOpts
222
222
  const headExportMethod = column.headerExportMethod || columnOpts.headerExportMethod
223
- return headExportMethod ? headExportMethod({ column, options: opts, $table: $xeTable }) : ((opts.original ? column.field : column.getTitle()) || '')
223
+ return headExportMethod ? headExportMethod({ column, options: opts, $table: $xeTable }) : ((opts.isTitle ? column.getTitle() : column.field) || '')
224
224
  }
225
225
 
226
226
  function getFooterCellValue ($xeTable: any, opts: any, row: any, column: any) {
@@ -342,9 +342,11 @@ function hasEllipsis ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, co
342
342
  function toHtml ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, opts: VxeTablePropTypes.ExportHandleOptions, columns: VxeTableDefines.ColumnInfo[], datas: any[]) {
343
343
  const props = $xeTable
344
344
  const reactData = $xeTable as unknown as TableReactData
345
+ const internalData = $xeTable as unknown as TableInternalData
345
346
 
346
347
  const { id, border, treeConfig, headerAlign: allHeaderAlign, align: allAlign, footerAlign: allFooterAlign, showOverflow: allColumnOverflow, showHeaderOverflow: allColumnHeaderOverflow } = props
347
- const { isAllSelected, isIndeterminate, mergeList } = reactData
348
+ const { isAllSelected, isIndeterminate } = reactData
349
+ const { mergeBodyCellMaps } = internalData
348
350
  const treeOpts = $xeTable.computeTreeOpts
349
351
  const { print: isPrint, isHeader, isFooter, isColgroup, isMerge, colgroups, original } = opts
350
352
  const allCls = 'check-all'
@@ -442,15 +444,16 @@ function toHtml ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, opts: V
442
444
  datas.forEach(item => {
443
445
  tables.push(
444
446
  '<tr>' + columns.map(column => {
447
+ const colid = column.id
445
448
  const cellAlign = column.align || allAlign
446
449
  const classNames = hasEllipsis($xeTable, column, 'showOverflow', allColumnOverflow) ? ['col--ellipsis'] : []
447
- const cellValue = item[column.id]
450
+ const cellValue = item[colid]
448
451
  let rowSpan = 1
449
452
  let colSpan = 1
450
- if (isMerge && mergeList.length) {
453
+ if (isMerge) {
451
454
  const _rowIndex = $xeTable.getVTRowIndex(item._row)
452
455
  const _columnIndex = $xeTable.getVTColumnIndex(column)
453
- const spanRest = mergeBodyMethod(mergeList, _rowIndex, _columnIndex)
456
+ const spanRest = mergeBodyCellMaps[`${_rowIndex}:${_columnIndex}`]
454
457
  if (spanRest) {
455
458
  const { rowspan, colspan } = spanRest
456
459
  if (!rowspan || !colspan) {
@@ -1071,18 +1074,19 @@ function handleExportAndPrint ($xeTable: VxeTableConstructor, options: VxeTableP
1071
1074
  const $xeGrid = $xeTable.$xeGrid
1072
1075
 
1073
1076
  const { treeConfig, showHeader, showFooter } = props
1074
- const { initStore, mergeList, mergeFooterList, isGroup, footerTableData, exportStore, exportParams } = reactData
1075
- const { collectColumn } = internalData
1077
+ const { initStore, isGroup, footerTableData, exportStore, exportParams } = reactData
1078
+ const { collectColumn, mergeBodyList, mergeFooterList } = internalData
1076
1079
  const exportOpts = $xeTable.computeExportOpts
1077
1080
  const hasTree = treeConfig
1078
1081
  const customOpts = $xeTable.computeCustomOpts
1079
1082
  const selectRecords = $xeTable.getCheckboxRecords()
1080
1083
  const proxyOpts = $xeGrid ? $xeGrid.computeProxyOpts : {}
1081
1084
  const hasFooter = !!footerTableData.length
1082
- const hasMerge = !!(mergeList.length || mergeFooterList.length)
1085
+ const hasMerge = !!(mergeBodyList.length || mergeFooterList.length)
1083
1086
  const defOpts = Object.assign({
1084
1087
  message: true,
1085
1088
  isHeader: showHeader,
1089
+ isTitle: showHeader,
1086
1090
  isFooter: showFooter,
1087
1091
  isColgroup: isGroup,
1088
1092
  isMerge: hasMerge,
@@ -1252,15 +1256,16 @@ export default {
1252
1256
  const $xeGrid = $xeTable.$xeGrid as VxeGridConstructor
1253
1257
 
1254
1258
  const { treeConfig, showHeader, showFooter } = props
1255
- const { mergeList, mergeFooterList, isGroup } = reactData
1256
- const { tableFullColumn, afterFullData, collectColumn } = internalData
1259
+ const { mergeFooterList, isGroup } = reactData
1260
+ const { tableFullColumn, afterFullData, mergeBodyList, collectColumn } = internalData
1257
1261
  const exportOpts = $xeTable.computeExportOpts
1258
1262
  const treeOpts = $xeTable.computeTreeOpts
1259
1263
  const proxyOpts = $xeGrid ? $xeGrid.computeProxyOpts : {}
1260
- const hasMerge = !!(mergeList.length || mergeFooterList.length)
1264
+ const hasMerge = !!(mergeBodyList.length || mergeFooterList.length)
1261
1265
  const opts = Object.assign({
1262
1266
  message: true,
1263
1267
  isHeader: showHeader,
1268
+ isTitle: showHeader,
1264
1269
  isFooter: showFooter,
1265
1270
  isColgroup: isGroup,
1266
1271
  isMerge: hasMerge,
@@ -2,7 +2,7 @@ import { PropType, CreateElement } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
3
  import { VxeUI } from '../../ui'
4
4
  import { isEnableConf, getClass } from '../../ui/src/utils'
5
- import { getOffsetSize, calcTreeLine, mergeBodyMethod, getRowid, createHandleGetRowId } from './util'
5
+ import { getOffsetSize, calcTreeLine, getRowid, createHandleGetRowId } from './util'
6
6
  import { updateCellTitle } from '../../ui/src/dom'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
8
8
 
@@ -36,14 +36,13 @@ function renderLine (h: CreateElement, _vm: any, rowid: string, params: VxeTable
36
36
  if (slots && (slots as any).line) {
37
37
  return $xeTable.callSlot((slots as any).line, params, h)
38
38
  }
39
- const rest = fullAllDataRowIdData[rowid]
39
+ const rowRest = fullAllDataRowIdData[rowid]
40
40
  let rLevel = 0
41
41
  let prevRow = null
42
- if (rest) {
43
- rLevel = rest.level
44
- prevRow = rest.items[rest.treeIndex - 1]
42
+ if (rowRest) {
43
+ rLevel = rowRest.level
44
+ prevRow = rowRest.items[rowRest.treeIndex - 1]
45
45
  }
46
- const isFirstRow = $xeTable.eqRow(afterFullData[0], row)
47
46
  if (treeConfig && treeNode && (treeOpts.showLine || treeOpts.line)) {
48
47
  return [
49
48
  h('div', {
@@ -53,7 +52,7 @@ function renderLine (h: CreateElement, _vm: any, rowid: string, params: VxeTable
53
52
  h('div', {
54
53
  class: 'vxe-tree--line',
55
54
  style: {
56
- height: `${isFirstRow ? 1 : calcTreeLine(params, prevRow)}px`,
55
+ height: `${$xeTable.eqRow(afterFullData[0], row) ? 1 : calcTreeLine(params, prevRow)}px`,
57
56
  bottom: `-${Math.floor(cellHeight / 2)}px`,
58
57
  left: `${(rLevel * treeOpts.indent) + (rLevel ? 2 - getOffsetSize($xeTable) : 0) + 16}px`
59
58
  }
@@ -90,10 +89,9 @@ function renderTdColumn (
90
89
  const tableInternalData = $xeTable as unknown as TableInternalData
91
90
  const $xeGrid = $xeTable.$xeGrid
92
91
 
93
- const { fullAllDataRowIdData, fullColumnIdData, visibleColumn } = tableInternalData
94
92
  const { columnKey, resizable: allResizable, showOverflow: allShowOverflow, border, height, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps
95
- const { tableData, dragRow, overflowX, currentColumn, scrollXLoad, scrollYLoad, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData
96
- const { afterFullData, scrollXStore, scrollYStore } = tableInternalData
93
+ const { tableData, dragRow, overflowX, currentColumn, scrollXLoad, scrollYLoad, mergeBodyFlag, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, editStore, isAllOverflow, validErrorMaps } = tableReactData
94
+ const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore } = tableInternalData
97
95
  const cellOpts = $xeTable.computeCellOpts
98
96
  const validOpts = $xeTable.computeValidOpts
99
97
  const checkboxOpts = $xeTable.computeCheckboxOpts
@@ -221,8 +219,8 @@ function renderTdColumn (
221
219
  }
222
220
  let isMergeCell = false
223
221
  // 合并行或列
224
- if (mergeList.length) {
225
- const spanRest = mergeBodyMethod(mergeList, _rowIndex, _columnIndex)
222
+ if (mergeBodyFlag && mergeBodyList.length) {
223
+ const spanRest = mergeBodyCellMaps[`${_rowIndex}:${_columnIndex}`]
226
224
  if (spanRest) {
227
225
  const { rowspan, colspan } = spanRest
228
226
  if (!rowspan || !colspan) {
@@ -251,7 +249,7 @@ function renderTdColumn (
251
249
  }
252
250
  }
253
251
  // 如果被合并不可隐藏
254
- if (fixedHiddenColumn && mergeList) {
252
+ if (fixedHiddenColumn && isMergeCell) {
255
253
  if (tdAttrs.colspan > 1 || tdAttrs.rowspan > 1) {
256
254
  fixedHiddenColumn = false
257
255
  }
@@ -11,20 +11,6 @@ const renderType = 'footer'
11
11
 
12
12
  const { renderer, renderEmptyElement } = VxeUI
13
13
 
14
- function mergeFooterMethod (mergeFooterList: VxeTableDefines.MergeItem[], _rowIndex: number, _columnIndex: number) {
15
- for (let mIndex = 0; mIndex < mergeFooterList.length; mIndex++) {
16
- const { row: mergeRowIndex, col: mergeColIndex, rowspan: mergeRowspan, colspan: mergeColspan } = mergeFooterList[mIndex]
17
- if (mergeColIndex > -1 && mergeRowIndex > -1 && mergeRowspan && mergeColspan) {
18
- if (mergeRowIndex === _rowIndex && mergeColIndex === _columnIndex) {
19
- return { rowspan: mergeRowspan, colspan: mergeColspan }
20
- }
21
- if (_rowIndex >= mergeRowIndex && _rowIndex < mergeRowIndex + mergeRowspan && _columnIndex >= mergeColIndex && _columnIndex < mergeColIndex + mergeColspan) {
22
- return { rowspan: 0, colspan: 0 }
23
- }
24
- }
25
- }
26
- }
27
-
28
14
  function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.ColumnInfo[], footerTableData: any[], row: any, $rowIndex: number, _rowIndex: number) {
29
15
  const props = _vm
30
16
  const $xeTable = _vm.$parent as VxeTableConstructor & VxeTablePrivateMethods
@@ -35,8 +21,8 @@ function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.Co
35
21
 
36
22
  const { fixedType } = props
37
23
  const { resizable: allResizable, border, footerCellClassName, footerCellStyle, footerAlign: allFooterAlign, footerSpanMethod, align: allAlign, columnKey, showFooterOverflow: allColumnFooterOverflow } = tableProps
38
- const { scrollXLoad, scrollYLoad, overflowX, currentColumn, mergeFooterList } = tableReactData
39
- const { fullColumnIdData, scrollXStore } = tableInternalData
24
+ const { scrollXLoad, scrollYLoad, overflowX, currentColumn } = tableReactData
25
+ const { fullColumnIdData, mergeFooterList, mergeFooterCellMaps, scrollXStore } = tableInternalData
40
26
  const tooltipOpts = $xeTable.computeTooltipOpts
41
27
  const { isAllColumnDrag } = $xeTable.resizableOpts
42
28
  const columnOpts = $xeTable.computeColumnOpts
@@ -115,7 +101,7 @@ function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.Co
115
101
  let isMergeCell = false
116
102
  // 合并行或列
117
103
  if (mergeFooterList.length) {
118
- const spanRest = mergeFooterMethod(mergeFooterList, _rowIndex, _columnIndex)
104
+ const spanRest = mergeFooterCellMaps[`${_rowIndex}:${_columnIndex}`]
119
105
  if (spanRest) {
120
106
  const { rowspan, colspan } = spanRest
121
107
  if (!rowspan || !colspan) {