<template>
<div>
<div class="demo-upload-list" v-for="(item,index) in uploadList" :key="index">
<template v-if="item.status === 'finished'">
<img :src="item.url">
<div class="demo-upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(item)"></Icon>
<Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>
</div>
</template>
<template v-else>
<Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
</template>
</div>
<Upload
ref="upload"
:show-upload-list="false"
:default-file-list="defaultList"
:on-success="handleSuccess"
:format="['jpg','jpeg','png']"
:max-size="2048"
:on-format-error="handleFormatError"
:on-exceeded-size="handleMaxSize"
:before-upload="handleBeforeUpload"
multiple
type="drag"
:action="path"
:data="uptoken"
style="display: inline-block;width:58px;">
<div style="width: 58px;height:58px;line-height: 58px;">
<Icon type="ios-camera" size="20"></Icon>
</div>
</Upload>
<Modal title="View Image" v-model="visible">
<img :src="imgName" v-if="visible" style="width: 100%">
</Modal>
</div>
</template>
<script>
export default {
data(){
return {
path:'https://upload.qiniup.com',
imgName: '',
visible: false,
uploadList: [],
uptoken:{},
type:'',
}
},
props: ["defaultList","uploadConfig"],
methods: {
//获取token
getUpToken(){
let vm = this;
let url = this.common.path+'qiniuUpload/getUpToken';
this.$get(url).then(res=>{
console.log(res.uptoken);
vm.uptoken.token = res.uptoken;
})
},
/*======================上传图片 start=======================*/
handleView (data) {
this.imgName = data.s_url;
this.visible = true;
},
handleRemove (file) {
const fileList = this.$refs.upload.fileList;
this.$refs.upload.fileList.splice(fileList.indexOf(file), 1);
this.$emit("listenUpload",this.uploadList);
},
handleSuccess (res,file) {
let vm = this;
//异步请求返回私密路径
let url = this.common.path+'qiniuUpload/getPrivateUrl';
let ajaxData = {
mediaType:this.type,
key:res.key
}
this.$postFormData(
url,
this.qs.stringify(ajaxData),
).then(data=>{
file.url = data.s_url;
file.s_url = data.url;
file.name = res.key;
vm.$emit("listenUpload",vm.uploadList);
});
},
handleFormatError (file) {
this.$Notice.warning({
title: 'The file format is incorrect',
desc: 'File format of ' + file.name + ' is incorrect, please select jpg or png.'
});
},
handleMaxSize (file) {
this.$Notice.warning({
title: 'Exceeding file size limit',
desc: 'File ' + file.name + ' is too large, no more than 2M.'
});
},
handleBeforeUpload (file) {
this.key = file.lastModified+Math.floor(Math.random()*9999)+'.'+file.name.split('.')[1];
this.uptoken.key = this.key;
this.type = file.type;
let num = this.uploadConfig.num||5;
let title = '最多可以上传'+ num + '张照片';
const check = this.uploadList.length < num;
if (!check) {
this.$Notice.warning({
title: title
});
}
return check;
}
/*======================上传图片 end=======================*/
},
mounted: function(){
this.uploadList = this.$refs.upload.fileList;
this.getUpToken();
},
};
</script>
<style scoped>
.demo-upload-list{
display: inline-block;
width: 60px;
height: 60px;
text-align: center;
line-height: 60px;
border: 1px solid transparent;
border-radius: 4px;
overflow: hidden;
background: #fff;
position: relative;
box-shadow: 0 1px 1px rgba(0,0,0,.2);
margin-right: 4px;
}
.demo-upload-list img{
width: 100%;
height: 100%;
}
.demo-upload-list-cover{
display: none;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0,0,0,.6);
}
.demo-upload-list:hover .demo-upload-list-cover{
display: block;
}
.demo-upload-list-cover i{
color: #fff;
font-size: 20px;
cursor: pointer;
margin: 0 2px;
}
</style>
网友评论