1*90c8c64dSAndroid Build Coastguard Worker<template> 2*90c8c64dSAndroid Build Coastguard Worker <label class="file-select ma-5"> 3*90c8c64dSAndroid Build Coastguard Worker <div 4*90c8c64dSAndroid Build Coastguard Worker class="select-button" 5*90c8c64dSAndroid Build Coastguard Worker @dragover="dragover" 6*90c8c64dSAndroid Build Coastguard Worker @dragleave="dragleave" 7*90c8c64dSAndroid Build Coastguard Worker @drop="drop" 8*90c8c64dSAndroid Build Coastguard Worker > 9*90c8c64dSAndroid Build Coastguard Worker <span v-if="label">{{ !fileName ? label : '' }}</span> 10*90c8c64dSAndroid Build Coastguard Worker <span v-else>Select File</span> 11*90c8c64dSAndroid Build Coastguard Worker <div v-if="fileName"> File selected: {{ fileName }}</div> 12*90c8c64dSAndroid Build Coastguard Worker </div> 13*90c8c64dSAndroid Build Coastguard Worker <input 14*90c8c64dSAndroid Build Coastguard Worker ref="file" 15*90c8c64dSAndroid Build Coastguard Worker type="file" 16*90c8c64dSAndroid Build Coastguard Worker accept=".zip" 17*90c8c64dSAndroid Build Coastguard Worker @change="handleFileChange" 18*90c8c64dSAndroid Build Coastguard Worker > 19*90c8c64dSAndroid Build Coastguard Worker </label> 20*90c8c64dSAndroid Build Coastguard Worker</template> 21*90c8c64dSAndroid Build Coastguard Worker 22*90c8c64dSAndroid Build Coastguard Worker<script> 23*90c8c64dSAndroid Build Coastguard Workerexport default { 24*90c8c64dSAndroid Build Coastguard Worker props: { 25*90c8c64dSAndroid Build Coastguard Worker label: { 26*90c8c64dSAndroid Build Coastguard Worker type: String, 27*90c8c64dSAndroid Build Coastguard Worker default: '', 28*90c8c64dSAndroid Build Coastguard Worker }, 29*90c8c64dSAndroid Build Coastguard Worker }, 30*90c8c64dSAndroid Build Coastguard Worker data() { 31*90c8c64dSAndroid Build Coastguard Worker return { 32*90c8c64dSAndroid Build Coastguard Worker fileName: '', 33*90c8c64dSAndroid Build Coastguard Worker } 34*90c8c64dSAndroid Build Coastguard Worker }, 35*90c8c64dSAndroid Build Coastguard Worker methods: { 36*90c8c64dSAndroid Build Coastguard Worker handleFileChange(event) { 37*90c8c64dSAndroid Build Coastguard Worker this.$emit('file-select', this.$refs.file.files) 38*90c8c64dSAndroid Build Coastguard Worker this.fileName = this.$refs.file.files[0].name 39*90c8c64dSAndroid Build Coastguard Worker }, 40*90c8c64dSAndroid Build Coastguard Worker dragover(event) { 41*90c8c64dSAndroid Build Coastguard Worker event.preventDefault() 42*90c8c64dSAndroid Build Coastguard Worker if (!event.currentTarget.classList.contains('file-hover')) { 43*90c8c64dSAndroid Build Coastguard Worker event.currentTarget.classList.add('file-hover') 44*90c8c64dSAndroid Build Coastguard Worker } 45*90c8c64dSAndroid Build Coastguard Worker }, 46*90c8c64dSAndroid Build Coastguard Worker dragleave(event) { 47*90c8c64dSAndroid Build Coastguard Worker event.currentTarget.classList.remove('file-hover') 48*90c8c64dSAndroid Build Coastguard Worker }, 49*90c8c64dSAndroid Build Coastguard Worker drop(event) { 50*90c8c64dSAndroid Build Coastguard Worker event.preventDefault() 51*90c8c64dSAndroid Build Coastguard Worker this.$refs.file.files = event.dataTransfer.files 52*90c8c64dSAndroid Build Coastguard Worker this.handleFileChange(event) 53*90c8c64dSAndroid Build Coastguard Worker event.currentTarget.classList.remove('file-hover') 54*90c8c64dSAndroid Build Coastguard Worker }, 55*90c8c64dSAndroid Build Coastguard Worker }, 56*90c8c64dSAndroid Build Coastguard Worker} 57*90c8c64dSAndroid Build Coastguard Worker</script> 58*90c8c64dSAndroid Build Coastguard Worker 59*90c8c64dSAndroid Build Coastguard Worker<style scoped> 60*90c8c64dSAndroid Build Coastguard Worker.file-select > .select-button { 61*90c8c64dSAndroid Build Coastguard Worker padding: 3rem; 62*90c8c64dSAndroid Build Coastguard Worker border-radius: 0.3rem; 63*90c8c64dSAndroid Build Coastguard Worker border: 4px dashed #eaebec; 64*90c8c64dSAndroid Build Coastguard Worker text-align: center; 65*90c8c64dSAndroid Build Coastguard Worker font-weight: bold; 66*90c8c64dSAndroid Build Coastguard Worker cursor: pointer; 67*90c8c64dSAndroid Build Coastguard Worker} 68*90c8c64dSAndroid Build Coastguard Worker 69*90c8c64dSAndroid Build Coastguard Worker.file-select > input[type='file'] { 70*90c8c64dSAndroid Build Coastguard Worker display: none; 71*90c8c64dSAndroid Build Coastguard Worker} 72*90c8c64dSAndroid Build Coastguard Worker 73*90c8c64dSAndroid Build Coastguard Worker.file-hover { 74*90c8c64dSAndroid Build Coastguard Worker background-color: #95e995; 75*90c8c64dSAndroid Build Coastguard Worker} 76*90c8c64dSAndroid Build Coastguard Worker</style>