< 封装公共导出模块:配合element实现提示 >

简介: 在 Vue + elementUi 开发中,我们偶尔会遇到需要导出的列表,或者指定位置的导出内容。在一个项目里面是十分常见的,但是由于导出代码有稍微有点长,不方便维护!基于项目开发需求,封装了一个公用的导出模块,模块入口提供了 四个参数,分别是:导出接口地址导出参数对象导出文件名称导出时选择的服务地址(需要配合config文件实现选择功能)。且基于信息安全问题,实现信息提示,当提示点击遵守规则才允许下载文件!

JavaScript封面.gif


👉 前言

在 Vue + elementUi 开发中,我们偶尔会遇到需要导出的列表,或者指定位置的导出内容。在一个项目里面是十分常见的,但是由于导出代码有稍微有点长,不方便维护!

基于项目开发需求,封装了一个公用的导出模块,模块入口提供了 四个参数,分别是: 导出接口地址导出参数对象导出文件名称导出时选择的服务地址(需要配合config文件实现选择功能) 。 且基于信息安全问题,实现信息提示,当提示点击遵守规则才允许下载文件!

👉 一、原理

通过二次封装axios请求,将请求返回的文件流数据,通过blob转换成可下载文件的链接,并自行点击下载! 通过element + async、await实现异步暂停!

👉 二、实现案例

> 调用导出模块的Javascript模板

import exportExcel from "@/views/commonJs/exportExcel.js";
// 导出入参
let data = {
  ...
};
// 导出loading
this.exportExcelLoading = true;
exportExcel(this.exportUrl, data, '这里是文件标题', this.exportPathType)
.finally(() => { // 导出完毕后执行的操作
  this.exportExcelLoading = false;
});

> 公共导出模块

// 封装导出列表方法
import { PATH_HEADERS } from "@/config";  // 如需使用其他表头,需前往 config文件进行配置 
import axios from "axios";
import ElementUI from "element-ui";

const exportExcel = (path, data, title, pathHeaderType = 'API_PATH') => {
  return (async() => {
     await ElementUI.MessageBox.confirm('本系统涉及内部资料,注意保密,严禁以任何方式泄露!', '', {
      confirmButtonText: '我已阅读并将遵守',
      type: 'warning',
      showClose: false,
      showCancelButton: false
    })
    
    window.console.log(PATH_HEADERS)
    
    return axios({
      method: "POST",
      url: PATH_HEADERS[pathHeaderType] + path,
      data,
      headers: {
        "Content-Type": "application/json;charset=UTF-8",
      },
      responseType: "blob",
    })
      .then((res) => {
        const content = res.data;
        const blob = new Blob([content]);
        const fileName = `${title}.xls`;
        if ("download" in document.createElement("a")) {
          // 非IE下载
          const elink = document.createElement("a");
          elink.download = fileName;
          elink.style.display = "none";
          elink.href = URL.createObjectURL(blob);
          document.body.appendChild(elink);
          elink.click();
          URL.revokeObjectURL(elink.href); // 释放URL 对象
          document.body.removeChild(elink);
        } else {
          // IE10+下载
          navigator.msSaveBlob(blob, fileName);
        }
      })
      .catch(() => {
        ElementUI.Message.error("导出失败,请重试!");
      });
  })();
};

export default exportExcel;
案例仅供参考,禁止转载!

👉 三、效果演示

点击后弹窗

image.png

弹窗点击遵守后才允许导出文件!


往期内容 💨

🔥 < elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >

🔥 < element-Ui表格组件:表格多选功能回显勾选时因分页问题,导致无法勾选回显的全部数据 >

🔥 < 每日算法 - JavaScript解析:搜索旋转排序数组 >

🔥 < CSS小技巧:类似photoShop的混合模式(mix-blend-mode / background-blend-mode)使用 >

相关文章
|
机器学习/深度学习 算法 Python
一文速学-时间序列分析算法之加权移动平均法详解+Python代码实现
一文速学-时间序列分析算法之加权移动平均法详解+Python代码实现
2049 0
一文速学-时间序列分析算法之加权移动平均法详解+Python代码实现
|
存储 移动开发 小程序
【uniapp小程序】上传图片
【uniapp小程序】上传图片
3112 0
【uniapp小程序】上传图片
|
XML 移动开发 小程序
抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)
字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。
2921 0
抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)
|
关系型数据库 MySQL 数据库
Element el-date-picker 日期选择器详解
本文目录 1. 前言 2. 基本用法 3. 日期格式化 4. 选择其他日期单位 5. 选择多个日期 6. 带快捷选项 7. 禁用部分日期 8. 小结
7221 0
Element el-date-picker 日期选择器详解
|
8月前
|
JavaScript 数据可视化 前端开发
从零开始:使用 Vue-ECharts 实现数据可视化图表功能
本文介绍如何使用 Vue-ECharts 在 Vue 项目中快速开发图表,重点讲解安装、引入方式及分组柱状图的实现,帮助开发者高效完成数据可视化。
717 0
|
JavaScript
【vue】 vue2 中使用 Tinymce 富文本编辑器
【vue】 vue2 中使用 Tinymce 富文本编辑器
1860 6
|
资源调度 JavaScript 定位技术
Vue2使用百度地图展示或搜索地点(vue-baidu-map)
本文介绍了如何在 Vue 项目中使用 `vue-baidu-map` 插件,包括安装、全局注册及具体应用。首先通过 `yarn add vue-baidu-map` 安装插件,并在 `main.js` 中全局注册。然后展示了如何在地图上显示特定位置的标记,以及如何搜索地点并获取其经纬度和详细地址信息。代码示例提供了详细的实现方法和样式调整。如需使用,请确保已获取百度地图 API 的密钥。
3759 1