Vue3+ element 实现导入导出

一、导入功能相关代码分析
相关变量定义
importVisible:这是一个ref类型的响应式变量,用于控制导入对话框的显示与隐藏,初始值为false。当用户点击 “导入” 按钮时,会尝试将其值设为true来显示导入对话框,若出现异常则提示相应错误信息。
file:同样是ref类型的变量,用于存储用户选择要上传的文件对象,后续在文件上传等操作中会以此文件对象作为基础数据进行处理。
pre_import:ref类型的变量,作为一个标志位,在文件预览及相关流程中起到控制作用,初始值为false,在特定逻辑执行过程中会根据需要改变其值。
importDialogRef:也是ref类型,用于获取导入对话框组件的引用,方便后续调用组件内部的方法(比如更新导入结果的展示等操作)。
主要函数实现及逻辑
handleImport函数
javascript
const handleImport = async () => {
try {
importVisible.value = true;
} catch (error) {
console.error(‘导入组件加载失败:’, error);
ElMessage.error(‘导入功能加载失败,请刷新页面重试’);
}
};
此函数是用户触发导入操作的入口,即点击页面上的 “导入” 按钮时会执行该函数。它的主要逻辑就是尝试将importVisible的值设为true,以显示导入对话框,让用户进行后续的文件选择等操作。若在显示导入对话框的过程中出现加载失败的情况(比如组件加载异常),会在控制台打印错误信息,并通过ElMessage组件向用户提示导入功能加载失败,建议用户刷新页面重试。
handleDownloadTemplate函数
javascript
const handleDownloadTemplate = async () => {
const res = await DeviceModelApi.downloadPropertyTemplate();
const blob = new Blob([res.data], {
type: ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’
});
const filename = 物模型属性模板_${new Date().getTime()}.xlsx;
const url = window.URL.createObjectURL(blob);
downloadFile(url, filename);

ElMessage.success(‘下载成功’);
};
这个函数用于处理下载导入模板的操作。首先,它会调用后端DeviceModelApi中的downloadPropertyTemplate方法来获取模板数据,然后将返回的数据包装成Blob对象,并指定合适的文件类型(这里是 Excel 文件格式对应的类型)。接着,根据当前时间戳生成一个唯一的文件名,通过window.URL.createObjectURL创建一个临时的 URL 对象,再调用downloadFile函数进行实际的文件下载操作,最后使用ElMessage组件向用户提示下载成功的消息,告知用户模板下载已顺利完成。
handleFileUpload函数
javascript
const handleFileUpload = async (uploadFile) => {
file.value = uploadFile;
try {
const formData = new FormData();
formData.append(‘file’, uploadFile);
formData.append(‘clear_existing’, ‘true’);
formData.append(‘thing_model_id’, props.detailId);
formData.append(‘pre_import’, pre_import.value);

const res = await DeviceModelApi.importProperties(formData);let str = res.data.msg || '';
const successCount = Number(str.match(/成功导入(\d+)条/)?.[1] || 0);
const failCount = Number(str.match(/失败(\d+)条/)?.[1] || 0);
const totalCount = successCount + failCount;let errorList = [];
if (failCount > 0) {errorList = res.data.data.error;
}// 更新导入对话框的数据
importDialogRef.value?.updateImportResult({totalCount,successCount: Number(successCount),failCount: Number(failCount),errorList,fileText: 'attr'
});pre_import.value = false;

} catch (error) {
ElMessage.error(error.response?.data?.msg || error.message || ‘上传失败’);
}
};
该函数负责实际的文件上传操作,接收用户选择的文件对象作为参数。首先将传入的文件对象赋值给file.value保存起来。接着创建一个FormData对象,往里面添加了多个关键信息,包括要上传的文件本身、是否清除现有数据的标识、关联的模型 ID 以及pre_import标志位的值等。之后调用后端DeviceModelApi的importProperties方法将FormData对象中的数据发送到后端进行文件上传处理。在获取后端返回的结果后,会从返回消息中解析出成功导入和失败的记录数量,若失败数量大于 0,则从返回数据中获取错误列表。最后通过导入对话框组件的引用(importDialogRef.value)调用updateImportResult方法来更新导入对话框中展示的导入结果相关信息,比如总记录数、成功记录数、失败记录数、错误列表以及文件类型标识(这里标记为’attr’)等内容,并且将pre_import的值重置为false。若在文件上传过程中出现错误,则通过ElMessage组件向用户提示相应的错误消息,告知用户上传失败。
handlePreview函数
javascript
const handlePreview = () => {
if (file.value) {
pre_import.value = true;
handleFileUpload(file.value)
.then(() => {
// 当handleFileUpload执行成功(Promise状态变为resolved)后,调用fetchList
return fetchList();
})
.catch((error) => {
ElMessage.error(error.response?.data?.msg || error.message || ‘文件上传或数据获取失败’);
});
}
};
此函数用于实现文件预览功能。它先判断是否已经有选择的文件(即file.value是否有值),如果有文件,则将pre_import的值设为true,随后调用handleFileUpload函数进行文件上传操作。当handleFileUpload函数执行成功(其返回的 Promise 状态变为resolved)后,会接着调用fetchList函数来获取相关数据(这些数据可能是用于在界面上展示文件预览内容的数据)。若在整个文件上传或者后续获取数据的过程中出现错误,就会通过ElMessage组件向用户提示相应的错误信息,告知用户是文件上传环节还是数据获取环节出现了问题,方便用户了解情况。
二、导出功能相关代码分析
handleExport函数
javascript
const handleExport = async () => {
const res = await DeviceModelApi.exportProperties({thing_model_id: props.detailId});
if (res.data.size === 0) {
ElMessage.error(‘暂无数据可导出’);
return;
}
const blob = new Blob([res.data], {
type: ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’
});
const filename = 物模型属性_${new Date().getTime()}.xlsx;
const url = window.URL.createObjectURL(blob);
downloadFile(url, filename);

ElMessage.success(‘导出成功’);
};
这个函数用于处理导出数据的操作。首先调用后端DeviceModelApi的exportProperties方法,传入关联的模型 ID(通过props.detailId获取)来获取要导出的数据。接着判断返回的数据大小,如果为 0,意味着没有可导出的数据,此时通过ElMessage组件向用户提示暂无数据可导出的消息,并结束函数执行。若有数据,则将返回的数据包装成Blob对象,设置好对应的文件类型(适用于 Excel 文件格式),然后生成一个包含当前时间戳的唯一文件名,创建一个临时的 URL 对象,再通过downloadFile函数实现实际的文件下载操作,最后向用户提示导出成功的消息,告知用户数据已成功导出。
三、整体交互与流程总结
导入流程:用户点击 “导入” 按钮触发handleImport函数显示导入对话框,在对话框内可选择下载模板(通过handleDownloadTemplate函数),选择好文件后点击提交按钮会触发handleFileUpload函数进行文件上传操作,上传完成后根据结果更新导入对话框的展示内容,并且可以通过 “文件预览” 按钮触发handlePreview函数来查看文件相关内容(前提是已经选择了文件且文件上传等操作按流程执行)。
导出流程:用户点击 “导出” 按钮执行handleExport函数,该函数先从后端获取要导出的数据,若有数据则进行文件格式包装、生成文件名、创建临时 URL 等操作后下载文件,并在相应节点通过ElMessage组件向用户反馈操作结果,如提示暂无数据可导出或者导出成功等消息。
与后端交互:在导入功能的handleDownloadTemplate、handleFileUpload以及导出功能的handleExport等函数中,都调用了后端DeviceModelApi提供的对应方法,传递相应的参数(如模型 ID、文件数据等)进行模板下载、文件上传、数据获取等操作,并根据后端返回的数据进行前端界面的相应处理和展示,实现了前后端的数据交互与功能协同。
界面反馈:整个导入导出过程中,充分利用了ElMessage组件在各个关键操作节点(如下载成功、上传失败、无数据可导出、导出成功等)向用户展示相应的提示信息,使得用户能够清晰地了解操作的执行结果情况,保证了良好的用户交互体验。

