当前位置: 首页 > news >正文

el-upload开启picture形式列表展示上传的非图片文件自定义缩略图

目录

一、背景

二、代码实现

2.1、el-upload的file插槽

2.2、使用原列表class重写内容

2.2.1、重写文件名区域

2.2.2、重写右上角图标

三、整体代码

四、最终效果图


一、背景

        在使用el-upload组件开发上传页面时,需要展示已上传文件的缩略图列表,因此选择picture类型的展示列表。因为这是图片的展示,若上传的文件不是图片的话(如tar包、zip包等),列表展示是有问题的。

        后续考虑换下缩略图,固定换一下对应文件的logo,先快速实现功能。

二、代码实现

2.1、el-upload的file插槽

        查看了组件使用文档,发现el-upload提供了一个file的插槽,可以用来替换列表里的内容。使用这个插槽替换列表的缩略图。

        但这样会覆盖本身的组件的这部分全部内容,而我只想替换一下所列图,其他内容:文件名称,右上角的删除保留原来的样式。

        

2.2、使用原列表class重写内容

2.2.1、重写文件名区域

        其实就是用el-upload正常展示的列表的一些class样式。比如文件名称需要这样替换。

<!-- 使用原el-upload里的class样式,这样就会把文件名放到原本的位置 -->
<span class="el-upload-list__item-name"><el-icon><Document /></el-icon>{{ file.name }}
</span>

2.2.2、重写右上角图标

        若使用file插槽替换的,删除列表项的功能需要我们写一个方法自己删除fileList,绑定到图标的click点击事件。

<!-- 这里同样使用原关闭按钮的class样式 -->
<el-icon class="el-icon--close" @click="handleRemove(file)"><Close />
</el-icon>
// 删除上传列表项
function handleRemove(file) {fileListRef.value = fileListRef.value.filter(f => f.uid !== file.uid)
}

三、整体代码

<template><upload-template v-loading="loading" element-loading-text="玩命的处理中,请稍等!"><template #title>上传文件</template><template #content><div class="content-box"><el-uploaddragref="uploadRef":auto-upload="false"method="post":on-change="handleUploadChange":file-list="fileListRef"list-type="picture"><template #file="{ file }"><!-- 缩略图区域 --><imgv-if="file.name.endsWith('.zip')":src="zipLogo"class="el-upload-list__item-thumbnail"/><imgv-else:src="file.url"class="el-upload-list__item-thumbnail"/><!-- 文件名展示 --><span class="el-upload-list__item-name"><el-icon><Document /></el-icon>{{ file.name }}</span><!-- 删除缩略项 --><el-icon class="el-icon--close" @click="handleRemove(file)"><Close /></el-icon></template><el-icon class="el-icon--upload"><upload-filled /></el-icon><div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div><div class="el-upload__tip">只能上传pdf格式文件,文件大小不超过10MB</div></el-upload><div class="upload-footer"><el-button type="default" @click="handleReset">清空上传</el-button><el-button type="primary" @click="handleSubmit">开始处理</el-button></div></div></template></upload-template></template><script setup>
import uploadTemplate from '@/components/img/uploadTemplate.vue'
import { ref, reactive } from 'vue'
import zipLogo from '@/assets/imgs/zipLogo.jpg'const uploadRef = ref(null)
const fileListRef = ref([])
const loading = ref(false)// 有文件上传时(更改上传列表)
function handleUploadChange(file, fileList) {fileListRef.value = fileListElMessage({message: '上传成功!',type:'success',})
}// 删除上传列表项
function handleRemove(file) {fileListRef.value = fileListRef.value.filter(f => f.uid !== file.uid)
}</script><style lang="scss" scoped></style>

四、最终效果图

http://www.dtcms.com/a/303114.html

相关文章:

  • 网络层描述
  • Leetcode_349.两个数组的交集
  • Word VBA快速制作试卷(2/2)
  • 【华为机试】5. 最长回文子串
  • 学习人工智能所需知识体系及路径详解
  • 记录几个SystemVerilog的语法——随机
  • 五自由度磁悬浮轴承转子:基于自适应陷波器的零振动攻克不平衡质量扰动的终极策略
  • (45) QT 提供了一个功能,以同步现代操作系统的编辑功能,在标题栏上显示 * 占位符,以显示窗体上发生了未被保存的修改
  • 三维插件 Forest 深度解析:打造高效逼真的自然环境
  • 命令执行漏洞
  • 计算机毕设分享-基于SpringBoot的健身房管理系统(开题报告+前后端源码+Lun文+开发文档+数据库设计文档)
  • USRP-X440 雷达目标发生器
  • 深入解析 Java Stream 设计:从四幕剧看流水线设计与执行机制
  • 对于ui=f(state)的理解(react)
  • Redis四种GetShell方式完整教程
  • 使用Docker在Rocky Linux 9.5上在线部署LangFlow
  • 【STM32编码器接口测速】实现测速功能
  • 删除二维特征图中指定区域的样本
  • linux系统----Ansible中的playbook简单应用
  • 【Java EE】多线程-初阶-线程的状态
  • java里List链式编程
  • 4、如何生成分布式ID?
  • Linux->模拟实现 fopen/fread/fwrite
  • Bruce Momjian 深圳 meetup 回顾
  • 大模型基础设施搭建 - 操作系统centos7
  • SDRAM
  • CTF-Web学习笔记:文件包含篇
  • 阿里给AI To C战略戴上眼镜
  • 4.应用层自定义协议与序列化
  • JUC线程池: ScheduledThreadPoolExecutor详解