Ant Design Vue上传多个图片

模板代码:

在这里插入图片描述

定义变量:

在这里插入图片描述

文件限制的函数:

在这里插入图片描述

上传的函数:

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e0c18855525e450ab73b10e98fbd3103.pn

样式函数:

在这里插入图片描述

完整代码:

<template><div class="dialog-upload" v-if="showUploadDialog"><div class="dialog-upload__head"><div class="title">上传图片</div><div class="close" @click="closeDialog"></div></div><div class="dialog-upload__body"><div class="upload-box"><span class="text">tab:</span><div class="pic-box"><div v-for="(item,index) in cqImgUrl" :key="index" class="pic-box__single"><a-image class="pic" :src="item" /><div @click="deleteImg('tab',item)" class="pic-delete"></div></div><a-uploadaction="#":multiple="true"list-type="picture":before-upload="beforeUpload":customRequest="handleChange":show-upload-list="false"><div v-if="!cqImgUrl.length || cqImgUrl.length <5" class="img" @click="uploadImg('tab')"></div></a-upload></div></div><div class="upload-box"><span class="text">tab1:</span><div class="pic-box"><div v-for="(item,index) in nyImgUrl" :key="index" class="pic-box__single"><a-image class="pic" :src="item" /><div @click="deleteImg('tab1',item)" class="pic-delete"></div></div><a-uploadaction="#":multiple="true"list-type="picture":before-upload="beforeUpload":customRequest="handleChange":show-upload-list="false"><div v-if="!nyImgUrl.length || nyImgUrl.length <5" class="img" @click="uploadImg('tab1')"></div></a-upload></div></div></div><div class="dialog-upload__foot"><span class="sure" @click="sure">确定</span><span class="cancle" @click="closeDialog">取消</span></div></div>
</template><script lang="ts">
import { defineComponent, reactive, toRefs, watch, nextTick } from 'vue'
import { message } from 'ant-design-vue'
import G from '@/request/G'
import axios from 'axios'export default defineComponent({name: 'SmartDialog',props: {showUploadDialog: {// 是否显示当前弹窗type: Boolean,default: false},activeTab: {type: String,default: 'tab'},imgUrl: {type: Array,default: () => {return []}},qyStoreId: { // 拿到的机构Idtype: String,default: ''}},setup (props, { emit }) {interface FileItem {uid: string;name?: string;status?: string;response?: string;url?: string;percent?:number;type?:string;}interface FileInfo {file: FileItem;fileList: FileItem[];}const data = reactive({dialogVisible: false, // 是否显示弹窗cqImgUrl: [] as Array<string> | any,nyImgUrl: [] as Array<string> | any,cqImgList: [] as any,nyImgList: [] as any,uploadType: '', // 当前上传文件的归属limitError: false})// 监听当前的弹窗是否显示watch(() => props.showUploadDialog,(val: boolean) => {data.dialogVisible = !!val},{immediate: true,deep: true})watch(() => props.activeTab,(val: string) => {const type = val === 'tab' ? 2 : 1if (props.qyStoreId) {nextTick(() => {getPicUrl(type)})}},{immediate: true,deep: true})// 文件上传const handleChange = (info: FileInfo) => {console.log('data.limitError',data.limitError)if (!data.limitError) {const formData = new FormData()formData.append('file', info.file as any) // 添加文件对象let params = {biz: 'energy',_api: 'el.image.upload',_v: '1.0'} as anyparams = G.buildInputs(params)params._at = G.buildAt(params)Object.keys(params).forEach(key => {formData.append(key, params[key])})axios.post('/upload', formData).then((res: any) => {if (res.data && res.data.success && res.data.model) {if (res.data.model[0]) {let url = res.data.model[0].authUrlif (data.uploadType === 'tab') {data.cqImgUrl.push(url)data.cqImgList = []}if (data.uploadType === 'tab1') {data.nyImgUrl.push(url)data.nyImgList = []}}} else {message.error(res.data.msgInfo)}})}}// 获取另一个tab的图,用于回显const getPicUrl = (val:number) => {let params = {_api: 'el.energy.storeDraw',storeId: props.qyStoreId,drawType: val,_v: '1.0'} as anyparams = G.buildInputs(params)G.baseAjax({type: 'POST',data: G.param(params) + '&_at=' + G.buildAt(params)}).then((res:any) => {const { success, model } = resif (success) {if (props.activeTab === 'tab') {data.nyImgUrl = model.split(',')}if (props.activeTab === 'tab1') {data.cqImgUrl = model.split(',')}}}).finally(() => {if (props.activeTab === 'tab') {data.cqImgUrl = JSON.parse(JSON.stringify(props.imgUrl))} else if (props.activeTab === 'tab1') {data.nyImgUrl = JSON.parse(JSON.stringify(props.imgUrl))}})}// 关闭弹窗const closeDialog = () => {emit('closeDialog', false)}// 当前上传的是哪个文件const uploadImg = (type:string) => {data.uploadType = type}const deleteImg = (type:string, item:string) => {if (type === 'tab') {if (data.cqImgUrl && data.cqImgUrl.length) {let index = data.cqImgUrl.indexOf(item)data.cqImgUrl.splice(index,1)}}if (type === 'tab1') {if (data.nyImgUrl && data.nyImgUrl.length) {let index = data.nyImgUrl.indexOf(item)data.nyImgUrl.splice(index,1)}}}const beforeUpload = (file: FileItem) => {// const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/gif' || file.type === 'image/jpg'// if (!isJpgOrPng) {//   message.error('请上传正确的图片格式!')// }if (data.uploadType === 'tab') {data.cqImgList.push(file)data.limitError = (data.cqImgList.concat(...data.cqImgUrl)).length > 5// console.log('data.cqImgList',data.cqImgList)// console.log('data.cqImgUrl',data.cqImgUrl)}if (data.uploadType === 'tab1') {data.nyImgList.push(file)data.limitError = (data.nyImgList.concat(...data.nyImgUrl)).length > 5// console.log('data.nyImgList',data.nyImgList)// console.log('data.nyImgUrl',data.nyImgUrl)}console.log('data.limitError',data.limitError)if (data.limitError) {if (data.uploadType === 'tab') {data.cqImgList = []}if (data.uploadType === 'tab1') {data.nyImgList = []}message.error('厂区图和能源图至多上传五张图片!')}return !data.limitError}const sure = () => {let params = {_api: 'el.energy.addImage',storeId: props.qyStoreId,factoryDraw: data.cqImgUrl.join(','),energyDraw: data.nyImgUrl.join(','),_v: '1.0'} as anyparams = G.buildInputs(params)G.baseAjax({type: 'POST',data: G.param(params) + '&_at=' + G.buildAt(params)}).then((res:any) => {const { success } = resif (success) {message.success('上传成功!')} else {message.error(res.msgInfo)}}).finally(() => {emit('submitDialog', {cqImgUrl: data.cqImgUrl,nyImgUrl: data.nyImgUrl})})}return {...toRefs(data),closeDialog,uploadImg,sure,handleChange,beforeUpload,deleteImg}}
})
</script><style lang="scss" scoped>
.dialog-upload {width: 1056px;height: 947px;// height: 788px;z-index: 200;position: absolute;top: 20%;left: 40%;background: url("@/assets/images/uploadDialog.png") no-repeat;background-size: 100% 100%;overflow: auto;&::-webkit-scrollbar {display: none;}&__head {position: relative;.title {padding: 32px 0 77px 48px;font-size: 44px;font-weight: 600;color: #ffffff;line-height: 62px;}.close {position: absolute;top: 24px;right: 24px;cursor: pointer;width: 32px;height: 32px;background: url("@/assets/images/close.png") no-repeat;background-size: 32px auto;}}&__body {display: flex;flex-direction: column;.upload-box {display: flex;margin-bottom: 32px;.text {display: inline-block;white-space: nowrap;width: 236px;flex: 1;font-size: 28px;font-weight: 400;color: #fff;text-align: right;}.img {cursor: pointer;width: 200px;height: 122px;background: url("@/assets/images/upload.png") no-repeat;background-size: 200px auto;}}.pic-box {display: flex;flex-wrap: wrap;flex: 3;&__single {position: relative;width: 200px;height: 122px;border: 2px dashed #4E93F8;border-radius: 8px;margin: 0 20px 24px 0;.pic  {width: 200px;height: 122px;object-fit: contain;border-radius: 8px;}.pic-delete {cursor: pointer;z-index: 200;position: absolute;z-index: 50;top: -16px;right: -12px;width: 30px;height: 30px;background: url("@/assets/images/deleteImg.png") no-repeat;background-size: 30px auto;}}}}&__foot {position: absolute;bottom: 40px;left: 50%;transform: translateX(-50%);.sure {cursor: pointer;display: inline-block;background: #3196FA;border: 2px solid #3196FA;border-radius: 8px;padding: 12px 41px;margin-right: 44px;font-size: 28px;color: #fff;}.cancle {cursor: pointer;display: inline-block;border: 2px solid #FFFFFF;border-radius: 8px;padding: 12px 41px;font-size: 28px;color: #fff;}}
}
</style>
<style lang="scss">
.dialog-upload {.ant-image {width: 196px;height: 118px;border-radius: 8px;}.ant-image-img {width: 196px;height: 118px;object-fit: contain;border-radius: 8px;}.ant-image-mask-info {// 将div下的所有元素隐藏文字大小为0visibility: hidden;font-size: 0; }.ant-image-mask-info span{// 再单独给span标签添加样式 让其显示并且给出文字大小visibility: visible;font-size: 48px;}
}
</style>

最终效果:

在这里插入图片描述

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

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

相关文章

【PIE-Engine 数据资源】全球 10 米土地覆盖产品 (ESA-2020)

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球 10 米土地覆盖产品 (ESA-2020)时间范围2020年空间范围全球数据来源ESA WorldCover project 2020代码片段var imagespie. ImageCollection (“ESA/WORLD_COVER_2020”) 二、描述 全球 10 米土…

nvm, node.js, npm, yarn 安装配置

文章目录 nvm 安装node.js 安装npm yarn 配置 nvm 安装 nvm 是一个 node.js 管理工具&#xff0c;可以快捷下载安装使用多个版本的node.js linux 命令行输入&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashwget -qO- https…

主机自动重启或自动关机故障

公司有两台品牌机&#xff0c;使用约1年半&#xff0c;最近频繁出现自动重启或自动关机现象。 排除插线板、电源线等电源的问题&#xff0c;拆机查看。 故障后的主机拆开后&#xff0c;先摸了一下散热片&#xff0c;并不烫手。 仔细查看内部&#xff0c;排线规整&#xff0c…

base64编码与图片之间相互转换

题记&#xff1a; Base64是网络上最常见的用于传输8Bit字节码的编码方式之一 1、将base64转换成图片 <img src"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0 DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg&quo…

白码ERP实现销售订单自动生成生产订单功能

某ERP项目中&#xff0c;业务员创建销售单后&#xff0c;还需要确认产品库存是否充足&#xff0c;如不充足&#xff0c;还需要手动创建生成订单通知车间进行生产&#xff0c;比较麻烦&#xff0c;客户希望系统可以自动进行判断&#xff0c;自动根据现有库存生成生产订单。 目标…

Pyside6入门教学——编写一个UI界面并显示

1、安装Pyside6 输入下列命令安装Pyside6。 pip install Pyside6 2、设计UI 打开Qt设计工具&#xff08;在安装Pyside6包的目录下&#xff09;。 【注】我这用的是anaconda虚拟环境&#xff0c;所以我的路径是D:\App\Anaconda3\envs\snake\Lib\site-packages\PySide6。设计…

三使用Docker Hub管理镜像

使用Docker Hub管理镜像 Docker Hub是Docker官方维护的Docker Registry&#xff0c;上面存放着很多优秀的镜像。不仅如此&#xff0c;Docker Hub还提供认证、工作组结构、工作流工具、构建触发器等工具来简化我们的工作。 前文已经讲过&#xff0c;我们可使用docker search 命…

freemaker导出

一、创建ftl模板文件 1、将xls文件转换为xml格式 需要将xml中内容格式化一下&#xff0c; 在线 XML 格式化 | 菜鸟工具 (jyshare.com) 将格式化好的内容&#xff0c;保存在 ftl 文件中&#xff0c;放入项目文件。 二、后端对数据做组装 Java代码中对导出文件做赋值 Override…

k8s之对外服务ingress

一、service 1、service作用 ①集群内部&#xff1a;不断跟踪pod的变化&#xff0c;不断更新endpoint中的pod对象&#xff0c;基于pod的IP地址不断变化的一种服务发现机制&#xff08;endpoint存储最终对外提供服务的IP地址和端口&#xff09; ②集群外部&#xff1a;类似负…

Vue3 在 history 模式下通过 vite 打包部署白屏

Vue3 在 history 模式下通过 vite 打包部署后白屏; 起因 hash 模式 url 后面跟个 # 强迫症犯了改成了 history,就此一波拉锯战开始了 ... 期间 nigix 和 router 各种反复排查尝试最终一波三折后可算是成功了 ... Vue官方文档 具体配置可供参考如下: 先简要介绍下,当前项目打包…

【EI会议征稿通知】第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)

第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024&#xff09; 2024 7th International Conference on Advanced Electronic Materials, Computers and Software Engineering 第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)将于2024年5月10-1…

AI智慧导诊系统(源码),利用人工智能技术,通过根据患者症状描述智能推荐挂号科室。

什么是智慧导诊系统? 简单地说&#xff0c;智慧导诊系统是一种利用人工智能技术&#xff0c;为医生提供帮助的系统。它可以通过分析患者的症状和病史为医生提供疾病诊断和治疗方案的建议。 智慧导诊系统可根据患者症状描述智能推荐挂号科室。系统采用对话式询问患者症状&…

2024-01-17(SpringCloud)

1.使用openFeign的itemClient接口去做远程调用其他微服务中的接口。但我们直接使用了itemClient接口&#xff0c;而不是该接口的实现类&#xff0c;说明我们是使用该接口的代理对象帮我们做远程调用的。这个代理对象是invocationHandler来生成的。 2.openFeign底层发起远程调用…

什么是DOM?(JavaScript DOM是什么?)

1、DOM简洁 DOM是js中最重要的一部分&#xff0c;没有DOM就不会通过js实现和用户之间的交互。 window是最大的浏览器对象&#xff0c;在它的下面还有很多子对象&#xff0c;我们要学习的DOM就是window对象下面的document对象 DOM&#xff08;Document Object Model&#xff09…

【数学建模美赛论文word模板更新】数学建模美赛O/F奖论文word写作模板——研赛国赛国一、美赛F/O奖学长联合制作

参加美赛不知道论文如何写、如何排版&#xff1f;快来领取免费模板哦~ 我们的word模板由研赛国赛国一、美赛F/O奖学长联合制作。 论文模板是论文的一部分&#xff0c;它代表着你的论文从构思到完成的全过程&#xff0c;是论文的雏形。 论文模板能够节省你的写作时间&#xf…

当MySql有字段为null,索引是否会失效

sql执行过程中,使用is null 或者is not null 理论上都会走索引,由于优化器的原因导致索引失效变成全表扫描,或者说是否使用索引和NULL值本身没有直接关系,和执行成本有关系。 数据行记录如何存储NULL值的&#xff1f; InnoDB 提供了 4 种行格式 Redundant:非紧凑格式,5.0 版…

01.CheckStyle代码检查工具

CheckStyle代码检查工具 1.介绍 Checkstyle 是一种开发工具&#xff0c;可帮助程序员编写符合编码标准的 Java 代码。它使检查 Java 代码的过程自动化&#xff0c;从而使开发者免于完成这项无聊&#xff08;但重要&#xff09;的任务。这使得它非常适合想要强制执行编码标准的…

高级架构师是如何设计一个系统的?

架构师如何设计系统&#xff1f; 系统拆分 通过DDD领域模型&#xff0c;对服务进行拆分&#xff0c;将一个系统拆分为多个子系统&#xff0c;做成SpringCloud的微服务。微服务设计时要尽可能做到少扇出&#xff0c;多扇入&#xff0c;根据服务器的承载&#xff0c;进行客户端负…

微信这个费用,终于降低了

大家好&#xff0c;我是小悟 这个费用降低了&#xff0c;这对于广大小程序开发者来说无疑是一个好消息。这一举措不仅可以降低开发者的成本&#xff0c;还有助于激发更多的创新和创业激情。 对于广大小程序开发者来说&#xff0c;这也是一个福音&#xff0c;因为他们可以降低开…

DMA技术在STM32中优化UART、SPI和I2C通信性能的研究与实现

DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;技术可以在STM32微控制器上优化UART、SPI和I2C等通信性能。DMA可以实现数据的高速传输&#xff0c;减轻CPU的负担&#xff0c;提高系统性能。在本篇文章中&#xff0c;我将探讨DMA技术在STM32中优化…