diff --git a/packages/amis-core/src/store/list.ts b/packages/amis-core/src/store/list.ts index a143e88d4..89dfba652 100644 --- a/packages/amis-core/src/store/list.ts +++ b/packages/amis-core/src/store/list.ts @@ -210,20 +210,28 @@ export const ListStore = iRendererStore function updateSelected(selected: Array, valueField?: string) { self.selectedItems.clear(); - self.items.forEach(item => { - if (~selected.indexOf(item.pristine)) { - self.selectedItems.push(item); - } else if ( - find(selected, a => { - const selectValue = a[valueField || 'value']; - const itemValue = item.pristine[valueField || 'value']; - return self.strictMode - ? selectValue === itemValue - : selectValue == itemValue; - }) - ) { - self.selectedItems.push(item); + selected.forEach(item => { + let resolved = self.items.find(a => a.pristine === item); + + // 先严格比较, + if (!resolved) { + resolved = self.items.find(a => { + const selectValue = item[valueField || 'value']; + const itemValue = a.pristine[valueField || 'value']; + return selectValue === itemValue; + }); } + + // 再宽松比较 + if (!resolved) { + resolved = self.items.find(a => { + const selectValue = item[valueField || 'value']; + const itemValue = a.pristine[valueField || 'value']; + return selectValue == itemValue; + }); + } + + resolved && self.selectedItems.push(resolved); }); } diff --git a/packages/amis-core/src/store/table.ts b/packages/amis-core/src/store/table.ts index 612c1bfbd..15dd5a946 100644 --- a/packages/amis-core/src/store/table.ts +++ b/packages/amis-core/src/store/table.ts @@ -1528,19 +1528,28 @@ export const TableStore = iRendererStore function updateSelected(selected: Array, valueField?: string) { self.selectedRows.clear(); - eachTree(self.rows, item => { - if (~selected.indexOf(item.pristine)) { - self.selectedRows.push(item.id); - } else if ( - find( - selected, - a => - a[valueField || 'value'] && - a[valueField || 'value'] == item.pristine[valueField || 'value'] - ) - ) { - self.selectedRows.push(item.id); + selected.forEach(item => { + let resolved = self.rows.find(a => a.pristine === item); + + // 先严格比较, + if (!resolved) { + resolved = self.rows.find(a => { + const selectValue = item[valueField || 'value']; + const itemValue = a.pristine[valueField || 'value']; + return selectValue === itemValue; + }); } + + // 再宽松比较 + if (!resolved) { + resolved = self.rows.find(a => { + const selectValue = item[valueField || 'value']; + const itemValue = a.pristine[valueField || 'value']; + return selectValue == itemValue; + }); + } + + resolved && self.selectedRows.push(resolved); }); updateCheckDisable();