vue3+ el-upload封装上传组件

  1. 组件功能介绍
    • 上传格式限制
    • 上传大小限制
    • 上传文件数量限制
    • 自定义上传区
    • 上传成功回调
    • 禁用上传开关与点击上传自定义事件
    • 暴露所以上传文件列表(uploadList)与当前文件数据(uploadLatestFile
  2. 组件代码Upload.vue
<template><div><div><el-uploadclass="flx-align-center":file-list="fileList":multiple="multiple":limit="limit":disabled="disabled":accept="fileType":show-file-list="false":http-request="handleHttpUpload":before-upload="beforeUpload":on-exceed="handleExceed"><slot name="upload-btn"><div class="upload-content"><el-button type="primary" :icon="UploadFilled" plain @click="handleClick">点击上传</el-button></div></slot></el-upload><!-- 提示 --><div class="upload-tip" v-if="tipShow"><slot name="tip">{{ tipComputed }}</slot></div></div><div class="upload-box"><slot></slot></div></div>
</template><script setup lang="ts" name="UploadBasics">
import { ref, computed } from "vue";
import { UploadFilled } from "@element-plus/icons-vue";
import type { UploadUserFile } from "element-plus";
import { ElNotification } from "element-plus";
import { uploadImg } from "@/api/modules/upload";
import { getFileType } from "@/utils/assetsFile";interface UploadFileProps {fileType: string;fileSize: number; // 允许上传文件的最大尺寸limit: number; // 允许上传文件的最大数量tipShow: boolean; // 是否显示提示multiple: boolean; // 是否可以多选fileList: UploadUserFile[];disabled: boolean;handleClick: () => void; // 点击上传按钮自定义事件, 可在禁用时触发
}const props = withDefaults(defineProps<Partial<UploadFileProps>>(), {fileType: ".pdf, .jpg, .png, .jpeg",fileSize: 10,tipShow: true,multiple: true,fileList: () => [],disabled: false
});// 提示
const tipComputed = computed(() => {const tip = props.fileType.replace(/\./g, "").replace(/,/g, "、").toUpperCase();return `支持${tip}格式,大小不得超过${props.fileSize}M`;
});// 文件上传前的钩子
const beforeUpload = rawFile => {// 判断文件类型, 不显示小数点const extension = getFileType(rawFile.name, 1);const fileType = props.fileType.replace(/\./g, ""); // 若传入类型有小数点,替换const imgType = fileType.includes(extension);if (!imgType) {ElNotification({title: "温馨提示",message: "上传图片不符合所需的格式!",type: "warning"});return false;}// 判断大小if (rawFile.size / 1024 / 1024 > props.fileSize) {ElNotification({title: "温馨提示",message: `上传图片大小不能超过 ${props.fileSize}M!`,type: "warning"});return false;}
};const handleExceed = () => {ElNotification({title: "温馨提示",message: `超出文件上传最大数量:${props.limit}`,type: "warning"});return false;
};// 上传文件请求
const uploadLatestFile = ref<UploadUserFile>(); // 最近上传的文件
const uploadList = ref<UploadUserFile[]>([]); // 所有上传的文件列表const handleHttpUpload = async options => {let formData = new FormData();formData.append("file", options.file);try {
// 上传请求const { data } = await uploadImg(formData);uploadLatestFile.value = {name: data.data.name as string,url: data.data.url};uploadList.value = [...uploadList.value,{name: data.data.name as string,url: data.data.url}];emits("upload-success", { uploadLatestFile: uploadLatestFile.value, uploadList: uploadList.value });} catch (error) {options.onError(error as any);}
};const emits = defineEmits(["upload-success"]);defineExpose({uploadList,uploadLatestFile
});
</script><style lang="scss" scoped>
// 上传按钮区
.upload-content {display: flex;flex-direction: column;
}// 上传文件显示容器
.upload-box {max-height: 400px;// margin-top: 10px;overflow: auto;
}// 提示
.upload-tip {display: flex;align-items: center;font-size: 12px;line-height: 32px;color: var(--el-label-color-regular);
}
</style>
  1. 使用示例一:
  • 使用默认的上传按钮
