js封装上传组件 点击拖拽上传

news2024/12/23 10:44:08

效果图

上传组件代码

<template>
    <div id="appp">
        <label for="fileInput" class="upload"  @dragover="fileDragover" @drop="fileDrop" v-if="log != 'checkLog'">
            <!-- <div class="jia" v-if="!loadingBool">+</div>
            <div class="jia" v-else><i class="el-icon-loading" style="font-size: 30px;"></i></div> -->
            <div class="jia">+</div>
            <div class="text1">拖放或点击上传</div>
            <div class="text2">仅支持 PDF、JPG 和 PNG 格式。最大文件尺寸 100 MB。</div>
        </label>
        <div v-for="(item,index) in value" :key="index" class="imgContainer">
          <el-image
              style="width: 100%;height: 100%;display: inline-block;"
              :src="resourUrl + item"
              fit="cover">
          </el-image>
          <el-button icon="el-icon-close" class="delBtn" circle size="mini" @click="delImg(index)" v-if="log != 'checkLog'"></el-button>
        </div>
      <div>
        <input type="file" id="fileInput" accept="image/*" @change="chooseUploadFile" style="display: none;">
      </div>
    </div>
  </template>
  
  <script>
   import api from "@/api/http";
import { index } from "@antv/x6/lib/util/dom/elem";
  export default {
    props: {
      value: {
          type: Array,
          default: ()=>[]
      },
      log: {
          type: String,
          default: ''
      },
    },
    data () {
      return {
        resourUrl:IP.resourUrl,
        MAX_FILE_SIZE: 100 * 1000 * 1000
      }
    },
    watch:{
      value(val){
        this.$emit('input',val)
      },
      immediate: true,
      deep:true
    },
    methods: {
        delImg(index){
          this.value.splice(index,1)
        },
        // 上传图片
        uploadImg(file){
            if (!/\.(jpg|jpeg|png|pdf|PDF|JPG|PNG)$/.test(file.name) ) { 
                this.$message({
                    message: '仅支持 PDF、JPG 和 PNG 格式。',
                    type: 'warning'
                });
                return;     
            }
            if (file.size > this.MAX_FILE_SIZE) {
                this.$message({
                    message: '仅支持最大文件尺寸 100 MB。',
                    type: 'warning'
                });
                return 
            }
            let formData = new FormData();
            formData.append("upFile", file);
            api.getAddFileUrl(formData)
                .then((response) => {
                    let res = response.data;
                    let url = res.message; // 拿到图片url后发送图片消息
                    // this.loadingBool=false
                    this.value.unshift(url)
                }).catch(err => {
                    console.log(err, '错误')
                })
        },
      // 点击上传
      chooseUploadFile (e) {
        console.log(e.target.files);
        const file = e.target.files.item(0)
  
        if (!file) return

        // this.loadingBool=true
        this.uploadImg(file)

        // 清空,防止上传后再上传没有反应
        e.target.value = ''
      },
      // 拖拽上传
      fileDragover (e) {
        e.preventDefault()
      },
      fileDrop (e) {
        e.preventDefault()
        const file = e.dataTransfer.files[0] // 获取到第一个上传的文件对象
        console.log(file)
        console.log('拖拽释放鼠标时')
  
        if (!file) return
  
        // this.loadingBool=true
        this.uploadImg(file)
        
        // 清空,防止上传后再上传没有反应
        e.target.value = ''
        
      },
    }
  
  }
  </script>
  
  <style lang="less" scoped>
    .imgContainer{
      display: inline-block;
      height: 170px;
      flex-basis: 28%;
      margin-right: 5%;
      margin-bottom: 20px;
      position: relative;
       .delBtn{
        position: absolute;
        top: 5px;
        right: 5px;
       }
    }
    .upload{
        display: block;
        height: 170px;
        flex-basis: 28%;
        margin-right: 5%;
        margin-bottom: 30px;
        border: 1px dashed #D9D9D9;
        background-color: #FBFBFB;
        text-align: center;
        padding: 20px 30px;
        cursor:pointer;
        z-index: 1;
        .jia{
            color: #4E5969;
            height: 50px;
        }
        .text1{
            color: #4E5969;
            height: 40px;
            line-height: 40px;
            font-size: 14px;
        }
        .text2{
            height: 40px;
            line-height: 20px;
            color: #86909C;
            font-size: 12px;
            font-weight: 400;
        }
    }  
    #appp{
        display: flex;
        width: 846px;
        margin-bottom: 30px;
        flex-wrap:wrap;
    }
  </style>
  

