fix: 解决table复选框点击无法勾选状态问题 (#3370)
Co-authored-by: Tang <11726782+sugar_gitee@user.noreply.gitee.com>
This commit is contained in:
parent
522e892d79
commit
dde3652b7d
|
|
@ -4,9 +4,11 @@
|
||||||
<template #headerTop>
|
<template #headerTop>
|
||||||
<Alert type="info" show-icon>
|
<Alert type="info" show-icon>
|
||||||
<template #message>
|
<template #message>
|
||||||
<template v-if="checkedKeys.length > 0">
|
<template v-if="state.selectedRowKeys.length > 0">
|
||||||
<span>已选中{{ checkedKeys.length }}条记录(可跨页)</span>
|
<span>已选中{{ state.selectedRowKeys.length }}条记录(可跨页)</span>
|
||||||
<a-button type="link" @click="checkedKeys = []" size="small">清空</a-button>
|
<a-button type="link" @click="state.selectedRowKeys.splice(0)" size="small"
|
||||||
|
>清空</a-button
|
||||||
|
>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<span>未选中任何项目</span>
|
<span>未选中任何项目</span>
|
||||||
|
|
@ -20,7 +22,7 @@
|
||||||
</BasicTable>
|
</BasicTable>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { BasicTable, useTable } from '@/components/Table';
|
import { BasicTable, useTable } from '@/components/Table';
|
||||||
import { getBasicColumns, getFormConfig } from './tableData';
|
import { getBasicColumns, getFormConfig } from './tableData';
|
||||||
import { Alert } from 'ant-design-vue';
|
import { Alert } from 'ant-design-vue';
|
||||||
|
|
@ -28,7 +30,12 @@
|
||||||
|
|
||||||
import { demoListApi } from '@/api/demo/table';
|
import { demoListApi } from '@/api/demo/table';
|
||||||
|
|
||||||
const checkedKeys = ref<Key[]>([]);
|
const state = reactive<{
|
||||||
|
selectedRowKeys: Key[];
|
||||||
|
}>({
|
||||||
|
selectedRowKeys: [],
|
||||||
|
});
|
||||||
|
|
||||||
const [registerTable, { getForm }] = useTable({
|
const [registerTable, { getForm }] = useTable({
|
||||||
title: '开启搜索区域',
|
title: '开启搜索区域',
|
||||||
api: demoListApi,
|
api: demoListApi,
|
||||||
|
|
@ -41,7 +48,7 @@
|
||||||
rowKey: 'id',
|
rowKey: 'id',
|
||||||
rowSelection: {
|
rowSelection: {
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
selectedRowKeys: checkedKeys.value,
|
selectedRowKeys: state.selectedRowKeys,
|
||||||
onSelect: onSelect,
|
onSelect: onSelect,
|
||||||
onSelectAll: onSelectAll,
|
onSelectAll: onSelectAll,
|
||||||
},
|
},
|
||||||
|
|
@ -53,19 +60,20 @@
|
||||||
|
|
||||||
function onSelect(record, selected) {
|
function onSelect(record, selected) {
|
||||||
if (selected) {
|
if (selected) {
|
||||||
checkedKeys.value = [...checkedKeys.value, record.id];
|
state.selectedRowKeys.push(record.id);
|
||||||
} else {
|
} else {
|
||||||
checkedKeys.value = checkedKeys.value.filter((id) => id !== record.id);
|
state.selectedRowKeys
|
||||||
|
.splice(0)
|
||||||
|
.push(...state.selectedRowKeys.filter((id) => id !== record.id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSelectAll(selected, selectedRows, changeRows) {
|
function onSelectAll(selected, selectedRows, changeRows) {
|
||||||
const changeIds = changeRows.map((item) => item.id);
|
const changeIds = changeRows.map((item) => item.id);
|
||||||
if (selected) {
|
if (selected) {
|
||||||
checkedKeys.value = [...checkedKeys.value, ...changeIds];
|
state.selectedRowKeys.push(...changeIds);
|
||||||
} else {
|
} else {
|
||||||
checkedKeys.value = checkedKeys.value.filter((id) => {
|
state.selectedRowKeys.splice(0);
|
||||||
return !changeIds.includes(id);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue