关于el-table的全选回调和多选回调的优先级

52 阅读1分钟
场景:点击多选 和 全选 需要提示俩种词
问题:点击全选时 会优先执行 多选的回调 在执行全选的回调

暂时应对的方式

// 多选
const multipleList = ref<Array<any>>([]);
const A = ref(false);  // 阻塞变量,用于阻塞多选回调比全选的回调执行快
const isAll = ref(false);
const multipleTable = (val: EmptyObjectType) => {
    setTimeout(() => {
        if (!A.value) {
            multipleonrowselectionFn(val, '');
        }
    }, 300);
};
// 全选
const multipleTableAll = (data: EmptyObjectType) => {
    A.value = true;
    isAll.value = !isAll.value;
    if (isAll.value) {
        multipleonrowselectionFn(data, 'All');
    } else {
        nomulitiple(data);
    }
    setTimeout(() => {
        A.value = false;
    }, 500);
};
// 提示和表格选中高亮
const multipleonrowselectionFn = (val: EmptyObjectType, str: string) => {
    let t = title.value == 'mobile' ? 'mobile' : 'email';
    let text_warning = title.value == 'mobile' ? '手机号' : '邮箱号';
    let message_ =
        str == 'All'
            ? `所选用户中存在未绑定${text_warning}的用户无法选择,请绑定${text_warning}后再试`
            : `当前用户未绑定${text_warning}无法选择,请绑定${text_warning}后再试`;
    for (let i = 0; i < val.length; i++) {
        if (!val[i][t]) {
            ElMessage({
                message: message_,
                grouping: true,
                type: 'warning',
            });
            tableRef.value.onRowSelection(val[i], false);
        } else {
            tableRef.value.onRowSelection(val[i], true);
        }
    }
    const newval = val.filter((item: any) => item[t]);
    multipleList.value = newval;
};

const nomulitiple = (val: any) => {
    for (let i = 0; i < val.length; i++) {
        tableRef.value.onRowSelection(val[i], false);
    }
};