项目练习:若依系统数据导出功能-Vue前端部分

server/2025/1/19 10:47:47/

文章目录

  • 一、设计说明
  • 二、代码实现
    • 1、package.json
    • 2、ruoyi.js
    • 3、request.js
    • 4、main.js中挂载download方法
    • 5、使用案例

一、设计说明

web系统的数据导出功能是必备的。
所以,这个功能设计要满足以下要求
1、全局可用。
2、参数:下载的接口地址,查询的报表参数,下载后生成的文件名。

二、代码实现

1、package.json

"file-saver": "2.0.5",

2、ruoyi.js

/**
* 参数处理
* @param {*} params  参数
*/
export function tansParams(params) {let result = ''for (const propName of Object.keys(params)) {const value = params[propName];var part = encodeURIComponent(propName) + "=";if (value !== null && value !== "" && typeof (value) !== "undefined") {if (typeof value === 'object') {for (const key of Object.keys(value)) {if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {let params = propName + '[' + key + ']';var subPart = encodeURIComponent(params) + "=";result += subPart + encodeURIComponent(value[key]) + "&";}}} else {result += part + encodeURIComponent(value) + "&";}}}return result
}// 验证是否为blob格式
export function blobValidate(data) {return data.type !== 'application/json'
}

3、request.js

response拦截器

  // 二进制数据则直接返回if (res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer') {return res.data}

download方法实现

import { Message, Loading } from 'element-ui'
import { tansParams, blobValidate } from "@/utils/ruoyi";
import { saveAs } from 'file-saver'
let downloadLoadingInstance;
export function download(url, params, filename, config) {downloadLoadingInstance = Loading.service({text: "正在下载数据,请稍候",spinner: "el-icon-loading",background: "rgba(0, 0, 0, 0.7)"})return service.post(url, params, {transformRequest: [(params) => { return tansParams(params) }],headers: { 'Content-Type': 'application/x-www-form-urlencoded' },responseType: 'blob',...config}).then(async (data) => {const isBlob = blobValidate(data);if (isBlob) {const blob = new Blob([data])saveAs(blob, filename)} else {const resText = await data.text();const rspObj = JSON.parse(resText);const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']Message.error(errMsg);}downloadLoadingInstance.close();}).catch((r) => {console.error(r)Message.error('下载文件出现错误,请联系管理员!')downloadLoadingInstance.close();})
}

4、main.js中挂载download方法

import { download } from '@/utils/request'
Vue.prototype.download = download

5、使用案例

Vue文件的methods部分

handleExport(){this.download('system/role/export',{...this.queryParams},`role_${new Date().getTime()}.xlsx`)
}

http://www.ppmy.cn/server/159606.html

相关文章

基于 Java Spring Boot 开发的项目复盘与技术总结

基于 Java Spring Boot 开发的项目复盘与技术总结 在近期的项目开发中,我们团队大规模采用了 Java Spring Boot 框架,整个过程充满了挑战与收获。在此,对这次项目开发进行复盘总结,希望能为大家在 Spring Boot 开发实践中提供一些…

Multi-Pass 迭代器

The multi pass iterator - 1.87.0 Multi-Pass 迭代器 Spirit.Qi 的回溯与迭代器类型要求 在 Boost.Spirit.Qi 中,解析回溯需要以下几种迭代器类型之一:前向迭代器(forward iterator)、双向迭代器(bidirectional it…

实战指南:使用Wireshark捕获并解密HTTPS数据包

在网络安全和数据分析领域,捕获和分析网络数据包是理解网络行为、诊断问题和进行安全审计的重要手段。HTTPS(HyperText Transfer Protocol Secure)作为现代Web通信的主要协议,通过SSL/TLS加密确保了数据的安全传输。然而&#xff…

PP-OCR系统

我看书上的只到v2系统,所以我这里也只介绍V2,实际上他的包,我看了,已经出到V4了 整个系统包括,文本检测,方向分类,最后进行文本识别 PP-OCRV2改进如下: • 检测模型优化: (1) 采用…

centos 7 Mysql服务

将此服务器配置为 MySQL 服务器,创建数据库为 hubeidatabase,将登录的root密码设置为Qwer1234。在库中创建表为 mytable,在表中创建 2 个用户,分别为(xiaoming,2010-4-1,女,male&…

【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区

1. 初始化 ThisTimeLineID、RedoRecPtr 函数 InitXLOGAccess() 内部会初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局变量。 下面是这四个变量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…

生成模型:生成对抗网络-GAN

1.原理 1.1 博弈关系 1.1.1 对抗训练 GAN的生成原理依赖于生成器和判别器的博弈 生成器试图生成以假乱真的样本。判别器试图区分真假样本。 这种独特的机制使GAN在图像生成、文本生成等领域表现出色。 具有表现为: 生成器 (Generator, G) 生成器的目标是从一个随机噪声&…

python之二维几何学习笔记

一、概要 资料来源《机械工程师Python编程:入门、实战与进阶》安琪儿索拉奥尔巴塞塔 2024年6月 点和向量:向量的缩放、范数、点乘、叉乘、旋转、平行、垂直、夹角直线和线段:线段中点、离线段最近的点、线段的交点、直线交点、线段的垂直平…