场景:点击多选 和 全选 需要提示俩种词
问题:点击全选时 会优先执行 多选的回调 在执行全选的回调
暂时应对的方式
// 多选
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);
}
};