Element-UI 自定义upload组件(进度条,删除,下载)

先看看效果图

代码也很简单,样式自己写好之后就剩下处理进度条了

             <div class="footer">
                    <div class="title">
                        <span>产品资料</span>
                        <span>(提示:文件请控制大小在10MB以内)</span>
                        <el-upload 
                            multiple//多文件上传
                            :action="uploadUrl" //文件上传的地址(必填)
                            :show-file-list="false" //自定义样式所以设置false不显示
                            :file-list="fileArr"//文件列表
                            :before-upload="beforeUploadFile" //文件上传前
                            :on-progress="uploadFileProcess" //文件传输过程(处理进度条)
                            :on-success="handleFileSuccess" //文件成功
                            >
                            <el-button size="small" type="primary">浏览</el-button>
                        </el-upload>   
                    </div>
                    <div class="file">
                        <div  v-for="(item,index) in fileArr" :key="index">
                            <span><i class="bg"></i>{{item.name}}</span>
                            <div  v-if="item.progressFlag">
                                <el-progress :percentage="item.progressPercent"></el-progress>
                            </div>
                            <span v-else-if="item.successFlag">上传成功!</span>
                            <span v-else>上传失败!</span>
                            <span>{{item.size | fileSize}}</span>
                            <div v-if="item.progressFlag">
                                <span>[删除]</span>
                                <span>[下载]</span>
                            </div>
                            <div v-else>
                                <span @click="removeFile(item,index)">[删除]</span>
                                <span @click="downLoadFile(item,index)">[下载]</span>
                            </div>
                        </div>
                    </div>
                </div>
复制代码

methods部分

    <---文件上传部分-->
     //上传前的函数(用于验证上传文件格式及大小)
        beforeUploadFile(file){
            const isLt10M = file.size / 1024 / 1024 < 10;
            if (!isLt10M) {
              return false;
            }
        },
    //文件上传过程中的函数(在这里获取进度条的进度)
        uploadFileProcess(event, file, fileList){
            this.fileArr = fileList
            this.fileArr.forEach(item=>{
                if (item.percentage == 100) {

                } else {
                  item.progressFlag = true
                  item.progressPercent = Math.abs(item.percentage.toFixed(0));
                }
            })
        },
    //文件上传成功的函数(用于文件上传成功之后的逻辑)
        handleFileSuccess(res, file,fileList){
            this.fileArr = fileList
            this.fileArr.forEach((item,index)=>{
                item.progressFlag = false
                if(item.status == 'success'){
                    item.successFlag = true
                }else{
                    item.successFlag = false
                }
            })
        },
        //删除文件(基于文件列表的数据进行操作)
        removeFile(item,index){
            this.fileArr.splice(index,1)
        },
        //下载文件(基于文件列表的数据进行操作)
        downLoadFile(item,index){
            
        }
复制代码

转载于:https://juejin.im/post/5d2d3c7c6fb9a07eca69adb5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值