vxe-table 3.11.29 → 3.11.30-beta.1

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 (33) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/custom/mixin.js +31 -19
  3. package/es/table/module/keyboard/mixin.js +2 -1
  4. package/es/table/src/methods.js +237 -272
  5. package/es/table/src/table.js +23 -9
  6. package/es/ui/index.js +1 -1
  7. package/es/ui/src/log.js +1 -1
  8. package/lib/index.umd.js +329 -345
  9. package/lib/index.umd.min.js +1 -1
  10. package/lib/style.css +1 -1
  11. package/lib/table/module/custom/mixin.js +36 -23
  12. package/lib/table/module/custom/mixin.min.js +1 -1
  13. package/lib/table/module/keyboard/mixin.js +2 -3
  14. package/lib/table/module/keyboard/mixin.min.js +1 -1
  15. package/lib/table/src/methods.js +264 -306
  16. package/lib/table/src/methods.min.js +1 -1
  17. package/lib/table/src/table.js +25 -9
  18. package/lib/table/src/table.min.js +1 -1
  19. package/lib/ui/index.js +1 -1
  20. package/lib/ui/index.min.js +1 -1
  21. package/lib/ui/src/log.js +1 -1
  22. package/lib/ui/src/log.min.js +1 -1
  23. package/package.json +2 -2
  24. package/packages/table/module/custom/mixin.ts +35 -19
  25. package/packages/table/module/keyboard/mixin.ts +3 -1
  26. package/packages/table/src/methods.ts +247 -262
  27. package/packages/table/src/table.ts +26 -9
  28. /package/es/{iconfont.1734067799153.ttf → iconfont.1734093222885.ttf} +0 -0
  29. /package/es/{iconfont.1734067799153.woff → iconfont.1734093222885.woff} +0 -0
  30. /package/es/{iconfont.1734067799153.woff2 → iconfont.1734093222885.woff2} +0 -0
  31. /package/lib/{iconfont.1734067799153.ttf → iconfont.1734093222885.ttf} +0 -0
  32. /package/lib/{iconfont.1734067799153.woff → iconfont.1734093222885.woff} +0 -0
  33. /package/lib/{iconfont.1734067799153.woff2 → iconfont.1734093222885.woff2} +0 -0
@@ -892,6 +892,7 @@ const Methods = {
892
892
  });
893
893
  },
894
894
  handleColumn(collectColumn) {
895
+ const $xeTable = this;
895
896
  this.collectColumn = collectColumn;
896
897
  const tableFullColumn = getColumnList(collectColumn);
897
898
  this.tableFullColumn = tableFullColumn;
@@ -921,6 +922,9 @@ const Methods = {
921
922
  $table: this
922
923
  });
923
924
  }
925
+ if ($xeTable.handleUpdateCustomColumn) {
926
+ $xeTable.handleUpdateCustomColumn();
927
+ }
924
928
  return this.recalculate();
925
929
  });
926
930
  });
@@ -3982,11 +3986,12 @@ const Methods = {
3982
3986
  }
3983
3987
  },
3984
3988
  handleCheckedCheckboxRow(rows, value, isForce) {
3989
+ const $xeTable = this;
3985
3990
  if (rows && !XEUtils.isArray(rows)) {
3986
3991
  rows = [rows];
3987
3992
  }
3988
- this.handleBatchSelectRows(rows, !!value, isForce);
3989
- this.checkSelectionStatus();
3993
+ $xeTable.handleBatchSelectRows(rows, !!value, isForce);
3994
+ $xeTable.checkSelectionStatus();
3990
3995
  return this.$nextTick();
3991
3996
  },
3992
3997
  /**
@@ -4013,230 +4018,96 @@ const Methods = {
4013
4018
  return !!treeIndeterminateMaps[getRowid(this, row)] && !this.isCheckedByCheckboxRow(row);
4014
4019
  },
4015
4020
  /**
4016
- * 多行
4021
+ * 切换选中
4017
4022
  * 多选,行选中事件
4018
- * value 选中true 不选false 半选-1
4019
4023
  */
