Upload上传图片,回显图片,编辑图片,限制图片,不显示上传图标,图片放大功能

效果图:

新增、编辑时:限制上传四张,当超过四张隐藏上传图标

图片放大 :效果图

详情:回显时不显示上传图标

页面:template 部分

图片在前端存储,提交时一并给后端

:file-list="repairPlanfiles",repairPlanfiles用来存储图片

                <el-upload:class="'uploadStay' + index":disabled="disabled":file-list="repairPlanfiles[index]"style="margin-top: 6px"accept=".jpg, .png, .jpeg, .gif"action="#":multiple="false"ref="uploadImg":auto-upload="false"list-type="picture-card":on-change="(file, fileList) => {handleFileChange(file, fileList, index);}":on-remove="(file, fileList) => {handleRemove(file, fileList, index);}"limit="4":on-preview="handlePictureCardPreview"><span slot="default" class="el-icon-plus"></span></el-upload>

要求:限制图片格式、显示图片大小、当图片超过四张隐藏上传图标

实现逻辑:新增时用imgs字段来存储新增的图片;编辑时用imgVos字段来接收新增的图片、imgs中存贮后端返回(上次存储)的图片;若为编辑状态给后端提交时:将所有的新增图片放到imgs中,之前(后端返回的图片地址)放到imgVos中

auto-upload设置为"false",则 before-upload 会失效;只能通过on-change 事件

此处handleFileChange事件用来处理上传,当不符合条件时需手动删除,调用handleRemove事件

通过 fileList 来判断图片的数量,控制上传组件

新增、编辑代码:

    handleFileChange(file, fileList, index) {const isLt5M = file.size / 1024 / 1024 < 5;const isJPG =file.raw.type === "image/jpeg" ||file.raw.type === "image/jpg" ||file.raw.type === "image/png" ||file.raw.type === "image/gif";if (this.typesOf == "add") {if (!isJPG) {this.$message({message: "上传失败!上传图片文件只支持JPG、PNG、JPEG、GIF",type: "warning",});this.$refs.uploadImg[index].handleRemove(file);return false;}if (!isLt5M) {this.$message({message: "上传图片大小不能超过5M!",type: "warning",});this.$refs.uploadImg[index].handleRemove(file);return false;}this.form.schemes[index].imgs.push(file.raw);this.repairPlanfiles[index].push(file);} else {if (!isJPG) {this.$message({message: "上传失败!上传图片文件只支持JPG、PNG、JPEG、GIF",type: "warning",});this.$refs.uploadImg[index].handleRemove(file);return false;}if (!isLt5M) {this.$message({message: "上传图片大小不能超过5M!",type: "warning",});this.$refs.uploadImg[index].handleRemove(file);return false;}this.form.schemes[index].imgVos.push(file.raw);this.repairPlanfiles[index].push(file);}if (fileList.length == 4) {let className = `uploadStay${this.index}`;this.$nextTick(() => {let ele = document.querySelector(`.${className}`).querySelector(".el-upload--picture-card");ele.style.display = "none";});}},

删除:我这里处理的比较复杂

默认清空当前的所有图片,然后根据图片的的格式将其存储到 imgs与imgVos中

当当前数组中图片的长度小于4时,显示上传组件

    handleRemove(file, fileList, index) {this.form.schemes[index].imgs = [];this.form.schemes[index].imgVos = [];this.repairPlanfiles[index] = [];fileList.forEach((item) => {if (item.raw) {this.form.schemes[index].imgs.push(item.raw);this.repairPlanfiles[index].push(item);} else {if (item.url) {let aa = item.url.toString().split("aiops/");this.form.schemes[index].imgVos.push(aa[1]);this.repairPlanfiles[index].push(item);} else {this.form.schemes[index].imgVos.push(item);this.repairPlanfiles[index].push(item);}}});if (fileList.length < 4) {let className = `uploadStay${index}`;this.$nextTick(() => {let ele = document.querySelector(`.${className}`).querySelector(".el-upload--picture-card");ele.style.display = "";});}},

详情、编辑:图片回显

