el-upload上传一张图片后显示缩略图并隐藏添加图片按钮

简介: el-upload上传一张图片后显示缩略图并隐藏添加图片按钮

上传前:

上传类型不通过

正确上传后

点击删除后

不想了解原理的直接copy这个完整demo按需修改

<script lang="ts" setup>
import { ElDialog, UploadProps, UploadFile, ElMessage } from "element-plus"
import { ref } from "vue"
 
const validImageFormats = ["jpg", "jpeg", "png"];//允许的文件后缀
//选择文件格式校验//并限制上传数量
const checkImageFormat = (file) => {
    console.log("文件格式校验");
    console.log(file);
    // noUpload.value = true
    const fileFormat = file.name.split(".").pop().toLowerCase(); // 获取文件格式
    if (!validImageFormats.includes(fileFormat)) {
        ElMessage({ type: "error", message: "商品图片格式必须为 jpg/jpeg/png" });
        faceList.value = []; //删除格式不符合的文件
        return false; // 阻止文件上传
    }
 
    noUpload.value = true//设置为true阻止继续上传
    return true; // 允许文件上传
};
 
const dialogImageUrl = ref(""); //预览图片路径
const dialogVisible = ref(false); //预览框可见
//删除
const handleRemove: UploadProps["onRemove"] = (file: UploadFile) => {
    console.log("删除图片:");
    console.log(faceList.value);
    noUpload.value = false
};
//预览
const handlePictureCardPreview: UploadProps["onPreview"] = (file: UploadFile) => {
    dialogImageUrl.value = file.url!;
    dialogVisible.value = true;
};
 
const faceList = ref([])//图片列表
const noUpload = ref(false)//不再上传
 
</script>
 
 
<template>
    <div>
        <el-upload :class="{ disabled: noUpload }" :auto-upload="false" list-type="picture-card"
            :on-preview="handlePictureCardPreview" :on-change="checkImageFormat" :on-remove="handleRemove" :limit="1"
            ref="businessLicense" :file-list="faceList">
            <el-icon v-if="faceList.length == 0">
                <Plus />
            </el-icon>
        </el-upload>
 
        <el-dialog v-model="dialogVisible">
            <img w-full :src="dialogImageUrl" alt="Preview Image" />
        </el-dialog>
    </div>
</template>
 
 
<style  scoped>
::v-deep .disabled .el-upload--picture-card {
    display: none !important;
}
</style>

html代码:

核心代码: :class="{ disabled: noUpload }"

原理就是:当已经正确上传了一张图片后,noUpload会设置为true,表示不再上传,这时el-upload组件会被添加一个类 .disabled,接下来直接样式穿透,把匹配到的包含disabled类的.el-upload--picture-card元素隐藏掉

                <el-upload 
                    :class="{ disabled: noUpload }"      
                    :auto-upload="false" list-type="picture-card"
                    :on-preview="handlePictureCardPreview" 
                    :on-change="checkImageFormat" 
                    :on-remove="handleRemove"
                    :limit="1" ref="businessLicense"
                     :file-list="faceList">
                    <el-icon v-if="faceList.length == 0">
                      <Plus />
                    </el-icon>
                  </el-upload>
 
                  <label style="
                    color: rgb(243, 183, 106);
                  ">提示:请上传员工真实人脸照片</label>
 
                  <el-dialog v-model="dialogVisible">
                    <img w-full :src="dialogImageUrl" alt="Preview Image" />
                  </el-dialog>

ts部分代码:

const validImageFormats = ["jpg", "jpeg", "png"];//允许的文件后缀
//选择文件格式校验//并限制上传数量
const checkImageFormat = (file) => {
  console.log("文件格式校验");
  console.log(file);
  // noUpload.value = true
  const fileFormat = file.name.split(".").pop().toLowerCase(); // 获取文件格式
  if (!validImageFormats.includes(fileFormat)) {
    ElMessage({ type: "error", message: "商品图片格式必须为 jpg/jpeg/png" });
    faceList.value=[]; //删除格式不符合的文件
    return false; // 阻止文件上传
  }
 
  noUpload.value = true//设置为true阻止继续上传
  return true; // 允许文件上传
};
 
const dialogImageUrl = ref(""); //预览图片路径
const dialogVisible = ref(false); //预览框可见
//删除
const handleRemove: UploadProps["onRemove"] = (file: UploadFile) => {
  console.log("删除图片:");
  console.log(faceList.value);
  noUpload.value = false
};
//预览
const handlePictureCardPreview: UploadProps["onPreview"] = (file: UploadFile) => {
  dialogImageUrl.value = file.url!;
  dialogVisible.value = true;
};
 
const faceList = ref([])//图片列表
const noUpload = ref(false)//不再上传

css代码:

::v-deep .disabled .el-upload--picture-card {
  display: none !important;
}


目录
相关文章
|
JavaScript 前端开发 数据安全/隐私保护
vue2+elementui上传照片(el-upload 超简单)
【6月更文挑战第4天】element上传附件(el-upload 超详细) 这个功能其实比较常见的功能,后台管理系统基本上都有,这就离不开element的el-upload 展示:
1532 0
|
前端开发
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
902 0
|
前端开发 JavaScript 安全
【前端相关】elementui使用el-upload组件实现自定义上传
【前端相关】elementui使用el-upload组件实现自定义上传
2412 0
|
数据格式
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
本文介绍了在ElementUI和ElementPlus中使用`el-table`组件实现合并行功能的技巧,包括多列合并和单列合并的方法,并提供了相应的示例代码和运行效果。
9160 1
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
element el-upload上传图片完成后隐藏上传
element el-upload上传图片完成后隐藏上传
710 0
|
存储 前端开发 Java
Element el-upload 文件上传/图片上传/拖拽上传/附带参数/附带请求头部详解
文目录 1. 前言 2. 基本用法 2.1 前端部分 2.2 后端部分 2.3 获取后端返回信息 3. 外观功能介绍 3.1 拖拽上传 3.2 显示图片 3.3 设置文件列表样式 3.4 显示提示信息 4. 事件功能介绍 4.1 限制上传文件数量 4.2 限制上传文件类型和大小 4.3 移除文件处理 4.4 手动上传 5. 附带参数 6. 附带请求头部 7. 小结
7203 0
|
JavaScript
vue中关于element的el-image 图片预览功能增加一个下载按钮
vue中关于element的el-image 图片预览功能增加一个下载按钮
1450 0
|
前端开发 数据格式
vue+element-plus上传图片功能以及回显问题还有数量限制
vue+element-plus上传图片功能以及回显问题还有数量限制
714 0