You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
willaengine/resources/js/Global/components/Inputs/Dropzone.vue

89 lines
3.0 KiB

<template>
<div>
4 years ago
<vue-dropzone ref="myVueDropzone" id="dropzone" :destroyDropzone="false" @vdropzone-sending="setParams" @vdropzone-removed-file="removeFile"
:options="dropzoneOptions" @vdropzone-success="responseSuccess">
</vue-dropzone>
</div>
</template>
<script>
import vue2Dropzone from 'vue2-dropzone'
5 years ago
import { TokenService } from '@Global/services/storage.services'
import commonState from '@Global/store/modules/common/state';
5 years ago
import Routes from '@Global/utils/common/routes';
5 years ago
import { url } from '@Common/mixins/urls';
import axios from 'axios';
import 'vue2-dropzone/dist/vue2Dropzone.min.css'
export default {
props: {
5 years ago
defaultMessage: { default: "<i class='WMi-upload'></i> لطفا تصاویر و فایل ها را اینجا اپلود کنید " },
5 years ago
files: {default:() => ([])},
5 years ago
batch_id: { required: true, type: String }
},
components: {
vueDropzone: vue2Dropzone
},
data() {
5 years ago
return {
dropzoneOptions: {
5 years ago
url: Routes.api() + url('storeFile'),
5 years ago
thumbnailWidth: 200,
headers: { "Authorization": `Bearer ${TokenService.getToken()}`, "Module": `${commonState.current_module}` },
addRemoveLinks: true,
dictDefaultMessage: this.defaultMessage,
sendingMultiple: true,
removeType: "server"
5 years ago
},
}
},
computed: {
batchId() {
return this.batch_id;
},
},
methods: {
responseSuccess(file, response) {
5 years ago
if (response.data && response.data.id) {
file['id'] = response.data.id;
}
},
removeFile(file, error, xhr) {
5 years ago
if(this.dropzoneOptions.removeType == "server") {
axios.delete(url('deleteFile', {file: file.id}));
}
},
manuallyLoadFiles(files) { //file =[ {size: 123, name: "Icon", type: "image/png", url: "https://myvizo.com/img/logo_sm.png"}]
if(Array.isArray(files) && files.length) {
for (const file of files) {
5 years ago
this.$refs.myVueDropzone.manuallyAddFile({name: file.file_name, type: file.mime_type, id: file.id, size: file.size}, file.thumbnail);
}
}
5 years ago
},
manuallyRemoveAllFiles() {
this.dropzoneOptions.removeType = "client";
this.$refs.myVueDropzone.removeAllFiles();
this.dropzoneOptions.removeType = "server";
},
5 years ago
setParams(file, xhr, formData) {
formData.append('batch_id', this.batchId);
},
},
watch: {
5 years ago
files(files) {
this.manuallyRemoveAllFiles();
this.manuallyLoadFiles(files);
}
},
};
</script>
4 years ago
<style>
.vue-dropzone {
border: 1px solid #bdbdbd;
background: #eeeeee;
border-radius: 5px;
display: flex;
justify-content: center;
align-items: center;
}
</style>