vue下载和上传的地址动态ip地址配置方法

vue3结合element-plus实现【下载文件】和【上传文件】的动态ip地址配置

效果图

一、修改【文件上传】静态地址

1、首先引入axios

import axios from "@/utils/request";
import { getToken } from "@/utils/auth";

定义

const importDialogVisible = ref(false);
const uploadedFile = ref();
const uploadedFileRef = ref(null);

2、将:action 修改

:action="uploadAction"

3、然后定义uploadAction

const uploadAction = computed(() => {return `${axios.defaults.baseURL}/permit/xxx/import`;// 修改为你自己的
});

二、修改【下载模板】静态地址:

修改前:

修改后动态的:

1、代码

 const url = `${axios.defaults.baseURL}/xxx/xxx-xxx/xxx/download`;替换为你的接口

例如:

// 下载模板函数
function downloadTemplate(row) {const id = row.id; // 获取当前行的idconst url = `${axios.defaults.baseURL}/call/open-api-record/download/${id}`; // 构造请求URLlet a = document.createElement("a"); // 创建一个<a>元素a.href = url; // 设置下载链接a.style.display = "none"; // 使<a>元素不可见document.body.appendChild(a); // 将<a>元素添加到body中a.click(); // 模拟点击<a>元素,触发下载document.body.removeChild(a); // 下载后移除<a>元素
}


三、全部代码:

1、vue结构部分

   <!-- 导入对话框 --><el-dialog title="导入" v-model="importDialogVisible" width="550px"><el-form><el-form-item label="第一步"><el-buttontype="primary"texthref="#"target="_blank"@click="downloadTemplate"><el-icon name="el-icon-download" style="margin-right: 4px"><Download /></el-icon>下载模板</el-button></el-form-item><el-form-item label="第二步"><el-uploadref="uploadedFileRef"class="upload-demo"dragaction="uploadAction"multiple:on-success="handleUploadSuccess":on-error="handleUploadError":before-upload="beforeUpload":headers="{Authorization: `Bearer ${getToken()}`,}"accept=".xls,.xlsx"><el-icon class="el-icon--upload"><upload-filled /></el-icon><div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div><template #tip><div class="el-upload__tip">仅允许导入 .xls, .xlsx 格式文件</div></template></el-upload></el-form-item></el-form><template #footer><el-button @click="cancel">取 消</el-button><el-button type="primary" @click="confirmImport">确 定</el-button></template></el-dialog>

2、js逻辑部分代码:

import axios from "@/utils/request";
import { getToken } from "@/utils/auth";const importDialogVisible = ref(false);// 对话框默认关闭状态const importDialogVisible = ref(false);
const uploadedFile = ref();
const uploadedFileRef = ref(null);// 上传文件地址
const uploadAction = computed(() => {return `${axios.defaults.baseURL}/xx/xx/import`;// 这里替换为你的接口地址
});// 打开导入对话框并下载模板
function openImportDialog() {importDialogVisible.value = true;// 清除之前可能上传的文件if (uploadedFileRef.value) {uploadedFileRef.value.clearFiles();}
}// 下载模板函数
function downloadTemplate() {// 使用window.open进行下载const url = `${axios.defaults.baseURL}/xxx/xxx/xxx/download`;window.open(url, "_blank");// 兼容更多的浏览器(一些浏览器可能会阻止window.open触发下载)// a标签模拟点击let a = document.createElement("a");a.href = url;a.download = "Material_Template.xls"; // 确保文件名有正确的扩展名a.style.display = "none";document.body.appendChild(a);a.click();document.body.removeChild(a);
}// 上传成功处理
function handleUploadSuccess(response, file) {console.log("上传成功:", response, file);uploadedFile.value = file.raw; // 存储上传的文件// 提示信息if (response.code === 200) {proxy.$message.success(response.msg);} else {proxy.$message.error(response.msg);}// 关闭导入对话框// importDialogVisible.value = false;// 刷新列表getList();
}
// 上传失败处理
function handleUploadError(err, file) {// 处理上传失败的逻辑console.error("上传失败:", err);
}// 上传前的检查
function beforeUpload(file) {const isExcel =file.type === "application/vnd.ms-excel" ||file.type ==="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";if (!isExcel) {this.$message.error("上传文件只能是 Excel 格式!");}return isExcel;
}function confirmImport() {console.log("取消按钮");// 检查是否上传了文件if (!uploadedFile.value) {ElMessage.error("请先上传文件!");return;}// 关闭导入对话框importDialogVisible.value = false;// 刷新列表getList();// 准备要发送的 FormDataconst formData = new FormData();
}// 取消按钮
function cancel() {open.value = false;importDialogVisible.value = false;// 点击取消按钮的时候关闭对话框// 清空上一次的上传文件列表if (uploadedFileRef.value) {uploadedFileRef.value.clearFiles();}reset();
}

