复选框事件分为选择多个(@select)和选择全部(@select-all)
//entity_id为每列数组的唯一标识
const handleSelect = (selection: any, row: any) => { let selectType = ''; const filterList = selection.filter((item: any) => item.entity_id === row.entity_id); if (filterList.length > 0) selectType = 'add'; else selectType = 'delete'; if (selectType === 'add') { const cartFilterList = cart.filter((item) => item.entity_id === row.entity_id); if (cartFilterList.length === 0) { cart.push({ ...row, deleteable: true }); } } else { const cartFilterList = cart .filter((item) => item.entity_id !== row.entity_id) .map((item) => { return { ...item, deleteable: true }; }); cart.length = 0; cart.push(...cartFilterList); } };
const handleSelectAll = function (selection: any) { if (selection.length === 0) { const cartFilterList = cart .filter((item) => { return tableData.value.findIndex((row: any) => row.entity_id === item.entity_id) === -1; }) .map((item) => { return { ...item, deleteable: true }; }); cart.length = 0; cart.push(...cartFilterList); } else { const selectionFilterList = selection .filter((row: any) => { return cart.findIndex((item) => item.entity_id === row.entity_id) === -1; }) .map((item: any) => { return { ...item, deleteable: true }; }); cart.push(...selectionFilterList); } };
注意:将接口获取到的数据直接赋值给tableData不会触发watch事件,需要将接口返回的数据做一次处理watch事件才会触发,
// 翻页时勾选状态保留 &重置清空勾选状态
const setSelectedCheckBox = function () { cart.forEach((item) => { const targetRow = tableData.value.find((row: any) => row.entity_id === item.entity_id); if (targetRow) { tableRef.value.toggleRowSelection(targetRow, true); } }); }; watch(tableData.value, async () => { await nextTick(); setSelectedCheckBox(); }); const clearCheckBox = function () { cart.forEach((tableItem) => { const targetRow = tableData.value.find((row: any) => row.entity_id === tableItem.entity_id); tableRef.value.toggleRowSelection(targetRow, false); cart.splice(cart.findIndex((item) => item.entity_id === tableItem.entity_id)); }); };