vxe-table 3.12.10-beta.9 → 3.12.11

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 (178) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/locale/lang/ar-EG.js +2 -1
  4. package/es/locale/lang/de-DE.js +2 -1
  5. package/es/locale/lang/en-US.js +4 -3
  6. package/es/locale/lang/es-ES.js +2 -1
  7. package/es/locale/lang/fr-FR.js +2 -1
  8. package/es/locale/lang/hu-HU.js +2 -1
  9. package/es/locale/lang/hy-AM.js +2 -1
  10. package/es/locale/lang/it-IT.js +2 -1
  11. package/es/locale/lang/ja-JP.js +2 -1
  12. package/es/locale/lang/ko-KR.js +2 -1
  13. package/es/locale/lang/nb-NO.js +2 -1
  14. package/es/locale/lang/pt-BR.js +2 -1
  15. package/es/locale/lang/ru-RU.js +4 -3
  16. package/es/locale/lang/th-TH.js +2 -1
  17. package/es/locale/lang/ug-CN.js +2 -1
  18. package/es/locale/lang/uk-UA.js +518 -517
  19. package/es/locale/lang/vi-VN.js +2 -1
  20. package/es/locale/lang/zh-CHT.js +2 -1
  21. package/es/locale/lang/zh-CN.js +2 -1
  22. package/es/style.css +1 -1
  23. package/es/style.min.css +1 -1
  24. package/es/table/module/edit/mixin.js +7 -7
  25. package/es/table/module/export/mixin.js +105 -69
  26. package/es/table/module/keyboard/mixin.js +68 -25
  27. package/es/table/module/menu/mixin.js +3 -1
  28. package/es/table/src/body.js +114 -87
  29. package/es/table/src/cell.js +43 -57
  30. package/es/table/src/column.js +43 -8
  31. package/es/table/src/columnInfo.js +3 -0
  32. package/es/table/src/footer.js +47 -6
  33. package/es/table/src/header.js +67 -165
  34. package/es/table/src/methods.js +962 -480
  35. package/es/table/src/props.js +14 -4
  36. package/es/table/src/table.js +114 -33
  37. package/es/table/src/util.js +74 -58
  38. package/es/table/style.css +246 -191
  39. package/es/table/style.min.css +1 -1
  40. package/es/ui/index.js +20 -6
  41. package/es/ui/src/log.js +1 -1
  42. package/es/vxe-table/style.css +246 -191
  43. package/es/vxe-table/style.min.css +1 -1
  44. package/lib/index.css +1 -1
  45. package/lib/index.min.css +1 -1
  46. package/lib/index.umd.js +1725 -1022
  47. package/lib/index.umd.min.js +1 -1
  48. package/lib/locale/lang/ar-EG.js +2 -1
  49. package/lib/locale/lang/ar-EG.min.js +1 -1
  50. package/lib/locale/lang/de-DE.js +2 -1
  51. package/lib/locale/lang/de-DE.min.js +1 -1
  52. package/lib/locale/lang/en-US.js +4 -3
  53. package/lib/locale/lang/en-US.min.js +1 -1
  54. package/lib/locale/lang/en-US.umd.js +4 -3
  55. package/lib/locale/lang/es-ES.js +2 -1
  56. package/lib/locale/lang/es-ES.min.js +1 -1
  57. package/lib/locale/lang/es-ES.umd.js +2 -1
  58. package/lib/locale/lang/fr-FR.js +2 -1
  59. package/lib/locale/lang/fr-FR.min.js +1 -1
  60. package/lib/locale/lang/hu-HU.js +2 -1
  61. package/lib/locale/lang/hu-HU.min.js +1 -1
  62. package/lib/locale/lang/hu-HU.umd.js +2 -1
  63. package/lib/locale/lang/hy-AM.js +2 -1
  64. package/lib/locale/lang/hy-AM.min.js +1 -1
  65. package/lib/locale/lang/it-IT.js +2 -1
  66. package/lib/locale/lang/it-IT.min.js +1 -1
  67. package/lib/locale/lang/ja-JP.js +2 -1
  68. package/lib/locale/lang/ja-JP.min.js +1 -1
  69. package/lib/locale/lang/ja-JP.umd.js +2 -1
  70. package/lib/locale/lang/ko-KR.js +2 -1
  71. package/lib/locale/lang/ko-KR.min.js +1 -1
  72. package/lib/locale/lang/ko-KR.umd.js +2 -1
  73. package/lib/locale/lang/nb-NO.js +2 -1
  74. package/lib/locale/lang/nb-NO.min.js +1 -1
  75. package/lib/locale/lang/pt-BR.js +2 -1
  76. package/lib/locale/lang/pt-BR.min.js +1 -1
  77. package/lib/locale/lang/pt-BR.umd.js +2 -1
  78. package/lib/locale/lang/ru-RU.js +4 -3
  79. package/lib/locale/lang/ru-RU.min.js +1 -1
  80. package/lib/locale/lang/ru-RU.umd.js +4 -3
  81. package/lib/locale/lang/th-TH.js +2 -1
  82. package/lib/locale/lang/th-TH.min.js +1 -1
  83. package/lib/locale/lang/ug-CN.js +2 -1
  84. package/lib/locale/lang/ug-CN.min.js +1 -1
  85. package/lib/locale/lang/uk-UA.js +518 -517
  86. package/lib/locale/lang/uk-UA.min.js +1 -1
  87. package/lib/locale/lang/uk-UA.umd.js +518 -517
  88. package/lib/locale/lang/vi-VN.js +2 -1
  89. package/lib/locale/lang/vi-VN.min.js +1 -1
  90. package/lib/locale/lang/zh-CHT.js +2 -1
  91. package/lib/locale/lang/zh-CHT.min.js +1 -1
  92. package/lib/locale/lang/zh-CHT.umd.js +2 -1
  93. package/lib/locale/lang/zh-CN.js +2 -1
  94. package/lib/locale/lang/zh-CN.min.js +1 -1
  95. package/lib/locale/lang/zh-CN.umd.js +2 -1
  96. package/lib/style.css +1 -1
  97. package/lib/style.min.css +1 -1
  98. package/lib/table/module/edit/mixin.js +7 -2
  99. package/lib/table/module/edit/mixin.min.js +1 -1
  100. package/lib/table/module/export/mixin.js +105 -64
  101. package/lib/table/module/export/mixin.min.js +1 -1
  102. package/lib/table/module/keyboard/mixin.js +73 -27
  103. package/lib/table/module/keyboard/mixin.min.js +1 -1
  104. package/lib/table/module/menu/mixin.js +3 -1
  105. package/lib/table/src/body.js +114 -80
  106. package/lib/table/src/body.min.js +1 -1
  107. package/lib/table/src/cell.js +32 -42
  108. package/lib/table/src/cell.min.js +1 -1
  109. package/lib/table/src/column.js +12 -0
  110. package/lib/table/src/column.min.js +1 -1
  111. package/lib/table/src/columnInfo.js +3 -0
  112. package/lib/table/src/columnInfo.min.js +1 -1
  113. package/lib/table/src/footer.js +43 -4
  114. package/lib/table/src/footer.min.js +1 -1
  115. package/lib/table/src/header.js +49 -172
  116. package/lib/table/src/header.min.js +1 -1
  117. package/lib/table/src/methods.js +1072 -538
  118. package/lib/table/src/methods.min.js +1 -1
  119. package/lib/table/src/props.js +14 -4
  120. package/lib/table/src/props.min.js +1 -1
  121. package/lib/table/src/table.js +113 -36
  122. package/lib/table/src/table.min.js +1 -1
  123. package/lib/table/src/util.js +88 -71
  124. package/lib/table/src/util.min.js +1 -1
  125. package/lib/table/style/style.css +246 -191
  126. package/lib/table/style/style.min.css +1 -1
  127. package/lib/ui/index.js +20 -6
  128. package/lib/ui/index.min.js +1 -1
  129. package/lib/ui/src/log.js +1 -1
  130. package/lib/ui/src/log.min.js +1 -1
  131. package/lib/vxe-table/style/style.css +246 -191
  132. package/lib/vxe-table/style/style.min.css +1 -1
  133. package/package.json +2 -2
  134. package/packages/locale/lang/ar-EG.ts +2 -1
  135. package/packages/locale/lang/de-DE.ts +2 -1
  136. package/packages/locale/lang/en-US.ts +4 -3
  137. package/packages/locale/lang/es-ES.ts +2 -1
  138. package/packages/locale/lang/fr-FR.ts +2 -1
  139. package/packages/locale/lang/hu-HU.ts +2 -1
  140. package/packages/locale/lang/hy-AM.ts +2 -1
  141. package/packages/locale/lang/it-IT.ts +2 -1
  142. package/packages/locale/lang/ja-JP.ts +2 -1
  143. package/packages/locale/lang/ko-KR.ts +2 -1
  144. package/packages/locale/lang/nb-NO.ts +2 -1
  145. package/packages/locale/lang/pt-BR.ts +2 -1
  146. package/packages/locale/lang/ru-RU.ts +4 -3
  147. package/packages/locale/lang/th-TH.ts +2 -1
  148. package/packages/locale/lang/ug-CN.ts +2 -1
  149. package/packages/locale/lang/uk-UA.ts +518 -517
  150. package/packages/locale/lang/vi-VN.ts +2 -1
  151. package/packages/locale/lang/zh-CHT.ts +2 -1
  152. package/packages/locale/lang/zh-CN.ts +2 -1
  153. package/packages/table/module/edit/mixin.ts +7 -7
  154. package/packages/table/module/export/mixin.ts +138 -80
  155. package/packages/table/module/keyboard/mixin.ts +65 -24
  156. package/packages/table/module/menu/mixin.ts +4 -1
  157. package/packages/table/src/body.ts +126 -90
  158. package/packages/table/src/cell.ts +45 -67
  159. package/packages/table/src/column.ts +48 -10
  160. package/packages/table/src/columnInfo.ts +3 -0
  161. package/packages/table/src/footer.ts +50 -7
  162. package/packages/table/src/header.ts +67 -166
  163. package/packages/table/src/methods.ts +1007 -492
  164. package/packages/table/src/props.ts +16 -6
  165. package/packages/table/src/table.ts +124 -33
  166. package/packages/table/src/util.ts +83 -63
  167. package/packages/ui/index.ts +19 -5
  168. package/styles/components/table.scss +313 -274
  169. package/styles/theme/base.scss +4 -6
  170. package/styles/theme/dark.scss +1 -0
  171. package/styles/theme/light.scss +1 -0
  172. package/styles/variable.scss +1 -0
  173. /package/es/{iconfont.1736854649055.ttf → iconfont.1739008141486.ttf} +0 -0
  174. /package/es/{iconfont.1736854649055.woff → iconfont.1739008141486.woff} +0 -0
  175. /package/es/{iconfont.1736854649055.woff2 → iconfont.1739008141486.woff2} +0 -0
  176. /package/lib/{iconfont.1736854649055.ttf → iconfont.1739008141486.ttf} +0 -0
  177. /package/lib/{iconfont.1736854649055.woff → iconfont.1739008141486.woff} +0 -0
  178. /package/lib/{iconfont.1736854649055.woff2 → iconfont.1739008141486.woff2} +0 -0
