vxe-table 3.13.5 → 3.13.7

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 (146) 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 +4 -2
  4. package/es/locale/lang/de-DE.js +4 -2
  5. package/es/locale/lang/en-US.js +4 -2
  6. package/es/locale/lang/es-ES.js +4 -2
  7. package/es/locale/lang/fr-FR.js +4 -2
  8. package/es/locale/lang/hu-HU.js +4 -2
  9. package/es/locale/lang/hy-AM.js +4 -2
  10. package/es/locale/lang/id-ID.js +4 -2
  11. package/es/locale/lang/it-IT.js +4 -2
  12. package/es/locale/lang/ja-JP.js +4 -2
  13. package/es/locale/lang/ko-KR.js +4 -2
  14. package/es/locale/lang/nb-NO.js +4 -2
  15. package/es/locale/lang/pt-BR.js +4 -2
  16. package/es/locale/lang/ru-RU.js +4 -2
  17. package/es/locale/lang/th-TH.js +4 -2
  18. package/es/locale/lang/ug-CN.js +4 -2
  19. package/es/locale/lang/uk-UA.js +4 -2
  20. package/es/locale/lang/vi-VN.js +4 -2
  21. package/es/locale/lang/zh-CHT.js +4 -2
  22. package/es/locale/lang/zh-CN.js +4 -2
  23. package/es/style.css +1 -1
  24. package/es/style.min.css +1 -1
  25. package/es/table/module/export/export-panel.js +7 -4
  26. package/es/table/module/export/mixin.js +2 -2
  27. package/es/table/module/filter/mixin.js +87 -79
  28. package/es/table/module/menu/mixin.js +2 -1
  29. package/es/table/src/methods.js +254 -220
  30. package/es/table/src/table.js +1 -1
  31. package/es/table/style.css +1 -1
  32. package/es/table/style.min.css +1 -1
  33. package/es/ui/index.js +1 -1
  34. package/es/ui/src/log.js +1 -1
  35. package/es/vxe-table/style.css +1 -1
  36. package/es/vxe-table/style.min.css +1 -1
  37. package/lib/index.css +1 -1
  38. package/lib/index.min.css +1 -1
  39. package/lib/index.umd.js +412 -379
  40. package/lib/index.umd.min.js +1 -1
  41. package/lib/locale/lang/ar-EG.js +4 -2
  42. package/lib/locale/lang/ar-EG.min.js +1 -1
  43. package/lib/locale/lang/de-DE.js +4 -2
  44. package/lib/locale/lang/de-DE.min.js +1 -1
  45. package/lib/locale/lang/en-US.js +4 -2
  46. package/lib/locale/lang/en-US.min.js +1 -1
  47. package/lib/locale/lang/en-US.umd.js +4 -2
  48. package/lib/locale/lang/es-ES.js +4 -2
  49. package/lib/locale/lang/es-ES.min.js +1 -1
  50. package/lib/locale/lang/es-ES.umd.js +4 -2
  51. package/lib/locale/lang/fr-FR.js +4 -2
  52. package/lib/locale/lang/fr-FR.min.js +1 -1
  53. package/lib/locale/lang/hu-HU.js +4 -2
  54. package/lib/locale/lang/hu-HU.min.js +1 -1
  55. package/lib/locale/lang/hu-HU.umd.js +4 -2
  56. package/lib/locale/lang/hy-AM.js +4 -2
  57. package/lib/locale/lang/hy-AM.min.js +1 -1
  58. package/lib/locale/lang/id-ID.js +4 -2
  59. package/lib/locale/lang/id-ID.min.js +1 -1
  60. package/lib/locale/lang/it-IT.js +4 -2
  61. package/lib/locale/lang/it-IT.min.js +1 -1
  62. package/lib/locale/lang/ja-JP.js +4 -2
  63. package/lib/locale/lang/ja-JP.min.js +1 -1
  64. package/lib/locale/lang/ja-JP.umd.js +4 -2
  65. package/lib/locale/lang/ko-KR.js +4 -2
  66. package/lib/locale/lang/ko-KR.min.js +1 -1
  67. package/lib/locale/lang/ko-KR.umd.js +4 -2
  68. package/lib/locale/lang/nb-NO.js +4 -2
  69. package/lib/locale/lang/nb-NO.min.js +1 -1
  70. package/lib/locale/lang/pt-BR.js +4 -2
  71. package/lib/locale/lang/pt-BR.min.js +1 -1
  72. package/lib/locale/lang/pt-BR.umd.js +4 -2
  73. package/lib/locale/lang/ru-RU.js +4 -2
  74. package/lib/locale/lang/ru-RU.min.js +1 -1
  75. package/lib/locale/lang/ru-RU.umd.js +4 -2
  76. package/lib/locale/lang/th-TH.js +4 -2
  77. package/lib/locale/lang/th-TH.min.js +1 -1
  78. package/lib/locale/lang/ug-CN.js +4 -2
  79. package/lib/locale/lang/ug-CN.min.js +1 -1
  80. package/lib/locale/lang/uk-UA.js +4 -2
  81. package/lib/locale/lang/uk-UA.min.js +1 -1
  82. package/lib/locale/lang/uk-UA.umd.js +4 -2
  83. package/lib/locale/lang/vi-VN.js +4 -2
  84. package/lib/locale/lang/vi-VN.min.js +1 -1
  85. package/lib/locale/lang/zh-CHT.js +4 -2
  86. package/lib/locale/lang/zh-CHT.min.js +1 -1
  87. package/lib/locale/lang/zh-CHT.umd.js +4 -2
  88. package/lib/locale/lang/zh-CN.js +4 -2
  89. package/lib/locale/lang/zh-CN.min.js +1 -1
  90. package/lib/locale/lang/zh-CN.umd.js +4 -2
  91. package/lib/style.css +1 -1
  92. package/lib/style.min.css +1 -1
  93. package/lib/table/module/export/export-panel.js +7 -4
  94. package/lib/table/module/export/export-panel.min.js +1 -1
  95. package/lib/table/module/export/mixin.js +2 -2
  96. package/lib/table/module/export/mixin.min.js +1 -1
  97. package/lib/table/module/filter/mixin.js +105 -99
  98. package/lib/table/module/filter/mixin.min.js +1 -1
  99. package/lib/table/module/menu/mixin.js +2 -1
  100. package/lib/table/module/menu/mixin.min.js +1 -1
  101. package/lib/table/src/methods.js +289 -268
  102. package/lib/table/src/methods.min.js +1 -1
  103. package/lib/table/src/table.js +1 -1
  104. package/lib/table/src/table.min.js +1 -1
  105. package/lib/table/style/style.css +1 -1
  106. package/lib/table/style/style.min.css +1 -1
  107. package/lib/ui/index.js +1 -1
  108. package/lib/ui/index.min.js +1 -1
  109. package/lib/ui/src/log.js +1 -1
  110. package/lib/ui/src/log.min.js +1 -1
  111. package/lib/vxe-table/style/style.css +1 -1
  112. package/lib/vxe-table/style/style.min.css +1 -1
  113. package/package.json +2 -2
  114. package/packages/locale/lang/ar-EG.ts +4 -2
  115. package/packages/locale/lang/de-DE.ts +4 -2
  116. package/packages/locale/lang/en-US.ts +4 -2
  117. package/packages/locale/lang/es-ES.ts +4 -2
  118. package/packages/locale/lang/fr-FR.ts +4 -2
  119. package/packages/locale/lang/hu-HU.ts +4 -2
  120. package/packages/locale/lang/hy-AM.ts +4 -2
  121. package/packages/locale/lang/id-ID.ts +4 -2
  122. package/packages/locale/lang/it-IT.ts +4 -2
  123. package/packages/locale/lang/ja-JP.ts +4 -2
  124. package/packages/locale/lang/ko-KR.ts +4 -2
  125. package/packages/locale/lang/nb-NO.ts +4 -2
  126. package/packages/locale/lang/pt-BR.ts +4 -2
  127. package/packages/locale/lang/ru-RU.ts +4 -2
  128. package/packages/locale/lang/th-TH.ts +4 -2
  129. package/packages/locale/lang/ug-CN.ts +4 -2
  130. package/packages/locale/lang/uk-UA.ts +4 -2
  131. package/packages/locale/lang/vi-VN.ts +4 -2
  132. package/packages/locale/lang/zh-CHT.ts +4 -2
  133. package/packages/locale/lang/zh-CN.ts +4 -2
  134. package/packages/table/module/export/export-panel.ts +7 -4
  135. package/packages/table/module/export/mixin.ts +2 -2
  136. package/packages/table/module/filter/mixin.ts +85 -77
  137. package/packages/table/module/menu/mixin.ts +2 -1
  138. package/packages/table/src/methods.ts +271 -221
  139. package/packages/table/src/table.ts +1 -1
  140. package/styles/components/table.scss +1 -1
  141. /package/es/{iconfont.1740038065641.ttf → iconfont.1740188839037.ttf} +0 -0
  142. /package/es/{iconfont.1740038065641.woff → iconfont.1740188839037.woff} +0 -0
  143. /package/es/{iconfont.1740038065641.woff2 → iconfont.1740188839037.woff2} +0 -0
  144. /package/lib/{iconfont.1740038065641.ttf → iconfont.1740188839037.ttf} +0 -0
  145. /package/lib/{iconfont.1740038065641.woff → iconfont.1740188839037.woff} +0 -0
  146. /package/lib/{iconfont.1740038065641.woff2 → iconfont.1740188839037.woff2} +0 -0