3、css样式部分:

<style scoped lang="scss">
.custom-dialog .el-dialog__body {padding: 20px 30px;
}.custom-form .el-form-item {margin-bottom: 20px;
}.tag-container {display: flex;flex-wrap: wrap;gap: 10px;
}.tag-container .el-tag {cursor: pointer;user-select: none;padding: 6px 12px;border-radius: 4px;background-color: #f4f4f5;border-color: #e9e9eb;color: #909399;
}.tag-container .el-tag.tag-active {color: #fff;
}.dialog-footer {display: flex;justify-content: flex-end;gap: 12px;padding-top: 10px;
}
.el-tag {margin: 4px;
}
.upload-demo {border: 1px dashed #d9d9d9;border-radius: 6px;padding: 10px;text-align: center;width: 90%;min-height: 150px;
}
.el-upload__text {margin-top: 10px;
}
.review-dialog {padding: 20px;height: 400px;overflow: auto;
}
:deep(.pagination-container .el-pagination) {right: 20px !important;position: absolute;
}
</style>

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

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

相关文章

基于 Python Django 的花卉商城系统的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

[Qt] 信号和槽(1) | 本质 | 使用 | 自定义

目录 一、信号和槽概述 二、本质 底层实现 1. 函数间的相互调用 2. 类成员中的特殊角色 三、使用 四. 自定义信号和槽 1. 基本语法 (1) 自定义信号函数书写规范 (2) 自定义槽函数书写规范 (3) 发送信号 (4) 示例 A. 示例一 B. 示例二 —— 老师说“上课了”&…

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画&#xff0c;让我们的角色动了起来&#xff0c;这一切变得比较有意思了起来。不过我们发现&#xff0c;角色虽然说是动了起来&#xff0c;不过只是在不停地原地踏步而已&#xff0c;而且我们也没有办法通过键盘来控制这个角色来进行移动…

overscroll-behavior-解决H5在ios上过度滚动的默认行为

1. 问题 开发H5的过程中&#xff0c;经常会有android和ios两边系统需要兼容的情况。在ios上一直有个问题是当H5内容触及到页面顶部或底部时&#xff0c;还是可以被人为的往下或往下拉动界面。当然可能有的情况是比较适用的&#xff0c;比如你往下拉动&#xff0c;然后在导航栏…

复杂对象的创建与组装 - 建造者模式(Builder Pattern)

建造者模式&#xff08;Builder Pattern&#xff09; 建造者模式&#xff08;Builder Pattern&#xff09;建造者模式&#xff08;Builder Pattern&#xff09;概述建造者模式结构图代码 talk is cheap&#xff0c; show you my code总结 建造者模式&#xff08;Builder Patter…

Linux-mac地址

mac地址 由6位16进制数组成。最高字节的最低位&#xff0c;0表示单播地址&#xff0c;1表示多播地址。最高字节的第二位&#xff0c;0表示全局地址&#xff0c;1表示本地地址。 单播地址&#xff1a;单播MAC地址用于一对一的通信模式&#xff0c;即从单一的源端发送到单一的目…

SAP学习笔记 - 豆知识14 - Msg 番号 M7562 - 取引Type WL 对应的番号範囲中不存在2025年度 OMBT

这种类似的以前也写过&#xff0c;原因就是自动採番的番号没弄。 比如跨年了&#xff0c;那该新年度的番号范围没弄啊&#xff0c;就会出这种错误。 把番号范围给加一下就可以了。 1&#xff0c;现象 比如点 VL02N 出荷传票变更 画面&#xff0c;点 出库确认 就会出如下错误…

一文理清JS中获取盒子宽高各方法的差异