@@ -623,7 +623,18 @@ function getTxtCellValue(val, vMaps) {
623
623
  const rest = replaceTxtCell(val, vMaps);
624
624
  return rest.replace(/^"+$/g, (qVal) => '"'.repeat(Math.ceil(qVal.length / 2)));
625
625
  }
626
- function parseCsvAndTxt(columns, content, cellSeparator) {
626
+ function toExportField(tableConf, field) {
627
+ const { fieldMaps, titleMaps } = tableConf;
628
+ // title 转 field
629
+ if (!fieldMaps[field]) {
630
+ const teCol = titleMaps[field];
631
+ if (teCol && teCol.field) {
632
+ field = teCol.field;
633
+ }
634
+ }
635
+ return field;
636
+ }
637
+ function parseCsvAndTxt(tableConf, content, cellSeparator) {
627
638
  const list = content.split(enterSymbol);
628
639
  const rows = [];
629
640
  let fields = [];
@@ -644,12 +655,12 @@ function parseCsvAndTxt(columns, content, cellSeparator) {
644
655
  });
645
656
  const cells = rVal.split(cellSeparator);
646
657
  if (!fields.length) {
647
- fields = cells.map((val) => getTxtCellValue(val.trim(), vMaps));
658
+ fields = cells.map((val) => toExportField(tableConf, getTxtCellValue(val.trim(), vMaps)));
648
659
  }
649
660
  else {
650
661
  cells.forEach((val, colIndex) => {
651
662
  if (colIndex < fields.length) {
652
- item[fields[colIndex]] = getTxtCellValue(val, vMaps);
663
+ item[fields[colIndex]] = getTxtCellValue(val.trim(), vMaps);
653
664
  }
654
665
  });
655
666
  rows.push(item);
@@ -659,13 +670,13 @@ function parseCsvAndTxt(columns, content, cellSeparator) {
659
670
  }
660
671
  return { fields, rows };
661
672
  }
662
- function parseCsv(columns, content) {
663
- return parseCsvAndTxt(columns, content, ',');
673
+ function parseCsv(tableConf, content) {
674
+ return parseCsvAndTxt(tableConf, content, ',');
664
675
  }
665
- function parseTxt(columns, content) {
666
- return parseCsvAndTxt(columns, content, '\t');
676
+ function parseTxt(tableConf, content) {
677
+ return parseCsvAndTxt(tableConf, content, '\t');
667
678
  }
668
- function parseHTML(columns, content) {
679
+ function parseHTML(tableConf, content) {
669
680
  const domParser = new DOMParser();
670
681
  const xmlDoc = domParser.parseFromString(content, 'text/html');
671
682
  const bodyNodes = getElementsByTagName(xmlDoc, 'body');
@@ -676,9 +687,9 @@ function parseHTML(columns, content) {
676
687
  if (tableNodes.length) {
677
688
  const theadNodes = getElementsByTagName(tableNodes[0], 'thead');
678
689
  if (theadNodes.length) {
679
- XEUtils.arrayEach(getElementsByTagName(theadNodes[0], 'tr'), (rowNode) => {
680
- XEUtils.arrayEach(getElementsByTagName(rowNode, 'th'), (cellNode) => {
681
- fields.push(cellNode.textContent);
690
+ XEUtils.arrayEach(getElementsByTagName(theadNodes[0], 'tr'), rowNode => {
691
+ XEUtils.arrayEach(getElementsByTagName(rowNode, 'th'), cellNode => {
692
+ fields.push(toExportField(tableConf, cellNode.textContent || ''));
682
693
  });
683
694
  });
684
695
  const tbodyNodes = getElementsByTagName(tableNodes[0], 'tbody');
@@ -698,7 +709,7 @@ function parseHTML(columns, content) {
698
709
  }
699
710
  return { fields, rows };
700
711
  }
701
- function parseXML(columns, content) {
712
+ function parseXML(tableConf, content) {
702
713
  const domParser = new DOMParser();
703
714
  const xmlDoc = domParser.parseFromString(content, 'application/xml');
704
715
  const sheetNodes = getElementsByTagName(xmlDoc, 'Worksheet');
@@ -709,8 +720,8 @@ function parseXML(columns, content) {
709
720
  if (tableNodes.length) {
710
721
  const rowNodes = getElementsByTagName(tableNodes[0], 'Row');
711
722
  if (rowNodes.length) {
712
- XEUtils.arrayEach(getElementsByTagName(rowNodes[0], 'Cell'), (cellNode) => {
713
- fields.push(cellNode.textContent);
723
+ XEUtils.arrayEach(getElementsByTagName(rowNodes[0], 'Cell'), cellNode => {
724
+ fields.push(toExportField(tableConf, cellNode.textContent || ''));
714
725
  });
715
726
  XEUtils.arrayEach(rowNodes, (rowNode, index) => {
716
727
  if (index) {
@@ -729,52 +740,54 @@ function parseXML(columns, content) {
729
740
  }
730
741
  return { fields, rows };
731
742
  }
732
- /**
733
- * 检查导入的列是否完整
734
- * @param {Array} fields 字段名列表
735
- * @param {Array} rows 数据列表
736
- */
737
- function checkImportData(columns, fields) {
738
- const tableFields = [];
739
- columns.forEach((column) => {
743
+ function handleImport($xeTable, content, opts) {
744
+ const internalData = $xeTable;
745
+ const { tableFullColumn, _importResolve, _importReject } = internalData;
746
+ let rest = { fields: [], rows: [] };
747
+ const tableFieldMaps = {};
748
+ const tableTitleMaps = {};
749
+ tableFullColumn.forEach((column) => {
740
750
  const field = column.field;
751
+ const title = column.getTitle();
741
752
  if (field) {
742
- tableFields.push(field);
753
+ tableFieldMaps[field] = column;
754
+ }
755
+ if (title) {
756
+ tableTitleMaps[column.getTitle()] = column;
743
757
  }
744
758
  });
745
- return fields.some(field => tableFields.indexOf(field) > -1);
746
- }
747
- function handleImport($xetable, content, opts) {
748
- const { tableFullColumn, _importResolve, _importReject } = $xetable;
749
- let rest = { fields: [], rows: [] };
759
+ const tableConf = {
760
+ fieldMaps: tableFieldMaps,
761
+ titleMaps: tableTitleMaps
762
+ };
750
763
  switch (opts.type) {
751
764
  case 'csv':
752
- rest = parseCsv(tableFullColumn, content);
765
+ rest = parseCsv(tableConf, content);
753
766
  break;
754
767
  case 'txt':
755
- rest = parseTxt(tableFullColumn, content);
768
+ rest = parseTxt(tableConf, content);
756
769
  break;
757
770
  case 'html':
758
- rest = parseHTML(tableFullColumn, content);
771
+ rest = parseHTML(tableConf, content);
759
772
  break;
760
773
  case 'xml':
761
- rest = parseXML(tableFullColumn, content);
774
+ rest = parseXML(tableConf, content);
762
775
  break;
763
776
  }
764
777
  const { fields, rows } = rest;
765
- const status = checkImportData(tableFullColumn, fields);
778
+ const status = fields.some(field => tableFieldMaps[field] || tableTitleMaps[field]);
766
779
  if (status) {
767
- $xetable.createData(rows)
780
+ $xeTable.createData(rows)
768
781
  .then((data) => {
769
782
  let loadRest;
770
783
  if (opts.mode === 'insert' || opts.mode === 'insertBottom') {
771
- loadRest = $xetable.insertAt(data, -1);
784
+ loadRest = $xeTable.insertAt(data, -1);
772
785
  }
773
786
  if (opts.mode === 'insertTop') {
774
- loadRest = $xetable.insert(data);
787
+ loadRest = $xeTable.insert(data);
775
788
  }
776
789
  else {
777
- loadRest = $xetable.reloadData(data);
790
+ loadRest = $xeTable.reloadData(data);
778
791
  }
779
792
  if (opts.message !== false) {
780
793
  // 检测弹窗模块
@@ -943,6 +956,48 @@ export function readLocalFile(options = {}) {
943
956
  fileInput.click();
944
957
  });
945
958
  }
959
+ function handleFilterColumns(exportOpts, column, columns) {
960
+ return columns.some((item) => {
961
+ if (isColumnInfo(item)) {
962
+ return column.id === item.id;
963
+ }
964
+ else if (XEUtils.isString(item)) {
965
+ return column.field === item;
966
+ }
967
+ else {
968
+ const colid = item.id || item.colId;
969
+ const type = item.type;
970
+ const field = item.field;
971
+ if (colid) {
972
+ return column.id === colid;
973
+ }
974
+ else if (field && type) {
975
+ return column.field === field && column.type === type;
976
+ }
977
+ else if (field) {
978
+ return column.field === field;
979
+ }
980
+ else if (type) {
981
+ return column.type === type;
982
+ }
983
+ }
984
+ return false;
985
+ });
986
+ }
987
+ function handleFilterFields(exportOpts, column, includeFields, excludeFields) {
988
+ if (excludeFields) {
989
+ if (XEUtils.includes(excludeFields, column.field)) {
990
+ return false;
991
+ }
992
+ }
993
+ if (includeFields) {
994
+ if (XEUtils.includes(includeFields, column.field)) {
995
+ return true;
996
+ }
997
+ return false;
998
+ }
999
+ return exportOpts.original ? column.field : defaultFilterExportColumn(column);
1000
+ }
946
1001
  function handleExportAndPrint($xeTable, options, isPrint) {
947
1002
  const props = $xeTable;
948
1003
  const reactData = $xeTable;
@@ -972,7 +1027,7 @@ function handleExportAndPrint($xeTable, options, isPrint) {
972
1027
  const modes = defOpts.modes || [];
973
1028
  const checkMethod = customOpts.checkMethod;
974
1029
  const exportColumns = collectColumn.slice(0);
975
- const { columns } = defOpts;
1030
+ const { columns, excludeFields, includeFields } = defOpts;
976
1031
  // 处理类型
977
1032
  const typeList = types.map((value) => {
978
1033
  return {
@@ -995,38 +1050,19 @@ function handleExportAndPrint($xeTable, options, isPrint) {
995
1050
  // 默认选中
996
1051
  XEUtils.eachTree(exportColumns, (column, index, items, path, parent) => {
997
1052
  const isColGroup = column.children && column.children.length;
998
- if (isColGroup || defaultFilterExportColumn(column)) {
999
- column.checked = columns
1000
- ? columns.some((item) => {
1001
- if (isColumnInfo(item)) {
1002
- return column.id === item.id;
1003
- }
1004
- else if (XEUtils.isString(item)) {
1005
- return column.field === item;
1006
- }
1007
- else {
1008
- const colid = item.id || item.colId;
1009
- const type = item.type;
1010
- const field = item.field;
1011
- if (colid) {
1012
- return column.id === colid;
1013
- }
1014
- else if (field && type) {
1015
- return column.field === field && column.type === type;
1016
- }
1017
- else if (field) {
1018
- return column.field === field;
1019
- }
1020
- else if (type) {
1021
- return column.type === type;
1022
- }
1023
- }
1024
- return false;
1025
- })
1026
- : column.visible;
1027
- column.halfChecked = false;
1028
- column.disabled = (parent && parent.disabled) || (checkMethod ? !checkMethod({ column }) : false);
1053
+ let isChecked = false;
1054
+ if (columns && columns.length) {
1055
+ isChecked = handleFilterColumns(defOpts, column, columns);
1056
+ }
1057
+ else if (excludeFields || includeFields) {
1058
+ isChecked = handleFilterFields(defOpts, column, includeFields, excludeFields);
1059
+ }
1060
+ else {
1061
+ isChecked = column.visible && (isColGroup || defaultFilterExportColumn(column));
1029
1062
  }
1063
+ column.checked = isChecked;
1064
+ column.halfChecked = false;
1065
+ column.disabled = (parent && parent.disabled) || (checkMethod ? !checkMethod({ column }) : false);
1030
1066
  });
1031
1067
  // 更新条件
1032
1068
  Object.assign(exportStore, {
@@ -1,4 +1,5 @@
1
1
  import XEUtils from 'xe-utils';
2
+ import { getRefElem } from '../../src/util';
2
3
  import { browse, hasClass, getAbsolutePos, addClass, removeClass } from '../../../ui/src/dom';
3
4
  function getTargetOffset(target, container) {
4
5
  let offsetTop = 0;
@@ -22,36 +23,66 @@ function getTargetOffset(target, container) {
22
23
  return { offsetTop, offsetLeft };
23
24
  }
24
25
  function getCheckboxRangeRows($xeTable, evnt, params, targetTrElem, trRect, offsetClientTop, moveRange) {
26
+ const props = $xeTable;
25
27
  const reactData = $xeTable;
26
28
  const internalData = $xeTable;
29
+ const { showOverflow } = props;
30
+ const { fullAllDataRowIdData, isResizeCellHeight } = internalData;
31
+ const rowOpts = $xeTable.computeRowOpts;
32
+ const cellOpts = $xeTable.computeCellOpts;
33
+ const defaultRowHeight = $xeTable.computeDefaultRowHeight;
34
+ const { row } = params;
27
35
  let countHeight = 0;
28
36
  let rangeRows = [];
29
37
  let moveSize = 0;
30
38
  const isDown = moveRange > 0;
31
- const { scrollYLoad, rowHeight } = reactData;
39
+ const { scrollYLoad } = reactData;
32
40
  const { afterFullData } = internalData;
41
+ if (isDown) {
42
+ moveSize = offsetClientTop + moveRange;
43
+ }
44
+ else {
45
+ moveSize = (trRect.height - offsetClientTop) + Math.abs(moveRange);
46
+ }
33
47
  if (scrollYLoad) {
34
- if (isDown) {
35
- moveSize = offsetClientTop + moveRange;
36
- }
37
- else {
38
- moveSize = (trRect.height - offsetClientTop) + Math.abs(moveRange);
39
- }
40
- const _rowIndex = $xeTable.getVTRowIndex(params.row);
41
- if (isDown) {
42
- rangeRows = afterFullData.slice(_rowIndex, _rowIndex + Math.ceil(moveSize / rowHeight));
48
+ const _rowIndex = $xeTable.getVTRowIndex(row);
49
+ const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height;
50
+ if (!isCustomCellHeight && showOverflow) {
51
+ if (isDown) {
52
+ rangeRows = afterFullData.slice(_rowIndex, _rowIndex + Math.ceil(moveSize / defaultRowHeight));
53
+ }
54
+ else {
55
+ rangeRows = afterFullData.slice(_rowIndex - Math.floor(moveSize / defaultRowHeight), _rowIndex + 1);
56
+ }
43
57
  }
44
58
  else {
45
- rangeRows = afterFullData.slice(_rowIndex - Math.floor(moveSize / rowHeight), _rowIndex + 1);
59
+ if (isDown) {
60
+ for (let i = _rowIndex; i < afterFullData.length; i++) {
61
+ const item = afterFullData[i];
62
+ const rowid = $xeTable.getRowid(item);
63
+ const rowRest = fullAllDataRowIdData[rowid] || {};
64
+ countHeight += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
65
+ rangeRows.push(item);
66
+ if (countHeight > moveSize) {
67
+ return rangeRows;
68
+ }
69
+ }
70
+ }
71
+ else {
72
+ for (let len = _rowIndex; len >= 0; len--) {
73
+ const item = afterFullData[len];
74
+ const rowid = $xeTable.getRowid(item);
75
+ const rowRest = fullAllDataRowIdData[rowid] || {};
76
+ countHeight += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
77
+ rangeRows.push(item);
78
+ if (countHeight > moveSize) {
79
+ return rangeRows;
80
+ }
81
+ }
82
+ }
46
83
  }
47
84
  }
48
85
  else {
49
- if (isDown) {
50
- moveSize = evnt.clientY - trRect.y;
51
- }
52
- else {
53
- moveSize = trRect.y - evnt.clientY + trRect.height;
54
- }
55
86
  const siblingProp = isDown ? 'next' : 'previous';
56
87
  while (targetTrElem && countHeight < moveSize) {
57
88
  const rowNodeRest = $xeTable.getRowNode(targetTrElem);
@@ -217,15 +248,27 @@ export default {
217
248
  },
218
249
  handleCheckboxRangeEvent(evnt, params) {
219
250
  const $xeTable = this;
251
+ const internalData = $xeTable;
252
+ const { elemStore } = internalData;
253
+ const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
254
+ const leftScrollElem = getRefElem(elemStore['left-body-scroll']);
255
+ const rightScrollElem = getRefElem(elemStore['right-body-scroll']);
220
256
  const { column, cell } = params;
221
257
  if (column.type === 'checkbox') {
222
- const { $el, elemStore } = this;
258
+ let bodyWrapperElem = bodyScrollElem;
259
+ if (leftScrollElem && column.fixed === 'left') {
260
+ bodyWrapperElem = leftScrollElem;
261
+ }
262
+ else if (rightScrollElem && column.fixed === 'right') {
263
+ bodyWrapperElem = rightScrollElem;
264
+ }
265
+ if (!bodyWrapperElem) {
266
+ return;
267
+ }
268
+ const el = $xeTable.$refs.refElem;
223
269
  const disX = evnt.clientX;
224
270
  const disY = evnt.clientY;
225
- const bodyWrapperElem = elemStore[`${column.fixed || 'main'}-body-wrapper`] || elemStore['main-body-wrapper'];
226
271
  const checkboxRangeElem = bodyWrapperElem.querySelector('.vxe-table--checkbox-range');
227
- const domMousemove = document.onmousemove;
228
- const domMouseup = document.onmouseup;
229
272
  const trElem = cell.parentNode;
230
273
  const selectRecords = this.getCheckboxRecords();
231
274
  let lastRangeRows = [];
@@ -331,7 +374,7 @@ export default {
331
374
  }
332
375
  }, 50);
333
376
  };
334
- addClass($el, 'drag--range');
377
+ addClass(el, 'drag--range');
335
378
  document.onmousemove = evnt => {
336
379
  evnt.preventDefault();
337
380
  evnt.stopPropagation();
@@ -359,10 +402,10 @@ export default {
359
402
  };
360
403
  document.onmouseup = (evnt) => {
361
404
  stopMouseScroll();
362
- removeClass($el, 'drag--range');
405
+ removeClass(el, 'drag--range');
363
406
  checkboxRangeElem.removeAttribute('style');
364
- document.onmousemove = domMousemove;
365
- document.onmouseup = domMouseup;
407
+ document.onmousemove = null;
408
+ document.onmouseup = null;
366
409
  triggerEvent('end', evnt);
367
410
  };
368
411
  triggerEvent('start', evnt);
@@ -57,6 +57,8 @@ export default {
57
57
  * 快捷菜单事件处理
58
58
  */
59
59
  handleGlobalContextmenuEvent(evnt) {
60
+ const $xeTable = this;
61
+ const internalData = $xeTable;
60
62
  const { $refs, tId, editStore, menuConfig, contextMenu, ctxMenuStore, ctxMenuOpts, mouseConfig, mouseOpts } = this;
61
63
  const { selected } = editStore;
62
64
  const layoutList = ['header', 'body', 'footer'];
@@ -65,7 +67,7 @@ export default {
65
67
  evnt.preventDefault();
66
68
  return;
67
69
  }
68
- if (this._keyCtx) {
70
+ if (internalData._keyCtx) {
69
71
  const type = 'body';
70
72
  const params = { type, $grid: this.$xegrid, $table: this, keyboard: true, columns: this.visibleColumn.slice(0), $event: evnt };
71
73
  // 如果开启单元格区域