当前位置:首页 > VUE

vue实现批量导出

2026-01-19 10:52:31VUE

Vue 实现批量导出的方法

使用第三方库(如 xlsx 和 file-saver)

安装依赖库:

npm install xlsx file-saver --save

创建导出逻辑:

import XLSX from 'xlsx';
import { saveAs } from 'file-saver';

export default {
  methods: {
    exportToExcel(data, fileName) {
      const worksheet = XLSX.utils.json_to_sheet(data);
      const workbook = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
      const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
      const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
      saveAs(blob, `${fileName}.xlsx`);
    },
    handleBatchExport() {
      const dataList = [...]; // 需要导出的数据数组
      dataList.forEach((data, index) => {
        this.exportToExcel(data, `export_${index + 1}`);
      });
    }
  }
}

使用纯前端实现(无依赖)

创建 CSV 导出方法:

export default {
  methods: {
    exportToCSV(data, fileName) {
      const headers = Object.keys(data[0]).join(',');
      const rows = data.map(item => Object.values(item).join(','));
      const csvContent = [headers, ...rows].join('\n');
      const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
      const link = document.createElement('a');
      link.href = URL.createObjectURL(blob);
      link.setAttribute('download', `${fileName}.csv`);
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    },
    batchExportCSV(dataList) {
      dataList.forEach((data, index) => {
        this.exportToCSV(data, `export_${index + 1}`);
      });
    }
  }
}

结合后端 API 实现

前端请求批量导出:

export default {
  methods: {
    async batchExportFromAPI(ids) {
      try {
        const responses = await Promise.all(
          ids.map(id => axios.get(`/api/export/${id}`, { responseType: 'blob' }))
        );

        responses.forEach((res, index) => {
          const blob = new Blob([res.data]);
          const link = document.createElement('a');
          link.href = URL.createObjectURL(blob);
          link.setAttribute('download', `export_${ids[index]}.xlsx`);
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        });
      } catch (error) {
        console.error('导出失败:', error);
      }
    }
  }
}

优化用户体验

添加进度提示:

export default {
  data() {
    return {
      exportProgress: 0,
      totalExports: 0
    };
  },
  methods: {
    async batchExportWithProgress(dataList) {
      this.totalExports = dataList.length;
      this.exportProgress = 0;

      for (const [index, data] of dataList.entries()) {
        await this.exportToExcel(data, `export_${index + 1}`);
        this.exportProgress = Math.round(((index + 1) / this.totalExports) * 100);
      }
    }
  }
}

模板中添加进度显示:

vue实现批量导出

<template>
  <div>
    <button @click="batchExportWithProgress(dataList)">批量导出</button>
    <div v-if="exportProgress > 0">
      导出进度: {{ exportProgress }}%
    </div>
  </div>
</template>

标签: 批量vue
分享给朋友:

相关文章

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…

vue实现mui

vue实现mui

使用 Vue 实现 MUI(Material-UI)风格的界面 Vue 本身不直接提供 MUI(Material Design)组件,但可以通过集成第三方库或手动实现来达到类似效果。以下是几种常见方法…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue实现插件

vue实现插件

Vue 插件实现方法 Vue 插件通常用于为 Vue 应用添加全局功能或共享功能。以下是实现 Vue 插件的核心步骤: 插件基本结构 Vue 插件需要暴露一个 install 方法,该方法接收 Vu…

vue实现 页面

vue实现 页面

Vue 实现页面的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 是官方脚手架工具,适合传统项目;Vite 提供更快的现代构建体验。 npm cre…