前言 这段时间在研究一个反爬产品&#xff0c;环境检测用到了很多个盒子宽高取值方法&#xff0c;如window.outerWidth、window.screen.availWidth&#xff0c;各个方法取值结果不大相同&#xff0c;在此记录下遇到的方法。 各宽方法区别 这里就讲解下各宽度方法的区别&…

sqoop将MySQL数据导入hive

使用脚本加载数据 MySQL有一张表 hive创建一张相同的表 编写脚本同步数据 [rootmaster sqoop]# vim stu.sh#!/bin/bash SQOOP/usr/local/soft/sqoop-1.4.6/bin/sqoop $SQOOP import --connect jdbc:mysql://192.168.67.100:3306/sqoop \--username root \--password 123456 \-…

Docker Compose编排

什么是 Docker Compose? Docker Compose 是 Docker 官方推出的开源项目&#xff0c;用于快速编排和管理多个 Docker 容器的应用程序。它允许用户通过一个 YAML 格式的配置文件 docker-compose.yml 来定义和运行多个相关联的应用容器&#xff0c;从而实现对容器的统一管理和编…

[羊城杯 2024]hiden

一顿解压之后发现有两个文件&#xff1a; 尝试了Rot47解密&#xff0c;得到一个看起来挺像一回事的解码结果&#xff1a; 再将得到的解码结果试试Rot13解密&#xff0c;成功得到正确的解码结果&#xff1a; import wave with open(flag.txt, rb) as f:txt_data f.read()file_l…

LeetCode - 初级算法 数组(只出现一次的数字)

只出现一次的数字 这篇文章讨论如何找到一个数组中只出现一次的数字,确保算法的时间复杂度为线性,且只使用常量额外空间。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两…

【谷歌开发者月刊】十二月精彩资讯回顾,探索科技新可能

我们在今年的尾声中回顾本月精彩&#xff0c;开发者们借助创新技术为用户打造温暖的应用体验&#xff0c;展现技术与实用的结合。欢迎您查阅本期月刊&#xff0c;掌握最新动态。 本月看点 精彩看点多多&#xff0c;请上下滑动阅览 01DevFest 北京站和上海站圆满举办&#xff0c…

LinuxC高级day4

作业: 1.思维导图 2.终端输入一个C源文件名(.c结尾)判断文件是否有内容&#xff0c;如果没有内容删除文件&#xff0c;如果有内容编译并执行改文件。 3.终端输入两个文件名&#xff0c;判断哪个文件的时间戳更新

数据中台与数据治理服务方案[50页PPT]

本文概述了数据中台与数据治理服务方案的核心要点。数据中台作为政务服务数据化的核心&#xff0c;通过整合各部门业务系统数据&#xff0c;进行建模与加工&#xff0c;以新数据驱动政府管理效率提升与政务服务能力增强。数据治理则聚焦于解决整体架构问题&#xff0c;确保数据…

MAC环境安装(卸载)软件

MAC环境安装&#xff08;卸载&#xff09;软件 jdknode安装node&#xff0c;并实现不同版本的切换背景 卸载node从node官网下载pkg安装的node卸载用 homebrew 安装的node如果你感觉删的不够干净&#xff0c;可以再细分删除验证删除结果 jdk 1.下载jdk 先去官网下载自己需要的版…

时间序列预测算法---LSTM

文章目录 一、前言1.1、深度学习时间序列一般是几维数据&#xff1f;每个维度的名字是什么&#xff1f;通常代表什么含义&#xff1f;1.2、为什么机器学习/深度学习算法无法处理时间序列数据?1.3、RNN(循环神经网络)处理时间序列数据的思路&#xff1f;1.4、RNN存在哪些问题?…

LinuxC高级day2

1.在家目录下创建目录文件&#xff0c;dir a.dir下创建dir1和dir2 b.把当前目录下的所有文件拷贝到dir1中&#xff0c; c.把当前目录下的所有脚本文件拷贝到dir2中 d.把dir2打包并压缩为dir2.tar.xz e.再把dir2.tar.xz移动到dir1中 f.解压dir1中的压缩包 g.使用tree工具&#x…

14. 日常算法

1. 面试题 02.04. 分割链表 题目来源 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 class Solution { public:ListNo…

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中&#xff0c;您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的&#xff0c;这意味着在系统重启后这些配置会丢失。为了将这些配置持久化&#xff0c;您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由&#xff0c;您可以将这些配…