父组件引用

<template>
    <uploadImg v-model="form.urls" :log="log"></uploadImg>
</template>

import uploadImg from "@/components/upload/uploadImg.vue";
export default {
    components: {
        uploadImg
    },
}

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

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

相关文章

CTFHub技能树-备份文件下载-.DS_Store

目录 方法一&#xff1a;直接访问/.DS_Store文件 方法二&#xff1a;使用Python-dsstore工具解析.Dsstore文件 方法三&#xff1a;直接使用crul访问/./.DS_Store文件 .DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单…

中西结合治疗帕金森怎么样

中西结合治疗帕金森怎么样 中西结合治疗帕金森病是一种综合运用中医和西医治疗方法的策略&#xff0c;旨在通过各自的优势来改善患者的症状、延缓病情进展&#xff0c;并提高生活质量。西医治疗帕金森病主要依赖药物治疗&#xff0c;如左旋多巴和多巴胺受体激动剂&#xff0c;…

基于web知识库管理系统设计与实现

第二章 系统分析 2.1 知识库管理系统可行性分析 可行性分析对系统的开发至关重要&#xff0c;可以大幅减少不必要的损失&#xff0c;保证系统开发的顺利进行。因此要对系统进行技术可行性、经济可行性两方面的系统可行性分析。 2.1.1技术可行性 随着网络技术日新月异的高速…

换热站可视化:提升热能管理效率

通过图扑 HT 搭建换热站可视化解决方案&#xff0c;实时监控与数据展示&#xff0c;优化热能分配与运行管理&#xff0c;提高能源效率并降低运营成本。

俄罗斯Ozon选品三要素,简单实用的选品方法

在 Ozon 上选品可以参考以下三个要素&#xff1a; 要素一&#xff1a;市场需求 关注热门品类&#xff1a;从 Ozon 的销售数据和市场趋势来看&#xff0c;像电子产品&#xff08;如手机、耳机、智能穿戴设备等&#xff09;、时尚服饰&#xff08;包括流行服装、鞋类、配饰&…

HTTPS访问是什么?

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种安全的网络传输协议&#xff0c;它基于HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;进行工作&#xff0c;但增加了安全性的要求。HTTPS通过在客户端&#xff08…

glsl着色器学习(八)通用模板

下面是一个简单的通用WebGL模板 Study.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Doc…

QQ聊天记录删除了怎么恢复?学会这3个方法,简单又有效

QQ作为我们日常沟通的重要工具之一&#xff0c;其聊天记录往往承载着许多珍贵的记忆和重要的信息。但在操作中我们会不小心删除或丢失这些聊天记录&#xff0c;那么QQ聊天记录删除了怎么恢复就成为我们急切需要解决的问题。先别急&#xff0c;本文就为你介绍3种简单又有效的QQ聊…

SpringBoot 大学生体质测试管理系统

摘要 大学生体质测试管理系统提供给用户一个简单方便体质测试管理信息&#xff0c;通过留言区互动更方便。本系统采用了B/S体系的结构&#xff0c;使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分&#xff0c;系统管理员主要功能…

【STM32+HAL库】---- 驱动DHT11温湿度传感器

硬件开发板&#xff1a;STM32F407VET6 软件平台&#xff1a;cubemaxkeilVScode1 DHT11工作原理 1.1 简介 DHT11温湿度传感器是一种数字式温湿度传感器&#xff0c;其工作原理基于集成了湿度感测元件和NTC温度感测元件的传感器模块。以下是DHT11温湿度传感器的工作原理&#x…

【安全生产】叉车安全带报警器有哪些特点?