package/lib/index.umd.js CHANGED
@@ -2220,7 +2220,7 @@ function getClass(property, params) {
2220
2220
  ;// CONCATENATED MODULE: ./packages/ui/index.ts
2221
2221
 
2222
2222
 
2223
- const version = "3.13.5";
2223
+ const version = "3.13.7";
2224
2224
  core_.VxeUI.version = version;
2225
2225
  core_.VxeUI.tableVersion = version;
2226
2226
  core_.VxeUI.setConfig({
@@ -2843,7 +2843,7 @@ function isNodeElement(elem) {
2843
2843
  const {
2844
2844
  log: log_log
2845
2845
  } = core_.VxeUI;
2846
- const log_version = `table v${"3.13.5"}`;
2846
+ const log_version = `table v${"3.13.7"}`;
2847
2847
  const warnLog = log_log.create('warn', log_version);
2848
2848
  const errLog = log_log.create('error', log_version);
2849
2849
  ;// CONCATENATED MODULE: ./packages/table/src/columnInfo.ts
@@ -5124,10 +5124,11 @@ const setCustomStorageMap = (id, data) => {
5124
5124
  maps._v = version;
5125
5125
  localStorage.setItem(customStorageKey, external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toJSONString(maps));
5126
5126
  };
5127
- const getRecoverRowMaps = (_vm, keyMaps) => {
5127
+ const getRecoverRowMaps = ($xeTable, keyMaps) => {
5128
+ const internalData = $xeTable;
5128
5129
  const {
5129
5130
  fullAllDataRowIdData
5130
- } = _vm;
5131
+ } = internalData;
5131
5132
  const restKeys = {};
5132
5133
  external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(keyMaps, (row, rowid) => {
5133
5134
  if (fullAllDataRowIdData[rowid]) {
@@ -5136,10 +5137,11 @@ const getRecoverRowMaps = (_vm, keyMaps) => {
5136
5137
  });
5137
5138
  return restKeys;
5138
5139
  };
5139
- function handleReserveRow(_vm, reserveRowMap) {
5140
+ function handleReserveRow($xeTable, reserveRowMap) {
5141
+ const internalData = $xeTable;
5140
5142
  const {
5141
5143
  fullDataRowIdData
5142
- } = _vm;
5144
+ } = internalData;
5143
5145
  const reserveList = [];
5144
5146
  external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(reserveRowMap, (item, rowid) => {
5145
5147
  if (fullDataRowIdData[rowid] && reserveList.indexOf(fullDataRowIdData[rowid].row) === -1) {
@@ -5929,6 +5931,253 @@ function updateStyle($xeTable) {
5929
5931
  }
5930
5932
  return $xeTable.$nextTick();
5931
5933
  }
5934
+ function handleRadioReserveRow($xeTable, row) {
5935
+ const internalData = $xeTable;
5936
+ const radioOpts = $xeTable.computeRadioOpts;
5937
+ if (radioOpts.reserve) {
5938
+ internalData.radioReserveRow = row;
5939
+ }
5940
+ }
5941
+ function handleCheckboxReserveRow($xeTable, row, checked) {
5942
+ const internalData = $xeTable;
5943
+ const {
5944
+ checkboxReserveRowMap
5945
+ } = internalData;
5946
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5947
+ if (checkboxOpts.reserve) {
5948
+ const rowid = getRowid($xeTable, row);
5949
+ if (checked) {
5950
+ checkboxReserveRowMap[rowid] = row;
5951
+ } else if (checkboxReserveRowMap[rowid]) {
5952
+ delete checkboxReserveRowMap[rowid];
5953
+ }
5954
+ }
5955
+ }
5956
+ function handleCheckedRadioRow($xeTable, row, isForce) {
5957
+ const reactData = $xeTable;
5958
+ const radioOpts = $xeTable.computeRadioOpts;
5959
+ const {
5960
+ checkMethod
5961
+ } = radioOpts;
5962
+ if (row && (isForce || !checkMethod || checkMethod({
5963
+ row
5964
+ }))) {
5965
+ reactData.selectRadioRow = row;
5966
+ handleRadioReserveRow($xeTable, row);
5967
+ }
5968
+ return $xeTable.$nextTick();
5969
+ }
5970
+ function handleCheckedCheckboxRow($xeTable, rows, value, isForce) {
5971
+ if (rows && !external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(rows)) {
5972
+ rows = [rows];
5973
+ }
5974
+ $xeTable.handleBatchSelectRows(rows, !!value, isForce);
5975
+ $xeTable.checkSelectionStatus();
5976
+ return $xeTable.$nextTick();
5977
+ }
5978
+ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
5979
+ const props = $xeTable;
5980
+ const reactData = $xeTable;
5981
+ const internalData = $xeTable;
5982
+ const {
5983
+ treeConfig
5984
+ } = props;
5985
+ const {
5986
+ selectCheckboxMaps
5987
+ } = reactData;
5988
+ const {
5989
+ afterFullData,
5990
+ checkboxReserveRowMap
5991
+ } = internalData;
5992
+ const treeOpts = $xeTable.computeTreeOpts;
5993
+ const childrenField = treeOpts.children || treeOpts.childrenField;
5994
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5995
+ const {
5996
+ checkField,
5997
+ reserve,
5998
+ checkMethod
5999
+ } = checkboxOpts;
6000
+ const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
6001
+ const selectRowMaps = {};
6002
+ /**
6003
+ * 绑定属性方式(高性能,有污染)
6004
+ * 必须在行数据存在对应的属性,否则将不响应
6005
+ */
6006
+ if (checkField) {
6007
+ const checkValFn = row => {
6008
+ if (isForce || !checkMethod || checkMethod({
6009
+ row
6010
+ })) {
6011
+ if (checked) {
6012
+ selectRowMaps[getRowid($xeTable, row)] = row;
6013
+ }
6014
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(row, checkField, checked);
6015
+ }
6016
+ if (treeConfig && indeterminateField) {
6017
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(row, indeterminateField, false);
6018
+ }
6019
+ };
6020
+ // 如果存在选中方法
6021
+ // 如果方法成立,则更新值,否则忽略该数据
6022
+ if (treeConfig) {
6023
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterFullData, checkValFn, {
6024
+ children: childrenField
6025
+ });
6026
+ } else {
6027
+ afterFullData.forEach(checkValFn);
6028
+ }
6029
+ } else {
6030
+ /**
6031
+ * 默认方式(低性能,无污染)
6032
+ * 无需任何属性,直接绑定
6033
+ */
6034
+ if (treeConfig) {
6035
+ if (checked) {
6036
+ /**
6037
+ * 如果是树勾选
6038
+ * 如果方法成立,则添加到临时集合中
6039
+ */
6040
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterFullData, row => {
6041
+ if (isForce || !checkMethod || checkMethod({
6042
+ row
6043
+ })) {
6044
+ selectRowMaps[getRowid($xeTable, row)] = row;
6045
+ }
6046
+ }, {
6047
+ children: childrenField
6048
+ });
6049
+ } else {
6050
+ /**
6051
+ * 如果是树取消
6052
+ * 如果方法成立,则不添加到临时集合中
6053
+ */
6054
+ if (!isForce && checkMethod) {
6055
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterFullData, row => {
6056
+ const rowid = getRowid($xeTable, row);
6057
+ if (checkMethod({
6058
+ row
6059
+ }) ? 0 : selectCheckboxMaps[rowid]) {
6060
+ selectRowMaps[rowid] = row;
6061
+ }
6062
+ }, {
6063
+ children: childrenField
6064
+ });
6065
+ }
6066
+ }
6067
+ } else {
6068
+ if (checked) {
6069
+ /**
6070
+ * 如果是行勾选
6071
+ * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
6072
+ * 如果不存在选中方法,则添加所有数据到临时集合中
6073
+ */
6074
+ if (!isForce && checkMethod) {
6075
+ afterFullData.forEach(row => {
6076
+ const rowid = getRowid($xeTable, row);
6077
+ if (selectCheckboxMaps[rowid] || checkMethod({
6078
+ row
6079
+ })) {
6080
+ selectRowMaps[rowid] = row;
6081
+ }
6082
+ });
6083
+ } else {
6084
+ afterFullData.forEach(row => {
6085
+ selectRowMaps[getRowid($xeTable, row)] = row;
6086
+ });
6087
+ }
6088
+ } else {
6089
+ /**
6090
+ * 如果是行取消
6091
+ * 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
6092
+ * 如果不存在选中方法,无需处理,临时集合默认为空
6093
+ */
6094
+ if (!isForce && checkMethod) {
6095
+ afterFullData.forEach(row => {
6096
+ const rowid = getRowid($xeTable, row);
6097
+ if (checkMethod({
6098
+ row
6099
+ }) ? 0 : selectCheckboxMaps[rowid]) {
6100
+ selectRowMaps[rowid] = row;
6101
+ }
6102
+ });
6103
+ }
6104
+ }
6105
+ }
6106
+ }
6107
+ if (reserve) {
6108
+ if (checked) {
6109
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(selectRowMaps, (row, rowid) => {
6110
+ checkboxReserveRowMap[rowid] = row;
6111
+ });
6112
+ } else {
6113
+ afterFullData.forEach(row => handleCheckboxReserveRow($xeTable, row, false));
6114
+ }
6115
+ }
6116
+ reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
6117
+ reactData.isAllSelected = checked;
6118
+ reactData.isIndeterminate = false;
6119
+ reactData.treeIndeterminateMaps = {};
6120
+ internalData.treeIndeterminateRowMaps = {};
6121
+ $xeTable.checkSelectionStatus();
6122
+ return $xeTable.$nextTick();
6123
+ }
6124
+ // 还原展开、选中等相关状态
6125
+ function handleReserveStatus($xeTable) {
6126
+ const props = $xeTable;
6127
+ const reactData = $xeTable;
6128
+ const internalData = $xeTable;
6129
+ const {
6130
+ treeConfig
6131
+ } = props;
6132
+ const {
6133
+ expandColumn,
6134
+ currentRow,
6135
+ selectCheckboxMaps,
6136
+ selectRadioRow,
6137
+ rowExpandedMaps,
6138
+ treeExpandedMaps
6139
+ } = reactData;
6140
+ const {
6141
+ fullDataRowIdData,
6142
+ fullAllDataRowIdData,
6143
+ radioReserveRow
6144
+ } = internalData;
6145
+ const expandOpts = $xeTable.computeExpandOpts;
6146
+ const treeOpts = $xeTable.computeTreeOpts;
6147
+ const radioOpts = $xeTable.computeRadioOpts;
6148
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6149
+ // 单选框
6150
+ if (selectRadioRow && !fullAllDataRowIdData[getRowid($xeTable, selectRadioRow)]) {
6151
+ reactData.selectRadioRow = null; // 刷新单选行状态
6152
+ }
6153
+ // 还原保留选中状态
6154
+ if (radioOpts.reserve && radioReserveRow) {
6155
+ const rowid = getRowid($xeTable, radioReserveRow);
6156
+ if (fullDataRowIdData[rowid]) {
6157
+ handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true);
6158
+ }
6159
+ }
6160
+ // 复选框
6161
+ reactData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
6162
+ // 还原保留选中状态
6163
+ if (checkboxOpts.reserve) {
6164
+ handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
6165
+ }
6166
+ if (currentRow && !fullAllDataRowIdData[getRowid($xeTable, currentRow)]) {
6167
+ reactData.currentRow = null; // 刷新当前行状态
6168
+ }
6169
+ // 行展开
6170
+ reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
6171
+ // 还原保留状态
6172
+ if (expandColumn && expandOpts.reserve) {
6173
+ $xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
6174
+ }
6175
+ // 树展开
6176
+ reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
6177
+ if (treeConfig && treeOpts.reserve) {
6178
+ $xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
6179
+ }
6180
+ }
5932
6181
  function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
5933
6182
  const reactData = $xeTable;
5934
6183
  const {
@@ -7572,7 +7821,7 @@ const Methods = {
7572
7821
  }
7573
7822
  }
7574
7823
  }
7575
- this.handleReserveStatus();
7824
+ handleReserveStatus($xeTable);
7576
7825
  this.checkSelectionStatus();
7577
7826
  return new Promise(resolve => {
7578
7827
  this.$nextTick().then(() => this.recalculate()).then(() => {
@@ -10076,16 +10325,16 @@ const Methods = {
10076
10325
  actived
10077
10326
  } = editStore;
10078
10327
  const {
10079
- refTableMenu,
10080
- filterWrapper,
10081
10328
  customWrapper,
10082
10329
  refValidTooltip
10083
10330
  } = $refs;
10331
+ const tableFilter = $refs.refTableFilter;
10332
+ const tableMenu = $refs.refTableMenu;
10084
10333
  // 筛选
10085
- if (filterWrapper) {
10334
+ if (tableFilter) {
10086
10335
  if (getEventTargetNode(evnt, $el, 'vxe-cell--filter').flag) {
10087
10336
  // 如果点击了筛选按钮
10088
- } else if (getEventTargetNode(evnt, filterWrapper.$el).flag) {
10337
+ } else if (getEventTargetNode(evnt, tableFilter.$el).flag) {
10089
10338
  // 如果点击筛选容器
10090
10339
  } else {
10091
10340
  if (!getEventTargetNode(evnt, document.body, 'vxe-table--ignore-clear').flag) {
@@ -10159,7 +10408,7 @@ const Methods = {
10159
10408
  }
10160
10409
  }
10161
10410
  } else if (mouseConfig) {
10162
- if (!getEventTargetNode(evnt, $el).flag && !($xegrid && getEventTargetNode(evnt, $xegrid.$el).flag) && !(refTableMenu && getEventTargetNode(evnt, refTableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
10411
+ if (!getEventTargetNode(evnt, $el).flag && !($xegrid && getEventTargetNode(evnt, $xegrid.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
10163
10412
  if (this.clearSelected) {
10164
10413
  this.clearSelected();
10165
10414
  }
@@ -10180,7 +10429,7 @@ const Methods = {
10180
10429
  }
10181
10430
  }
10182
10431
  // 如果配置了快捷菜单且,点击了其他地方则关闭
10183
- if (ctxMenuStore.visible && refTableMenu && !getEventTargetNode(evnt, refTableMenu.$el).flag) {
10432
+ if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
10184
10433
  this.closeMenu();
10185
10434
  }
10186
10435
  const isActivated = getEventTargetNode(evnt, ($xegrid || this).$el).flag;
@@ -10846,6 +11095,7 @@ const Methods = {
10846
11095
  * 处理默认勾选
10847
11096
  */
10848
11097
  handleDefaultSelectionChecked() {
11098
+ const $xeTable = this;
10849
11099
  const {
10850
11100
  fullDataRowIdData,
10851
11101
  checkboxOpts
@@ -10855,7 +11105,7 @@ const Methods = {
10855
11105
  checkRowKeys
10856
11106
  } = checkboxOpts;
10857
11107
  if (checkAll) {
10858
- this.handleCheckedAllCheckboxRow(true, true);
11108
+ handleCheckedAllCheckboxRow($xeTable, true, true);
10859
11109
  } else if (checkRowKeys) {
10860
11110
  const defSelection = [];
10861
11111
  checkRowKeys.forEach(rowid => {
@@ -10863,17 +11113,12 @@ const Methods = {
10863
11113
  defSelection.push(fullDataRowIdData[rowid].row);
10864
11114
  }
10865
11115
  });
10866
- this.handleCheckedCheckboxRow(defSelection, true, true);
11116
+ handleCheckedCheckboxRow($xeTable, defSelection, true, true);
10867
11117
  }
10868
11118
  },
10869
11119
  handleCheckedCheckboxRow(rows, value, isForce) {
10870
11120
  const $xeTable = this;
10871
- if (rows && !external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(rows)) {
10872
- rows = [rows];
10873
- }
10874
- $xeTable.handleBatchSelectRows(rows, !!value, isForce);
10875
- $xeTable.checkSelectionStatus();
10876
- return this.$nextTick();
11121
+ return handleCheckedCheckboxRow($xeTable, rows, value, isForce);
10877
11122
  },
10878
11123
  /**
10879
11124
  * 用于多选行,设置行为选中状态,第二个参数为选中与否
@@ -10885,7 +11130,7 @@ const Methods = {
10885
11130
  if (rows && !external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(rows)) {
10886
11131
  rows = [rows];
10887
11132
  }
10888
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true);
11133
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true);
10889
11134
  },
10890
11135
  setCheckboxRowKey(keys, checked) {
10891
11136
  const $xeTable = this;
@@ -10903,7 +11148,7 @@ const Methods = {
10903
11148
  rows.push(rowRest.row);
10904
11149
  }
10905
11150
  });
10906
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true);
11151
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true);
10907
11152
  },
10908
11153
  isCheckedByCheckboxRow(row) {
10909
11154
  const $xeTable = this;
@@ -10999,7 +11244,7 @@ const Methods = {
10999
11244
  if (indeterminateField) {
11000
11245
  external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(row, indeterminateField, false);
11001
11246
  }
11002
- $xeTable.handleCheckboxReserveRow(row, checked);
11247
+ handleCheckboxReserveRow($xeTable, row, checked);
11003
11248
  }
11004
11249
  }, {
11005
11250
  children: transform ? mapChildrenField : childrenField
@@ -11013,7 +11258,7 @@ const Methods = {
11013
11258
  row
11014
11259
  })) {
11015
11260
  external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(row, checkField, checked);
11016
- $xeTable.handleCheckboxReserveRow(row, checked);
11261
+ handleCheckboxReserveRow($xeTable, row, checked);
11017
11262
  }
11018
11263
  });
11019
11264
  }
@@ -11035,7 +11280,7 @@ const Methods = {
11035
11280
  delete selectRowMaps[rowid];
11036
11281
  }
11037
11282
  }
11038
- $xeTable.handleCheckboxReserveRow(row, checked);
11283
+ handleCheckboxReserveRow($xeTable, row, checked);
11039
11284
  }
11040
11285
  }, {
11041
11286
  children: transform ? mapChildrenField : childrenField
@@ -11058,7 +11303,7 @@ const Methods = {
11058
11303
  delete selectRowMaps[rowid];
11059
11304
  }
11060
11305
  }
11061
- $xeTable.handleCheckboxReserveRow(row, checked);
11306
+ handleCheckboxReserveRow($xeTable, row, checked);
11062
11307
  }
11063
11308
  });
11064
11309
  reactData.selectCheckboxMaps = selectRowMaps;
@@ -11102,6 +11347,7 @@ const Methods = {
11102
11347
  }
11103
11348
  },
11104
11349
  triggerCheckRowEvent(evnt, params, checked) {
11350
+ const $xeTable = this;
11105
11351
  const {
11106
11352
  checkboxOpts,
11107
11353
  afterFullData
@@ -11126,7 +11372,7 @@ const Methods = {
11126
11372
  if (_rowIndex !== _firstRowIndex) {
11127
11373
  this.setAllCheckboxRow(false);
11128
11374
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
11129
- this.handleCheckedCheckboxRow(rangeRows, true, false);
11375
+ handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
11130
11376
  this.emitEvent('checkbox-range-select', Object.assign({
11131
11377
  rangeRecords: rangeRows
11132
11378
  }, params), evnt);
@@ -11164,168 +11410,13 @@ const Methods = {
11164
11410
  $xeTable.checkSelectionStatus();
11165
11411
  return $xeTable.$nextTick();
11166
11412
  },
11167
- handleCheckedAllCheckboxRow(checked, isForce) {
11168
- const $xeTable = this;
11169
- const reactData = $xeTable;
11170
- const {
11171
- afterFullData,
11172
- treeConfig,
11173
- treeOpts,
11174
- selectCheckboxMaps,
11175
- checkboxReserveRowMap,
11176
- checkboxOpts,
11177
- afterFullRowMaps
11178
- } = this;
11179
- const {
11180
- checkField,
11181
- reserve,
11182
- checkStrictly,
11183
- checkMethod
11184
- } = checkboxOpts;
11185
- const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
11186
- const childrenField = treeOpts.children || treeOpts.childrenField;
11187
- const selectRowMaps = {};
11188
- // 疑惑!
11189
- if (!treeConfig) {
11190
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(selectCheckboxMaps, (row, rowid) => {
11191
- if (!afterFullRowMaps[rowid]) {
11192
- selectRowMaps[rowid] = row;
11193
- }
11194
- });
11195
- }
11196
- // 疑惑!
11197
- if (checkStrictly) {
11198
- this.isAllSelected = checked;
11199
- } else {
11200
- /**
11201
- * 绑定属性方式(高性能,有污染)
11202
- * 必须在行数据存在对应的属性,否则将不响应
11203
- */
11204
- if (checkField) {
11205
- const checkValFn = row => {
11206
- if (isForce || !checkMethod || checkMethod({
11207
- row
11208
- })) {
11209
- if (checked) {
11210
- selectRowMaps[getRowid(this, row)] = row;
11211
- }
11212
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(row, checkField, checked);
11213
- }
11214
- if (treeConfig && indeterminateField) {
11215
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(row, indeterminateField, false);
11216
- }
11217
- };
11218
- // 如果存在选中方法
11219
- // 如果方法成立,则更新值,否则忽略该数据
11220
- if (treeConfig) {
11221
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterFullData, checkValFn, {
11222
- children: childrenField
11223
- });
11224
- } else {
11225
- afterFullData.forEach(checkValFn);
11226
- }
11227
- } else {
11228
- /**
11229
- * 默认方式(低性能,无污染)
11230
- * 无需任何属性,直接绑定
11231
- */
11232
- if (treeConfig) {
11233
- if (checked) {
11234
- /**
11235
- * 如果是树勾选
11236
- * 如果方法成立,则添加到临时集合中
11237
- */
11238
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterFullData, row => {
11239
- if (isForce || !checkMethod || checkMethod({
11240
- row
11241
- })) {
11242
- selectRowMaps[getRowid(this, row)] = row;
11243
- }
11244
- }, {
11245
- children: childrenField
11246
- });
11247
- } else {
11248
- /**
11249
- * 如果是树取消
11250
- * 如果方法成立,则不添加到临时集合中
11251
- */
11252
- if (!isForce && checkMethod) {
11253
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterFullData, row => {
11254
- const rowid = getRowid(this, row);
11255
- if (checkMethod({
11256
- row
11257
- }) ? 0 : selectCheckboxMaps[rowid]) {
11258
- selectRowMaps[rowid] = row;
11259
- }
11260
- }, {
11261
- children: childrenField
11262
- });
11263
- }
11264
- }
11265
- } else {
11266
- if (checked) {
11267
- /**
11268
- * 如果是行勾选
11269
- * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
11270
- * 如果不存在选中方法,则添加所有数据到临时集合中
11271
- */
11272
- if (!isForce && checkMethod) {
11273
- afterFullData.forEach(row => {
11274
- const rowid = getRowid(this, row);
11275
- if (selectCheckboxMaps[rowid] || checkMethod({
11276
- row
11277
- })) {
11278
- selectRowMaps[rowid] = row;
11279
- }
11280
- });
11281
- } else {
11282
- afterFullData.forEach(row => {
11283
- selectRowMaps[getRowid(this, row)] = row;
11284
- });
11285
- }
11286
- } else {
11287
- /**
11288
- * 如果是行取消
11289
- * 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
11290
- * 如果不存在选中方法,无需处理,临时集合默认为空
11291
- */
11292
- if (!isForce && checkMethod) {
11293
- afterFullData.forEach(row => {
11294
- const rowid = getRowid(this, row);
11295
- if (checkMethod({
11296
- row
11297
- }) ? 0 : selectCheckboxMaps[rowid]) {
11298
- selectRowMaps[rowid] = row;
11299
- }
11300
- });
11301
- }
11302
- }
11303
- }
11304
- }
11305
- if (reserve) {
11306
- if (checked) {
11307
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(selectRowMaps, (row, rowid) => {
11308
- checkboxReserveRowMap[rowid] = row;
11309
- });
11310
- } else {
11311
- afterFullData.forEach(row => this.handleCheckboxReserveRow(row, false));
11312
- }
11313
- }
11314
- this.selectCheckboxMaps = checkField ? {} : selectRowMaps;
11315
- }
11316
- reactData.isAllSelected = checked;
11317
- reactData.isIndeterminate = false;
11318
- this.treeIndeterminateMaps = {};
11319
- this.treeIndeterminateRowMaps = {};
11320
- this.checkSelectionStatus();
11321
- return this.$nextTick();
11322
- },
11323
11413
  /**
11324
11414
  * 用于多选行,设置所有行的选中状态
11325
11415
  * @param {Boolean} value 是否选中
11326
11416
  */
11327
11417
  setAllCheckboxRow(value) {
11328
- return this.handleCheckedAllCheckboxRow(value, true);
11418
+ const $xeTable = this;
11419
+ return handleCheckedAllCheckboxRow($xeTable, value, true);
11329
11420
  },
11330
11421
  updateCheckboxStatus() {
11331
11422
  const $xeTable = this;
@@ -11504,57 +11595,6 @@ const Methods = {
11504
11595
  $xeTable.updateCheckboxStatus();
11505
11596
  $xeTable.updateAllCheckboxStatus();
11506
11597
  },
11507
- // 还原展开、选中等相关状态
11508
- handleReserveStatus() {
11509
- const $xeTable = this;
11510
- const {
11511
- expandColumn,
11512
- treeOpts,
11513
- treeConfig,
11514
- fullDataRowIdData,
11515
- fullAllDataRowIdData,
11516
- currentRow,
11517
- selectRadioRow,
11518
- radioReserveRow,
11519
- radioOpts,
11520
- checkboxOpts,
11521
- selectCheckboxMaps,
11522
- rowExpandedMaps,
11523
- treeExpandedMaps,
11524
- expandOpts
11525
- } = this;
11526
- // 单选框
11527
- if (selectRadioRow && !fullAllDataRowIdData[getRowid($xeTable, selectRadioRow)]) {
11528
- this.selectRadioRow = null; // 刷新单选行状态
11529
- }
11530
- // 还原保留选中状态
11531
- if (radioOpts.reserve && radioReserveRow) {
11532
- const rowid = getRowid(this, radioReserveRow);
11533
- if (fullDataRowIdData[rowid]) {
11534
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true);
11535
- }
11536
- }
11537
- // 复选框
11538
- this.selectCheckboxMaps = getRecoverRowMaps(this, selectCheckboxMaps); // 刷新多选行状态
11539
- // 还原保留选中状态
11540
- if (checkboxOpts.reserve) {
11541
- this.handleCheckedCheckboxRow(handleReserveRow(this, this.checkboxReserveRowMap), true, true);
11542
- }
11543
- if (currentRow && !this.fullAllDataRowIdData[getRowid($xeTable, currentRow)]) {
11544
- this.currentRow = null; // 刷新当前行状态
11545
- }
11546
- // 行展开
11547
- this.rowExpandedMaps = expandColumn ? getRecoverRowMaps(this, rowExpandedMaps) : []; // 刷新行展开状态
11548
- // 还原保留状态
11549
- if (expandColumn && expandOpts.reserve) {
11550
- this.setRowExpand(handleReserveRow(this, this.rowExpandedReserveRowMap), true);
11551
- }
11552
- // 树展开
11553
- this.treeExpandedMaps = treeConfig ? getRecoverRowMaps(this, treeExpandedMaps) : []; // 刷新树展开状态
11554
- if (treeConfig && treeOpts.reserve) {
11555
- this.setTreeExpand(handleReserveRow(this, this.treeExpandedReserveRowMap), true);
11556
- }
11557
- },
11558
11598
  /**
11559
11599
  * 获取单选框保留选中的行
11560
11600
  */
@@ -11596,14 +11636,6 @@ const Methods = {
11596
11636
  this.radioReserveRow = null;
11597
11637
  return this.$nextTick();
11598
11638
  },
11599
- handleRadioReserveRow(row) {
11600
- const {
11601
- radioOpts
11602
- } = this;
11603
- if (radioOpts.reserve) {
11604
- this.radioReserveRow = row;
11605
- }
11606
- },
11607
11639
  /**
11608
11640
  * 获取复选框保留选中的行
11609
11641
  */
@@ -11666,12 +11698,13 @@ const Methods = {
11666
11698
  }
11667
11699
  },
11668
11700
  handleCheckAllEvent(evnt, value) {
11669
- this.handleCheckedAllCheckboxRow(value);
11701
+ const $xeTable = this;
11702
+ handleCheckedAllCheckboxRow($xeTable, value);
11670
11703
  if (evnt) {
11671
- this.emitEvent('checkbox-all', {
11672
- records: this.getCheckboxRecords(),
11673
- reserves: this.getCheckboxReserveRecords(),
11674
- indeterminates: this.getCheckboxIndeterminateRecords(),
11704
+ $xeTable.dispatchEvent('checkbox-all', {
11705
+ records: $xeTable.getCheckboxRecords(),
11706
+ reserves: $xeTable.getCheckboxReserveRecords(),
11707
+ indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
11675
11708
  checked: value
11676
11709
  }, evnt);
11677
11710
  }
@@ -11680,6 +11713,7 @@ const Methods = {
11680
11713
  * 多选,选中所有事件
11681
11714
  */
11682
11715
  triggerCheckAllEvent(evnt, value) {
11716
+ const $xeTable = this;
11683
11717
  const {
11684
11718
  checkboxOpts
11685
11719
  } = this;
@@ -11692,7 +11726,7 @@ const Methods = {
11692
11726
  if (evnt) {
11693
11727
  evnt.stopPropagation();
11694
11728
  }
11695
- this.handleCheckAllEvent(evnt, value);
11729
+ $xeTable.handleCheckAllEvent(evnt, value);
11696
11730
  },
11697
11731
  /**
11698
11732
  * 多选,切换所有行的选中状态
@@ -11746,6 +11780,7 @@ const Methods = {
11746
11780
  * 处理单选框默认勾选
11747
11781
  */
11748
11782
  handleDefaultRadioChecked() {
11783
+ const $xeTable = this;
11749
11784
  const {
11750
11785
  radioOpts,
11751
11786
  fullDataRowIdData
@@ -11756,7 +11791,7 @@ const Methods = {
11756
11791
  } = radioOpts;
11757
11792
  if (rowid) {
11758
11793
  if (fullDataRowIdData[rowid]) {
11759
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true);
11794
+ handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true);
11760
11795
  }
11761
11796
  if (reserve) {
11762
11797
  const rowkey = getRowkey(this);
@@ -11770,6 +11805,7 @@ const Methods = {
11770
11805
  * 单选,行选中事件
11771
11806
  */
11772
11807
  triggerRadioRowEvent(evnt, params) {
11808
+ const $xeTable = this;
11773
11809
  const {
11774
11810
  selectRadioRow: oldValue,
11775
11811
  radioOpts
@@ -11787,7 +11823,7 @@ const Methods = {
11787
11823
  let newValue = row;
11788
11824
  let isChange = oldValue !== newValue;
11789
11825
  if (isChange) {
11790
- this.handleCheckedRadioRow(newValue);
11826
+ handleCheckedRadioRow($xeTable, newValue);
11791
11827
  } else if (!radioOpts.strict) {
11792
11828
  isChange = oldValue === newValue;
11793
11829
  if (isChange) {
@@ -11886,28 +11922,13 @@ const Methods = {
11886
11922
  }
11887
11923
  return false;
11888
11924
  },
11889
- handleCheckedRadioRow(row, isForce) {
11890
- const {
11891
- radioOpts
11892
- } = this;
11893
- const {
11894
- checkMethod
11895
- } = radioOpts;
11896
- if (row && (isForce || !checkMethod || checkMethod({
11897
- row
11898
- }))) {
11899
- this.selectRadioRow = row;
11900
- this.handleRadioReserveRow(row);
11901
- }
11902
- return this.$nextTick();
11903
- },
11904
11925
  /**
11905
11926
  * 用于单选行,设置某一行为选中状态
11906
11927
  * @param {Row} row 行对象
11907
11928
  */
11908
11929
  setRadioRow(row) {
11909
11930
  const $xeTable = this;
11910
- return $xeTable.handleCheckedRadioRow(row, true);
11931
+ return handleCheckedRadioRow($xeTable, row, true);
11911
11932
  },
11912
11933
  /**
11913
11934
  * 用于单选行,设置某一行为选中状态
@@ -11921,7 +11942,7 @@ const Methods = {
11921
11942
  } = internalData;
11922
11943
  const rowRest = fullAllDataRowIdData[rowid];
11923
11944
  if (rowRest) {
11924
- return $xeTable.handleCheckedRadioRow(rowRest.row, true);
11945
+ return handleCheckedRadioRow($xeTable, rowRest.row, true);
11925
11946
  }
11926
11947
  return $xeTable.$nextTick();
11927
11948
  },
@@ -14019,7 +14040,7 @@ const Methods = {
14019
14040
  }
14020
14041
  // 如果当前节点已选中,则展开后子节点也被选中
14021
14042
  if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
14022
- this.handleCheckedCheckboxRow(childRows, true);
14043
+ handleCheckedCheckboxRow($xeTable, childRows, true);
14023
14044
  }
14024
14045
  return this.$nextTick().then(() => {
14025
14046
  if (transform) {
@@ -19357,6 +19378,7 @@ const {
19357
19378
  columns,
19358
19379
  params: defaultOptions.params
19359
19380
  };
19381
+ const hasEmptyData = defaultOptions.mode === 'empty';
19360
19382
  return h('div', {
19361
19383
  class: 'vxe-table-export--panel'
19362
19384
  }, [topSlot ? h('div', {
@@ -19443,7 +19465,8 @@ const {
19443
19465
  class: 'vxe-table-export--panel-option-row'
19444
19466
  }, [h('vxe-checkbox', {
19445
19467
  props: {
19446
- value: isHeader,
19468
+ value: hasEmptyData || isHeader,
19469
+ disabled: hasEmptyData,
19447
19470
  title: export_panel_getI18n('vxe.export.expHeaderTitle'),
19448
19471
  content: export_panel_getI18n('vxe.export.expOptHeader')
19449
19472
  },
@@ -19466,7 +19489,8 @@ const {
19466
19489
  }
19467
19490
  }), h('vxe-checkbox', {
19468
19491
  props: {
19469
- value: defaultOptions.original,
19492
+ value: hasEmptyData ? false : defaultOptions.original,
19493
+ disabled: hasEmptyData,
19470
19494
  title: export_panel_getI18n('vxe.export.expOriginalTitle'),
19471
19495
  content: export_panel_getI18n('vxe.export.expOptOriginal')
19472
19496
  },
@@ -19494,7 +19518,7 @@ const {
19494
19518
  }), h('vxe-checkbox', {
19495
19519
  props: {
19496
19520
  value: hasMerge && supportMerge && checkedAll ? defaultOptions.isMerge : false,
19497
- disabled: !hasMerge || !supportMerge || !checkedAll,
19521
+ disabled: hasEmptyData || !hasMerge || !supportMerge || !checkedAll,
19498
19522
  title: export_panel_getI18n('vxe.export.expMergeTitle'),
19499
19523
  content: export_panel_getI18n('vxe.export.expOptMerge')
19500
19524
  },
@@ -19518,7 +19542,7 @@ const {
19518
19542
  }), h('vxe-checkbox', {
19519
19543
  props: {
19520
19544
  value: hasTree ? defaultOptions.isAllExpand : false,
19521
- disabled: !hasTree,
19545
+ disabled: hasEmptyData || !hasTree,
19522
19546
  title: export_panel_getI18n('vxe.export.expAllExpandTitle'),
19523
19547
  content: export_panel_getI18n('vxe.export.expOptAllExpand')
19524
19548
  },
@@ -19846,6 +19870,9 @@ const {
19846
19870
  * @param {Object} params 参数
19847
19871
  */
19848
19872
  triggerFilterEvent(evnt, column, params) {
19873
+ const $xeTable = this;
19874
+ const reactData = $xeTable;
19875
+ const internalData = $xeTable;
19849
19876
  const {
19850
19877
  filterStore
19851
19878
  } = this;
@@ -19853,112 +19880,115 @@ const {
19853
19880
  filterStore.visible = false;
19854
19881
  } else {
19855
19882
  const {
19856
- target: targetElem,
19857
- pageX
19858
- } = evnt;
19859
- const {
19860
- filters,
19861
- filterMultiple,
19862
- filterRender
19863
- } = column;
19864
- const compConf = isEnableConf(filterRender) ? mixin_renderer.get(filterRender.name) : null;
19865
- const filterRecoverMethod = column.filterRecoverMethod || (compConf ? compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod : null);
19883
+ initStore,
19884
+ filterStore
19885
+ } = reactData;
19866
19886
  const {
19867
- visibleWidth
19868
- } = getDomNode();
19869
- Object.assign(filterStore, {
19870
- args: params,
19871
- multiple: filterMultiple,
19872
- options: filters,
19873
- column,
19874
- style: null,
19875
- visible: true
19876
- });
19877
- // 复原状态
19878
- filterStore.options.forEach(option => {
19887
+ elemStore
19888
+ } = internalData;
19889
+ if (filterStore.column === column && filterStore.visible) {
19890
+ filterStore.visible = false;
19891
+ } else {
19879
19892
  const {
19880
- _checked,
19881
- checked
19882
- } = option;
19883
- option._checked = checked;
19884
- if (!checked && _checked !== checked) {
19885
- if (filterRecoverMethod) {
19886
- filterRecoverMethod({
19887
- option,
19888
- column,
19889
- $table: this
19890
- });
19891
- }
19892
- }
19893
- });
19894
- this.checkFilterOptions();
19895
- this.initStore.filter = true;
19896
- this.$nextTick(() => {
19893
+ clientY,
19894
+ pageX
19895
+ } = evnt;
19896
+ const el = $xeTable.$refs.refElem;
19897
+ const tableRect = el.getBoundingClientRect();
19898
+ const targetElem = evnt.target;
19897
19899
  const {
19898
- $refs
19899
- } = this;
19900
+ visibleWidth
19901
+ } = getDomNode();
19900
19902
  const {
19901
- refTableHeader,
19902
- refTableBody,
19903
- filterWrapper
19904
- } = $refs;
19905
- const bodyElem = refTableBody.$el;
19906
- const headerElem = refTableHeader ? refTableHeader.$el : null;
19907
- if (!bodyElem) {
19908
- return;
19909
- }
19910
- const filterWrapperElem = filterWrapper.$el;
19911
- if (!filterWrapperElem) {
19912
- return;
19913
- }
19914
- const filterWidth = filterWrapperElem.offsetWidth;
19915
- const filterHeight = filterWrapperElem.offsetHeight;
19916
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
19917
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
19918
- const centerWidth = filterWidth / 2;
19919
- const minMargin = 10;
19920
- const maxLeft = bodyElem.clientWidth - filterWidth - minMargin;
19921
- let left, right;
19922
- const style = {
19923
- top: `${targetElem.offsetTop + targetElem.offsetParent.offsetTop + targetElem.offsetHeight}px`
19924
- };
19925
- // 判断面板不能大于表格高度
19926
- let maxHeight = null;
19927
- const bodyHeight = bodyElem.clientHeight - (headerElem ? headerElem.clientHeight / 2 : 0);
19928
- if (filterHeight >= bodyHeight) {
19929
- maxHeight = Math.max(40, bodyHeight - (filterFootElem ? filterFootElem.offsetHeight : 0) - (filterHeadElem ? filterHeadElem.offsetHeight : 0));
19930
- }
19931
- if (column.fixed === 'left') {
19932
- left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth;
19933
- } else if (column.fixed === 'right') {
19934
- right = targetElem.offsetParent.offsetWidth - targetElem.offsetLeft + (targetElem.offsetParent.offsetParent.offsetWidth - targetElem.offsetParent.offsetLeft) - column.renderWidth - centerWidth;
19935
- } else {
19936
- left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth - bodyElem.scrollLeft;
19937
- }
19938
- if (left) {
19939
- const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19940
- if (overflowWidth > 0) {
19941
- left -= overflowWidth;
19903
+ filters,
19904
+ filterMultiple,
19905
+ filterRender
19906
+ } = column;
19907
+ const compConf = isEnableConf(filterRender) ? mixin_renderer.get(filterRender.name) : null;
19908
+ const frMethod = column.filterRecoverMethod || (compConf ? compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod : null);
19909
+ internalData._currFilterParams = params;
19910
+ Object.assign(filterStore, {
19911
+ multiple: filterMultiple,
19912
+ options: filters,
19913
+ column,
19914
+ style: null
19915
+ });
19916
+ // 复原状态
19917
+ filterStore.options.forEach(option => {
19918
+ const {
19919
+ _checked,
19920
+ checked
19921
+ } = option;
19922
+ option._checked = checked;
19923
+ if (!checked && _checked !== checked) {
19924
+ if (frMethod) {
19925
+ frMethod({
19926
+ option,
19927
+ column,
19928
+ $table: $xeTable
19929
+ });
19930
+ }
19942
19931
  }
19943
- style.left = `${Math.min(maxLeft, Math.max(minMargin, left))}px`;
19944
- } else if (right) {
19945
- const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19946
- if (overflowWidth > 0) {
19947
- right += overflowWidth;
19932
+ });
19933
+ this.checkFilterOptions();
19934
+ filterStore.visible = true;
19935
+ initStore.filter = true;
19936
+ $xeTable.$nextTick(() => {
19937
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
19938
+ if (!headerScrollElem) {
19939
+ return;
19948
19940
  }
19949
- style.right = `${Math.max(minMargin, right)}px`;
19950
- }
19951
- filterStore.style = style;
19952
- filterStore.maxHeight = maxHeight;
19953
- });
19941
+ const tableFilter = $xeTable.$refs.refTableFilter;
19942
+ const filterWrapperElem = tableFilter ? tableFilter.$el : null;
19943
+ if (!filterWrapperElem) {
19944
+ return;
19945
+ }
19946
+ const filterWidth = filterWrapperElem.offsetWidth;
19947
+ const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
19948
+ const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
19949
+ const centerWidth = filterWidth / 2;
19950
+ const minMargin = 10;
19951
+ const maxLeft = el.clientWidth - filterWidth - minMargin;
19952
+ let left, right;
19953
+ const thEl = targetElem.offsetParent;
19954
+ const trEl = thEl.offsetParent;
19955
+ const style = {
19956
+ top: `${targetElem.offsetTop + thEl.offsetTop + targetElem.offsetHeight}px`
19957
+ };
19958
+ // 判断面板不能大于表格高度
19959
+ const maxHeight = Math.max(40, el.clientHeight - (clientY - tableRect.y) - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
19960
+ if (column.fixed === 'left') {
19961
+ left = targetElem.offsetLeft + thEl.offsetLeft - centerWidth;
19962
+ } else if (column.fixed === 'right') {
19963
+ right = thEl.offsetWidth - targetElem.offsetLeft + (trEl.offsetWidth - trEl.offsetLeft) - column.renderWidth - centerWidth;
19964
+ } else {
19965
+ left = targetElem.offsetLeft + thEl.offsetLeft - centerWidth - headerScrollElem.scrollLeft;
19966
+ }
19967
+ if (left) {
19968
+ const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19969
+ if (overflowWidth > 0) {
19970
+ left -= overflowWidth;
19971
+ }
19972
+ style.left = `${Math.min(maxLeft, Math.max(minMargin, left))}px`;
19973
+ } else if (right) {
19974
+ const overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth;
19975
+ if (overflowWidth > 0) {
19976
+ right += overflowWidth;
19977
+ }
19978
+ style.right = `${Math.max(minMargin, right)}px`;
19979
+ }
19980
+ filterStore.style = style;
19981
+ filterStore.maxHeight = maxHeight;
19982
+ });
19983
+ }
19984
+ $xeTable.dispatchEvent('filter-visible', {
19985
+ column,
19986
+ field: column.field,
19987
+ property: column.field,
19988
+ filterList: $xeTable.getCheckedFilters(),
19989
+ visible: filterStore.visible
19990
+ }, evnt);
19954
19991
  }
19955
- this.emitEvent('filter-visible', {
19956
- column,
19957
- field: column.field,
19958
- property: column.field,
19959
- filterList: this.getCheckedFilters(),
19960
- visible: filterStore.visible
19961
- }, evnt);
19962
19992
  },
19963
19993
  handleFilterConfirmFilter(evnt) {
19964
19994
  const $xeTable = this;
@@ -20246,6 +20276,7 @@ const {
20246
20276
  const {
20247
20277
  selected
20248
20278
  } = editStore;
20279
+ const tableFilter = $xeTable.$refs.refTableFilter;
20249
20280
  const layoutList = ['header', 'body', 'footer'];
20250
20281
  if (isEnableConf(menuConfig) || contextMenu) {
20251
20282
  if (ctxMenuStore.visible && $refs.refTableMenu && getEventTargetNode(evnt, $refs.refTableMenu.$el).flag) {
@@ -20331,7 +20362,7 @@ const {
20331
20362
  }
20332
20363
  }
20333
20364
  }
20334
- if ($refs.filterWrapper && !getEventTargetNode(evnt, $refs.filterWrapper.$el).flag) {
20365
+ if (tableFilter && !getEventTargetNode(evnt, tableFilter.$el).flag) {
20335
20366
  this.closeFilter();
20336
20367
  }
20337
20368
  this.closeMenu();
@@ -22997,7 +23028,7 @@ function handleExportAndPrint($xeTable, options, isPrint) {
22997
23028
  isMerge: hasMerge,
22998
23029
  useStyle: true,
22999
23030
  current: 'current',
23000
- modes: ['current', 'selected'].concat(proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : [])
23031
+ modes: (proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : []).concat(['current', 'selected', 'empty'])
23001
23032
  }, options);
23002
23033
  const types = defOpts.types || external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().keys(exportOpts._typeMaps);
23003
23034
  const modes = defOpts.modes || [];
@@ -23189,7 +23220,7 @@ const convertToRows = originColumns => {
23189
23220
  isMerge: hasMerge,
23190
23221
  useStyle: true,
23191
23222
  current: 'current',
23192
- modes: ['current', 'selected'].concat(proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : []),
23223
+ modes: (proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : []).concat(['current', 'selected', 'empty']),
23193
23224
  download: true,
23194
23225
  type: 'csv'
23195
23226
  // filename: '',
@@ -26937,7 +26968,7 @@ function renderBody(h, $xeTable) {
26937
26968
  */
26938
26969
  initStore.filter ? h(filter_panel, {
26939
26970
  key: 'tf',
26940
- ref: 'filterWrapper',
26971
+ ref: 'refTableFilter',
26941
26972
  props: {
26942
26973
  filterStore
26943
26974
  }
@@ -30742,7 +30773,7 @@ const Toolbar = VxeToolbar;
30742
30773
  treeNotImp: '树表格不支持导入',
30743
30774
  treeCrossDrag: '只能拖拽第一层级',
30744
30775
  treeDragChild: '父级不能拖拽到自己的子级中',
30745
- reqPlugin: '可选扩展插件 "{1}" https://vxeui.com/other{0}/#/{1}/install'
30776
+ reqPlugin: '扩展插件未安装 "{1}" https://vxeui.com/other{0}/#/{1}/install'
30746
30777
  },
30747
30778
  table: {
30748
30779
  emptyText: '暂无数据',
@@ -30810,7 +30841,8 @@ const Toolbar = VxeToolbar;
30810
30841
  },
30811
30842
  button: {
30812
30843
  confirm: '确认',
30813
- cancel: '取消'
30844
+ cancel: '取消',
30845
+ clear: '清除'
30814
30846
  },
30815
30847
  filter: {
30816
30848
  search: '搜索'
@@ -30862,6 +30894,7 @@ const Toolbar = VxeToolbar;
30862
30894
  pdf: 'PDF (*.pdf)'
30863
30895
  },
30864
30896
  modes: {
30897
+ empty: '空数据',
30865
30898
  current: '当前数据(当前页的数据)',
30866
30899
  selected: '选中数据(当前页选中的数据)',
30867
30900
  all: '全量数据(包括所有分页的数据)'