index.pug 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. div(class="media-page")
  2. h1 Медиа-менеджер
  3. div(class="media-toolbar")
  4. div(class="media-upload-area")
  5. file-upload(
  6. accept="image/*,.pdf,.doc,.docx"
  7. :multiple="true"
  8. @select="onFilesSelect"
  9. @upload="uploadFiles"
  10. )
  11. div(class="media-filters")
  12. select(v-model="filterType" class="filter-select")
  13. option(value="") Все типы
  14. option(value="image") Изображения
  15. option(value="document") Документы
  16. input(
  17. type="text"
  18. v-model="searchQuery"
  19. placeholder="Поиск по названию..."
  20. class="search-input"
  21. )
  22. div(class="media-content")
  23. div(v-if="uploading" class="upload-progress")
  24. div(class="progress-bar")
  25. div(
  26. class="progress-fill"
  27. :style="{ width: uploadProgress + '%' }"
  28. )
  29. span {{ uploadProgress }}%
  30. div(class="media-grid")
  31. div(
  32. v-for="file in filteredFiles"
  33. :key="file._id"
  34. class="media-item"
  35. :class="{ 'media-item--selected': selectedFiles.includes(file._id) }"
  36. @click="toggleSelect(file._id)"
  37. )
  38. div(class="media-item__preview")
  39. img(
  40. v-if="file.type === 'image'"
  41. :src="getFileUrl(file)"
  42. :alt="file.name"
  43. class="media-item__image"
  44. )
  45. div(v-else class="media-item__icon") 📄
  46. div(class="media-item__info")
  47. div(class="media-item__name") {{ file.name }}
  48. div(class="media-item__meta")
  49. span {{ formatFileSize(file.size) }}
  50. span {{ formatDate(file.createdAt) }}
  51. div(class="media-item__actions")
  52. button(
  53. @click.stop="deleteFile(file)"
  54. class="media-item__delete"
  55. title="Удалить файл"
  56. ) ×
  57. div(v-if="selectedFiles.length > 0" class="media-selection")
  58. span Выбрано: {{ selectedFiles.length }}
  59. ui-button(@click="deleteSelected" type="danger" size="small") Удалить выбранные