(注: 该方法只适用于附件的自动上传)
1.html部分代码
<div class="uploadContent" >
<div class="uploadAndList">
<el-upload
class="upload-demo"
drag
:action="uploadUrl"
multiple
:headers="header"
:file-list="fileList"
:show-file-list="false"
:on-change="handleChange"
:on-remove="handleRemove"
:auto-upload="true"
:on-progress="handleProgress"
:on-success="handleSuccess"
:on-error="handleError"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处,或<em>点击上传</em>
</div>
</el-upload>
</div>
<el-divider direction="vertical"></el-divider>
<div class="uploadFileList">
<div class="successFiles">正在上传 ({{successNum}} / {{totalNum}})</div>
<el-divider></el-divider>
<div class="upload_list_ul">
<div class="upload_list_ul_li" v-for="(item, index) in fileList" :key="index">
<div class="content_wrap" @mouseover="mouseoverHandle(index)" @mouseout="mouseoutHandle">
<i class="el-icon-document"></i>
<div class="fileName">
<div class="fileNameTop">
<span class="file_name"> {{item.name}} </span>
<i class="el-icon-circle-check" v-if="ins!==index&&item.progress===100"></i>
</div>
<el-progress v-if="item.progress!=100" :percentage="item.progress"></el-progress>
</div>
<!-- <i class="el-icon-circle-close" @click="deleteItem(index)" v-show="ins==index">
</i> -->
</div>
<el-divider></el-divider>
</div>
</div>
</div>
</div>2.js部分代码
import { getToken } from "@/utils/auth";
export default {
data() {
return {
successNum: 0,
totalNum: 0,
fileList: [],
uploadUrl: "", //文件上传接口地址
header: {
Authorization: "Bearer " + getToken(),
},
}
},
methods: {
handleChange(file, fileList) {
this.fileList = fileList;
this.totalNum = this.fileList.length;
},
handleRemove(file, fileList) {
this.fileList = fileList;
},
handleProgress(event, file, fileList) {
if (this.fileList.length > 0) {
this.fileList.forEach((element, index) => {
if (element.uid === file.uid) {
// 更新这个uid下的进度
const progress = Math.floor(event.percent);
// 防止上传完接口还没有返回成功值,所以此处给定progress的最大值为99,成功的钩子中再置为100
element.progress = progress === 100 ? 99 : progress;
this.$set(this.fileList, index, element);
}
})
}
},
handleSuccess(response, file, fileList) {
this.fileList.forEach((element, index) => {
if (element.uid === file.uid) {
element.progress = 100;
this.successNum++;
// this.$message.success('文件上传成功');
this.$set(this.fileList, index, element);
this.getFileDetailById();
}
});
},
handleError(err, file, fileList) {
this.fileList.forEach((element, index) => {
if (element.uid === file.uid) {
this.fileList.splice(index, 1); // 上传失败删除该记录
this.$message.error('文件上传失败');
}
});
},
mouseoutHandle() {
this.ins = -1;
},
mouseoverHandle(index) {
this.ins = index;
},
}
}3.scss部分代码
<style lang="scss" scoped>
.uploadContent {
width: 100%;
height: 100%;
display: flex;
.uploadAndList {
width: 40%;
}
.uploadFileList {
.successFiles {
width: 100%;
height: 35px;
line-height: 35px;
padding-left: 20px;
font-size: 18px;
font-weight: bold;
}
width: 60%;
height: 100%;
overflow-y: auto;
>.upload_list_ul{
>.upload_list_ul_li{
>.content_wrap{
width: 100%;
height: 50px;
font-size: 14px;
line-height: 20px;
padding: 0 0 0 10px;
display: flex;
align-items: center;
.el-icon-document {
font-size: 20px;
}
>i.el-icon-document,span{
color: #333;
vertical-align: middle;
}
>i.el-icon-circle-close{
font-size: 16px;
color: #F56C6C;
// float: right;
// vertical-align: middle;
z-index: 999;
}
>span{
cursor: pointer;
display: inline-block;
margin-left: 4px;
max-width: 160px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
>.file_name:hover{
color: #409EFF;
text-decoration: underline;
}
.fileName {
width: calc(100% - 22px);
height: 100%;
padding-left: 10px;
display: flex;
flex-direction: column;
justify-content: center;
.fileNameTop {
display: flex;
justify-content: space-between;
align-content: center;
.file_name {
font-size: 16px;
}
.el-icon-circle-check{
font-size: 16px;
color: #67C23A !important;
}
}
}
}
>.content_wrap:hover{
background: rgba(0,0,0,.035);
}
}
}
}
.el-divider--vertical {
height: auto;
margin: 0px;
}
.el-divider--horizontal {
margin: 0px;
}
}
</style>版权声明:本文为Avery233原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。