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

embedded/2025/1/17 12:09: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/embedded/154651.html

相关文章

检测模型安全的更高级的方法

1. 查询依赖攻击(Dependency Query Attack) 定义: 利用模型对上下文或外部知识库的依赖,通过操纵这些外部依赖来引导模型输出敏感或错误的信息。 实现方式: 在知识库中插入伪造的信息,观察模型如何处理…

输出电压读取READ_VOUT和输出电流读取READ_IOUT的十进制快速翻译方法

TPS546D24A的输出电压是通过READ_VOUT寄存器中的值转化得来。其格式为ULINEAR16。要将寄存器中的值转化为十进制,可以分三步走。 1. 读取VOUT_MODE的值,VOUT_MODE在PMBUS的定义中,是一个1字节的寄存器,地址为20h,用于…

Cursor 学习计划

我的 Cursor 学习计划 在当今这个科技飞速发展的时代,各种新兴的开发工具不断涌现,为我们的编程之旅带来了更多的便利和可能性。而 Cursor 作为一款备受瞩目的代码编辑器,以其强大的 AI 辅助编程功能吸引了众多开发者的目光。为了能够更好地…

戴尔电脑开机出现MBR和GPT处理

Windows无法安装到这个磁盘,选中的磁盘采用gpt分区形式解决方法。 方法二:转换磁盘格式为MBR,但是会清除所有磁盘分区 我们在这个错误提示的时候,不要重启电脑,直接在键盘上按下“ShiftF10”组合键,这时就会弹出CMD命…

AXIOS的引入和封装

Axios 是一个用于在浏览器和 Node.js 中进行 HTTP 请求的流行库。以下是 Axios 的基本使用说明,包括安装和定义。 一、安装 pnpm add axios 二、使用 import axios from axios; axios.get(http://139.186.166.35:3001/api/testGet).then(response > {console…

如何实现工作流自动化?实用案例分享

一、CI/CD 与自动化运维概述 (一)CI/CD 概念解析 在软件开发领域,CI/CD 是两个极为重要的实践,分别代表持续集成(Continuous Integration)和持续交付 / 持续部署(Continuous Delivery/Continuou…

Golang——包的循环引用问题(import cycle not allowed)和匿名导入

本文详细介绍Golang中包的循环引用问题(import cycle not allowed)和匿名导入问题。 文章目录 循环引用问题优势设计原因解决方法 明确导入的包必须使用匿名导入 补充不允许隐式类型转换 循环引用问题 Go 的设计哲学是避免复杂的循环依赖,从而强制开发者更清晰地思…

标准Android开发jdk和gradle和gradle AGP和AndroidStudio对应版本

还在为用什么gradle版本烦恼吗?编译不过IDE不开始下载第三方库吗?是时候匹配下你的gradle编译版本了: 1.Gradle 各版本支持的 JDK 版本范围如下: Gradle 版本最低支持 JDK最高支持 JDK7.0 - 7.6JDK 8JDK 178.0 - 8.2JDK 11JDK 1…