This commit is contained in:
sakuya 2021-05-20 00:39:35 +08:00
parent 6cfe46c60b
commit aabd317cdd
2 changed files with 56 additions and 18 deletions

View File

@ -1,8 +1,9 @@
<template> <template>
<div class=""> <div class="sc-upload-multiple">
<div class="sc-upload-list"> <div class="sc-upload-list">
<ul> <ul>
<li v-for="(file, index) in fileList" :key="index"> <li v-for="(file, index) in defaultFileList" :key="index">
<div v-if="file.status!='success'"> <div v-if="file.status!='success'">
loading loading
</div> </div>
@ -10,15 +11,19 @@
<div class="mask"> <div class="mask">
<span class="del" @click.stop="del(index)"><i class="el-icon-delete"></i></span> <span class="del" @click.stop="del(index)"><i class="el-icon-delete"></i></span>
</div> </div>
<el-image class="image" :src="file.url" :preview-src-list="[file.url]" fit="cover" hide-on-click-modal append-to-body></el-image> <el-image class="image" :src="file.url" :preview-src-list="preview" :initial-index="index" fit="cover" hide-on-click-modal append-to-body></el-image>
</div> </div>
</li> </li>
</ul> </ul>
{{defaultFileList}}
</div> </div>
<div class="sc-upload-uploader"> <div class="sc-upload-uploader">
<el-upload ref="upload" :action="action" :accept="accept" multiple :show-file-list="true" :file-list="defaultList" :before-upload="before" :on-success="success" :on-remove="remove" :on-error="error"> <el-upload ref="upload" class="uploader" :action="action" :accept="accept" multiple :show-file-list="false" :before-upload="before" :on-progress="progress" :on-success="success" :on-change="change" :on-remove="remove" :on-error="error">
<el-button size="small" type="primary">点击上传</el-button> <div class="file-empty">
<i :class="icon"></i>
<h4>{{title}}</h4>
</div>
</el-upload> </el-upload>
</div> </div>
</div> </div>
@ -30,30 +35,35 @@
modelValue: { type: String, default: "" }, modelValue: { type: String, default: "" },
action: { type: String, default: "#" }, action: { type: String, default: "#" },
accept: { type: String, default: ".jpg, .png, .jpeg, .gif" }, accept: { type: String, default: ".jpg, .png, .jpeg, .gif" },
title: { type: String, default: "上传" },
icon: { type: String, default: "el-icon-plus" }
}, },
data(){ data(){
return { return {
defaultList: this.toArr(this.modelValue), defaultFileList: this.toArr(this.modelValue)
fileList: []
} }
}, },
watch:{ watch:{
modelValue(){ modelValue(val){
this.defaultFileList = this.toArr(val)
}, },
fileList: { defaultFileList: {
handler(val){ handler(val){
console.log(val);
this.$emit('update:modelValue', this.toStr(val)); this.$emit('update:modelValue', this.toStr(val));
}, },
deep: true //deep: true
}
},
computed: {
preview(){
return this.defaultFileList.map(v => v.url)
} }
}, },
mounted() { mounted() {
this.fileList = this.$refs.upload.uploadFiles
}, },
methods: { methods: {
// //
toArr(str){ toArr(str){
var _arr = []; var _arr = [];
@ -79,10 +89,20 @@
return str; return str;
}, },
before(){ before(){
console.log(this.$refs.upload.uploadFiles);
},
change(file){
if(file.status =='ready'){
file.aa = "123"
file.url = URL.createObjectURL(file.raw);
this.defaultFileList.push(file)
}
}, },
success(res, file){ success(res, file){
file.url = res.data.src file.url = res.data.src
},
progress(){
}, },
remove(){ remove(){
@ -94,13 +114,31 @@
}) })
}, },
del(index){ del(index){
this.fileList.splice(index, 1); this.defaultFileList.splice(index, 1);
this.$refs.upload.uploadFiles.splice(index-this.defaultFileList.length-1, 1);
} }
} }
} }
</script> </script>
<style scoped> <style scoped>
.sc-upload-multiple {display: inline-block;}
.sc-upload-list li {list-style: none; display: inline-block;width: 120px;height: 120px;} .sc-upload-list li {list-style: none; display: inline-block;width: 120px;height: 120px;}
.sc-upload-list .image {width: 100%;height: 100%;} .sc-upload-list .image {width: 100%;height: 100%;}
.sc-upload-uploader {border: 1px dashed #d9d9d9;width: 120px;height: 120px;display: inline-block;vertical-align: top;box-sizing: border-box;}
.sc-upload-uploader:hover {border: 1px dashed #409eff;}
.sc-upload-uploader .uploader {width: 100%;height: 100%;}
.sc-upload-uploader:deep(.el-upload) {width: 100%;height: 100%;}
.sc-upload-uploader .file-empty {width: 100%;height: 100%;line-height: 1;display: flex;flex-direction: column;align-items: center;justify-content: center;}
.sc-upload-uploader .file-empty i {font-size: 28px;color: #8c939d;}
.sc-upload-uploader .file-empty h4 {font-size: 12px;font-weight: normal;color: #8c939d;margin-top: 10px;}
</style> </style>

View File

@ -60,13 +60,13 @@
}, },
rules: { rules: {
img1: [ img1: [
{required: true, message: '请上传', trigger: 'blur'} {required: true, message: '请上传', trigger: 'change'}
], ],
img2: [ img2: [
{required: true, message: '请上传', trigger: 'blur'} {required: true, message: '请上传', trigger: 'change'}
], ],
date: [ date: [
{required: true, message: '请选择日期', trigger: 'blur'} {required: true, message: '请选择日期', trigger: 'change'}
] ]
} }
} }