index.pug 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. div(class="file-upload")
  2. div(
  3. class="file-upload__dropzone"
  4. :class="{ 'file-upload__dropzone--dragging': isDragging }"
  5. @dragover="onDragOver"
  6. @dragleave="onDragLeave"
  7. @drop="onDrop"
  8. )
  9. div(class="file-upload__content")
  10. div(class="file-upload__icon") 📁
  11. h3(class="file-upload__title") Перетащите файлы сюда
  12. p(class="file-upload__subtitle") или
  13. label(class="file-upload__browse")
  14. input(
  15. type="file"
  16. :accept="accept"
  17. :multiple="multiple"
  18. @change="onFileSelect"
  19. class="file-upload__input"
  20. )
  21. span(class="file-upload__browse-text") выберите файлы
  22. p(class="file-upload__hint") Поддерживаемые форматы: {{ accept }}
  23. div(v-if="selectedFiles.length > 0" class="file-upload__files")
  24. h4(class="file-upload__files-title") Выбранные файлы:
  25. div(
  26. v-for="(file, index) in selectedFiles"
  27. :key="index"
  28. class="file-upload__file"
  29. )
  30. span(class="file-upload__file-icon") {{ getFileIcon(file) }}
  31. div(class="file-upload__file-info")
  32. span(class="file-upload__file-name") {{ file.name }}
  33. span(class="file-upload__file-size") {{ (file.size / 1024 / 1024).toFixed(2) }} MB
  34. button(
  35. @click="removeFile(index)"
  36. class="file-upload__remove"
  37. title="Удалить файл"
  38. ) ×
  39. div(v-if="isUploading" class="file-upload__progress")
  40. div(class="file-upload__progress-bar")
  41. div(
  42. class="file-upload__progress-fill"
  43. :style="{ width: uploadProgress + '%' }"
  44. )
  45. span(class="file-upload__progress-text") {{ uploadProgress }}%
  46. div(v-if="selectedFiles.length > 0 && !isUploading" class="file-upload__actions")
  47. ui-button(
  48. @click="uploadFiles"
  49. type="primary"
  50. :disabled="isUploading"
  51. ) Загрузить файлы