选中事件的监听

This commit is contained in:
lq
2025-09-20 14:53:27 +08:00
parent 71674843a9
commit ec51ddea07
2 changed files with 44 additions and 8 deletions

View File

@ -1,4 +1,6 @@
import { ref, computed } from 'vue'; import { ref, computed } from 'vue';
import { merge } from 'lodash-es';
import { cloneDeep } from 'lodash-es';
interface UseTableSelectionWithPaginationOptions { interface UseTableSelectionWithPaginationOptions {
rowKey?: string; // 主键字段名,默认 'id' rowKey?: string; // 主键字段名,默认 'id'
@ -60,18 +62,27 @@ export function useTableSelectionWithPagination(options: UseTableSelectionWithPa
options.onSelectChange?.(); options.onSelectChange?.();
}; };
// 选择变更处理
const handleSelectChange = (keys: Array<string | number>, rows: Array<any>) => {
selectedRowKeys.value = keys;
selectedRows.value = rows;
options.onSelectChange?.();
};
const onPageChange = (page: number, pageSize: number) => { const onPageChange = (page: number, pageSize: number) => {
// console.log('onPageChange', page, pageSize); // console.log('onPageChange', page, pageSize);
pageInfo.value.page = page; pageInfo.value.page = page;
pageInfo.value.page_size = pageSize; pageInfo.value.page_size = pageSize;
options.onPageChange?.(page); options.onPageChange?.(page);
}; };
const onPageSizeChange = (current: number, size: number) => { const onPageSizeChange = (current: number, size: number) => {
// console.log('onPageSizeChange', current, size); // console.log('onPageSizeChange', current, size);
// pageInfo.value.page_size = size; // pageInfo.value.page_size = size;
// pageInfo.value.page = 1; // pageInfo.value.page = 1;
// options.onPageSizeChange?.(size); // options.onPageSizeChange?.(size);
}; };
const resetPageInfo = () => { const resetPageInfo = () => {
pageInfo.value = cloneDeep(DEFAULT_PAGE_INFO); pageInfo.value = cloneDeep(DEFAULT_PAGE_INFO);
}; };
@ -80,6 +91,8 @@ export function useTableSelectionWithPagination(options: UseTableSelectionWithPa
type: 'checkbox', type: 'checkbox',
showCheckedAll: true, showCheckedAll: true,
width: 48, width: 48,
selectedRowKeys: selectedRowKeys.value,
onChange: handleSelectChange
})); }));
return { return {
@ -92,6 +105,7 @@ export function useTableSelectionWithPagination(options: UseTableSelectionWithPa
rowSelection, rowSelection,
handleSelect, handleSelect,
handleSelectAll, handleSelectAll,
handleSelectChange,
resetPageInfo, resetPageInfo,
DEFAULT_PAGE_INFO, DEFAULT_PAGE_INFO,
}; };

View File

@ -145,8 +145,8 @@
bordered bordered
:columns="columns" :columns="columns"
:pagination="false" :pagination="false"
:row-selection="true" row-key="id"
@onSelect="handleSelectRow" :row-selection="rowSelection"
> >
<template #name="{ record }"> <template #name="{ record }">
<div class="flex items-center"> <div class="flex items-center">
@ -229,16 +229,30 @@ const columns = ref([
]); ]);
// 表格分页逻辑 // 表格分页逻辑
const { pageInfo, onPageChange, onPageSizeChange } = useTableSelectionWithPagination({ const {
pageInfo,
onPageChange,
onPageSizeChange,
rowSelection,
selectedRowKeys
} = useTableSelectionWithPagination({
rowKey: 'id',
onPageChange: () => handleSearch(), onPageChange: () => handleSearch(),
onPageSizeChange: () => handleSearch(), onPageSizeChange: () => handleSearch(),
}); });
const handleSelectRow = (selectedRowKeys, selectedRows) => { // 处理选择变更
// const handleSelectChange = (selectedRowKeys, selectedRows) => {
// console.log('选择变更:', selectedRowKeys, selectedRows);
// query.ids = selectedRowKeys;
// };
// 监听选中项变化
watch(selectedRowKeys, (newVal) => {
console.log('选择++++++++++++++'); console.log('选择++++++++++++++');
console.log(selectedRowKeys, selectedRows); console.log(newVal);
query.ids = selectedRowKeys; query.ids = newVal;
}; });
// 定义props和emit // 定义props和emit
const props = defineProps({ const props = defineProps({
@ -262,6 +276,14 @@ const handleSearch = async () => {
pageInfo.value.total = res.data.total; pageInfo.value.total = res.data.total;
materialData.value = [...materialData.value, ...res.data.data]; materialData.value = [...materialData.value, ...res.data.data];
}; };
// 移除原来的 handleSelectRow 方法,因为我们现在使用 hook 提供的 handleSelect 方法
// const handleSelectRow = (selectedRowKeys, selectedRows) => {
// console.log('选择++++++++++++++');
// console.log(selectedRowKeys, selectedRows);
// query.ids = selectedRowKeys;
// };
const isActive = ref('ai'); const isActive = ref('ai');
// 发布类型选项 // 发布类型选项