
复选框事件分为选择多个(@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));
    });
};
