Naive UI和Vue3批量删除功能实现

批量删除功能实现

在这个示例中,我们将展示如何使用 Vue 3 和 Naive UI 实现一个带有批量删除功能的数据表格组件。以下是核心代码:

vue

<template>
  <n-space vertical :size="12">
    <!-- ... 其他内容 ... -->

    <!-- 批量删除按钮 -->
    <n-button type="error" :disabled="selectedRowKeys.length === 0" @click="batchDelete">
      批量删除
    </n-button>

    <!-- 批量删除确认模态框 -->
    <n-modal v-model:show="batchDeleteDialogVisible" preset="dialog" title="确认批量删除">
      <span>确定要删除选中的 {{ selectedRowKeys.length }} 行记录吗?</span>
      <div style="margin-top: 15px;">
        <n-button type="error" @click="confirmBatchDelete" style="margin-right: 8px;">
          确定
        </n-button>
        <n-button @click="cancelBatchDelete">取消</n-button>
      </div>
    </n-modal>
  </n-space>
</template>

<script>
export default defineComponent({
  setup() {
    const batchDeleteDialogVisible = ref(false);

    const confirmBatchDelete = async () => {
      if (selectedRowKeys.value.length > 0) {
        const response = await Promise.all(selectedRowKeys.value.map(id => deleteTheme(id)));

        const success = response.every(res => res.data.code === 200);

        if (success) {
          message.info("批量删除成功");
          loadThemes();
        } else {
          message.error("批量删除失败");
        }
      }
      batchDeleteDialogVisible.value = false;
    };

    const cancelBatchDelete = () => {
      batchDeleteDialogVisible.value = false;
    };

    const batchDelete = async () => {
      if (selectedRowKeys.value.length > 0) {
        // 打开确认模态框
        batchDeleteDialogVisible.value = true;
        return;  // 不执行实际删除操作,等待用户确认
      }
      // 如果没有选中行,直接返回
      message.warning("请选择要删除的行");
    };

    // ... 其他内容 ...
    
    return {
      // ... 其他返回值 ...
      batchDeleteDialogVisible,
      confirmBatchDelete,
      cancelBatchDelete,
    };
  }
});
</script>

在这段代码中,我们添加了一个批量删除按钮和相应的确认模态框。当用户点击批量删除按钮时,会先弹出确认模态框,用户可以选择确认或取消批量删除。确认删除时,会调用 confirmBatchDelete 方法执行批量删除操作。这个示例使用 Naive UI 提供的 NButton 和 NModal 组件来实现界面元素。

selectedRowKeys.value.map(id => deleteTheme(id)):这部分代码使用 map 函数将 selectedRowKeys.value 数组中的每个元素(即选中行的标识符)映射为一个 Promise 对象,这个 Promise 对象代表了一个异步操作,即删除对应标识符的行。

**Promise.all(…):**Promise.all 是一个 Promise 工具函数,接受一个包含多个 Promise 的可迭代对象(比如数组),返回一个新的 Promise。这个新 Promise 在所有传入的 Promise 都成功完成时才会被解决(resolved),并返回一个包含所有 Promise 结果的数组

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TzeHong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值