el-upload照片墙二次封装

embedded/2024/10/20 11:44:01/

         基于el-upload文件上传组件的二次封装。

         使用场景一般是提交表单中的附属信息,组件要实现的是图片的上传,还有图片的回显。那么现在给出组件代码。

<template><div><el-uploadaction="":http-request="customRequest"list-type="picture-card":on-preview="handlePictureCardPreview":on-remove="handleRemove":on-success="handleUploadSuccess":file-list="fileList":before-upload="beforeUpload"><i class="el-icon-plus"></i></el-upload><el-dialogtitle="图片详情":visible.sync="dialogVisible"append-to-bodytop="56px"><img width="100%" :src="dialogImageUrl" alt="" /></el-dialog></div>
</template><script>
import { fileUpload, fileDownload } from "@/api/system/common";
export default {props: {onUploadSuccess: {type: Function,required: true,},initialUrls: {type: Array,default: () => [],},init: {type: Boolean,require: true,},},data() {return {action: "",dialogImageUrl: "",dialogVisible: false,fileList: [],};},watch: {init() {if (!this.init) {// 关闭对话框时,重置this.fileList = [];}},},methods: {async updateFileList() {const promises = this.initialUrls.map(async (item) => {const response = await fileDownload({ path: item.filePath });item.url = URL.createObjectURL(new Blob([response.data]));return item; // 返回更新后的 item});// 等待所有的 Promise 完成this.fileList = await Promise.all(promises);},beforeUpload(file) {// 限制最多上传三个文件if (this.fileList.length >= 3) {this.$message.error("最多只能上传三个图片");return false; // 返回 false 以阻止上传}return true; // 允许上传},customRequest({ file, onSuccess, onError }) {const formData = new FormData();formData.append("file", file);fileUpload(formData).then((response) => {return response;}).then((res) => {onSuccess(res); // 调用成功回调}).catch((error) => {onError(error); // 调用错误回调});},handleRemove(file, fileList) {// 从 fileList 中移除被删除的文件this.fileList = fileList;this.onUploadSuccess(this.fileList);},handlePictureCardPreview(file) {this.dialogImageUrl = file.url;this.dialogVisible = true;},handleUploadSuccess(response, file, fileList) {const imageUrl = response.url || file.url; // 根据实际情况获取 URLthis.fileList.push({name: file.name,url: imageUrl, // 将新上传的图片 URL 添加到列表中filePath: response.data.filePath,});this.onUploadSuccess(this.fileList);},},
};
</script>

       使用了 Element UI 库中的 el-upload 和 el-dialog 组件,用于实现图片上传和预览功能。

父组件调用

初始化时,调用照片墙组件的回显方法

        这里要注意的是el-upload中回显和上传使用的file-list列表必须要满足它的格式,不然无法回显图片,所以我们存储的时候用一个json格式字段去保存,在前端去解析和转换。

数据库


http://www.ppmy.cn/embedded/128983.html

相关文章

uniapp,获取头部高度

头部自定义时候&#xff0c;设置获取安全区域&#xff0c;可以用 uni.getSystemInfoSync();接口。 <view class"statusBar" :style"{height:statusBarHeightpx}"> let SYSuni.getSystemInfoSync(); let statusBarHeightref(SYS.statusBarHeight) …

问题记录-- 在 Vue2 中动态更新 Select 组件的选项

在 Vue2 中动态更新 Select 组件的选项 在 Vue 开发中&#xff0c;动态更新表单组件的选项是一个常见的需求。特别是在使用 select 组件时&#xff0c;如何确保选项能够实时反映数据的变化是一个值得关注的问题。本文将探讨如何通过方法获取 select 的 options 来解决这一问题…

vuex的store应用

1.在pakage.json加一行 2.和main同级别加一个js文件 import Vue from vue import Vuex from vuexVue.use(Vuex)export default new Vuex.Store({state: {langFlag: new Date().getTime()},mutations: {setLangFlag(state) {state.langFlag new Date().getTime()}} })3.在mai…

自由学习记录(7)

文件的判断是否存在&#xff0c;带上文件自己的名字 XmlSerializer (Person)serializer.Deserialize(reader); 如果出错之后&#xff0c;没有try来接&#xff0c;就会直接程序报错暂停&#xff0c; 有了的话无论如何都会继续正常进final using则是正常 为什么要用 using&a…

CTFHUB技能树之SQL——整数型注入

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是SQL整数型注入&#xff0c;但还是来判断一下 &#xff08;1&#xff09;检查是否存在注入点 1 and 11# 返回正确 1 and 12# 返回错误 说明存在SQL整数型注入 &#xff08;2&#xff09;猜字段数 1 order by 2# 1 order…

《深度学习》Dlib库 人脸应用实例 疲劳监测

目录 一、了解项目 1、脸部关键点 2、实现方法 3、流程 初始化阶段&#xff1a; 视频处理循环&#xff1a; 显示与交互&#xff1a; 二、案例实现 1、完整代码 2、运行结果 一、了解项目 1、脸部关键点 2、实现方法 通过眼睛的纵横比来判断眼睛是否闭合。从而判断人…

RabbitMQ service is already present - only updating service parameters

Windows下卸载RabbitMQ之后,然后重新注册RabbitMQ服务的时候,报错以下信息: D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin>D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin\rabbitmq-service.bat install RabbitMQ service is already …

【C51】单片机与LED数码管的静态显示接口案例分析

目录 ---案例需求--- 1、电路设计 2、程序 3、元器件清单 4、程序仿真 LED数码管有静态显示和动态显示两种显示方式。静态显示是指无论有多少位LE数码管&#xff0c;其都同处于显示状态。数码管工作于静态显示方式时&#xff0c;各位的共阴极&#xff08;或共阳极&#xf…