element-ui upload上传非图片文件显示自定义图标

vue2 + element-ui upload上传非图片文件显示自定义图标


提示:这里是配合jQuery进行使用的,因为要修改dom,img的src,如没有安装jQuery请自行安装。

应用场景:包含新增提交、编辑回显提交场景,实例中使用的上传列表回显模式为照片墙模式:list-type=“picture-card”,效果图在最下面。

一、新增场景

解释:新增场景不需要考虑编辑时文件、图片回显操作,仅处理上传成功后图标替换即可。

代码如下(示例):

1. html代码

<el-upload class="upload-demo" ref="upload" :action="'替换为你的上传地址'"
	:data="{token: '如果需要token,替换为你的token,当然也可以新增其他参数'}" 
	:on-success="handleSuccess" list-type="picture-card"
>
	// 上传icon	
    <i class="el-icon-plus"></i>
    //插槽,自定义鼠标经过显示的按钮
    <div slot="file" slot-scope="{file}">
        <img
            class="el-upload-list__item-thumbnail"
            :src="file.url" alt=""
        >
        <span class="el-upload-list__item-actions">
        	//预览操作
            <span
                class="el-upload-list__item-preview"
                @click="handlePvew(file)"
            >
                <i class="el-icon-zoom-in"></i>
            </span>
            //删除操作
            <span
                class="el-upload-list__item-delete"
                @click="handleRemove(file)"
             >
                <i class="el-icon-delete"></i>
            </span>
        </span>
    </div>
</el-upload>

2. js代码(这里用到了jq,因为要修改dom,img的src)

//上传成功
handleSuccess(res,file,fileList){
    this.$nextTick(() => {
        $('.el-upload-list__item').each((index)=>{
        	//这里是根据文件名称来获取后缀名
            let fix =  fileList[index].name.split('.').pop()
            if (['png','jpg','jpeg',".gif",'PNG','JPG','JPEG',"GIF"].indexOf(fix) != -1) {
                // 如果是图片文件则不做处理
                return
            } else{
                $(`.el-upload-list__item-thumbnail:eq(${index})`).attr("src",'https://tool.fastadmin.net/icon/' + fix +'.png')
                // 这里也可以用本地图片 require('@/assets/fire/WORD.png')
            }
        });
    })
},
//预览文件预览
handlePvew(file){
    //拿到当前点击的文件,根据自己需求实现
},
//删除当前文件
handleRemove(file){
    let index = this.$refs.upload.uploadFiles.indexOf(file)
    this.$refs.upload.uploadFiles.splice(index, 1)
},
//提交时获取上传文件列表
submit() {
	//这里拿到所有回显的文件列表,并处理成逗号拼接字符串
    this.form.files = this.$refs.upload.uploadFiles.map(elem=>{
    	//我这里是使用的阿里oss上传,根据自己上传层级来
        return elem.response.code.fullurl
    }).join(',')
    //后续提交代码
    ...
}

二、编辑场景

代码如下(示例):

1. data中定义fileList变量

data() {
	return {
		fileList: []
	}
}

2. 和新增一样,不过新加了一个file-list参数,用于回显

<el-upload class="upload-demo" ref="upload" :action="'替换为你的上传地址'"
	:data="{token: '如果需要token,替换为你的token,当然也可以新增其他参数'}" 
	:on-success="handleSuccess" :file-list="fileList" list-type="picture-card"
>
	// 上传icon	
    <i class="el-icon-plus"></i>
    //插槽,自定义鼠标经过显示的按钮
    <div slot="file" slot-scope="{file}">
        <img
            class="el-upload-list__item-thumbnail"
            :src="file.url" alt=""
        >
        <span class="el-upload-list__item-actions">
        	//预览操作
            <span
                class="el-upload-list__item-preview"
                @click="handlePvew(file)"
            >
                <i class="el-icon-zoom-in"></i>
            </span>
            //删除操作
            <span
                class="el-upload-list__item-delete"
                @click="handleRemove(file)"
             >
                <i class="el-icon-delete"></i>
            </span>
        </span>
    </div>
</el-upload>

3. js代码

代码如下(示例):

