Aknaproff/resources/js/components/Shared/PdfUploader.vue

159 lines
5.4 KiB
Vue
Raw Normal View History

2023-09-21 12:45:08 +00:00
<template>
<div class="row mb-1">
<!-- remove pdf -->
<div class="card border-secondary mb-2"
v-show="!_.isEmpty(element.pdf)">
<div class="row">
<div class="col-md-4 mt-auto mb-auto">
<i class="fas fa-file-pdf fa-5x ml-1 text-primary"></i>
</div>
<div class="col-md-8">
<div class="card-body">
<p class="card-text text-truncate">
{{element.pdf}}
</p>
<p class="card-text text-warning cursor-pointer"
@click="removePdf">
{{trans('messages.remove_pdf')}}
</p>
</div>
</div>
</div>
</div>
<!-- dropzone -->
<div class="col-md-12 mb-1"
v-show="_.isEmpty(element.pdf)">
<label for="pdf_upload">
{{trans('messages.upload_pdf')}}
</label>
<div class="dropzone" id="pdf_upload"></div>
</div>
<!-- pdf properties -->
<div v-if="!_.isEmpty(element.pdf)">
<div class="mb-1">
<label>
{{trans('messages.width')}}
</label>
<div class="input-group mb-2">
<input type="number" class="form-control" v-model="element.width">
<div class="input-group-append">
<span class="input-group-text">
%
</span>
</div>
</div>
</div>
<div class="mb-1">
<label>
{{trans('messages.height')}}
</label>
<div class="input-group mb-2">
<input type="number" class="form-control" v-model="element.height">
<div class="input-group-append">
<span class="input-group-text">
px
</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
element: Object,
},
data(){
return{
MAX_UPLOAD_SIZE: APP.MAX_PDF_UPLOAD_SIZE,
dropzone_has_error: false,
dropzone_error_msg: ''
}
},
mounted() {
const self = this;
self.initPdfUploader();
},
methods:{
initPdfUploader() {
const self = this;
if (self.dropzone) {
self.dropzone.destroy();
}
self.dropzone = new Dropzone('div#pdf_upload', {
url: `${APP.APP_URL}/file-upload`,
addRemoveLinks: true,
uploadMultiple: false,
dictDefaultMessage: self.trans('messages.drop_a_pdf_here'),
maxFiles: 1,
maxFilesize: self.MAX_UPLOAD_SIZE,
acceptedFiles: '.pdf',
autoProcessQueue: true,
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
init: function() {
//function to be use on removeing a file
this.on("removedfile", function(file) {
$.ajax({
url: `${APP.APP_URL}/file-delete`,
data: { "file_name": file.uploaded_as },
type: "POST",
success: function(result) {
if(result.success == 1){
self.element.pdf = '';
} else {
toastr.error(result.msg);
}
}
});
});
this.on('success', function(file, response) {
self.dropzone_has_error = false;
self.dropzone_error_msg = '';
});
this.on("error", function(file, message) {
self.dropzone_has_error = true;
self.dropzone_error_msg = message;
});
},
success: function(file, response) {
if (response.success == true) {
file.uploaded_as = response.path;
self.element.pdf = response.path;
toastr.success(response.msg);
} else {
toastr.error(response.msg);
}
},
});
},
removePdf() {
const self = this;
Swal.fire({
title: 'Are you sure?',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, remove it!'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: `${APP.APP_URL}/file-delete`,
data: { "file_name": self.element.pdf},
type: "POST",
success: function(result) {
if(result.success == 1){
self.element.pdf = '';
self.dropzone.removeAllFiles();
} else {
toastr.error(result.msg);
}
}
});
}
});
}
}
}
</script>