index.coffee 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # Добавление стилей страницы
  2. if globalThis.stylFns and globalThis.stylFns['app/pages/Admin/Media/index.styl']
  3. styleElement = document.createElement('style')
  4. styleElement.type = 'text/css'
  5. styleElement.textContent = globalThis.stylFns['app/pages/Admin/Media/index.styl']
  6. document.head.appendChild(styleElement)
  7. else
  8. log '⚠️ Стили медиа-менеджера не найдены'
  9. FileUpload = require 'app/components/Admin/FileUpload/index.coffee'
  10. MediaService = require 'app/services/MediaService'
  11. module.exports = {
  12. components: {
  13. 'file-upload': FileUpload
  14. }
  15. data: ->
  16. {
  17. files: []
  18. selectedFiles: []
  19. uploading: false
  20. uploadProgress: 0
  21. filterType: ''
  22. searchQuery: ''
  23. loading: false
  24. }
  25. computed:
  26. filteredFiles: ->
  27. files = @files
  28. if @filterType
  29. files = files.filter (file) => file.type == @filterType
  30. if @searchQuery
  31. query = @searchQuery.toLowerCase()
  32. files = files.filter (file) =>
  33. file.name.toLowerCase().includes(query)
  34. return files.sort (a, b) -> new Date(b.createdAt) - new Date(a.createdAt)
  35. methods:
  36. loadMediaFiles: ->
  37. @loading = true
  38. try
  39. @files = await MediaService.getAllFiles()
  40. log '✅ Медиа-файлы загружены: '+@files.length
  41. catch error
  42. log '❌ Ошибка загрузки медиа-файлов: '+error.message
  43. @$emit('show-notification', 'Ошибка загрузки файлов', 'error')
  44. finally
  45. @loading = false
  46. onFilesSelect: (files) ->
  47. log 'Выбрано файлов для загрузки: '+files.length
  48. uploadFiles: (files) ->
  49. @uploading = true
  50. @uploadProgress = 0
  51. try
  52. for file, index in files
  53. # Имитация загрузки с прогрессом
  54. for i in [0..100] by 10
  55. await new Promise (resolve) -> setTimeout(resolve, 50)
  56. @uploadProgress = ((index * 100) + i) / files.length
  57. await MediaService.uploadFiles(files)
  58. @$emit('show-notification', 'Файлы успешно загружены', 'success')
  59. @loadMediaFiles()
  60. catch error
  61. log '❌ Ошибка загрузки файлов: '+error.message
  62. @$emit('show-notification', 'Ошибка загрузки файлов', 'error')
  63. finally
  64. @uploading = false
  65. @uploadProgress = 0
  66. getFileUrl: (file) ->
  67. # Формирование URL для доступа к файлу в CouchDB
  68. return '/d/braer_color_shop/'+file._id+'/'+file.name
  69. toggleSelect: (fileId) ->
  70. if @selectedFiles.includes(fileId)
  71. @selectedFiles = @selectedFiles.filter (id) -> id != fileId
  72. else
  73. @selectedFiles.push(fileId)
  74. deleteFile: (file) ->
  75. if not confirm('Удалить файл "'+file.name+'"?')
  76. return
  77. try
  78. await MediaService.deleteFile(file._id)
  79. @$emit('show-notification', 'Файл удален', 'success')
  80. @loadMediaFiles()
  81. catch error
  82. log '❌ Ошибка удаления файла: '+error.message
  83. @$emit('show-notification', 'Ошибка удаления файла', 'error')
  84. deleteSelected: ->
  85. if not confirm('Удалить '+@selectedFiles.length+' выбранных файлов?')
  86. return
  87. try
  88. await MediaService.deleteFiles(@selectedFiles)
  89. @$emit('show-notification', 'Файлы удалены', 'success')
  90. @selectedFiles = []
  91. @loadMediaFiles()
  92. catch error
  93. log '❌ Ошибка удаления файлов: '+error.message
  94. @$emit('show-notification', 'Ошибка удаления файлов', 'error')
  95. formatFileSize: (bytes) ->
  96. if bytes == 0
  97. return '0 Bytes'
  98. k = 1024
  99. sizes = ['Bytes', 'KB', 'MB', 'GB']
  100. i = Math.floor(Math.log(bytes) / Math.log(k))
  101. return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
  102. formatDate: (dateString) ->
  103. return new Date(dateString).toLocaleDateString('ru-RU')
  104. mounted: ->
  105. @loadMediaFiles()
  106. log '🖼️ Медиа-менеджер загружен'
  107. render: (new Function '_ctx', '_cache', globalThis.renderFns['app/pages/Admin/Media/index.pug'])()
  108. }