回显逻辑:将图片放入repairPlanfiles中

    viewShowImg() {//将图片赋值给files对象 处理图片回显let schemes = this.formCopy.schemeVoList;for (let i in schemes) {this.repairPlanfiles.push([]);if (schemes[i].imgs) {for (let j in schemes[i].imgs) {let obj = {};obj.url = this.PIC_URL + schemes[i].imgs[j].imgPath;this.repairPlanfiles[i].push(obj);}//处理上传组件if (schemes[i].imgs.length == 4) {let className = `uploadStay${i}`;console.log("className", className);this.$nextTick(() => {let ele = document.querySelector(`.${className}`).querySelector(".el-upload--picture-card");ele.style.display = "none";});}}}this.form.schemes = schemesCopy;},

图片放大功能

    <!-- 放大图片吗 --><div @click.stop="handleClickItem"><el-image-viewerv-if="showViewer":on-close="closeImage":url-list="imgList":z-index="5000"/></div>

逻辑methods

//放大handlePictureCardPreview(file) {this.imgList.push(file.url);this.showViewer = true;},handleClickItem(e) {if (e.target.getAttribute("class") === "el-image-viewer__mask") {this.imgList = [];this.showViewer = false;}},
//关闭closeImage() {this.imgList = [];this.showViewer = false;},

因小编项目图片数组可以动态累加,相对有点复杂,若你们的不存在动态添加,只有一条,页面

 :file-list="repairPlanfiles"即可;回显时也不用循环 :给repairPlanfiles添加数组

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

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

相关文章

什么是骨传导蓝牙耳机?骨传导耳机原理分析!

骨传导耳机&#xff0c;顾名思义是利用骨传导技术制造而成的一种耳机&#xff0c;也被称之为骨导耳机、骨感耳机、骨传感耳机。 骨传导耳机的传声原理跟传统耳机有所不同&#xff0c;传统耳机通过空气振动将声音传入耳膜&#xff0c;而骨传导耳机是通过人体骨骼将声音直接传递…

c4d怎么建模沙发?

c4d怎么建模沙发&#xff1f;c4d中想要制作一组沙发&#xff0c;该怎么制作三维立体的沙发模型呢&#xff1f;c4d中想要制作一组沙发&#xff0c;该怎么建模沙发呢&#xff1f;下面我们就来看看c4d创建沙发模型的教程。 1、打开软件&#xff0c;点击立方体&#xff1b; 2、修改…

vue2、vue3状态管理之vuex、pinia

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、状态管理之vuex1.1 State调用&#xff1a;1.2 Mutation在vuex中定义&#xff1a;在组件中使用&#xff1a; 1.3 Action在vuex中定义&#xff1a;将上面的减…

FPGA-AMBA协议、APB协议、AHB规范、AXI4协议规范概述及它们之间的关系

FPGA-AMBA协议、APB协议、AHB协议、AXI&#xff14;协议规范概述 笔记记录&#xff0c;AMBA协议、APB协议、AHB规范、AXI&#xff14;协议规范概述&#xff0c;只是概述描述&#xff0c;具体详细的协议地址传输、数据传输等内容将在下一章节详细说明。 文章目录 FPGA-AMBA协议…

【目标跟踪】解决多目标跟踪遮挡问题

文章目录 前言一、判定遮挡目标二、扩展目标框三、结论 前言 目标跟踪在发生遮挡时&#xff0c;极其容易发生Id Switch。网上许多算法忽视跟踪遮挡问题,同时网上相关资料也很少。博主为了解决跟踪遮挡&#xff0c;翻阅大量论文。分享其中一篇论文。论文链接&#xff1a;https:…

Everything 搜索

正则表达式Regex 首先需要开启 Everything 工具在&#xff08;字符串&#xff09;查找时&#xff0c;对正则表达式功能的支持&#xff1a; 需要在【菜单栏】⇒ 【Search】⇒ 勾选【Enable Regex】 查看Everything 支持的语法:

怎么下载landsat 8影像并在ArcGIS Pro中进行波段组合

Landsat 8&#xff08;前身为Landsat数据连续性任务&#xff0c;或 LDCM&#xff09;于2013年2月11日由 Atlas-V火箭从加利福尼亚州范登堡空军基地发射升空&#xff0c;这里为大家介绍一下该数据的下载的方法&#xff0c;希望能对你有所帮助。 注册账号 如果之前已经注册过的…

基于采样的自动驾驶规划算法 - PRM,RRT,RRT*,CL-RRT

本文将讲解PRM&#xff0c;RRT&#xff0c;RRT*自动驾驶规划算法原理&#xff0c;不正之处望读者指正 0 前言 机器人运动规划的基本任务&#xff1a;从开始位置到目标位置的运动 &#xff08;1&#xff09;如何躲避构型空间出现的障碍物 &#xff08;2&#xff09;如何满足机器…

SkyWalking UI 修改发布Nginx

文章目录 SkyWalking UI修改图标修改路由发布到Nginx添加认证修改路由模式vite.config.ts添加baseNginx配置 SkyWalking UI skywalking-booster-ui下载地址 修改图标 替换 logo.svg 修改路由 router - data - index.ts 发布到Nginx 添加认证 # 安装 yum install -y h…

VMware ESXi常用查看RAID和磁盘信息工具及命令汇总

一、Esxcli 使用 Esxcli 命令可获取有关 vSAN 的信息&#xff0c;以及对您的 vSAN 环境进行故障排除。 可用命令如下&#xff1a; 命令描述esxcli vsan network list确认哪些 VMkernel 适配器可用于 vSAN 通信。esxcli vsan storage list列出由 vSAN 声明的存储磁盘。esxcli…

Pikachu靶场 “Http Header”SQL注入

1. 先在 pikachu 打开 Http Header 注入模块&#xff0c;点击提示 查看登录 账号 和 密码&#xff0c;登陆后去 Burp 中找到登陆的 GET请求 2. 设置payload1 &#xff1a;在 User-Agent最后 输入 查看 数据库名 or updatexml(1,concat(0x7e,database()),0) or 查看 用户名…

随机梯度辨识方法

Matlab 利用随机梯度方法进行辨识的举例&#xff0c;可以结合不同情况进行优化处理&#xff08;例如需要复现文献中结果&#xff09; Matlab代码如下&#xff1a; clc;clear;close; format short g; M Stochastic gradient method; sigma 0.5; % Noise standard deviati…

asp.net core 教程

asp.net core 教程 写在前面新建项目Get和PostGETPOST MVC-模型控制视图如何通俗理解MVCMVC架构---文件夹详解Connected ServicesPropertieswwwroot依赖项ControllersModelsViews 代码实例 API模型&#xff08;前后端分离&#xff09;前端代码后端代码 文件配置优先级优先级顺序…

YOLOv5改进 | 主干篇 | 利用MobileNetV3替换Backbone(轻量化网络结构)

一、本文介绍 本文给大家带来的改进机制是MobileNetV3&#xff0c;其主要改进思想集中在结合硬件感知的网络架构搜索&#xff08;NAS&#xff09;和NetAdapt算法&#xff0c;以优化移动设备CPU上的性能。它采用了新颖的架构设计&#xff0c;包括反转残差结构和线性瓶颈层&…

dev express 15.2图表绘制性能问题(dotnet绘图表)

dev express 15.2 绘制曲线 前端代码 <dxc:ChartControl Grid.Row"1"><dxc:XYDiagram2D EnableAxisXNavigation"True"><dxc:LineSeries2D x:Name"series" CrosshairLabelPattern"{}{A} : {V:F2}"/></dxc:XYDi…

嵌入式-stm32-SR04超声波测距介绍及实战

一&#xff1a;超声波传感器介绍 1.1、SR04超声波测距硬件模块 1.2、SR04的四个IO口 vcc:提供电源5V gnd:接地 Trig:是**发送**声波信号的触发器 Echo:是**接收**回波信号的引脚 当TRIG信号被触发时&#xff0c;传感器会发送一定频率的声波信号&#xff0c;该信号被反射后&am…

Android中_Service生命周期和AMS流程的创建

Service生命周期可以结合Android生命周期分析。 Service生命周期可以从两种启动Service的模式开始讲起&#xff0c;分别是context.startService()和context.bindService()。 Service的生命周期与启动和绑定状态相关。当调用startService()方法启动服务时&#xff0c;会执行onS…

【DeepLearning】Deep Residual Learning for Image Recognition恺神大作学习

[TOC] Deep Residual Learning for Image Recognition 论文 1. 文章主要想解决什么问题&#xff0c;用了什么方法 深度神经网络在训练过程中的3个关键问题&#xff1a; 梯度消失/爆炸问题&#xff1a;随着网络层数的增加&#xff0c;梯度在反向传播过程中可能会变得非常小&a…

Hooked协议掀起WEB3新浪潮

随着区块链技术和加密货币的兴起&#xff0c;币圈已经成为全球范围内的一个热门领域。在这个充满机遇与挑战的行业中&#xff0c;Hook机制正逐渐成为一种重要的技术手段&#xff0c;为投资者、开发者以及相关机构提供了更多的选择和可能性。本文将详细介绍币圈中的Hook机制&…

腾讯云4核8G服务器三年优惠价格表

腾讯云轻量服务器4核8G12M有三年优惠价吗&#xff1f;有&#xff0c;但是不怎么优势&#xff0c;相对于云轻量2核2G4M带宽三年价格是540元、2核4G5M带宽3年优惠价756元&#xff0c;4核8G12M轻量应用服务器三年价格是5292元&#xff0c;怎么样&#xff1f;还想买吗&#xff1f;阿…