element-ui实现证件照上传预览下载组件封装

element-ui实现证件照上传预览下载组件封装

效果:

element ui 实现证件的上传下载预览功能

参数说明

我只写了两个参数,后续有需求再对其组件进行丰富~

参数说明
fileListProp用来存储上传后后端返回的图片UR了
uploadUrl图片上传反悔的URL后端接口地址

父组件调用:

 <au-upload :uploadUrl="'http://192.168.60.27:8888/file-storage-center/object/uploadObjectByMultipartFile'" :fileListProp="fileList1"></au-upload><p><span>*</span> <span class="idCardTip">身份证国徽面</span></p>

组件源码:

<template><div><el-upload v-loading="loading" element-loading-text="上传中..." :style="{ 'width': width + 'px', 'height': height + 'px' }" class="avatar-uploader":class="noneBtnDealImg ? 'disUoloadSty' : ''" ref="uploader" :file-list="fileList" :action="uploadUrl":before-upload="beforeUpload" :on-exceed="(files, fileList) => handleExceed(files, fileList, 1)":on-change="(file, fileList) => this.handleAvatarSuccess(file, fileList)"list-type="picture-card":auto-upload="true"><i slot="default" class="el-icon-plus"></i><div slot="file" slot-scope="{file}"><img class="el-upload-list__item-thumbnail" :src="file.url" alt=""><span class="el-upload-list__item-actions"><span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)"><i class="el-icon-zoom-in"></i></span><span v-if="!disabled" class="el-upload-list__item-delete" @click="handleDownload(file)"><i class="el-icon-download"></i></span><span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file)"><i class="el-icon-delete"></i></span></span></div></el-upload><el-dialog :visible.sync="dialogVisible"><img width="100%" :src="dialogImageUrl" alt=""></el-dialog></div>
</template><script>
import { getToken } from '@/utils/auth'
import axios from 'axios'; // 导入axios
export default {props: {fileListProp: {typeof: Array,default: () => []},uploadUrl: {typeof: String,default: () => ''},},data() {return {width: 140,height: 140,fileList: this.fileListProp,headerObj: {authorization: getToken(),tenant_id: 0,},img: '',noneBtnDealImg: false,uploadfileurl: this.uploadFileURL,dialogImageUrl: '',dialogVisible: false,disabled: false,loading: false,};},created() {},mounted() {this.noneBtnDealImg = this.fileList.length >= 1},methods: {beforeUpload(file) {// 检查文件类型、大小等const isJPGorPNG = file.type === 'image/jpeg' || file.type === 'image/png';const isLt2M = file.size / 1024 / 1024 < 2;if (!isJPGorPNG) {this.$message.error('上传的图片只能是 JPG 或 PNG 格式!');return false;}if (!isLt2M) {this.$message.error('上传的图片大小不能超过 2MB!');return false;}// 发起上传请求this.directUpload(file);// 返回false阻止el-upload组件的默认上传行为return false;},async directUpload(file) {try {this.loading = trueconst formData = new FormData();formData.append('file', file);const response = await axios.post(this.uploadUrl, formData, {headers: this.headerObj,});// 处理上传成功this.handleUploadResponse(response.data, file);} catch (error) {// 处理上传错误console.error('Upload error:', error);} finally {this.loading = false;}},handleUploadResponse(responseData, file) {// 根据后端返回的数据,更新fileListconst updatedFile = {...file,response: responseData,url: responseData.data || '', // 假设后端返回的URL在这里};this.fileList.push(updatedFile);//当前只保留一张照片this.$nextTick(() => {if (this.fileList.length >= 1) {const uploadBox1 = document.getElementsByClassName('avatar-uploader');uploadBox1[0].style.height = this.height + "px"}this.noneBtnDealImg = this.fileList.length >= 1})},//图片删除handleRemove(file, fileList, name) {const index = this.fileList.indexOf(file);if (index > -1) {this.fileList.splice(index, 1);}this.img = ''this.noneBtnDealImg = this.fileList.length >= 1this.$refs['uploader'].clearFiles();this.$forceUpdate()},handleExceed(files, fileList, num) {this.$message.warning(`当前限制选择 ${num} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);},handleAvatarSuccess(file, fileList) {this.$nextTick(() => {if (fileList.length >= 1) {const uploadBox1 = document.getElementsByClassName('avatar-uploader');uploadBox1[0].style.height = this.height + "px"}this.noneBtnDealImg = fileList.length >= 1})},handlePictureCardPreview(file) {this.dialogImageUrl = file.url;this.dialogVisible = true;},handleDownload(file) {// 获取图片的真实URLconst imageUrl = file.response && file.response.data ? file.response.data : file.url;// 创建一个隐藏的可下载链接const link = document.createElement('a');link.style.display = 'none';link.href = imageUrl;link.download = file.name || 'image.png'; // 设置下载的文件名,如果没有name属性则默认为'image.png'// 触发点击事件以下载图片document.body.appendChild(link);link.click();document.body.removeChild(link);}}
}
</script><style scoped>
.el-form-item__label::after {content: '(最多1张)';display: block;font-size: 12px;color: #999;line-height: 12px;
}/deep/ .allUpload .el-form-item__content {display: flex;
}/deep/ .el-upload-list__item {transition: none !important
}/deep/ .disUoloadSty .el-upload--picture-card {/* 上传按钮隐藏 */display: none !important;
}/deep/ .el-upload--picture-card {width: 140px;height: 140px;
}/deep/ .el-upload-list--picture-card .el-upload-list__item {margin-right: 0px !important;margin-bottom: 0px !important;
}/deep/ .el-upload-list__item {width: 140px !important;height: 140px !important;
}/deep/ .el-upload-list__item div:nth-child(1) {width: 100% !important;height: 100% !important;
}
/deep/ .el-loading-spinner .el-loading-text{text-align: center;margin-top: -18px;
}
</style>

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

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

相关文章

报表生成器FastReport .Net用户指南:关于脚本(下)

FastReport的报表生成器&#xff08;无论VCL平台还是.NET平台&#xff09;&#xff0c;跨平台的多语言脚本引擎FastScript&#xff0c;桌面OLAP FastCube&#xff0c;如今都被世界各地的开发者所认可&#xff0c;这些名字被等价于“速度”、“可靠”和“品质”,在美国&#xff…

The plain HTTP request was sent to HTTPS port

异常信息 原因 错误信息 “The plain HTTP request was sent to HTTPS port” 表明客户端尝试使用未加密的HTTP协议发送请求到一个配置为使用加密的HTTPS协议的端口。 解决方案 要解决这个问题&#xff0c;需要确保使用正确的协议和端口号进行请求。应该使用的HTTPS前缀。例如…

官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会

摘要&#xff1a;本文整理自阿里云开源大数据平台徐榜江 (雪尽)&#xff0c;关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会&#xff0c;内容主要分为以下四部分&#xff1a; 1、Flink CDC 新仓库&#xff0c;新流程 2、Flink CDC 新定位&#xff0c;新玩法 3、Flin…

【嵌入式硬件】步进电机

1.步进电机简介 1.1步进电机基本原理 步进电机的英文是stepping motor。step的中文意思是行走、迈步。所以仅从字面上我们就可以得知,步进电机就是一步一步移动的电动机。说的官方一点儿,步进电机是一种将电脉冲信号转换成相应角位移或者线位移的电动机(直线电机)。下图为…

灵境矩阵平台x百度---智能体(一)

什么是数据插件 大模型插件:大语言模型插件是随着大语言模型发展而诞生的全新插件。大语言模型插件的核心是Web API独立于大语言模型&#xff0c;插件开发过程不受大语言模型的约束&#xff0c;同时没有开发语言的限制&#xff0c;更加通用&#xff0c;只要WebAPI遵循RESTfuI相…

html5cssjs代码 034 自定义字体

html5&css&js代码 034 自定义字体 一、代码二、解释 这是一个带有自定义字体的网页&#xff0c;设置了页面背景颜色、文字颜色以及全局样式。它定义了三种自定义字体并通过font-face规则引入外部字体文件&#xff0c;并通过CSS类&#xff08;.f1, .f2, .f3&#xff09;…

第十二届蓝桥杯省赛CC++ 研究生组-路径

记录到每个结点的最短距离&#xff0c;以此为基础计算后续结点最优值 #include<iostream> #include<algorithm> using namespace std; typedef long long ll;ll gcd(int a, int b){if(!b) return a;return gcd(b, a % b); }int main(){ll dp[2022] {0};//dp[i]记…

如何打破SAST代码审计工具的局限性?

关键词&#xff1a;白盒测试&#xff1b;代码分析工具&#xff1b;代码扫描工具&#xff1b;静态代码检测工具&#xff1b; 在代码的世界里&#xff0c;安全问题如同潜伏的暗礁&#xff0c;随时可能让航行中的软件项目触礁沉没。SAST代码审计工具如同雷达一样&#xff0c;以其独…

inputStream.avaliable()方法网络操作读取不全BUG

一、问题描述 公司有个需求&#xff0c;就是调用方&#xff08;我&#xff09;需要把pdf文件转为Base64字符串作为参数传递为被调用方&#xff0c;以下是大致转换过程&#xff1a; URL url new URL("http://xxxx.pdf");HttpURLConnection uc (HttpURLConnection) …

docker入门(十)—— docker-compose详解

Docker Compose dockercompose官网&#xff1a;https://docs.docker.com/compose/ 什么是 docker compose Docker Compose 是用于定义和运行多容器应用程序的工具。 这是解锁简化和高效的开发和部署体验的关键。 Compose 简化了对整个应用程序堆栈的控制&#xff0c;让您能…

Chrome 114 带着侧边栏扩展来了

效果展示 manifest.json {"manifest_version": 3,"name": "ChatGPT学习","version": "0.0.2","description": "ChatGPT,GPT-4,Claude3,Midjourney,Stable Diffusion,AI,人工智能,AI","icons"…

cocos 3.8开发 微信小游戏分包技巧压缩主包

Creator 版本&#xff1a; 3.8.2 目标平台&#xff1a;小游戏开发 压缩后 我不知道别人压缩几百kb是怎么做到的。不过哪个要钱。 我这个技巧不用花钱。 论坛有教程但是没有教详细怎么做。 开整&#xff01; 做一个空白的场景。然后写一个load脚本。load主场景。 从代码可…

数据结构知识总结

二叉树 满二叉树 特性 所有叶子结点都集中在二叉树的最下面一层上&#xff0c;而且结点总数为&#xff1a;2^n-1 (n为层数 / 高度&#xff09; 完全二叉树 特性 若设二叉树的高度为h&#xff0c;除第h层外&#xff0c;其他各层的节点数都达到最大个数&#xff0c;第h层有…

Http中Host,Referer,Origin和Access-Control-Allow-Origin

Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-Origin 文章目录 Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-OriginHost定义特性作用 Referer定义特性作用 Origin定义特性作用 Access-Control-Allow-Origin定义特性作用…

基于微信小程序的CMS内容管理系统开发笔记

背景调研 内容管理CMS小程序的帮助运营者创建和管理小程序内容&#xff0c;提供一个直观的操作界面&#xff0c;能够轻松地添加、编辑和发布内容&#xff0c;而无需了解复杂的编程知识。可以进行栏目管理&#xff0c;文章管理&#xff0c;编辑文章内容&#xff0c;包括文字、图…

React腳手架已經創建好了,想使用Vite作為開發依賴

使用Vite作為開發依賴 安裝VITE配置VITE配置文件簡單的VITE配置項更改package.json中的scripts在根目錄中添加index.html現在可以瀏覽你的頁面了 安裝VITE 首先&#xff0c;在現有的React項目中安裝VITE npm install vite --save-dev || yarn add vite --dev配置VITE配置文件 …

【UE5】动画蒙太奇简述

项目资源文末百度网盘自取 动画蒙太奇基本功能 动画蒙太奇&#xff08;Animation Montage&#xff09; 可以将多个 动画序列&#xff08;Animation Sequences&#xff09; 合并为单个资产并通过蓝图播放&#xff0c;还可以将一个蒙太奇动画切分为多个 蒙太奇分段&#xff08;M…

六大排序精解

排序概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#x…

安装nginx和PHP

首先规划四台虚拟机&#xff0c;之前的主从数据库已经两台&#xff0c;其余两台&#xff0c;一个设置nginx&#xff0c;一个是php 首先NGINX的概念&#xff0c;请参考https://blog.csdn.net/hyfsbxg/article/details/122322125。正向代理&#xff0c;反向代理&#xff0c;可以…

【每日八股】Java基础经典面试题4

前言&#xff1a;哈喽大家好&#xff0c;我是黑洞晓威&#xff0c;25届毕业生&#xff0c;正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结&#x1f970;。 本篇文章记录的Java基础面试题&#xff0c;如果你也在复习的话不妨…