elementPlus 二次封装 el-upload

news2024/11/24 16:25:26

此案例是区分上传的文件还是图片;
在这里插入图片描述

需要注意的是 before-upload 事件,如果是返回了 false,也会默认走on-remove,需要在 remove事件里做file 的状态判断。

<template>
  <el-upload class="upload-box" ref="uploadImgRef" :file-list="fileList" action="#"
  	:before-upload="onBeforeUploadImage"
    :http-request="uploadAction" :auto-upload="true" :list-type="listType"
    :on-remove="handleRmove"
    :on-preview="handlePictureCardPreview">
    <el-icon v-if="listType === 'picture-card'">
      <Plus />
    </el-icon>
    <el-button v-else type="primary">选择文件</el-button>
  </el-upload>

  <el-dialog v-model="dialogVisible">
    <img style="width: 100%" w-full :src="dialogImageUrl" />
  </el-dialog>
</template>
<script>
import { uploadFile } from '@/api/common';
const PIC_TYPE = 'picture-card'; // 图片格式
  export default {
    props: {
      listType: { // 已上传文件展示格式
        type: String,
        default: 'text'
      },
      fileList: { // 已上传文件列表
        type: Array,
        default: () => []
      },
      fileType: { // 上传文件的格式限制,以逗号分割的字符串,如图片:image/jpeg,image/jpg,image/png
        type: String,
        default: ''
      }
      // 如果还要限制上传的数量,也可匹配;上传之前先检查已有的数量,再进行上传;limit: 10
    },
    emits: ['changeFile'],
    computed: {
      uploadFileType () {
        return this.listType === PIC_TYPE ? 'Img': 'File';
      }
    },
    data () {
      return {
        dialogImageUrl: '',
        dialogVisible: false,
        uploadFileList: []
      }
    },
    mounted () {
      this.uploadFileList = [...this.fileList];
    },
    watch: {
      fileList(val) {
        this.uploadFileList = val
      },
    },
    methods: {

      handlePictureCardPreview (uploadFile) {
        if (this.listType === PIC_TYPE) {
          this.dialogImageUrl = uploadFile.url
          this.dialogVisible = true
        }
      },
      // 上传请求
      async uploadAction (option) {
        try {
          console.log(option, 'option')
          const res = await uploadFile({ file: option.file, fileType: this.uploadFileType });
          const url = res.data.url;
          const name = option.file.name;
          this.uploadFileList.push({url, name});
          this.$emit('changeFile', this.uploadFileType, [...this.uploadFileList]);
        } catch (error) {
          console.log(error)
        }
      },

      onBeforeUploadImage (file) {
        if (!this.fileType) return true;
        const isRightType = this.isRightType(file.type);
        if (!isRightType) {
          this.$message.error(`上传文件格式错误! 请上传 ${this.fileType} 格式文件`)
        }
        return isRightType;
      },

      handleRmove (file, fileList) {
        if (file.status == 'success') {
          // 删除后改变某些状态的代码
          console.log('remove =========');
          const index = this.uploadFileList.findIndex((item) => item.uid === file.uid);
          this.uploadFileList.splice(index, 1);
          this.$emit('changeFile', this.uploadFileType, [...this.uploadFileList]);
        }
        if (file.status == 'ready') {
         // 这里应该就是before-upload中返回false时的状况了,还有没有别的状况,未知
    	}        
      },

      isRightType (type) {
        let isRight = this.fileType.split(',').includes(type);
        return isRight;
      }
    }
  }
</script>
<style lang="scss" scoped>
.upload-box {
  width: 100%;
}
</style>

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

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

相关文章

python3a 之 循环与加速(for循环,list 简化,iterrows, enumerate )

1. map 的用法&#xff1a; 替代for循环&#xff0c;辅助加速 map(function, list) 简写 map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数 [1, 4, 9, 16, 25] 提供了两个列表&#xff0c;对相同位置的列表数据进行相加 >>> map(lambda x, y: x y, …

做电商数据分析报表做到废?BI平台试过了?

层出不穷的临时分析需求、大量的重复性操作、眨眼流失的时间&#xff0c;那是电商数据分析人员才都懂的感受。每日一问&#xff0c;今天你做电商数据分析报表做到废了吗&#xff1f;怎么改变这种情况&#xff1f;或许BI大数据分析平台可以一试。 BI大数据分析平台&#xff1a;…

activiti和flowable如何迁移到camunda

一、activiti如何迁移到camunda 将 流程引擎Activiti 迁移到工作流平台Camunda 需要考虑以下几个方面&#xff1a; 1、流程定义的兼容性&#xff1a;Camunda 支持 BPMN 2.0 规范&#xff0c;因此 Activiti 定义的流程需要进行检查和调整以确保与 Camunda 兼容。 2、数据库兼容…

什么是ChatGPT,原理是什么?看完这篇还不懂,我直播吃屏!!福利:中文版CHAT GPT镜像纯分享

目录 福利&#xff1a;文末纯分享中文版CHAT GPT镜像&#xff0c;不存在魔法&#xff0c;纯分享免费使用 前言&#xff1a; 1. 概率从何而来&#xff1f; 2、什么是模型 3、类人的任务模型 3、神经网络 4 、机器学习和神经网络的训练 5、神经网络训练的实践与理论 6、嵌…

BGA和QFP有什么区别?引脚设计有哪些方法?

CPU是中央处理器&#xff0c;Central Processing Unit 英文的缩写&#xff0c;电脑中一个最重要&#xff0c;最核心的东西&#xff0c;相当一个人的大脑&#xff0c;是用来思考、分析和计算的。目前市面上比较常见的CPU来自两个品牌&#xff0c;一个是intel公司生产的&#xff…

