vue3中antd上传图片组件及回显

实现效果:

调用后端接口后,后端返回的数据:

1.在项目components/base下新建UploadNew.vue文件(上传图片公共组件)

<template><div class="clearfix"><a-uploadv-model:file-list="fileList"action="/platform-gateway/platform-file/security/chain"list-type="picture-card":headers="headers"@preview="handlePreview"@change="handleChange" ><div v-if="fileList.length < props.limit"><plus-outlined /><div style="margin-top: 8px">上传</div></div></a-upload><a-modal :open="previewVisible" :title="previewTitle" :footer="null" @cancel="handleCancel"><img alt="example" style="width: 100%" :src="previewImage" /></a-modal></div>
</template>
<script lang="ts" setup>
import { PlusOutlined } from '@ant-design/icons-vue';
import { ref } from 'vue';
import type { UploadChangeParam, UploadProps } from 'ant-design-vue';
import { HttpClientUtils } from '../../configure/http/httpClientUtils'interface Props {accept: string, // 上传文件的格式,limit: number,//上传图片数量fileListJson :UploadProps['fileList']
}
const props = defineProps<Props>()
function getBase64(file: File) {return new Promise((resolve, reject) => {const reader = new FileReader();reader.readAsDataURL(file);reader.onload = () => resolve(reader.result);reader.onerror = error => reject(error);});
}const previewVisible = ref(false);
const previewImage = ref('');
const previewTitle = ref('');
//调用后端接口请求头
const headers = {authorization: HttpClientUtils.getToken(),platform: 'WEB',serviceCode: 'athletics-service'
}
const $emit = defineEmits(["uploadDone"]) 
const fileList = ref<UploadProps['fileList']>([]);
if (props.fileListJson) {fileList.value = props.fileListJson
}
const handleCancel = () => {previewVisible.value = false;previewTitle.value = '';
};const handlePreview = async (file: UploadProps['fileList'][number]) => {if (!file.url && !file.preview) {file.preview = (await getBase64(file.originFileObj)) as string;}previewImage.value = file.url || file.preview;previewVisible.value = true;previewTitle.value = file.name || file.url.substring(file.url.lastIndexOf('/') + 1);
};const handleChange = (info: UploadChangeParam) => {if (info.file.status === 'done') {//   imageId.value = 'http://192.168.5.13/platform-gateway/platform-file/security/chain?fileName=' + info.file.response.data[0] + '&serviceCode=athletics-service'$emit("uploadDone", info.fileList)}
};
</script><style scoped>
/* you can make up upload button and sample style by using stylesheets */
.ant-upload-select-picture-card i {font-size: 32px;color: #999;
}.ant-upload-select-picture-card .ant-upload-text {margin-top: 8px;color: #666;
}
</style>

2.页面中使用

先引入:import AntdUploadFile  from "@/components/base/UploadNew.vue";

定义:

const props = defineProps({

  data: {} as any,

})//点编辑时父组件传入的回显数据

const fileListJson = ref<UploadProps['fileList']>([]);//封面

const fileListJson1 = ref<UploadProps['fileList']>([]);//轮播图

const formData = reactive({venue: {headerUrl:props.data?.headerUrl,bannerUrl:props.data?.bannerUrl,},
})

2.1 表单样式、使用组件

  <a-form-item :name="['venue', 'headerUrl']" label="封面图" :rules="[{ required: true }]"><AntdUploadFile:fileListJson="fileListJson":limit="1" accept="" type="frontIdcard" @upload-load="onUploading"@upload-done="onUploadDone" ></AntdUploadFile></a-form-item><a-form-item :name="['venue', 'bannerUrl']" label="场馆轮播" :rules="[{ required: true }]"><AntdUploadFile:limit="4" accept="" :fileListJson="fileListJson1"type="frontIdcard1" @upload-load="onUploading1"@upload-done="onUploadDone1" ></AntdUploadFile></a-form-item>

2.2 上传图片成功 ,点保存后传给后端

// 封面图片上传成功(单个图)
const onUploadDone = (fileList: any) => {// 文件上传成功后返回的文件信息 type,是为了一个页面引用多少文件上传作的区分if (fileList.length) {formData.venue.headerUrl= fileList[0].response.data}console.log( formData.venue.headerUrl,"上传成功后的参数 ", fileList);
}
// 轮播图片上传成功(多张图)
const onUploadDone1 = (fileList: any) => {// 文件上传成功后返回的文件信息 type,是为了一个页面引用多少文件上传作的区分let bannerUrl = []if (fileList.length) {for (let i = 0; i < fileList.length; i++) {if (fileList[i].response) {bannerUrl.push({"url":fileList[i].response.data,})} else {//将fileName= 后面的数据和&前的数据截取push到url后,转为json字符串传给后端const index = fileList[i].url.indexOf('fileName=')let newIndex: anyif (index !== -1) {const start = fileList[i].url.slice(index + 'fileName='.length)const endIndex = start.indexOf('&')if (endIndex !== -1) {newIndex = start.slice(0,endIndex)}}bannerUrl.push({"url": newIndex,})}     }}formData.venue.bannerUrl =JSON.stringify(bannerUrl) 
}

2.3 点编辑时回显(因本接口后端返回的数据需要拼接,可根据自行情况修改)

if (props.data.bannerUrl||props.data.headerUrl) {fileListJson.value.push({"url":'http://platform-file/security/chain?fileName=' + props.data.headerUrl + '&serviceCode=athletics-service',})const bannerList =  JSON.parse(props.data.bannerUrl)//json字符串转为数组console.log(bannerList,'里面有这个图片吗')for (let i = 0;i< bannerList.length;i++) {fileListJson1.value.push({"url":'后端返回的地址',})}}

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

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

相关文章

发挥储能系统领域优势,海博思创坚定不移推动能源消费革命

随着新发展理念的深入贯彻&#xff0c;我国正全面落实“双碳”目标任务&#xff0c;通过积极转变能源消费方式&#xff0c;大幅提升能源利用效率&#xff0c;实现了以年均约3.3%的能源消费增长支撑了年均超过6%的国民经济增长。这一成就的背后&#xff0c;是我国能源结构的持续…

龙蜥Anolis OS基于开源项目制作openssh 9.8p1 rpm包 —— 筑梦之路

环境信息 制作过程和centos 7几乎没有区别&#xff0c;此处就不再赘述。 CentOS 7基于开源项目制作openssh9.8p1 rpm二进制包修复安全漏洞CVE-2024-6387 —— 筑梦之路_cve-2024-6387修复-CSDN博客 制作成果展示 tree RPMS/ RPMS/ └── x86_64├── openssh-9.8p1-1.an7.…

springboot3整合SpringSecurity实现登录校验与权限认证(万字超详细讲解)

目录 身份认证&#xff1a; 1、创建一个spring boot项目&#xff0c;并导入一些初始依赖&#xff1a; 2、由于我们加入了spring-boot-starter-security的依赖&#xff0c;所以security就会自动生效了。这时直接编写一个controller控制器&#xff0c;并编写一个接口进行测试&…

【面试题】防火墙的部署模式有哪些?

防火墙的部署模式多种多样&#xff0c;每种模式都有其特定的应用场景和优缺点。以下是防火墙的主要部署模式&#xff1a; 一、按工作模式分类 路由模式 定义&#xff1a;当防火墙位于内部网络和外部网络之间时&#xff0c;需要将防火墙与内部网络、外部网络以及DMZ&#xff0…

事半功倍大法!财务数据API让企业工作智能化

在快速变化的商业环境中&#xff0c;财务管理的自动化已成为企业提升效率、降低成本和增强决策质量的关键。财务API&#xff0c;作为现代企业架构中不可或缺的一部分&#xff0c;提供了一种强大的工具&#xff0c;使得企业能够无缝集成各种财务服务和应用&#xff0c;实现数据的…

数据分析理论

数据分析的概念 数据分析是指通过恰当的统计方法和分析手段&#xff0c;对数据进行收集汇总&#xff0c;并进行加工处理。对处理过后的有效数据进行分析&#xff0c;发现存在的问题&#xff0c;制定可行的方案、从而帮助人们采取更科学的行动 数据分析4个层次 著名咨询公司Gart…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第59-agent自动获取喵星人资讯并保存至云文件夹

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第59-agent自动获取喵星人资讯并保存至云文件夹 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由Java…

Oracle执行一条SQL的内部过程

一、SQL语句根据其功能主要可以分为以下几大类&#xff1a; 1. 数据查询语言&#xff08;DQL, Data Query Language&#xff09; 功能&#xff1a;用于从数据库中检索数据&#xff0c;常用于查询表中的记录。基本结构&#xff1a;主要由SELECT子句、FROM子句、WHERE子句等组成…

stm32h743 阿波罗v2 NetXduo http server CubeIDE+CubeMX

在这边要设置mpu的大小&#xff0c;要用到http server&#xff0c;mpu得设置的大一些 我是这么设置的&#xff0c;做一个参考 同样&#xff0c;在FLASH.ld里面也要对应修改&#xff0c;SECTIONS里增加.tcp_sec和 .nx_data两个区&#xff0c;我们用ram_d2区域去做网络&#xff…

生产英特尔CPU处理器繁忙的一天

早晨&#xff1a;准备与检查 7:00 AM - 起床与准备 工厂员工们早早起床&#xff0c;快速洗漱并享用早餐。为了在一天的工作中保持高效&#xff0c;他们会进行一些晨间锻炼&#xff0c;保持头脑清醒和身体活力。 8:00 AM - 到达工厂 员工们到达英特尔的半导体制造工厂&#…

电脑拼图软件有哪些?盘点7种简单好用电脑拼图软件

如今我们无时无刻不使用着社交媒体&#xff0c;图片已经成为我们日常生活中不可或缺的一部分。无论是社交媒体分享、工作汇报还是个人创作&#xff0c;拼图软件都扮演着至关重要的角色。今天&#xff0c;就让我们一起来盘点7款电脑拼图软件&#xff0c;帮助你轻松找到最适合自己…

AI应用行业落地100例 | 全国首个司法审判垂直领域AI大模型落地深圳法院

《AI应用行业落地100例》专题汇集了人工智能技术在金融、医疗、教育、制造等多个关键行业中的100个实际应用案例&#xff0c;深入剖析了AI如何助力行业创新、提升效率&#xff0c;并预测了技术发展趋势&#xff0c;旨在为行业决策者和创新者提供宝贵的洞察和启发。 随着人工智能…

研究突破:无矩阵乘法的LLMs 计算!

通过在推理过程中使用优化的内核&#xff0c;内存消耗可以比未优化模型减少超过10倍。&#x1f92f; 该论文总结道&#xff0c;有可能创建第一个可扩展的无矩阵乘法LLM&#xff0c;在数十亿参数规模上实现与最先进的Transformer相媲美的性能。 另一篇最新论文《语言模型物理学…

14 学习总结:指针 · 其二 · 数组

目录 一、数组名的理解 &#xff08;一&#xff09;【数组名】与【&数组名[0]】 &#xff08;二&#xff09;区别于 【 sizeof(数组名) 】 和 【 &数组名 】 &#xff08;三&#xff09;总结 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二…

PlugLink的技术架构实例解析(附源码)

在探讨PlugLink这一开源应用的实际应用与技术细节时&#xff0c;我们可以从其构建的几个核心方面入手&#xff0c;结合当前AI编程的发展趋势&#xff0c;为您提供既有实例又有深度解析的内容。 PlugLink的技术架构实例解析 前端技术选型 —— layui框架&#xff1a; PlugLi…

Windows桌面上透明的记事本怎么设置

作为一名经常需要记录灵感的作家&#xff0c;我的Windows桌面总是布满了各种文件和窗口。在这样的环境下&#xff0c;一个传统的记事本应用往往会显得突兀&#xff0c;遮挡住我急需查看的资料。于是&#xff0c;我开始寻找一种既能满足记录需求&#xff0c;又能保持桌面整洁美观…

画了一个简陋的曼德勃罗集

原文画了一个简陋的曼德勃罗集 - 知乎 (zhihu.com) 前两天看妈咪叔科普曼德勃罗集的视频&#xff1a; 【分形与混沌2】最有魅力的几何图形——曼德勃罗集与朱利亚集 天使与魔鬼共存_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com/video/av79113074​编辑 虽然看过…

Dify中的工具

Dify中的工具分为内置工具&#xff08;硬编码&#xff09;和第三方工具&#xff08;OpenAPI Swagger/ChatGPT Plugin&#xff09;。工具可被Workflow&#xff08;工作流&#xff09;和Agent使用&#xff0c;当然Workflow也可被发布为工具&#xff0c;这样Workflow&#xff08;工…

java线程锁synchronized的几种情况

一、对象方法锁 1、成员方法加锁 同一个对象成员方法有3个synchronized修饰的方法&#xff0c;通过睡眠模拟业务操作 public class CaseOne {public synchronized void m1(){try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace()…

ChIP项目文章CMI(IF=24.1)|IRF1激活可促进辐射诱导的细胞死亡和炎症反应

2024年6月7日&#xff0c;四川大学张舒羽教授团队在Cellular & Molecular Immunology&#xff08;IF24.1&#xff09;期刊上发表了题为“Chaperone-and PTM-mediated activation of IRF1 tames radiation-induced cell death and inflammation response”的文章&#xff0c…