antd官方组件的onChange方法在分页重新加载数据的时候,会将selectedRows清空,所以不使用onChange的方案操作selectedRows数据,而是使用其他事件onSelect 和onSelectAll 来进行修改,selectedRowKeys是可以正常使用的,所以不用做修改下面是处理的方式 ?
<a-table
:columns="columns"
:pagination="ipagination"
:data-source="dataSource"
rowKey="id"
:scroll="{ x: true }"
:row-selection="rowSelection"
bordered
@change="handleTableChange"
:align="tableAline"
:loading="loading"
>
rowSelection () {
return {
selectedRowKeys: this.selectedRowKeys,
onChange: (selectedRowKeys, selectedRows, event) => {
this.selectedRowKeys=selectedRowKeys
},
onSelect: (record, selected, selectedRows, nativeEvent) => {
if (selected) {
this.selectedRows.push(record)
}
if (!selected) {
const delIndex = this.selectedRows.findIndex(val => {
return val.id === record.id
})
this.selectedRows.splice(delIndex, 1)
}
//这里是计算选中项的总价格
if(this.selectedRows.length>0){
this.selectPriceTotal =(this.selectedRows.map(item=>item.price).reduce((x,y)=>x+y,0)*0.01).toFixed(2)
}
//record 点击某一条的所有数据
//selected 点击的一条是否被选中
},
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
}
if(this.selectedRows.length>0){
this.selectPriceTotal =(this.selectedRows.map(item=>item.price).reduce((x,y)=>x+y,0)*0.01).toFixed(2)
}
//selected 点击全选是否选中
//selectedRows 点击全选判断所有的选中数据
//changeRows 所有改变选中状态的数据
},
getCheckboxProps: record => ({
props: {
// 全部默认禁止选中
// disabled: true,
// 某几项默认禁止选中(R: 当state等于1时)
disabled: record.status =='FINISH',
// 某几项默认选中(R: 当state等于1时)
// defaultChecked: record.satuas === 'FINISH'
}
})
}
}
|