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 展示:
2023 0
|
前端开发 JavaScript 安全
【前端相关】elementui使用el-upload组件实现自定义上传
【前端相关】elementui使用el-upload组件实现自定义上传
3638 0
|
存储 API
uniapp登录拦截器
uniapp登录拦截器
uniapp登录拦截器
|
前端开发
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
1224 0
|
数据格式
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
本文介绍了在ElementUI和ElementPlus中使用`el-table`组件实现合并行功能的技巧,包括多列合并和单列合并的方法,并提供了相应的示例代码和运行效果。
10549 46
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
|
存储 前端开发 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. 小结
8216 0
element el-upload上传图片完成后隐藏上传
element el-upload上传图片完成后隐藏上传
1365 0
|
资源调度 JavaScript 前端开发
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
这篇文章介绍了在Vue 2项目中如何通过`v-viewer`插件实现图片的预览、切换、缩放、旋转等功能,并提供了插件的安装、配置和使用方法。
5028 0
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
|
前端开发 JavaScript 开发者
利用 el-select 和 el-tree 实现树形结构多选框联动功能
本文详细介绍了如何使用ElementUI中的el-select下拉选择器和el-tree树形控件来实现多功能联动选择器,包括多选、删除、搜索、清空选项等功能。通过树形控件展示复杂的层级结构,用户可以通过下拉选择树形节点,实时搜索节点,且支持批量选择和删除功能。文中提供了完整的HTML、JavaScript和CSS代码实现,帮助开发者快速集成此功能。
6023 0
利用 el-select 和 el-tree 实现树形结构多选框联动功能
el-upload图片上传,删除
el-upload是ElementUI中的一个组件,可以用来实现图片上传功能。下面是一个基本的el-upload的示例代码:
899 0