vue3上传图片并且支持删除

在这里插入图片描述

先做上传组件

<template><!--  --><el-uploadref="uploadRef":headers="headers":action="action":limit="limit":list-type="listType":auto-upload="autoUpload":show-file-list="showFileList":on-exceed="exceed":on-success="success":accept="accept && accept.toString()":before-upload="beforeUpload":before-remove="handleRemove":data="uploadData"><slot name="file" /><slot /><slot name="tip" /></el-upload>
</template>
<script setup>
import { ref } from 'vue'
import { getUserToken } from '@/utils/auth'
import { Message } from 'element-ui'const uploadRef = ref(null)const props = defineProps({autoUpload: {type: Boolean,default: () => true,},disabled: {type: Boolean,default: false,},listType: {type: String,default: '',},showFileList: Boolean,file: Array,handleRemove: Function,limit: {type: Number,default: 4,},allowSize: {type: Number, // 允许图片大小default: 1024 * 5,},accept: {type: Array, // 允许图片类型default: () => ['.png', '.jpg', '.jpeg', '.ico'],},path: {type: String,default: '/sys/file',},uploadData: {// 上传时额外需要的参数type: Object,default: () => {return {source: 'zybscrm',opType: 99,}},},
})
const headers = ref({'X-Token': getUserToken(),
})const action = ref(process.env.VUE_APP_PAAS_BASE_API + props.path)const emit = defineEmits(['uploadSuccess', 'exceed', 'handleRemove'])const handleRemove = (file, fileList) => {const index = fileList.indexOf(file)console.log(file, fileList, index)emit('handleRemove', file, fileList, index)
}const beforeUpload = (file, fileList) => {console.log(fileList, 'fileList')if (props.accept) {const index = props.accept.indexOf(file.name.substring(file.name.lastIndexOf('.')).toLowerCase())if (index < 0) {Message.warning('图片格式不正确')return false}}if (props.allowSize) {const kb = file.size / 1024const isLtSize = kb < props.allowSizeconst sizeStr =props.allowSize >= 1024 ? `${Math.round((props.allowSize / 1024) * 100) / 100}MB` : `${props.allowSize}KB`if (!isLtSize) {Message.error(`图片不能超过${sizeStr}`)return false}}
}const exceed = (files) => {Message.warning(`当前限制上传 ${props.limit}个文件`)emit('exceed', files)
}const success = (res, file) => {console.log(file, 'file')if (res.code === 511) {Message.warning(res.message)return}emit('uploadSuccess', res, file)
}
</script>
<style lang="scss" scoped></style>

根据组件来做上传功能

<el-form :model="Form" :rules="rules" ref="FormRef" class="formDiv"><h5>设置背景图</h5><el-form-item class="fenMianImg" label="" prop="bgImageUrls"><div class="el-upload-list el-upload-list--picture-card" :class="'img-112'"><span v-for="(item, index) in Form.bgImageUrls" :key="index"><div class="el-upload-list__item is-ready"><el-image class="el-upload-list__item-thumbnail" :src="item" fit="contain"></el-image><span class="el-upload-list__item-actions"><span class="el-upload-list__item-delete" @click="fileRemove(index)"><i class="el-icon-delete" width="16" height="16"></i></span></span></div></span></div><uploader :showFileList="false" @uploadSuccess="uploadSuccessBg"><div class="bggoImg"><i class="el-icon-plus"></i></div></uploader></el-form-item><div class="instructions">支持 jpg/ png/jpeg文件,文件大小不超过3M、背景图最多上传4</div>
</el-form>const FormRef = ref(null)
const rules = ref({bgImageUrls: [{required: true,message: '背景图不能为空',trigger: ['blur', 'change'],},],
})
const Form = ref({id: '',bgImageUrls: [],
})+ 方发
const uploadSuccessBg = (res) => {let { filePath } = res.dataForm.value.bgImageUrls.push(filePath)FormRef.value.clearValidate('bgImageUrls')
}
const fileRemove = (index) => {console.log(index)Form.value.bgImageUrls.splice(index, 1)
}+ 样式.fenMianImg{margin: 20px 0 0 20px;&.disabled .el-upload--picture-card,&.disabled .el-upload--picture-card i {color: #c9cdd4;cursor: not-allowed;}.img-112 {float: left;.el-upload-list__item,.upload-icon {width: 112px;height: 112px;float: left;}}.img-100 {.el-upload-list__item,.upload-icon {width: 100px;height: 100px;float: left;}.upload-icon {padding: 14px 0;}}.el-upload--picture-card {line-height: inherit;padding: 22px 0;color: #1d2129;background: #f2f3f5;border-radius: 4px;border: 1px dashed #e5e6eb;i {font-size: 16px;font-weight: 400;color: #1d2129;vertical-align: middle;& + p {line-height: 24px;}}}.el-upload-list--picture-card {display: inline-block;}.el-upload__tip {font-size: 14px;color: #86909c;margin: 0;line-height: 1;}.el-upload .el-button--medium {padding: 10px 12px;img {width: 14px;margin-right: 8px;}}}

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

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

相关文章

STM32中断和外部中断

NVIC&#xff1a;嵌套中断向量控制器&#xff1a;用于统一分配中断优先级和管理中断 响应式优先级&#xff1a;也可以称为插队式优先级哪个优先级高优先处理哪个 抢占式优先级&#xff1a;优先级高的可以优先被处理&#xff0c;相当于CPU可以暂时中断当前处理的程序&#xff0c…

海豚调度系列之:任务类型——SQL节点

海豚调度系列之&#xff1a;任务类型——SQL节点 一、SQL节点二、创建任务三、任务参数四、任务样例五、运行该任务成功之后在hive中查询结果六、使用前置sql和后置sql示例 一、SQL节点 SQL任务类型&#xff0c;用于连接数据库并执行相应SQL。 二、创建任务 点击项目管理-项…

Windows C++ 使用WinAPI实现RPC

demo下载地址&#xff1a;https://download.csdn.net/download/2403_83063732/88958730 1、创建IDL文件以及acf文件&#xff08;创建helloworld.idl helloworld.acf&#xff09; 其中IDL文件&#xff1a; import "oaidl.idl"; import "ocidl.idl"; [ …

MySQL的事务隔离是如何实现的?

目录 从一个例子说起 快照读和当前读 事务的启动时机和读视图生成的时刻 MVCC 隐藏字段 Undo Log回滚日志 Read View - 读视图 可重复读(RC)隔离级别下的MVCC 读提交(RR)隔离级别下的MCC 关于MVCC的一些疑问 1.为什么需要 MVCC &#xff1f;如果没有 MVCC 会怎样&am…

Python学习笔记-Flask实现简单的抽奖程序(增加图片显示)

1.创建static文件夹,存放图片文件 2.hero列表数据更改为要抽奖的图片名 3.html中可以编写python语句,遍历hero列表内容渲染到表格中 4.在点击随机抽取后,可以获得名称,然后使用img标签,将获取的名称拼接到路径中 3.初始页面,访问127.0.0.1:5000/index 4.点击随机抽取后 5.py…

ResNeXt学习笔记

一、更新了block 二、将block中的卷积层分组 注意&#xff1a;对于block层数小于3的&#xff0c;没有太大作用

AIGC实战——GPT(Generative Pre-trained Transformer)

AIGC实战——GPT 0. 前言1. GPT 简介2. 葡萄酒评论数据集3. 注意力机制3.1 查询、键和值3.2 多头注意力3.3 因果掩码 4. Transformer4.1 Transformer 块4.2 位置编码 5. 训练GPT6. GPT 分析6.1 生成文本6.2 注意力分数 小结系列链接 0. 前言 注意力机制能够用于构建先进的文本…

System Verilog的接口、程序块与断言解析

接口、程序块与断言 1 接口 1.1 使用接口简化连接 // 接口 interface arb_if(input bit clk);logic [1:0] grant,request;logic rst; endinterface// 使用了简单接口的仲裁器 module arb (arb_if arbif);...always(posedge arbif.clk or posedge arbif.rst)beginif(arbif.rs…

opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9

文章目录 1、YOLOv9 介绍2、测试2.1、官方Python测试2.1.1、正确的脚本2.2、Opencv dnn测试2.2.1、导出onnx模型2.2.2、c测试代码 2.3、测试统计 3、自定义数据及训练3.1、准备工作3.2、训练3.3、模型重参数化 1、YOLOv9 介绍 YOLOv9 是 YOLOv7 研究团队推出的最新目标检测网络…

软件测试中的AI-为什么它在软件自动化测试中很重要?

通俗地说&#xff0c;人工智能&#xff08;AI&#xff09;是计算机科学的一个领域&#xff0c;它专注于使机器“智能化”。所谓智能&#xff0c;就是使系统能够像人类一样学习和做出决策。因此&#xff0c;人工智能机器将能够学习如何在特定情况下做出反应&#xff0c;然后根据…

【AIGC】重磅消息,GPT-4.5 Turbo将在6月发布?

2024 年 AI 辅助研发趋势 文章目录 强烈推荐GPT-4.5 Turbo竞争对手Anthropic的Claude 3谷歌的Gemini 1.5 Pro 总结强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击…

Cplex之新建一个项目并求解

cplex下载&#xff1a;Cplex安装教程与使用介绍-CSDN博客 链接&#xff1a;https://pan.baidu.com/s/1jD9Xved2aWPHtRd-_PLI5Q 提取码&#xff1a;n4og 补充b站上一个教程&#xff1a;快速学懂Cplex软件及其编程方法_哔哩哔哩_bilibili 一、建立并求解一个模型 step1 : 新…

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解

学习视频&#xff1a;Faster-RCNN理论合集 概念辨析 在目标检测中&#xff0c;proposals和anchors都是用于生成候选区域的概念&#xff0c;但它们在实现上有些许不同。 Anchors&#xff08;锚框&#xff09;&#xff1a; 锚框是在图像中预定义的一组框&#xff0c;它们通常以…

Python:函数的形参与实参

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 函数基本概念 在Python中&#xff0c;函数是一种将代码封装以进行重复使用的机制。它们允许你定义一段代码&#xff0c;以便在程序的多个位置调…

微信小程序开发系列(二十六)·小程序运行机制(启动、前后台状态、挂起、销毁)和小程序更新机制

目录 1. 小程序运行机制 1.1 启动 1.2 前台和后台状态 1.3 挂起 1.4 销毁 2. 小程序更新机制 1. 小程序运行机制 1.1 启动 小程序启动可以分为两种情况&#xff0c;一种是冷启动&#xff0c;一种是热启动。 冷启动&#xff1a;如果用户首次打开&#xff0c;或小…

OPPO后端二面,凉了!

这篇文章的问题来源于一个读者之前分享的 OPPO 后端凉经&#xff0c;我对比较典型的一些问题进行了分类并给出了详细的参考答案。希望能对正在参加面试的朋友们能够有点帮助&#xff01; Java String 为什么是不可变的? public final class String implements java.io.Seri…

阿里云服务器安全狗免费使用多引擎智能查杀引擎

云服务器具有按量付费、降低综合成本等诸多优势&#xff0c;受到很多企业的欢迎。 因此&#xff0c;目前使用的云服务器越来越多。 阿里云是目前云服务器中最具影响力的品牌&#xff0c;因此选择阿里云服务器的用户数量也是最多的。 那么阿里云服务器需要安装杀毒软件吗&#x…

Python学习:数据类型转换

数据类型转换 对数据内置的类型进行转换&#xff0c;数据类型的转换&#xff0c;一般情况下你只需要将数据类型作为函数名即可。 Python 数据类型转换可以分为两种&#xff1a; 隐式类型转换 - 自动完成显式类型转换 - 需要使用类型函数来转换 隐式类型转换 Python 会自动…

微信小程序一次性订阅requestSubscribeMessage授权和操作详解

一次性订阅&#xff1a;用户订阅一次发一次通知 一、授权 — requestSubscribeMessage Taro.requestSubscribeMessage({tmplIds: [], // 需要订阅的消息模板的id的集合success (res) {console.log("同意授权", res)},fail(res) {console.log(拒绝授权, res)}})点击或…

2001-2022年上市公司数字化转型程度指数测算数据(含原始数据+测算代码+计算结果)(无形资产衡量)

2001-2022年上市公司数字化转型程度指数测算数据&#xff08;含原始数据测算代码计算结果&#xff09; 1、时间&#xff1a;2001-2022年 2、指标&#xff1a;证券代码、证券简称、统计截止日期、是否发生ST或*ST或PT、、是否发生暂停上市、行业代码、行业名称、stkcd、year、…