*添加拖拽上传

This commit is contained in:
jmal 2020-04-19 14:11:33 +08:00
parent 30c7034d63
commit d368f437a0

View File

@ -1,6 +1,5 @@
<template> <template>
<div id="global-uploader" v-wechat-title="process === -10 || process===100 || this.fileListLength === 0 ? $route.meta.title : process+'%'+' | '+$route.meta.title" > <div id="global-uploader" v-wechat-title="process === -10 || process===100 || this.fileListLength === 0 ? $route.meta.title : process+'%'+' | '+$route.meta.title" >
<!-- 上传 --> <!-- 上传 -->
<uploader <uploader
ref="uploader" ref="uploader"
@ -12,10 +11,15 @@
@file-success="onFileSuccess" @file-success="onFileSuccess"
@file-progress="onFileProgress" @file-progress="onFileProgress"
@file-error="onFileError" @file-error="onFileError"
@dragenter="onDragenter"
@file-removed="onFileRemoved" @file-removed="onFileRemoved"
> >
<uploader-unsupport></uploader-unsupport> <uploader-unsupport></uploader-unsupport>
<uploader-drop v-if="dragover" class="uploader-drop">
<span>上传文件到当前目录下</span>
</uploader-drop>
<uploader-btn id="global-uploader-btn" ref="uploadBtn" :attrs="attrs">选择文件</uploader-btn> <uploader-btn id="global-uploader-btn" ref="uploadBtn" :attrs="attrs">选择文件</uploader-btn>
<uploader-btn id="folder-uploader-btn" ref="folderBtn" :directory="true">选择文件夹</uploader-btn> <uploader-btn id="folder-uploader-btn" ref="folderBtn" :directory="true">选择文件夹</uploader-btn>
@ -147,7 +151,8 @@ export default {
isUploading: false, isUploading: false,
filePanel: {}, filePanel: {},
processAreaClass: {}, processAreaClass: {},
pc: true pc: true,
dragover: false
} }
}, },
computed: { computed: {
@ -158,6 +163,24 @@ export default {
}, },
watch: {}, watch: {},
mounted() { mounted() {
let that = this
let dropbox = document.body
dropbox.addEventListener("dragenter", function(e){
e.stopPropagation();
e.preventDefault();
}, false);
dropbox.addEventListener("dragover", function(e){
e.stopPropagation();
e.preventDefault();
that.dragover = true
}, false);
dropbox.addEventListener("drop", function(e){
e.stopPropagation();
e.preventDefault();
that.dragover = false
}, false);
Bus.$on('openUploader', query => { Bus.$on('openUploader', query => {
this.params = query || {} this.params = query || {}
if (this.$refs.uploadBtn) { if (this.$refs.uploadBtn) {
@ -189,6 +212,14 @@ export default {
Bus.$off('uploadFileListBack') Bus.$off('uploadFileListBack')
}, },
methods: { methods: {
onDragenter(e) {
console.log('onDragenter')
this.params = {
currentDirectory: this.$route.query.path || '/',
username: this.$store.state.user.name,
userId: this.$store.state.user.userId
}
},
// onFileAdded(file) { // onFileAdded(file) {
// console.log('file', file) // console.log('file', file)
// console.log(this.uploader.filePaths) // console.log(this.uploader.filePaths)
@ -197,6 +228,7 @@ export default {
// Bus.$emit('fileAdded') // Bus.$emit('fileAdded')
// }, // },
onFilesAdded(files) { onFilesAdded(files) {
console.log(files)
this.fileListLength = this.uploader.fileList.length this.fileListLength = this.uploader.fileList.length
const filePaths = this.uploader.filePaths const filePaths = this.uploader.filePaths
const paths = Object.keys(filePaths) const paths = Object.keys(filePaths)
@ -226,21 +258,6 @@ export default {
} }
files.forEach(file => { files.forEach(file => {
// 上传文件 // 上传文件
console.log('上传->', file)
console.log(pathsLength)
// this.computeMD5(file)
// if (pathsLength < 1) {
// // this.computeMD5(file)
// } else {
// console.log(pathsLength)
// Object.assign(this.uploader.opts, {
// query: {
// isFolder: false,
// ...this.params
// }
// })
// this.uploader.resume()
// }
Object.assign(this.uploader.opts, { Object.assign(this.uploader.opts, {
query: { query: {
isFolder: false, isFolder: false,
@ -255,7 +272,6 @@ export default {
// fileList.forEach(file => { // fileList.forEach(file => {
// file.currentSpeed // file.currentSpeed
// }) // })
console.log('window.uploader',window.uploader)
this.netSpeed = formatNetSpeed(file.currentSpeed) this.netSpeed = formatNetSpeed(file.currentSpeed)
this.process = Math.trunc(window.uploader.progress() * 100) this.process = Math.trunc(window.uploader.progress() * 100)
if(this.process > 0 && this.process < 100 && window.uploader.fileList.length > 0){ if(this.process > 0 && this.process < 100 && window.uploader.fileList.length > 0){
@ -266,7 +282,7 @@ export default {
window.onbeforeunload = null window.onbeforeunload = null
} }
this.isUploading = window.uploader.isUploading() this.isUploading = window.uploader.isUploading()
console.log(`上传中 ${file.name},chunk:${chunk.startByte / 1024 / 1024} ~ ${chunk.endByte / 1024 / 1024}`) // console.log(`上传中 ${file.name},chunk:${chunk.startByte / 1024 / 1024} ~ ${chunk.endByte / 1024 / 1024}`)
}, },
onFileSuccess(rootFile, file, response) { onFileSuccess(rootFile, file, response) {
const res = JSON.parse(response) const res = JSON.parse(response)
@ -278,7 +294,7 @@ export default {
this.statusSet(file.id, 'failed') this.statusSet(file.id, 'failed')
return return
} else { } else {
console.log(`上传成功 ${file.name}`) // console.log(`上传成功 ${file.name}`)
this.statusSet(file.id, 'success') this.statusSet(file.id, 'success')
} }
// 如果服务端返回需要合并 // 如果服务端返回需要合并
@ -538,10 +554,27 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
#global-uploader { #global-uploader {
position: fixed; position: fixed;
z-index: 20; z-index: 1002;
right: 15px; right: 15px;
bottom: 15px; bottom: 15px;
.uploader-drop {
text-align: center;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #ffffff99;
span {
font-size: 34px;
font-weight: 700;
color: #616161;
position: relative;
top: 48%;
}
}
.uploader-app { .uploader-app {
width: 720px; width: 720px;
} }