重点
接口文档参数设置
// 导出数据
exportProperties: (params) =>
axios({
url: genApiPath(‘/api/device/properties/export/’),
method: ‘get’,
params,
responseType: ‘blob’
}),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912106.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git安装(纯小白版)

一、Git安装 1. 简介 Git是一款免费开源的分布式版本控制系统,常用于软件开发。它能记录文件在不同时间的改动,让用户在需要时查看、恢复旧版本。支持多人协作开发,多人可同时修改项目文件,Git会处理好冲突。开发者能在本地创建…

cocos2 本地根据文本内容生成二维码

cocos2 本地根据文本内容生成二维码 之前做了一个功能,就是cocos2小游戏,结算页面需要有一个二维码,二维码内容是一个网址,这个网址需要根据用户游玩分数确定访问哪个网址,但是这个小游戏是单机小游戏,不连…

87.xilinx FPGA读取器件id方法

dout数据高位先出msb module chip_id_reader(input clk,input reset,output [56:0] dna_value,output dna_valid );reg [6:0] bit_count;reg [56:0] dna_shift_reg;reg dna_read;reg dna_shift;wire dna_out;// 实例化DNA_PORT原语DNA_PORT #(.SIM_DNA_VALUE(57h123456789ABCD…

AcWing--数据结构(二)