<Uploadref="uploadRef":file-size="20":limit="10":file-list="uploadItemRef?.newFileList"file-type="zip,png,jpg,jpeg,doc,docx,xls,xlsx,pdf,ppt,pptx"direction="horizontal"
>
<UploadItem ref="uploadItemRef" :file-list="fileList" :upload-list="uploadRef?.uploadList" />
</Upload>// UploadItem 是展示内容
  • 效果图展示:
    image.png
  1. 使用示例二:使用自定义的上传按钮
  • Upload上传组件内部使用UploadItem展示文件,展示文件内部又有上传功能:
<Upload ref="uploadRef"><UploadItem :file-list="dataList" :upload-list="uploadRef?.uploadList" />
</Upload>
  • UploadItem.vue 内:
<div class="file-div flx-justify-between" v-for="(item, index) in list" :key="index"><div class="flx-align-center"><img :src="getFileTypeImg(item.url)" :alt="item.name" /><span v-if="isExt">{{ item.name }}</span><!-- <span v-else>{{ item.name }}{{ getFileType(item.url) }}</span> --><span v-else>{{ item.name }}</span></div><div class="upload-btns"><el-button v-if="isDown" type="primary" text @click="handleDown(item)"> 下载 </el-button><Upload :tip-show="false" :multiple="false" @upload-success="uploadSuccess($event, item)"><template #upload-btn><img src="@/assets/images/disposal/reactupload.png" alt="reactupload" class="reactupload" /></template></Upload></div></div>
  • 效果图
    image.png

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

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

相关文章

启航数据科学:Jupyter Notebook安装全攻略,轻松入门!

目录 简介安装步骤 安装Python安装pip安装Jupyter Notebook 启动Jupyter Notebook基本使用常见问题总结 简介 Jupyter Notebook 是一个交互式的笔记本环境&#xff0c;支持运行和展示 Python 代码&#xff0c;以及文本、图表和公式。它广泛应用于数据分析、机器学习和科学计算…

在Stimulsoft 报告中连接来自 MySQL 的数据

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…

Firewalld 防火墙基础

Firewalld 防火墙基础 一、Firewalld概述firewalld 简介firewalld 和 iptables 的关系firewalld 与 iptables service 的区别 二、Firewalld 网络区域区域介绍Firewalld数据处理流程 三、Firewalld 防火墙的配置方法firewall-config 图形工具“区域”选项卡“服务”选项卡改变防…

仓库管理系统24--统计报表

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、引用LiveCharts 2、创建LiveChartViewModel using GalaSoft.MvvmLight; using LiveCharts.Wpf; using LiveCharts; using Sy…

【SQL注入】 数据库基础

MySQL中的库名 information_schema&#xff08;信息库&#xff09;—— 保存其他数据库里所有信息&#xff08;数据库名、表、字段的数据类型/访问权限&#xff09; mysql—— 存储用户名 密码 host performance_schema——内存数据库 数据放在内存中直接操作的数据库 sys—…

代码随想录训练营Day52

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、回文子串二、最长回文子序列 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 今天是跟着代码随想录刷题的第52天&#xff0c;主要学…

从新手到高手:Scala函数式编程完全指南,Scala 数据类型(4)

1、Scala 数据类型 Scala 与 Java有着相同的数据类型&#xff0c;下表列出了 Scala 支持的数据类型&#xff1a;

智能扫地机器人编译过程中的定位导航技术

智能扫地机器人的定位导航技术主要包括以下几种&#xff0c;下面将分点表示并归纳这些技术及其特点&#xff1a; 1.随机碰撞导航&#xff1a;这是最早期的导航方式&#xff0c;扫地机器人通过随机移动来覆盖地面。 特点&#xff1a;效率较低&#xff0c;容易重复清洁或遗漏区域…

CentOS 7报错Erro:NetworkManager is not running怎么处理?

CentOS 7系统报错Error: NetworkManager is not running&#xff0c;意思是NetworkManager未在运行&#xff0c;NetworkManager是Linux系统上管理网络设置的守护进程&#xff0c;负责自动处理和配置网络连接&#xff0c;未运行可能会导致网络连接问题。遇到报错Error: NetworkM…

运用大数据分析提升返利App的市场营销效果

