官方组件的onChange方法在分页重新加载数据的时候,会将selectedRows清空,所以不使用onChange的方案操作selectedRows数据,而是使用其他事件onSelect
和onSelectAll
来进行修改
代码如下
....
<s-table
ref="table"
size="default"
rowKey="key"
:columns="columns"
:data="loadData"
:rowSelection="{
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
onSelect:onSelect,
onSelectAll:onSelectAll,
}"
:customRow="handleCheck"
></s-table>
....
<script>
....
import { STable } from '@/components'
....
export default {
....
methods:{
onSelectChange(selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys
// this.selectedRows = selectedRows // 注释这里,交由下面onSelect,onSelectAll来操作
},
onSelect(record, selected, selectedRows) {
if (selected) {
this.selectedRows.push(record)
}
if (!selected) {
const delIndex = this.selectedRows.findIndex(val => {
return val.id === record.id
})
this.selectedRows.splice(delIndex, 1)
}
},
onSelectAll(selected, selectedRows, changeRows) {
if (selected) {
this.selectedRows = this.selectedRows.concat(changeRows)
}
if (!selected) {
let selectedRows = JSON.parse(JSON.stringify(this.selectedRows))
const delIndex = []
selectedRows.forEach((item, index) => {
changeRows.forEach((val, itemIndex) => {
if (item.id === val.id) {
delIndex.push(index)
}
})
})
delIndex.forEach(item => {
delete selectedRows[item]
})
selectedRows = selectedRows.filter(item => {
return item !== undefined
})
this.selectedRows = selectedRows
}
},
}
.....
}
.....
</script>