需求
1、删除行数据时候,询问用户该行相关数据都将删除无法恢复,是否删除?
2、选择确认,还需二次输入密码确认,才会真正调用删除接口
想使用prompt来实现,但官方示例没有隐藏输入内容的配置项,也没办法在密码校验错误的情况下,不要关闭弹框,好在有大神提供了隐藏配置项,在此记录下
代码
关键配置项,都在代码注释里边
<script setup lang="ts">
import { ElMessage, ElMessageBox } from "element-plus";
//删除请求
const deleteRequest = (id:string) => {
sendDelTask(id).then((res: any) => {
ElMessage.success("操作成功");
getTable();
});
}
// 删除操作
const deleteHandle = ({id}:{id:string}) => {
ElMessageBox.confirm("任务已关闭,删除后该任务下所有记录将被清除,请确认是否删除?", "提示", {
confirmButtonText: "删除",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
ElMessageBox.prompt('请输入登录密码确认删除', '二次确认', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern:
/\S/,//正则,对输入内容格式做基本校验,不对会有红色提示
inputErrorMessage: '请输入密码',//校验错误提示文字
inputType:'password',//官方未写隐藏配置,用来隐藏明文
//beforeClose函数用来控制手动关闭弹框,
//action-按钮类型,判断点了哪个按钮
//instance-实例,获取输入内容
//done-继续执行函数,用来关闭弹框
beforeClose(action,instance,done){
if(action==='confirm'){
//获取本次储存的用户名
const username=getSessStorage("userInfo")?.username??'';
if(!username){
ElMessage.warning('用户信息丢失,请重新登录');
return;
}
//密码校验接口,返回true和false
sendPsdConfirm({
username,
password: passEncode(instance.inputValue),//密码加密发送
}).then((res: any) => {
if(!res.data){
ElMessage.warning('密码不正确,请重新输入');
return;
}
deleteRequest(id);//真正删除
done();//关闭弹框
});
}else{
done();
}
}
}).catch(()=>{})//如果点击取消,会进catch
});
};
</script>