运用大数据分析提升返利App的市场营销效果 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 随着信息技术的快速发展&#xff0c;大数据分析在各行各业的…

ros1仿真导航机器人 navigation

仅为学习记录和一些自己的思考&#xff0c;不具有参考意义。 1navigation导航框架 2导航设置过程 &#xff08;1&#xff09;启动仿真环境 roslaunch why_simulation why_robocup.launch &#xff08;2&#xff09;启动move_base导航、amcl定位 roslaunch why_simulation nav…

系统运行缓慢CPU飙高等问题的排查思路

系统运行缓慢和CPU飙高问题的排查思路 当系统运行缓慢或CPU使用率飙高时&#xff0c;可能有多种原因导致这一现象。以下是一些排查思路和方法&#xff1a; 1. 检查系统资源使用情况 - 任务管理器&#xff08;Windows&#xff09;或活动监视器&#xff08;Mac&#xff09;或top…

postgresql搭建

搭建postgresql-11.3&#xff0c;和客户端工具 1&#xff0c;准备对应的包&#xff0c;右键直接下一步安装完即可&#xff0c; 将postgresql设置为本地服务&#xff0c;方便启动&#xff0c; 2&#xff0c;用对应客户端软件连接&#xff0c;新建一个数据库controlDB 新建用户…

无偏归一化自适应心电ECG信号降噪方法(MATLAB)

心电信号作为一种生物信号&#xff0c;含有大量的临床应用价值的信息&#xff0c;在现代生命医学研究中占有重要的地位。但心电信号低频、低幅值的特点&#xff0c;使其在采集和传输的过程中经常受到噪声的干扰&#xff0c;使心电波形严重失真&#xff0c;从而影响后续的病情分…

你还不会买智能猫砂盆吗?跟你们详细讲解今年最火的智能猫砂盆!

智能猫砂盆的坑&#xff0c;想必有很多养猫家庭都踩过吧。自己买回来的机器&#xff0c;不是空间不够大&#xff0c;导致猫咪拉到外面去&#xff0c;就是铲不干净&#xff0c;还得自己进行二次清理&#xff0c;搞得这个智能猫砂盆白买了。那如果我们想要购买合适自己家猫咪的智…

数据链路层分析

文章目录 前言一、数据链路层概述二、终端之间的通信三、帧格式1.Ethernet_II型2.IEEE 802.3 四、MTU分析五、数据帧的传输1.MAC地址2.单播3.广播4.组播5.数据帧的收发 前言 网络中传输数据需要定义并遵循一些标准&#xff0c;以太网是根据IEEE802.3标准来管理和控制数据帧的&…

sqlserver开启CDC

1、背景 由于需要学习flink cdc&#xff0c;并且数据选择sqlserver&#xff0c;所以这里记录sqlserver的cdc开启操作步骤。 2、基础前提 官方介绍地址&#xff1a;https://learn.microsoft.com/zh-cn/sql/relational-databases/track-changes/enable-and-disable-change-dat…

隐式转换的魔法:Scala中隐式转换的深度解析

隐式转换的魔法&#xff1a;Scala中隐式转换的深度解析 在Scala编程语言的丰富特性中&#xff0c;隐式转换是一个强大而微妙的工具。它允许开发者在不改变现有代码的情况下&#xff0c;扩展或修改类的行为。本文将深入探讨Scala中隐式转换的工作原理&#xff0c;并通过详细的代…

如何优化前端性能:提高网页加载速度的实用技巧

我们在前端开发中&#xff0c;性能优化是提高用户体验的关键因素。网页加载速度直接影响用户的满意度和留存率。本文将介绍几种优化前端性能的实用方法&#xff0c;帮助你提高网页加载速度。 问题描述 &#xff1a; 首先前端性能优化涉及多个方面&#xff0c;包括减少HTTP请…

Java命名规范:

Java命名规范&#xff1a; 大驼峰命名法/帕斯卡命名法&#xff1a; ​ 作用&#xff1a;类名、接口名 ​ 规则&#xff1a;每个单词首字母大写 ​ ps&#xff1a; ​ public class HelloWorld{} ​ 小驼峰命名法&#xff1a; ​ 作用&#xff1a;方法名、变量名 ​ 规则&am…