// 请求数据详情接口,这里我把请求代码省略了,res.data.files就是请求来的文件数据
getDetail(){
	//请求成功后,拿到新增上传的files文件,因为新增时转成逗号拼接的字符串了,这里要再转成数组
    this.fileList = res.data.files.split(',').map(elem=>{
        return {
            url: elem
        }
    })
    // dom回显成功后,替换回显图标,和新增那块代码一样
    this.$nextTick(() => {
        $('.el-upload-list__item').each((index)=>{
        	//这里是根据文件路径来获取后缀名
            let fix =  this.$refs.upload.uploadFiles[index].url.split('.').pop()
            if (['png','jpg','jpeg',".gif",'PNG','JPG','JPEG',"GIF"].indexOf(fix) != -1) {
            	// 如果是图片文件则不做处理
                return
            } else{
                $(`.el-upload-list__item-thumbnail:eq(${index})`).attr("src",'https://tool.fastadmin.net/icon/' + fix +'.png')
                // 这里也可以用本地图片 require('@/assets/fire/WORD.png')
            }
        });
    })
},
// 上传成功
handleSuccess(res,file,fileList){
	// 这里需要处理fileList数组,因为回显时赋值的那个fileList里的url和新上传的fileList里的url层级不同
    let arr = fileList.map(elem=>{
        if(elem.response){
            return {
                url: elem.response.code.fullurl
            }
        }else{
            return {
                url: elem.url
            }
        }
    })
    this.$nextTick(() => {
        $('.el-upload-list__item').each((index)=>{
        	//这里使用的是arr,使用文件路径来获取后缀名
            let fix =  arr[index].url.split('.').pop()
            if (['png','jpg','jpeg',".gif",'PNG','JPG','JPEG',"GIF"].indexOf(fix) != -1) {
                // 如果是图片文件则不做处理
            } else{
                $(`.el-upload-list__item-thumbnail:eq(${index})`).attr("src",'https://tool.fastadmin.net/icon/' + fix +'.png')
                // 这里也可以用本地图片 require('@/assets/fire/WORD.png')
            }
        });
    })
},
// 提交操作
submit() {
	//同上,回显的fileList里的url和新上传的fileList里的url层级不同
    let arr = this.$refs.upload.uploadFiles.map(elem=>{
        if(elem.response){
            return elem.response.code.fullurl
        }else{
            return elem.url
        }
    })
    this.form.files = arr.join(',')
    //后续提交代码
    ...
},

提示:预览和删除操作,与新增场景一致。

效果图

vue2 + jQuery + element-ui upload上传非图片文件显示自定义图标详细教程。

1. 新增场景

在这里插入图片描述

2. 编辑场景

在这里插入图片描述

3. 预览场景

在这里插入图片描述

本文为本人原创,转载请注明出处!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue3和TypeScript中使用Element Plus的上传组件并显示上传图片,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Element Plus和Vue Router插件,并在main.ts中进行了集成。你可以使用npm或yarn命令进行安装。 2. 在App.vue文件中,你需要修改模板部分,添加一个文件上传的组件。你可以使用`el-upload`组件来实现文件上传功能。在模板中,你可以添加一个`el-upload`标签,并设置相应的属性,如`action`、`onSuccess`等。同时,你可以使用`el-image`组件来显示上传图片。在`el-upload`的`onSuccess`回调函数中,你可以将上传成功后的图片地址保存到data中,并在`el-image`中使用该地址进行显示。 3. 在App.vue的脚本部分,你需要导入`ref`和`reactive`函数,并在`setup`函数中定义一个`ref`变量来保存上传成功后的图片地址。在`onSuccess`回调函数中,你可以通过`ref`变量来更新图片地址。 下面是一个示例代码: ```vue <template> <el-upload action="/upload" :on-success="handleUploadSuccess" :show-file-list="false" > <el-button>点击上传</el-button> </el-upload> <el-image v-if="imageUrl" :src="imageUrl" fit="contain"></el-image> </template> <script> import { ref } from 'vue'; export default { name: 'App', setup() { const imageUrl = ref(''); const handleUploadSuccess = (response) => { // 上传成功后的处理逻辑 // 可以根据接口返回的数据来获取图片地址 imageUrl.value = response.data.imageUrl; }; return { imageUrl, handleUploadSuccess, }; }, }; </script> ``` 在上面的示例中,`handleUploadSuccess`函数是上传成功后的回调函数,你可以根据实际情况来处理上传成功后的逻辑。`imageUrl`是一个`ref`变量,用于保存上传成功后的图片地址。在模板中,使用`v-if`指令来判断是否有图片地址,如果有则显示`el-image`组件,并将图片地址作为`src`属性传递给`el-image`组件。 请注意,上述示例中的`action`属性需要根据你的实际后端接口进行设置,以确保文件上传功能正常工作。另外,你可能还需要根据实际需求对上传组件进行进一步的配置和样式调整。 #### 引用[.reference_title] - *1* [vue3+ts引入element](https://blog.csdn.net/weixin_39945506/article/details/124613663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vite+vue3+ts+element-plus项目搭建--超详细](https://blog.csdn.net/weixin_44255044/article/details/119566408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值