element Upload 上传之自定义上传的长度后隐藏上传按钮以及样式穿透

使用属性limit 自定义允许上传文件的最大数量

v-model:file-list="fileList" 绑定默认上传文件 

动态绑定class类  :class="{ hide: hideUploadEdit }"

 <el-upload 
    v-model:file-list="fileList" 
    action="" 
    list-type="picture-card" 
    :on-preview="handlePictureCardPreview"
    :http-request="handleUpdataPriture" 
    :on-remove="handleRemove" 
    :limit="limit" :class="{ hide: hideUploadEdit }">
        <el-icon>
            <Plus />
        </el-icon>
    </el-upload>

定义变量

// 图片上传列表   
// { name: '', url: '' }
const fileList = ref([])          // 文件列表
const limit = ref(1)              // 允许上传文件的最大数量
const dialogImageUrl = ref('')    // 图片预览地址
const dialogVisible = ref(false)  // 图片预览弹框显示和隐藏
const hideUploadEdit = ref(false) // 动态控制图片上传按钮的class类

隐藏上传按钮

//上传图片
const handleUpdataPriture = async (option) => {
    const file = new FormData();
    file.append("file", option.file)
    const res = await updataPritureApi(file)
    emit('imageUrl', res[0])
    // 当上传文件列表大于  允许上传文件的最大数量   动态控制图片上传按钮的class类为true
    hideUploadEdit.value = fileList.value.length >= limit.value
}

class 类样式穿透

/* less :使用 /deep/ */

/* scss:使用 ::v-deep */

<style scoped>
/* less :使用 /deep/ */
/* scss:使用 ::v-deep */
.hide /deep/ .el-upload--picture-card {
    display: none;
}
</style>

下面是全部代码

<template>
    <el-upload 
    v-model:file-list="fileList" 
    action="" 
    list-type="picture-card" 
    :on-preview="handlePictureCardPreview"
    :http-request="handleUpdataPriture" 
    :on-remove="handleRemove" 
    :limit="limit" :class="{ hide: hideUploadEdit }">
        <el-icon>
            <Plus />
        </el-icon>
    </el-upload>

    <el-dialog v-model="dialogVisible">
        <img w-full :src="dialogImageUrl" alt="Preview Image" style="height: 300px;" />
    </el-dialog>
</template>

<script setup name="uploadImage">
import { ref } from 'vue'
import { updataPritureApi } from '@/api/category'
import { Plus } from '@element-plus/icons-vue'

const emit = defineEmits(['imageUrl', 'delImage'])

// 图片上传列表   
// { name: '', url: '' }
const fileList = ref([])          // 文件列表
const limit = ref(1)              // 允许上传文件的最大数量
const dialogImageUrl = ref('')    // 图片预览地址
const dialogVisible = ref(false)  // 图片预览弹框显示和隐藏
const hideUploadEdit = ref(false) // 动态控制图片上传按钮的class类

// 删除图片
const handleRemove = (uploadFile, uploadFiles) => {
    emit('delImage')
    hideUploadEdit.value = fileList.value.length >= limit.value
}


//上传图片
const handleUpdataPriture = async (option) => {
    const file = new FormData();
    file.append("file", option.file)
    const res = await updataPritureApi(file)
    emit('imageUrl', res[0])
    // 当上传文件列表大于  允许上传文件的最大数量   动态控制图片上传按钮的class类为true
    hideUploadEdit.value = fileList.value.length >= limit.value
}

// 预览图片
const handlePictureCardPreview = (uploadFile) => {
    dialogImageUrl.value = uploadFile.url
    dialogVisible.value = true
}


// 对外暴露
defineExpose({ fileList, hideUploadEdit, limit })
</script>

<style scoped>
/* less :使用 /deep/ */
/* scss:使用 ::v-deep */
.hide /deep/ .el-upload--picture-card {
    display: none;
}
</style>

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬问春风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值