Trie 树 用来高效的快速存储和查找字符串集合的数据结构 如存储:abcdef,abdef,aced,... 从根节点开始存储,从前往后存储,看是否有a,没有就创建,依次存储。 一般在最后一个字符打个标记,意思就是当前字符…

论基于架构的软件设计方法(ABSD)及应用

2025年3月22日作 题目 基于架构的软件设计(Architecture-Based Software Design, ABSD)方法以构成软件架构的商业、质量和功能需求等要素来驱动整个软件开发过程。ABSD是一个自顶向下,递归细化的软件开发方法,它以软件系统功能的…

【Docker基础】Docker容器管理:docker exec详解

目录 1 docker exec命令概述 1.1 命令定位与作用 1.2 与相似命令对比 2 基本语法与参数解析 2.1 完整命令语法 2.2 核心参数详解 2.2.1 -i, --interactive 2.2.2 -t, --tty 2.2.3 -d, --detach 2.2.4 -e, --env 2.2.5 -u, --user 2.2.6 -w, --workdir 3 典型使用场…

CSS3实现同心圆效果

效果图&#xff1a; 文本左侧显示一个 外圆&#xff08;30px&#xff0c;半透明&#xff09; 和 内圆&#xff08;12px&#xff0c;实色&#xff09; 的同心圆&#xff1a; <!DOCTYPE html> <html> <head><style>.text-with-circles {position: rela…

Spring Boot项目开发实战销售管理系统——系统设计!

Spring Boot项目开发实战——销售管理系统 在前面的章节中我们详细介绍了Spring Boot各个功能的使用&#xff0c;本章将新建一个销售管理系统项目&#xff0c;演示项目从需求分析到功能分解&#xff0c;再到各个功能的实现过程&#xff0c;最后再使用Docker部署上线的完整过程…

RK3588开发笔记-Hailo AI模块调试

目录 前言 一、RK3588 与 Hailo AI 模块简介 RK3588 Hailo AI 模块 二、原理图连接 三、内核配置 四、Hailo驱动编译 五、Hailo模块验证 总结 前言 在边缘计算和人工智能应用不断发展的今天,将高性能的 AI 模块与功能强大的开发板相结合,能为各种创新应用提供坚实的基…

【Pytorch】语言模型上的动态量化

目录 ■导言 ①定义模型 ②加载文本数据 ③加载预训练模型 ④测试动态量化 ■结论 ■导言 量化涉及将模型的权重和激活从float转换为int&#xff0c;这可以导致更小的模型大小和更快的推理&#xff0c;并且只对准确性造成很小的影响。 本文将把最简单的量化形式-动态量…

【有啥问啥】大模型效率部署之Prefill-Decode分离

