Сейчас открыто, до 18:00
сайт

Управление документами: загрузка файлов через веб-интерфейс

#разработка
2
2
Как читать
100 %

Что реализовано

Страница /about/documents переведена с ручного управления через Markdown-файл на полноценную базу данных с веб-интерфейсом.


База данных (Supabase)

Добавлены две новые таблицы:

  • page_document_sections — разделы (например: «Планы», «Отчёты о работе»)
  • page_documents — документы с полями: название, дата документа, файл, MIME-тип, размер, порядок

Таблицы подключены к Supabase Storage (бакет content-files, папка docs/). Настроен RLS — публичное чтение, запись только через сервер.


API (7 эндпоинтов)

Все операции записи доступны только для ролей editor и admin.


Компонент управления (DocumentsManager.vue)

Панель отображается на /about/documents только авторизованным редакторам и администраторам.

Загрузка документа:

  • Выбор раздела из существующих
  • Название документа (заполняется автоматически из имени файла, можно изменить)
  • Дата документа (в произвольном формате, например 01.02.2025)
  • Выбор файла — тип и размер определяются автоматически

Управление разделами:

  • Создать новый раздел
  • Удалить раздел (все файлы раздела удаляются из Storage вместе с ним)

Список документов:

  • Отображается по разделам
  • Для каждого документа: иконка типа, название, дата, размер, кнопки скачать и удалить

Скачивание с русским именем файла

Файлы в Storage хранятся с транслитерированными именами (требование URL). При скачивании используется серверный прокси /api/page-documents/[id], который:

  1. Загружает файл из Supabase Storage
  2. Выставляет заголовок Content-Disposition: attachment; filename*=UTF-8''... по стандарту RFC 5987
  3. Браузер сохраняет файл под правильным русским именем, например: Устав Библиотеки (новая редакция).pdf

Отображение на публичной части

  • Если в БД есть документы — отображаются они через компонент CompactDocumentList
  • Если БД пуста — fallback на статические данные из MD-файла (обратная совместимость)

Миграция

Перед использованием необходимо применить SQL-миграцию в Supabase Dashboard → SQL Editor:

supabase/migrations/20260512000001_page_documents.sql
разработка