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;
}


目录
相关文章
|
7天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1922 6
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
5天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
652 111
|
15天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2556 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
7天前
|
人工智能 弹性计算 数据库
阿里云优惠券种类解析:主要券种区别和适用群体及领取和使用指南
2026年阿里云构建了覆盖全用户的七类优惠券,本文逐一拆解了每类优惠券的核心规则、适用人群与使用技巧:大促限定的阶梯满减券分个人、企业双通道,最高可减800元;学生专属300元无门槛券支持全品类通用;按量付费用户可参与消费达标返券形成循环优惠;新用户有低门槛专享满减券尝鲜;老用户可领取系统自动发放的随机福利券;中大型企业迁云可申请最高100万元的专项补贴;云产品通用券还能在活动价基础上实现折上折。不同身份、不同采购场景的用户均可通过精准匹配对应优惠券,最大化享受优惠力度。
462 110
阿里云优惠券种类解析:主要券种区别和适用群体及领取和使用指南
|
13天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
1617 2
|
15天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
1428 2
|
17天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
1499 55
|
2天前
Qoder 一周年 × Qwen3.8-Max 正式上线,多重好礼限时领
8月3日,Qwen3.8-Max 正式上线Qoder,迎来Qoder一周年。新老用户可领800次免费调用,下单再赠2000次;夜间(22:00–08:00)调用5折;邀请好友双方得积分与调用额度。
248 0