2017-01-09 05:30:42 +00:00
|
|
|
<template>
|
|
|
|
<div
|
|
|
|
class="el-upload-dragger"
|
|
|
|
:class="{
|
2017-02-15 13:16:30 +00:00
|
|
|
'is-dragover': dragover
|
2017-01-09 05:30:42 +00:00
|
|
|
}"
|
|
|
|
@drop.prevent="onDrop"
|
2017-04-21 03:57:30 +00:00
|
|
|
@dragover.prevent="onDragover"
|
2017-02-15 13:16:30 +00:00
|
|
|
@dragleave.prevent="dragover = false"
|
2017-01-09 05:30:42 +00:00
|
|
|
>
|
2017-02-12 16:44:57 +00:00
|
|
|
<slot></slot>
|
2017-01-09 05:30:42 +00:00
|
|
|
</div>
|
|
|
|
</template>
|
2017-01-03 03:34:44 +00:00
|
|
|
<script>
|
|
|
|
export default {
|
2017-02-12 16:44:57 +00:00
|
|
|
name: 'ElUploadDrag',
|
2017-04-21 03:57:30 +00:00
|
|
|
props: {
|
|
|
|
disabled: Boolean
|
|
|
|
},
|
2018-03-21 03:56:30 +00:00
|
|
|
inject: {
|
|
|
|
uploader: {
|
|
|
|
default: ''
|
|
|
|
}
|
|
|
|
},
|
2017-01-09 05:30:42 +00:00
|
|
|
data() {
|
|
|
|
return {
|
2017-02-15 13:16:30 +00:00
|
|
|
dragover: false
|
2017-01-09 05:30:42 +00:00
|
|
|
};
|
2017-01-03 03:34:44 +00:00
|
|
|
},
|
2017-01-09 05:30:42 +00:00
|
|
|
methods: {
|
2017-04-21 03:57:30 +00:00
|
|
|
onDragover() {
|
|
|
|
if (!this.disabled) {
|
|
|
|
this.dragover = true;
|
|
|
|
}
|
|
|
|
},
|
2017-01-09 05:30:42 +00:00
|
|
|
onDrop(e) {
|
2018-03-21 03:56:30 +00:00
|
|
|
if (this.disabled || !this.uploader) return;
|
|
|
|
const accept = this.uploader.accept;
|
|
|
|
this.dragover = false;
|
|
|
|
if (!accept) {
|
2017-04-21 03:57:30 +00:00
|
|
|
this.$emit('file', e.dataTransfer.files);
|
2018-03-21 03:56:30 +00:00
|
|
|
return;
|
2017-04-21 03:57:30 +00:00
|
|
|
}
|
2018-03-21 03:56:30 +00:00
|
|
|
this.$emit('file', [].slice.call(e.dataTransfer.files).filter(file => {
|
|
|
|
const { type, name } = file;
|
|
|
|
const extension = name.indexOf('.') > -1
|
|
|
|
? `.${ name.split('.').pop() }`
|
|
|
|
: '';
|
|
|
|
const baseType = type.replace(/\/.*$/, '');
|
|
|
|
return accept.split(',')
|
|
|
|
.map(type => type.trim())
|
|
|
|
.filter(type => type)
|
|
|
|
.some(acceptedType => {
|
|
|
|
if (/\..+$/.test(acceptedType)) {
|
|
|
|
return extension === acceptedType;
|
|
|
|
}
|
|
|
|
if (/\/\*$/.test(acceptedType)) {
|
|
|
|
return baseType === acceptedType.replace(/\/\*$/, '');
|
|
|
|
}
|
|
|
|
if (/^[^\/]+\/[^\/]+$/.test(acceptedType)) {
|
|
|
|
return type === acceptedType;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
}));
|
2017-01-03 03:34:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
2017-04-01 06:06:23 +00:00
|
|
|
</script>
|
|
|
|
|