4020
- handleBatchSelectRows(rows, value, isForce) {
4024
+ handleBatchSelectRows(rows, checked, isForce) {
4021
4025
  const $xeTable = this;
4022
- const { treeConfig } = $xeTable;
4023
- const { selectCheckboxMaps, checkboxOpts } = this;
4026
+ const props = $xeTable;
4027
+ const reactData = $xeTable;
4028
+ const { treeConfig } = props;
4029
+ const { selectCheckboxMaps } = reactData;
4030
+ const selectRowMaps = Object.assign({}, selectCheckboxMaps);
4031
+ const treeOpts = $xeTable.computeTreeOpts;
4032
+ const { transform, mapChildrenField } = treeOpts;
4033
+ const childrenField = treeOpts.children || treeOpts.childrenField;
4034
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
4024
4035
  const { checkField, checkStrictly, checkMethod } = checkboxOpts;
4036
+ const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
4025
4037
  if (checkField) {
4038
+ // 树结构
4026
4039
  if (treeConfig && !checkStrictly) {
4027
- rows.forEach(row => {
4028
- this.handleSelectRow({ row }, value, isForce);
4029
- });
4030
- }
4031
- else {
4032
- rows.forEach(row => {
4040
+ // 更新子节点状态
4041
+ XEUtils.eachTree(rows, (row) => {
4033
4042
  if (isForce || (!checkMethod || checkMethod({ row }))) {
4034
- XEUtils.set(row, checkField, value);
4035
- this.handleCheckboxReserveRow(row, value);
4043
+ XEUtils.set(row, checkField, checked);
4044
+ if (indeterminateField) {
4045
+ XEUtils.set(row, indeterminateField, false);
4046
+ }
4047
+ $xeTable.handleCheckboxReserveRow(row, checked);
4036
4048
  }
4037
- });
4038
- }
4039
- }
4040
- else {
4041
- if (treeConfig && !checkStrictly) {
4042
- rows.forEach(row => {
4043
- this.handleSelectRow({ row }, value, isForce);
4044
- });
4049
+ }, { children: transform ? mapChildrenField : childrenField });
4050
+ reactData.selectCheckboxMaps = selectRowMaps;
4051
+ return;
4045
4052
  }
4046
4053
  else {
4047
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
4054
+ // 列表
4048
4055
  rows.forEach(row => {
4049
- const rowid = getRowid($xeTable, row);
4050
4056
  if (isForce || (!checkMethod || checkMethod({ row }))) {
4051
- if (value) {
4052
- if (!selectRowMaps[rowid]) {
4053
- selectRowMaps[rowid] = row;
4054
- }
4055
- }
4056
- else {
4057
- if (selectRowMaps[rowid]) {
4058
- delete selectRowMaps[rowid];
4059
- }
4060
- }
4061
- this.handleCheckboxReserveRow(row, value);
4057
+ XEUtils.set(row, checkField, checked);
4058
+ $xeTable.handleCheckboxReserveRow(row, checked);
4062
4059
  }
4063
4060
  });
4064
- this.selectCheckboxMaps = selectRowMaps;
4065
4061
  }
4062
+ reactData.selectCheckboxMaps = selectRowMaps;
4063
+ return;
4066
4064
  }
4067
- },
4068
- /**
4069
- * 多选,行选中事件
4070
- * value 选中true 不选false 半选-1
4071
- */
4072
- handleSelectRow({ row }, value, isForce) {
4073
- const { selectCheckboxMaps, afterFullData, treeConfig, treeOpts, treeIndeterminateMaps, checkboxOpts } = this;
4074
- const { checkField, checkStrictly, checkMethod } = checkboxOpts;
4075
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
4076
- const childrenField = treeOpts.children || treeOpts.childrenField;
4077
- const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
4078
- const rowid = getRowid(this, row);
4079
- if (checkField) {
4080
- if (treeConfig && !checkStrictly) {
4081
- if (value === -1) {
4082
- if (!treeIndeterminateMaps[rowid]) {
4083
- if (indeterminateField) {
4084
- XEUtils.set(row, indeterminateField, true);
4085
- }
4086
- treeIndeterminateMaps[rowid] = row;
4087
- }
4088
- XEUtils.set(row, checkField, false);
4089
- }
4090
- else {
4091
- // 更新子节点状态
4092
- XEUtils.eachTree([row], (item) => {
4093
- if (this.eqRow(item, row) || (isForce || (!checkMethod || checkMethod({ row: item })))) {
4094
- XEUtils.set(item, checkField, value);
4095
- if (indeterminateField) {
4096
- XEUtils.set(row, indeterminateField, false);
4097
- }
4098
- delete treeIndeterminateMaps[getRowid(this, item)];
4099
- this.handleCheckboxReserveRow(row, value);
4100
- }
4101
- }, { children: childrenField });
4102
- }
4103
- // 如果存在父节点,更新父节点状态
4104
- const matchObj = XEUtils.findTree(afterFullData, item => this.eqRow(item, row), { children: childrenField });
4105
- if (matchObj && matchObj.parent) {
4106
- let parentStatus;
4107
- const vItems = [];
4108
- const vItemMaps = {};
4109
- if (!isForce && checkMethod) {
4110
- matchObj.items.forEach((item) => {
4111
- if (checkMethod({ row: item })) {
4112
- const itemRid = getRowid(this, item);
4113
- vItemMaps[itemRid] = item;
4114
- vItems.push(item);
4115
- }
4116
- });
4117
- }
4118
- else {
4119
- matchObj.items.forEach(item => {
4120
- const itemRid = getRowid(this, item);
4121
- vItemMaps[itemRid] = item;
4122
- vItems.push(item);
4123
- });
4124
- }
4125
- const indeterminatesItem = XEUtils.find(matchObj.items, item => !!treeIndeterminateMaps[getRowid(this, item)]);
4126
- if (indeterminatesItem) {
4127
- parentStatus = -1;
4065
+ // 树结构
4066
+ if (treeConfig && !checkStrictly) {
4067
+ // 更新子节点状态
4068
+ XEUtils.eachTree(rows, (row) => {
4069
+ const rowid = getRowid($xeTable, row);
4070
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
4071
+ if (checked) {
4072
+ selectRowMaps[rowid] = row;
4128
4073
  }
4129
4074
  else {
4130
- const selectItems = [];
4131
- matchObj.items.forEach(item => {
4132
- if (XEUtils.get(item, checkField)) {
4133
- selectItems.push(item);
4134
- }
4135
- });
4136
- parentStatus = selectItems.filter(item => vItemMaps[getRowid(this, item)]).length === vItems.length ? true : (selectItems.length || value === -1 ? -1 : false);
4075
+ if (selectRowMaps[rowid]) {
4076
+ delete selectRowMaps[rowid];
4077
+ }
4137
4078
  }
4138
- this.selectCheckboxMaps = selectRowMaps;
4139
- return this.handleSelectRow({ row: matchObj.parent }, parentStatus, isForce);
4079
+ $xeTable.handleCheckboxReserveRow(row, checked);
4140
4080
  }
4141
- }
4142
- else {
4143
- if (isForce || (!checkMethod || checkMethod({ row }))) {
4144
- XEUtils.set(row, checkField, value);
4145
- this.handleCheckboxReserveRow(row, value);
4146
- }
4147
- }
4081
+ }, { children: transform ? mapChildrenField : childrenField });
4082
+ reactData.selectCheckboxMaps = selectRowMaps;
4083
+ return;
4148
4084
  }
4149
- else {
4150
- if (treeConfig && !checkStrictly) {
4151
- if (value === -1) {
4152
- if (!treeIndeterminateMaps[rowid]) {
4153
- if (indeterminateField) {
4154
- XEUtils.set(row, indeterminateField, true);
4155
- }
4156
- treeIndeterminateMaps[rowid] = row;
4157
- }
4158
- if (selectRowMaps[rowid]) {
4159
- delete selectRowMaps[rowid];
4085
+ // 列表
4086
+ rows.forEach(row => {
4087
+ const rowid = getRowid($xeTable, row);
4088
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
4089
+ if (checked) {
4090
+ if (!selectRowMaps[rowid]) {
4091
+ selectRowMaps[rowid] = row;
4160
4092
  }
4161
4093
  }
4162
4094
  else {
4163
- // 更新子节点状态
4164
- XEUtils.eachTree([row], (item) => {
4165
- const itemRid = getRowid(this, item);
4166
- if (this.eqRow(item, row) || (isForce || (!checkMethod || checkMethod({ row: item })))) {
4167
- if (value) {
4168
- selectRowMaps[itemRid] = item;
4169
- }
4170
- else {
4171
- if (selectRowMaps[itemRid]) {
4172
- delete selectRowMaps[itemRid];
4173
- }
4174
- }
4175
- if (indeterminateField) {
4176
- XEUtils.set(row, indeterminateField, false);
4177
- }
4178
- delete treeIndeterminateMaps[getRowid(this, item)];
4179
- this.handleCheckboxReserveRow(row, value);
4180
- }
4181
- }, { children: childrenField });
4182
- }
4183
- // 如果存在父节点,更新父节点状态
4184
- const matchObj = XEUtils.findTree(afterFullData, item => this.eqRow(item, row), { children: childrenField });
4185
- if (matchObj && matchObj.parent) {
4186
- let parentStatus;
4187
- const vItems = [];
4188
- const vItemMaps = {};
4189
- if (!isForce && checkMethod) {
4190
- matchObj.items.forEach((item) => {
4191
- if (checkMethod({ row: item })) {
4192
- const itemRid = getRowid(this, item);
4193
- vItemMaps[itemRid] = item;
4194
- vItems.push(item);
4195
- }
4196
- });
4197
- }
4198
- else {
4199
- matchObj.items.forEach(item => {
4200
- const itemRid = getRowid(this, item);
4201
- vItemMaps[itemRid] = item;
4202
- vItems.push(item);
4203
- });
4204
- }
4205
- const indeterminatesItem = XEUtils.find(matchObj.items, item => !!treeIndeterminateMaps[getRowid(this, item)]);
4206
- if (indeterminatesItem) {
4207
- parentStatus = -1;
4208
- }
4209
- else {
4210
- const selectItems = [];
4211
- matchObj.items.forEach(item => {
4212
- const itemRid = getRowid(this, item);
4213
- if (selectRowMaps[itemRid]) {
4214
- selectItems.push(item);
4215
- }
4216
- });
4217
- parentStatus = selectItems.filter(item => vItemMaps[getRowid(this, item)]).length === vItems.length ? true : (selectItems.length || value === -1 ? -1 : false);
4218
- }
4219
- this.selectCheckboxMaps = selectRowMaps;
4220
- return this.handleSelectRow({ row: matchObj.parent }, parentStatus, isForce);
4221
- }
4222
- }
4223
- else {
4224
- if (isForce || (!checkMethod || checkMethod({ row }))) {
4225
- if (value) {
4226
- if (!selectRowMaps[rowid]) {
4227
- selectRowMaps[rowid] = row;
4228
- }
4229
- }
4230
- else {
4231
- if (selectRowMaps[rowid]) {
4232
- delete selectRowMaps[rowid];
4233
- }
4095
+ if (selectRowMaps[rowid]) {
4096
+ delete selectRowMaps[rowid];
4234
4097
  }
4235
- this.handleCheckboxReserveRow(row, value);
4236
4098
  }
4099
+ $xeTable.handleCheckboxReserveRow(row, checked);
4237
4100
  }
4238
- }
4239
- this.selectCheckboxMaps = selectRowMaps;
4101
+ });
4102
+ reactData.selectCheckboxMaps = selectRowMaps;
4103
+ },
4104
+ /**
4105
+ * 即将移除
4106
+ * @deprecated
4107
+ */
4108
+ handleSelectRow({ row }, checked, isForce) {
4109
+ const $xeTable = this;
4110
+ $xeTable.handleBatchSelectRows([row], checked, isForce);
4240
4111
  },
4241
4112
  handleToggleCheckRowEvent(evnt, params) {
4242
4113
  const { selectCheckboxMaps, checkboxOpts } = this;
@@ -4245,22 +4116,22 @@ const Methods = {
4245
4116
  if (trigger === 'manual') {
4246
4117
  return;
4247
4118
  }
4248
- let value = false;
4119
+ let checked = false;
4249
4120
  if (checkField) {
4250
- value = !XEUtils.get(row, checkField);
4121
+ checked = !XEUtils.get(row, checkField);
4251
4122
  }
4252
4123
  else {
4253
- value = !selectCheckboxMaps[getRowid(this, row)];
4124
+ checked = !selectCheckboxMaps[getRowid(this, row)];
4254
4125
  }
4255
4126
  if (evnt) {
4256
- this.triggerCheckRowEvent(evnt, params, value);
4127
+ this.triggerCheckRowEvent(evnt, params, checked);
4257
4128
  }
4258
4129
  else {
4259
- this.handleSelectRow(params, value);
4130
+ this.handleSelectRow(params, checked);
4260
4131
  this.checkSelectionStatus();
4261
4132
  }
4262
4133
  },
4263
- triggerCheckRowEvent(evnt, params, value) {
4134
+ triggerCheckRowEvent(evnt, params, checked) {
4264
4135
  const { checkboxOpts, afterFullData } = this;
4265
4136
  const { checkMethod, trigger } = checkboxOpts;
4266
4137
  const { row } = params;
@@ -4284,13 +4155,13 @@ const Methods = {
4284
4155
  }
4285
4156
  }
4286
4157
  if (!checkMethod || checkMethod({ row })) {
4287
- this.handleSelectRow(params, value);
4158
+ this.handleSelectRow(params, checked);
4288
4159
  this.checkSelectionStatus();
4289
4160
  this.emitEvent('checkbox-change', Object.assign({
4290
4161
  records: this.getCheckboxRecords(),
4291
4162
  reserves: this.getCheckboxReserveRecords(),
4292
4163
  indeterminates: this.getCheckboxIndeterminateRecords(),
4293
- checked: value
4164
+ checked
4294
4165
  }, params), evnt);
4295
4166
  }
4296
4167
  },
@@ -4298,14 +4169,17 @@ const Methods = {
4298
4169
  * 多选,切换某一行的选中状态
4299
4170
  */
4300
4171
  toggleCheckboxRow(row) {
4172
+ const $xeTable = this;
4301
4173
  const { selectCheckboxMaps, checkboxOpts } = this;
4302
4174
  const { checkField } = checkboxOpts;
4303
- const value = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid(this, row)];
4304
- this.handleSelectRow({ row }, value, true);
4305
- this.checkSelectionStatus();
4306
- return this.$nextTick();
4175
+ const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
4176
+ $xeTable.handleBatchSelectRows([row], checked, true);
4177
+ $xeTable.checkSelectionStatus();
4178
+ return $xeTable.$nextTick();
4307
4179
  },
4308
- handleCheckedAllCheckboxRow(value, isForce) {
4180
+ handleCheckedAllCheckboxRow(checked, isForce) {
4181
+ const $xeTable = this;
4182
+ const reactData = $xeTable;
4309
4183
  const { afterFullData, treeConfig, treeOpts, selectCheckboxMaps, checkboxReserveRowMap, checkboxOpts, afterFullRowMaps } = this;
4310
4184
  const { checkField, reserve, checkStrictly, checkMethod } = checkboxOpts;
4311
4185
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
@@ -4321,7 +4195,7 @@ const Methods = {
4321
4195
  }
4322
4196
  // 疑惑!
4323
4197
  if (checkStrictly) {
4324
- this.isAllSelected = value;
4198
+ this.isAllSelected = checked;
4325
4199
  }
4326
4200
  else {
4327
4201
  /**
@@ -4331,10 +4205,10 @@ const Methods = {
4331
4205
  if (checkField) {
4332
4206
  const checkValFn = (row) => {
4333
4207
  if (isForce || (!checkMethod || checkMethod({ row }))) {
4334
- if (value) {
4208
+ if (checked) {
4335
4209
  selectRowMaps[getRowid(this, row)] = row;
4336
4210
  }
4337
- XEUtils.set(row, checkField, value);
4211
+ XEUtils.set(row, checkField, checked);
4338
4212
  }
4339
4213
  if (treeConfig && indeterminateField) {
4340
4214
  XEUtils.set(row, indeterminateField, false);
@@ -4355,7 +4229,7 @@ const Methods = {
4355
4229
  * 无需任何属性,直接绑定
4356
4230
  */
4357
4231
  if (treeConfig) {
4358
- if (value) {
4232
+ if (checked) {
4359
4233
  /**
4360
4234
  * 如果是树勾选
4361
4235
  * 如果方法成立,则添加到临时集合中
@@ -4382,7 +4256,7 @@ const Methods = {
4382
4256
  }
4383
4257
  }
4384
4258
  else {
4385
- if (value) {
4259
+ if (checked) {
4386
4260
  /**
4387
4261
  * 如果是行勾选
4388
4262
  * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
@@ -4420,7 +4294,7 @@ const Methods = {
4420
4294
  }
4421
4295
  }
4422
4296
  if (reserve) {
4423
- if (value) {
4297
+ if (checked) {
4424
4298
  XEUtils.each(selectRowMaps, (row, rowid) => {
4425
4299
  checkboxReserveRowMap[rowid] = row;
4426
4300
  });
@@ -4431,6 +4305,8 @@ const Methods = {
4431
4305
  }
4432
4306
  this.selectCheckboxMaps = checkField ? {} : selectRowMaps;
4433
4307
  }
4308
+ reactData.isAllSelected = checked;
4309
+ reactData.isIndeterminate = false;
4434
4310
  this.treeIndeterminateMaps = {};
4435
4311
  this.treeIndeterminateRowMaps = {};
4436
4312
  this.checkSelectionStatus();
@@ -4443,76 +4319,165 @@ const Methods = {
4443
4319
  setAllCheckboxRow(value) {
4444
4320
  return this.handleCheckedAllCheckboxRow(value, true);
4445
4321
  },
4446
- checkSelectionStatus() {
4447
- const { afterFullData, selectCheckboxMaps, treeIndeterminateMaps, checkboxOpts, treeConfig } = this;
4322
+ updateCheckboxStatus() {
4323
+ const $xeTable = this;
4324
+ const props = $xeTable;
4325
+ const reactData = $xeTable;
4326
+ const internalData = $xeTable;
4327
+ const { treeConfig } = props;
4328
+ const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
4329
+ const selectRowMaps = Object.assign({}, selectCheckboxMaps);
4330
+ const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
4331
+ const treeOpts = $xeTable.computeTreeOpts;
4332
+ const { transform, mapChildrenField } = treeOpts;
4333
+ const childrenField = treeOpts.children || treeOpts.childrenField;
4334
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
4448
4335
  const { checkField, checkStrictly, checkMethod } = checkboxOpts;
4449
- const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
4450
- if (!checkStrictly) {
4451
- const disableRows = [];
4452
- const checkRows = [];
4453
- let isAllResolve = false;
4454
- let isAllSelected = false;
4455
- let isIndeterminate = false;
4456
- if (checkField) {
4457
- isAllResolve = afterFullData.every(checkMethod
4458
- ? (row) => {
4459
- if (!checkMethod({ row })) {
4460
- disableRows.push(row);
4461
- return true;
4336
+ const { afterTreeFullData } = internalData;
4337
+ if (checkStrictly) {
4338
+ return;
4339
+ }
4340
+ // 树结构
4341
+ if (treeConfig) {
4342
+ const childRowMaps = {};
4343
+ const childRowList = [];
4344
+ XEUtils.eachTree(afterTreeFullData, (row) => {
4345
+ const rowid = getRowid($xeTable, row);
4346
+ const childList = row[transform ? mapChildrenField : childrenField];
4347
+ if (childList && childList.length && !childRowMaps[rowid]) {
4348
+ childRowMaps[rowid] = 1;
4349
+ childRowList.unshift([row, rowid, childList]);
4350
+ }
4351
+ }, { children: transform ? mapChildrenField : childrenField });
4352
+ childRowList.forEach(vals => {
4353
+ const row = vals[0];
4354
+ const rowid = vals[1];
4355
+ const childList = vals[2];
4356
+ let sLen = 0; // 已选
4357
+ let hLen = 0; // 半选
4358
+ let vLen = 0; // 有效行
4359
+ childList.forEach(checkMethod
4360
+ ? (item) => {
4361
+ const childRowid = getRowid($xeTable, item);
4362
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
4363
+ if (checkMethod({ row: item })) {
4364
+ if (isSelect) {
4365
+ sLen++;
4366
+ }
4367
+ else if (halfRowMaps[childRowid]) {
4368
+ hLen++;
4369
+ }
4370
+ vLen++;
4462
4371
  }
4463
- if (XEUtils.get(row, checkField)) {
4464
- checkRows.push(row);
4465
- return true;
4372
+ else {
4373
+ if (isSelect) {
4374
+ sLen++;
4375
+ }
4376
+ else if (halfRowMaps[childRowid]) {
4377
+ hLen++;
4378
+ }
4466
4379
  }
4467
- return false;
4468
4380
  }
4469
- : (row) => XEUtils.get(row, checkField));
4470
- isAllSelected = isAllResolve && afterFullData.length !== disableRows.length;
4471
- if (treeConfig) {
4472
- if (indeterminateField) {
4473
- isIndeterminate = !isAllSelected && afterFullData.some((row) => XEUtils.get(row, checkField) || XEUtils.get(row, indeterminateField) || !!treeIndeterminateMaps[getRowid(this, row)]);
4381
+ : item => {
4382
+ const childRowid = getRowid($xeTable, item);
4383
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
4384
+ if (isSelect) {
4385
+ sLen++;
4386
+ }
4387
+ else if (halfRowMaps[childRowid]) {
4388
+ hLen++;
4389
+ }
4390
+ vLen++;
4391
+ });
4392
+ const isSelected = sLen >= vLen;
4393
+ const halfSelect = !isSelected && (sLen >= 1 || hLen >= 1);
4394
+ if (checkField) {
4395
+ XEUtils.get(row, checkField, isSelected);
4396
+ }
4397
+ if (isSelected) {
4398
+ if (!checkField) {
4399
+ selectRowMaps[rowid] = row;
4474
4400
  }
4475
- else {
4476
- isIndeterminate = !isAllSelected && afterFullData.some((row) => XEUtils.get(row, checkField) || !!treeIndeterminateMaps[getRowid(this, row)]);
4401
+ if (halfRowMaps[rowid]) {
4402
+ delete halfRowMaps[rowid];
4477
4403
  }
4478
4404
  }
4479
4405
  else {
4480
- if (indeterminateField) {
4481
- isIndeterminate = !isAllSelected && afterFullData.some((row) => XEUtils.get(row, checkField) || XEUtils.get(row, indeterminateField));
4406
+ if (!checkField) {
4407
+ if (selectRowMaps[rowid]) {
4408
+ delete selectRowMaps[rowid];
4409
+ }
4482
4410
  }
4483
- else {
4484
- isIndeterminate = !isAllSelected && afterFullData.some((row) => XEUtils.get(row, checkField));
4411
+ if (halfSelect) {
4412
+ halfRowMaps[rowid] = row;
4485
4413
  }
4486
- }
4487
- }
4488
- else {
4489
- isAllResolve = afterFullData.every(checkMethod
4490
- ? (row) => {
4491
- if (!checkMethod({ row })) {
4492
- disableRows.push(row);
4493
- return true;
4494
- }
4495
- if (selectCheckboxMaps[getRowid(this, row)]) {
4496
- checkRows.push(row);
4497
- return true;
4414
+ else {
4415
+ if (halfRowMaps[rowid]) {
4416
+ delete halfRowMaps[rowid];
4498
4417
  }
4499
- return false;
4500
4418
  }
4501
- : (row) => selectCheckboxMaps[getRowid(this, row)]);
4502
- isAllSelected = isAllResolve && afterFullData.length !== disableRows.length;
4503
- if (treeConfig) {
4504
- isIndeterminate = !isAllSelected && afterFullData.some((row) => {
4505
- const itemRid = getRowid(this, row);
4506
- return treeIndeterminateMaps[itemRid] || selectCheckboxMaps[itemRid];
4507
- });
4419
+ }
4420
+ });
4421
+ }
4422
+ reactData.selectCheckboxMaps = selectRowMaps;
4423
+ reactData.treeIndeterminateMaps = halfRowMaps;
4424
+ },
4425
+ updateAllCheckboxStatus() {
4426
+ const $xeTable = this;
4427
+ const props = $xeTable;
4428
+ const reactData = $xeTable;
4429
+ const internalData = $xeTable;
4430
+ const { treeConfig } = props;
4431
+ const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
4432
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
4433
+ const { checkField, checkMethod } = checkboxOpts;
4434
+ const { afterFullData, afterTreeFullData } = internalData;
4435
+ let sLen = 0; // 已选
4436
+ let hLen = 0; // 半选
4437
+ let vLen = 0; // 有效行
4438
+ const rootList = (treeConfig ? afterTreeFullData : afterFullData);
4439
+ rootList.forEach(checkMethod
4440
+ ? row => {
4441
+ const childRowid = getRowid($xeTable, row);
4442
+ const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
4443
+ if (checkMethod({ row })) {
4444
+ if (selected) {
4445
+ sLen++;
4446
+ }
4447
+ else if (treeIndeterminateMaps[childRowid]) {
4448
+ hLen++;
4449
+ }
4450
+ vLen++;
4508
4451
  }
4509
4452
  else {
4510
- isIndeterminate = !isAllSelected && afterFullData.some((row) => selectCheckboxMaps[getRowid(this, row)]);
4453
+ if (selected) {
4454
+ sLen++;
4455
+ }
4456
+ else if (treeIndeterminateMaps[childRowid]) {
4457
+ hLen++;
4458
+ }
4511
4459
  }
4512
4460
  }
4513
- this.isAllSelected = isAllSelected;
4514
- this.isIndeterminate = isIndeterminate;
4515
- }
4461
+ : row => {
4462
+ const childRowid = getRowid($xeTable, row);
4463
+ const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
4464
+ if (selected) {
4465
+ sLen++;
4466
+ }
4467
+ else if (treeIndeterminateMaps[childRowid]) {
4468
+ hLen++;
4469
+ }
4470
+ vLen++;
4471
+ });
4472
+ const isSelected = sLen >= vLen;
4473
+ const halfSelect = !isSelected && (sLen >= 1 || hLen >= 1);
4474
+ reactData.isAllSelected = isSelected;
4475
+ reactData.isIndeterminate = halfSelect;
4476
+ },
4477
+ checkSelectionStatus() {
4478
+ const $xeTable = this;
4479
+ $xeTable.updateCheckboxStatus();
4480
+ $xeTable.updateAllCheckboxStatus();
4516
4481
  },
4517
4482
  // 还原展开、选中等相关状态
4518
4483
  handleReserveStatus() {