vue-批量导出

it2024-11-23  16

第一步:安装插件

npm -i xlsx

第二步:main.js 挂载插件

import xlsx from "xlsx" Vue.prototype.xlsx = xlsx

第三步:编写导出组件,在使用xlsx,要使用this。

<template> <!-- 批量导出按钮 --> <div class="searchBox"> <el-button type="success" @click="exportExcel">导出EXCEL</el-button> </div> </template> <script> //这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等) //例如:import 《组件名称》 from '《组件路径》'; export default { //import引入的组件需要注入到对象中才能使用 components: {}, props: { //父组件选中的数据 selectionData:{ type:Array, default:null }, }, data() { //这里存放数据 return { loading: false, //表格加载动画是否开启 }; }, //监听属性 类似于data概念 computed: {}, //监控data中的数据变化 watch: {}, //方法集合 methods: { // 批量导出EXCEL exportExcel() { let selectionData = this.selectionData; if (selectionData.length === 0) { this.$message({ message: "请选择你要导出的客户数据", type: "warning", }); return; } // 加上一个loading 正在处理中.... let loading = this.$loading({ text: "正在处理中...", background: "rgba(0, 0, 0, 0.7)", }); // 把选中的数据导出成一个excel // formatJSONWeet(selectionData) 数据转换 name -> 姓名 console.log("前",selectionData); selectionData = this.formatJSONWeet(selectionData); console.log("后",selectionData); let sheet = this.xlsx.utils.json_to_sheet(selectionData); // https://www.jianshu.com/p/ea115a8e9107 var book = this.xlsx.utils.book_new(); // 创建一个excel this.xlsx.utils.book_append_sheet(book, sheet, "客户列表"); // 指定表名 this.xlsx.writeFile(book, `customlist${new Date().getTime()}.xlsx`); // 指定excel文件名 loading.close(); this.$emit('clearSelectionData',this.selectionData); //向父组件传递方法,关闭选择的选项 }, formatJSONWeet(result) { //根据自己的需要导出自己对应的字段 let propertyMap = { 编号: { key: "userId", type: "number", }, 姓名: { key: "username", type: "string", }, 状态: { key: "status", type: "string", rule: (val) => { return val == 0 ? "禁用" : "启用"; }, }, 邮箱: { key: "email", type: "string", }, 电话: { key: "mobile", type: "string", }, }; return result.map(item => { let obj = {}; Object.keys(propertyMap).forEach(key => { let { type, key: keyMap, rule } = propertyMap[key]; let value = item[keyMap]; typeof rule === "function" ? value = rule(value) : null; switch (type) { case 'string': value = String(value); break; case 'number': value = Number(value); break; } obj[key] = value; }); return obj; }); }, }, //生命周期 - 创建完成(可以访问当前this实例) created() {}, //生命周期 - 挂载完成(可以访问DOM元素) mounted() {}, beforeCreate() {}, //生命周期 - 创建之前 beforeMount() {}, //生命周期 - 挂载之前 beforeUpdate() {}, //生命周期 - 更新之前 updated() {}, //生命周期 - 更新之后 beforeDestroy() {}, //生命周期 - 销毁之前 destroyed() {}, //生命周期 - 销毁完成 activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发 }; </script> <style> </style>

在页面中使用

<template> <!-- 导出组件 --> <exportComponents :selectionData="dataListSelections" @clearSelectionData="clearDataList"></exportComponents> </template> <script> import exportComponents from "@/components/export/export"; export default { components: { exportComponents }, methods: { //清空选项数据 clearDataList(){ this.$refs.multipleTable.clearSelection(); }, } } </script>
最新回复(0)