大模型效率部署之Prefill-Decode分离 Prefill 与 Decode 阶段定义与流程 LLM 推理分为两个阶段&#xff1a;预填充&#xff08;Prefill&#xff09;和解码&#xff08;Decode&#xff09;。在 Prefill 阶段&#xff0c;模型将完整地处理用户输入的所有提示词&#xff08;prom…

QT Creator构建失败:-1: error: Unknown module(s) in QT: serialport

Qt Creator和Qt SDK版本&#xff1a; Product: Qt Creator 17.0.0 Based on: Qt 6.9.1 (MSVC 2022, x86_64) Built on: Jun 17 2025 16:32:24 From revision: 4983f08c47 问题&#xff1a; 在使用串口的时候&#xff0c;在pro 文件中添加了 QT serialport&#xff…

基于PostgreSQL的百度或高德等POI多层级分类的数据库设计

目录 前言 一、百度 VS 高德 POI分类 1、高德POI分类 2、百度POI分类 3、分类对比与区别 二、POI分类表设计 1、物理表结构 2、数据存储 3、数据查询 三、总结 前言 在当今数字化快速发展的时代&#xff0c;地理信息数据的重要性日益凸显&#xff0c;而POI&#xff08…

AutoVLA:端到端自动驾驶中具有自适应推理和强化微调功能的视觉-语言-动作模型

26年6月来自UCLA的论文“AutoVLA: A Vision-Language-Action Model for End-to-End Autonomous Driving with Adaptive Reasoning and Reinforcement Fine-Tuning”。 视觉-语言-动作 (VLA) 模型的最新进展通过利用世界知识和推理能力为端到端自动驾驶带来了希望。然而&#x…

知攻善防靶机 Windows 近源OS

知攻善防靶机 [hvv训练]应急响应靶机训练-近源渗透OS-1 前景需要&#xff1a;小王从某安全大厂被优化掉后&#xff0c;来到了某私立小学当起了计算机老师。某一天上课的时候&#xff0c;发现鼠标在自己动弹&#xff0c;又发现除了某台电脑&#xff0c;其他电脑连不上网络。感觉…

「Java基本语法」求三位整数的各位数字之和

引言 现在来玩一个数字拆解游戏。想象一下手里拿着一个三位数的积木,现在需要把它拆成个位、十位和百位三块,然后把它们加起来。这个操作在实际编程中很常见,例如做密码校验、游戏分数计算等都可能会用到。 案例:求三位数各位之和 编写程序,从键盘输入一个三位的正整数…

SciChart 助力蛋白质结构研究:实时可视化推动生物科学新突破

SciChart是高性能数据可视化领域的优秀图表产品&#xff0c;深受数据密度和精度至关重要行业的信赖&#xff0c;包括航空航天、石油和天然气、科学研究和赛车运动等。作为F1中使用的解决方案&#xff0c;SciChart被NASA所依赖&#xff0c;并受到90%的顶级医疗技术公司青睐&…

基于Docker与cpolar的Leantime部署方案实现低成本跨地域团队协作

文章目录 前言1.关于Leantime2.本地部署Leantime3.Leantime简单实用4.安装内网穿透5.配置Leantime公网地址6. 配置固定公网地址 前言 各位小伙伴们&#xff0c;让我们暂时把目光从云端的分布式系统转向本地环境。在您的Linux主机上&#xff0c;我们将搭建一个高性价比的协作平…

阿里云Redhat系Linux修改ssh默认端口

阿里云Redhat系Linux修改ssh默认端口 在阿里云买了个服务器&#xff0c;想着ssh的默认端口是22&#xff0c;这不安全。 我就将修改ssh默认端口的过程记录下来了&#xff0c;方便日后回看。 本命令适用于 Redhat系Linux&#xff0c;例如 Redhat、Centos、Alibaba Cloud Linux、…

lib61850 代码结构与系统架构深度分析

一、整体代码结构概述 lib61850 采用模块化设计&#xff0c;核心代码位于src目录下&#xff0c;主要包含以下子目录&#xff1a; src/ ├── hal/ # 硬件抽象层 ├── mms/ # MMS协议实现 ├── goose/ # GOOSE协议实现 ├──…