element plus 删除弹窗,使用useHook方式

文章介绍了如何在Element-Plus库中创建一个可定制的删除确认对话框组件,包括异步操作处理和回调函数。它扩展了ElMessageBox并提供了一个useDeleteModal函数供其他组件调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import { ElMessage, ElMessageBox } from "element-plus";
import type { ElMessageBoxOptions } from "element-plus";

/*
  import { useDeleteModal } from "@/utils/useDeleteModal";
  const { deleteModal } = useDeleteModal();
  console.log(row);
  deleteModal({
    actionFn: async (done: any) => {
      await fn();
      done();
    }
  });
*/

export interface MsgBoxOptions extends ElMessageBoxOptions {
  confirmButtonText?: string;
  successTxt?: string;
  actionFn: (done: () => any) => any;
}

export function useDeleteModal() {
  const deleteModal = (msgOption: MsgBoxOptions) => {
    ElMessageBox({
      customClass: msgOption.customClass || "useDeleteModal",
      title: msgOption.title || "删除",
      message: msgOption.message || "删除该数据,是否继续?",
      showCancelButton: true,
      confirmButtonText: msgOption.confirmButtonText || "删除",
      cancelButtonText: msgOption.cancelButtonText || "取消",
      cancelButtonClass: "cancel-btn",
      confirmButtonClass: msgOption.confirmButtonClass || "delete-btn",
      type: msgOption.type || "error",
      draggable: true,
      beforeClose: async (action, instance, done) => {
        if (action === "confirm") {
          instance.confirmButtonLoading = true;
          instance.confirmButtonText = msgOption.confirmButtonText ? msgOption.confirmButtonText + "中..." : "删除中...";
          try {
            await msgOption.actionFn(done);
            ElMessage.success(msgOption.successTxt || "删除成功");
          } catch (error) {
            console.log(error);
            instance.confirmButtonText = msgOption.confirmButtonText || "删除";
          } finally {
            instance.confirmButtonLoading = false;
          }
        } else {
          done();
        }
      }
    }).catch(() => {});
  };

  return {
    deleteModal
  };
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值