Layui源码解读之use函数(模块加载)

一、layui.use 用法 layui.use() 函数用于模块加载 layui.use([mods], callback) mods&#xff1a;如果填写(选填)&#xff0c;必须是一个 layui 合法的模块名&#xff08;不能包含目录&#xff09;。 从 layui 2.6 开始&#xff0c;若 mods 不填&#xff0c;只传一个 callbac…

StarRocks案例3: 通过[broadcast] 优化慢SQL

文章目录 一. 问题描述二. 解决方案三. 一些拓展 一. 问题描述 最近在使用StarRocks的时候&#xff0c;发现一个问题 table_a 10W 左右数据&#xff0c;通过where条件过滤数据后 剩下 10行数据。 table_b 5亿左右数据&#xff0c;通过where过滤条件后 剩下 5kw 数据。 table…

java物流快递寄件配送信息管理系统springboot+vue

物流信息管理系统分为管理员功能模块、配送员功能模块和用户功能模块三大部分&#xff0c;下面将对这三大功能模块分别进行介绍。 管理员功能模块&#xff1a;管理员登录后可对系统进行全面管理&#xff0c;管理员登录后主要实现的功能模块包括个人中心、用户管理、配送员管理、…

Deno:下载安装示例和打包为可执行文件

Deno&#xff1a;一个 安全的 JavaScript 和 TypeScript 运行时环境 目录 文档安装DenoHello World将程序打包成可执行程序 文档 官方文档 https://deno.com/manual 安装Deno Deno的解释器是一个可执行的单文件&#xff0c;下载解压即可使用 1、下载Deno 下载地址&#xf…

NFC无源标签协议

1、NFC写图片数据命令 无源NFC接口基于ISO/IEC 14443-3 A类标准&#xff1b; 命令起始地址结束地址数据 11164 67字节,每次写入的命令和地址都是一样的&#xff1b; 第一包数据必须发送该字符串数据"picksmart&M1&H128&W296&S1&C1"&#xff…

【C++】C++ 中的 IO 流

文章目录 一、C语言的输入输出二、什么是流三、C IO 流1、C 标准 IO 流2、C 文件 IO 流 四、stringstream 介绍 一、C语言的输入输出 在C语言中我们使用最频繁的输入输出方式是 scanf () 与 printf()&#xff1a; scanf()&#xff1a;从标准输入设备 (键盘) 读取数据&#xf…

数据库优化之常用的show table status及ALTER TABLE 重建表

文章目录 ⭐️ MySQL优化-碎片优化一、show table status from db_name【 如何判断是否有碎片&#xff1f;】1、碎片查询分析2、产生碎片的原因 二、MySQL 的表空间设置和优化策略【 如何清理碎片&#xff1f;】1、innodb_file_per_table 参数设置为 ON&#xff08;基本上是默认…

从小白到大佬,入门Linux系统收发网络数据包的秘密/

Linux 服务器收到网络数据包&#xff0c;需求经过哪些处置&#xff0c;一步步将数据传给应用进程的呢&#xff1f;应用进程发送数据包时&#xff0c;Linux 又是如何操作将数据包发送进来的呢&#xff1f;今天我们就来聊聊这个话题。 在准备好接纳网络数据包之前&#xff0c;Li…

python---基础小总结

1.常量和布尔值相加 当常量和布尔值相加的时候,如果是True就视为1来和常量相加. 反之,如果是False的话就视为0和常量相加. 但是这样的操作是没有任何意义的! 2.EG:以下情况是会报错的! 3.EG:加不加分号都可以,但是最好不加

相机的格式

图片的格式大体上可以分为yuv格式和RGB格式&#xff0c;以及png,jpg格式&#xff1b; 其中yuv格式对应的摄像头的格式可以是YUYV、UYVV、YVYU、VYUY&#xff1b; rgb格式的图片对应的摄像头格式为RGB,BGR,ARGB8888格式&#xff1b; 一、RGB8888和ARGB8888像素格式如果搞混了…

网站反爬虫策略的分析与研究

随着互联网的发展&#xff0c;爬虫技术也越来越成熟&#xff0c;越来越多的网站开始采取反爬虫策略来保护自己的数据和资源。以下是网站反爬虫策略的分析与研究&#xff1a; IP封禁&#xff1a;网站可以通过封禁某些IP地址来防止爬虫的访问。这种方法比较简单&#xff0c;但是容…

使用ChatGPT设计多选题

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Spring-Retry实现及原理

前言 重试&#xff0c;其实我们其实很多时候都需要的&#xff0c;为了保证容错性&#xff0c;可用性&#xff0c;一致性等。一般用来应对外部系统的一些不可预料的返回、异常等&#xff0c;特别是网络延迟&#xff0c;中断等情况。还有在现在流行的微服务治理框架中&#xff0…

PDF4NET 13.1.0 Crack

PDF4NET 13.1.0 添加对云多边形和云方形注释的支持。 2023 年 6 月 1 日 - 16:50 新版本 特征 PDF4NET 添加了对 Cloud polygon 和 Cloud square 注释的支持。在文本标记注释中添加了对四点的支持。重大变化&#xff1a;重构了圆形、方形、折线和多边形注释的边框。PDF4NET.Ren…

Linux-线程基础

Linux线程基础 一&#xff0c;线程概念什么是线程Linux如何实现的线程 二&#xff0c;页表与虚拟内存虚拟内存多级页表 三&#xff0c;线程的特点线程的优点线程的缺点线程异常线程用途线程与进程比较 四&#xff0c;线程控制创建线程线程终止线程等待线程取消线程分离 五&…