叉车安全带报警器是用于防止在叉车发生猛烈碰撞或紧急制动时&#xff0c;司机不与方向盘、挡风玻璃等发生二次碰撞或抛出车外&#xff0c;从而造成的严重伤害的一种叉车安全装置、配件。 很多司机在开叉车时经常有不系安全带的习惯&#xff0c;有很多不负责任的人会认为&#…

智能水培机

目录 一. 选型 1.1 Lichee RV Dock 1.1.1 芯片&#xff1a;D1-H 1.1.2 镜像选择&#xff1a;Tina Linux 二. QT上位机 2.1 选择ID 2.2 主界面刷新数据 2.2.1 设置定时器 2.2.3 定义查询数据库表qtnew的函数checkNew_data 2.2.2 定义槽函数 Refresh_data 2.3 主界面按…

讨论运维监控工具的普及程度

在讨论运维监控工具的普及程度时&#xff0c;加入PIGOSS BSM产品的分析是非常有意义的&#xff0c;因为PIGOSS BSM是一款在中国市场具有一定影响力的运维监控工具。 PIGOSS BSM运维监控工具是一款综合性的IT运维监控解决方案&#xff0c;它能够对多层次的IT资源进行监测&#x…

2024.09.04【读书笔记】|如何使用GATK ASEReadCounter工具进行ASE(等位基因特异性表达)分析

准备数据&#xff1a; 获取基因组序列&#xff08;FASTA格式&#xff09;和对应的基因组注释文件&#xff08;GTF或GFF格式&#xff09;。获取样本的BAM文件&#xff0c;确保这些文件已经过排序和索引。获取变异信息文件&#xff08;VCF格式&#xff09;&#xff0c;包含样本的…

运动耳机哪个牌子的好?精选5款值得入手的骨传导运动耳机分享!

在过去的两年里&#xff0c;骨传导耳机逐渐被大众的所熟知。可能毕竟长时间使用音量过大的传统入耳式耳机&#xff0c;多多少少会对我们的听力健康构成威胁。所以很多人就想找一款不伤耳朵的耳机。然后就了解到了骨传导耳机&#xff0c;所以就会延伸出这些问题——骨传导耳机好…

【效率工具】推荐五款电脑桌面软件,轻量好用!

电脑桌面软件可以帮助我们在电脑上创建分区&#xff0c;然后将文件、文件夹、应用程序等图标整理到对应的分区中&#xff0c;方便我们精准访问文件。不同的电脑桌面软件功能可能存在一些差异&#xff0c;本文分享几个常用的桌面整理工具&#xff0c;以及一些以及分享一些关于电…

EvoSuite使用总结

1.安装EvoSuite插件 以IDEA为例&#xff0c;在Plugins栏搜索EvoSuite后点击install&#xff0c;安装完成后重启IDEA 2.使用EvoSuite 选中文件右键选择Run EvoSuite 生成成功可以看到如下提示&#xff1a; 注意事项&#xff1a; 生成路径&#xff1a;src/test/java 使用juni…

【C++ 第十九章】异常

1.C语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 终止程序&#xff0c;如 assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误、除 0 错误时就会终止程序。 返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的错误。如系统的很多库…

趣解网络安全专业术语(保密性、暴露)零基础入门到精通,收藏这一篇就够了

保密性confidentiality 使信息不泄露给未授权的个人、实体、进程&#xff0c;或不被其利用的特性。 想象一下&#xff0c;你有一个神秘的盒子&#xff0c;里面装满了你最珍贵的秘密。这个盒子有一个特殊的锁&#xff0c;只有你和你最亲密的朋友能打开它。这个锁特别聪明&#…

新一代交互模式:LUICUIVUI

随着技术的发展&#xff0c;特别是人工智能和机器学习的进步&#xff0c;交互方式也在不断演变。以下是一些新概念&#xff0c;它们描述了当下和未来可能的交互方式&#xff1a; Conversational UI (CUI)&#xff1a; 以对话为基础的用户界面&#xff0c;用户通过自然语言与系统…