|
|
<template>
|
|
|
<div v-if="show">
|
|
|
<image-purview
|
|
|
v-if="uploadList[0]"
|
|
|
:status="uploadList[0].status"
|
|
|
:url="uploadList[0].url"
|
|
|
:progress="uploadList[0].showProgress"
|
|
|
:percentage="uploadList[0].percentage"
|
|
|
:remove="true"
|
|
|
@remove-image="handleRemove"></image-purview>
|
|
|
<div v-if="show">
|
|
|
<image-purview
|
|
|
v-if="uploadList[0]"
|
|
|
:status="uploadList[0].status"
|
|
|
:url="uploadList[0].url"
|
|
|
:progress="uploadList[0].showProgress"
|
|
|
:percentage="uploadList[0].percentage"
|
|
|
:remove="true"
|
|
|
@remove-image="handleRemove"
|
|
|
></image-purview>
|
|
|
|
|
|
<div class="upload-box" v-show="!uploadList[0]">
|
|
|
<Upload ref="upload"
|
|
|
:show-upload-list="false"
|
|
|
:data="{bucket: bucket}"
|
|
|
:on-success="handleSuccess"
|
|
|
:on-error="handleError"
|
|
|
:default-file-list="defaultList"
|
|
|
:format="['jpg','jpeg','png']"
|
|
|
:max-size="2048"
|
|
|
:on-format-error="handleFormatError"
|
|
|
:on-exceeded-size="handleMaxSize"
|
|
|
action="/Api/upload/image">
|
|
|
<Icon type="ios-cloud-upload-outline" title="上传图片"></Icon>
|
|
|
</Upload>
|
|
|
<Icon type="ios-cloud-outline" v-if="skn" title="调用图片服务" @click.native="browseOnline"></Icon>
|
|
|
</div>
|
|
|
|
|
|
<modal-skn-image v-model="sknImageModel" :skn="skn" @selected="selected"></modal-skn-image>
|
|
|
<div v-show="!uploadList[0]" class="upload-box">
|
|
|
<Upload
|
|
|
ref="upload"
|
|
|
:show-upload-list="false"
|
|
|
:data="{ bucket: bucket }"
|
|
|
:on-success="handleSuccess"
|
|
|
:on-error="handleError"
|
|
|
:default-file-list="defaultList"
|
|
|
:format="format"
|
|
|
:max-size="2048"
|
|
|
:on-format-error="handleFormatError"
|
|
|
:on-exceeded-size="handleMaxSize"
|
|
|
action="/Api/upload/image"
|
|
|
>
|
|
|
<Icon type="ios-cloud-upload-outline" :title="uploadIconTitle"></Icon>
|
|
|
</Upload>
|
|
|
<Icon v-if="skn" type="ios-cloud-outline" title="调用图片服务" @click.native="browseOnline"></Icon>
|
|
|
</div>
|
|
|
|
|
|
<modal-skn-image v-model="sknImageModel" :skn="skn" @selected="selected"></modal-skn-image>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
import _ from 'lodash';
|
|
|
|
|
|
export default {
|
|
|
name: 'drag-file-upload',
|
|
|
props: {
|
|
|
id: {
|
|
|
type: Object
|
|
|
},
|
|
|
defaultFile: {
|
|
|
type: String
|
|
|
},
|
|
|
skn: {
|
|
|
type: [String, Number],
|
|
|
},
|
|
|
bucket: {
|
|
|
type: String,
|
|
|
default() {
|
|
|
return 'goodsimg';
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
data() {
|
|
|
let _this = this;
|
|
|
|
|
|
return {
|
|
|
imgUrl: '',
|
|
|
visible: false,
|
|
|
show: true,
|
|
|
sknImageModel: false,
|
|
|
uploadList: [],
|
|
|
defaultList: _this.defaultFile ? [{url: _this.defaultFile}] : []
|
|
|
};
|
|
|
},
|
|
|
methods: {
|
|
|
handleView(url) {
|
|
|
this.imgUrl = url;
|
|
|
this.visible = true;
|
|
|
},
|
|
|
handleRemove() {
|
|
|
let file = this.uploadList[0];
|
|
|
let files = this.$refs.upload.fileList;
|
|
|
name: 'DragFileUpload',
|
|
|
props: {
|
|
|
id: {
|
|
|
type: Object,
|
|
|
},
|
|
|
defaultFile: {
|
|
|
type: String,
|
|
|
},
|
|
|
skn: {
|
|
|
type: [String, Number],
|
|
|
},
|
|
|
bucket: {
|
|
|
type: String,
|
|
|
default() {
|
|
|
return 'goodsimg';
|
|
|
},
|
|
|
},
|
|
|
format: {
|
|
|
type: Array,
|
|
|
default() {
|
|
|
return ['jpg', 'jpeg', 'png'];
|
|
|
},
|
|
|
},
|
|
|
formatErrMsg: {
|
|
|
type: Function,
|
|
|
default() {
|
|
|
return file => `文件 ${file.name} 格式不正确,请上传 jpg 或 png 格式的图片。`;
|
|
|
},
|
|
|
},
|
|
|
uploadIconTitle: {
|
|
|
type: String,
|
|
|
default: '上传图片',
|
|
|
},
|
|
|
},
|
|
|
data() {
|
|
|
const _this = this;
|
|
|
|
|
|
this.$refs.upload.fileList.splice(files.indexOf(file), 1);
|
|
|
this.uploadList = this.$refs.upload.fileList;
|
|
|
this.$emit('remove', this.id);
|
|
|
},
|
|
|
handleSuccess(response, file, files) {
|
|
|
if (_.get(response, 'data.imagesList.length', 0)) {
|
|
|
file.url = response.data.imagesList[0];
|
|
|
}
|
|
|
return {
|
|
|
imgUrl: '',
|
|
|
visible: false,
|
|
|
show: true,
|
|
|
sknImageModel: false,
|
|
|
uploadList: [],
|
|
|
defaultList: _this.defaultFile ? [{ url: _this.defaultFile }] : [],
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
|
defaultFile(newValue) {
|
|
|
if (newValue) {
|
|
|
this.defaultList = [{ url: newValue }];
|
|
|
}
|
|
|
},
|
|
|
},
|
|
|
mounted() {
|
|
|
this.uploadList = this.$refs.upload.fileList;
|
|
|
},
|
|
|
methods: {
|
|
|
handleView(url) {
|
|
|
this.imgUrl = url;
|
|
|
this.visible = true;
|
|
|
},
|
|
|
handleRemove() {
|
|
|
const file = this.uploadList[0];
|
|
|
const files = this.$refs.upload.fileList;
|
|
|
|
|
|
this.uploadList = files;
|
|
|
this.$emit('success', this.id, file);
|
|
|
},
|
|
|
handleError() {
|
|
|
this.$Notice.error('上传失败');
|
|
|
this.$emit('error', this.id);
|
|
|
},
|
|
|
handleFormatError(file) {
|
|
|
this.$Notice.warning({
|
|
|
title: '文件格式不正确',
|
|
|
desc: '文件 ' + file.name + ' 格式不正确,请上传 jpg 或 png 格式的图片。'
|
|
|
});
|
|
|
},
|
|
|
handleMaxSize(file) {
|
|
|
this.$Notice.warning({
|
|
|
title: '超出文件大小限制',
|
|
|
desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
|
|
|
});
|
|
|
},
|
|
|
browseOnline() {
|
|
|
this.sknImageModel = true;
|
|
|
},
|
|
|
selected(url) {
|
|
|
this.uploadList = this.defaultList = [{url}];
|
|
|
this.$emit('success', this.id, {url});
|
|
|
},
|
|
|
this.$refs.upload.fileList.splice(files.indexOf(file), 1);
|
|
|
this.uploadList = this.$refs.upload.fileList;
|
|
|
this.$emit('remove', this.id);
|
|
|
},
|
|
|
handleSuccess(response, file, files) {
|
|
|
if (_.get(response, 'data.imagesList.length', 0)) {
|
|
|
file.url = response.data.imagesList[0];
|
|
|
}
|
|
|
|
|
|
this.uploadList = files;
|
|
|
this.$emit('success', this.id, file);
|
|
|
},
|
|
|
mounted() {
|
|
|
this.uploadList = this.$refs.upload.fileList;
|
|
|
handleError() {
|
|
|
this.$Notice.error('上传失败');
|
|
|
this.$emit('error', this.id);
|
|
|
},
|
|
|
watch: {
|
|
|
defaultFile: function(newValue) {
|
|
|
if (newValue) {
|
|
|
this.defaultList = [{url: newValue}];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
handleFormatError(file) {
|
|
|
this.$Notice.warning({
|
|
|
title: '文件格式不正确',
|
|
|
desc: this.formatErrMsg(file),
|
|
|
});
|
|
|
},
|
|
|
handleMaxSize(file) {
|
|
|
this.$Notice.warning({
|
|
|
title: '超出文件大小限制',
|
|
|
desc: '文件 ' + file.name + ' 太大,不能超过 2M。',
|
|
|
});
|
|
|
},
|
|
|
browseOnline() {
|
|
|
this.sknImageModel = true;
|
|
|
},
|
|
|
selected(url) {
|
|
|
this.uploadList = this.defaultList = [{ url }];
|
|
|
this.$emit('success', this.id, { url });
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
<style lang="scss">
|
|
|
|
|
|
.upload-box {
|
|
|
width: 100px;
|
|
|
height: 100px;
|
|
|
background: #fff;
|
|
|
border: 1px dashed #dddee1;
|
|
|
border-radius: 4px;
|
|
|
text-align: center;
|
|
|
cursor: pointer;
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
|
transition: border-color 0.2s ease;
|
|
|
margin: 0 auto;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
width: 100px;
|
|
|
height: 100px;
|
|
|
background: #fff;
|
|
|
border: 1px dashed #dddee1;
|
|
|
border-radius: 4px;
|
|
|
text-align: center;
|
|
|
cursor: pointer;
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
|
transition: border-color 0.2s ease;
|
|
|
margin: 0 auto;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
|
|
|
&:hover {
|
|
|
border-color: #2d8cf0;
|
|
|
}
|
|
|
&:hover {
|
|
|
border-color: #2d8cf0;
|
|
|
}
|
|
|
|
|
|
.ivu-upload {
|
|
|
height: 30px;
|
|
|
}
|
|
|
.ivu-upload {
|
|
|
height: 30px;
|
|
|
}
|
|
|
|
|
|
.ivu-icon {
|
|
|
font-size: 30px;
|
|
|
margin: 0 2px;
|
|
|
color: #000;
|
|
|
transition: color 0.2s ease;
|
|
|
.ivu-icon {
|
|
|
font-size: 30px;
|
|
|
margin: 0 2px;
|
|
|
color: #000;
|
|
|
transition: color 0.2s ease;
|
|
|
|
|
|
&:hover {
|
|
|
color: #2d8cf0;
|
|
|
}
|
|
|
&:hover {
|
|
|
color: #2d8cf0;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</style> |
...
|
...
|
|