- Красивый экран авторизации с градиентным фоном
- Header с именем пользователя и dropdown-меню
- Меню: "Сбросить настройки" и "Выйти"
- Автологин при загрузке страницы из localStorage
- Настройки столбцов сохраняются в localStorage (между сессиями)
- Credentials хранятся в localStorage (автоматический вход)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Backend:
- insertMultipleRows возвращает failedRows с данными и описанием ошибки
- getShortErrorMessage формирует понятные сообщения об ошибках
Frontend:
- Диалог с результатами импорта (успешных/ошибок)
- Группировка ошибок по типу
- Кнопка "Скачать ошибки CSV" - файл с проблемными строками + колонки _ОШИБКА и _СТРОКА
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
mutatorEdit для числовых колонок:
- Удаляет все пробелы (обычные, неразрывные)
- Заменяет запятую на точку для дробных чисел
- " 20 138 " → 20138
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Единый диалог с вкладками: CSV таблицы и Бэкап БД
- Удалена отдельная кнопка Бэкап
- Удалён дублирующий код showExportModal
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
shell_exec некорректно работает с бинарными данными.
Теперь mysqldump пишет во временный файл, который потом стримится клиенту.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Кнопка "Бэкап" в toolbar открывает диалог выбора БД
- Можно скачать дамп одной БД или всех сразу
- Дамп создаётся через mysqldump и сразу стримится пользователю (gzip)
- Без сохранения на сервере
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Строка теперь окрашивается в жёлтый только при реальном изменении значения,
а не при клике на ячейку для редактирования.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Унифицировано сравнение через normalizeValue() для всех типов ячеек
- Intl.NumberFormat с сохранением исходного количества знаков после запятой
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Числовые колонки теперь отображаются в русской локализации:
- Пробел как разделитель тысяч (90217 → 90 217)
- Запятая для дробной части (90217.4 → 90 217,4)
Fixes#5
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Добавлена проверка для случая, когда oldValue - число, а newValue - строка
(например, 90217.4 vs "90217.4"), что вызывало ложное срабатывание сохранения.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Добавлена проверка изменения значения в cellEdited (oldValue vs newValue)
- Добавлен обработчик cellEditCancelled для сброса подсветки при отмене
- Устранена отправка запросов в БД без реальных изменений
Fixes#4
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Чекбоксы теперь работают только при клике на сам чекбокс (не на строку)
- Повторный клик на чекбокс снимает выделение
- Множественное выделение строк работает корректно
- Исправлен выбор количества записей на странице (сервер читает параметр 'size')
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Бэкенд:
- Добавлен try-catch для insert, update, delete, delete-batch
- Ошибки возвращаются как JSON с полем message
Фронтенд:
- Улучшена функция api() для парсинга JSON ошибок
- Извлечение понятного сообщения из ответа сервера
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Добавлен headerSort: true для каждой колонки
- Добавлен sorter на основе типа данных (string/number/datetime)
- Добавлены обработчики событий dataSorting/dataSorted для отладки
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Добавлена кнопка "Изменить" в toolbar
2. Модальное окно редактирования:
- Для одной записи: все поля доступны для редактирования
- Для нескольких записей: галочки для выбора изменяемых полей
- Поля с одинаковыми значениями показывают текущее значение
- Поля с разными значениями отображаются пустыми с пометкой
3. Исправлена сортировка: добавлен headerSort: true в columnDefaults
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Исправлен ajaxParams: использование this вместо глобальной переменной
- Добавлен headerFilterFunc для всех колонок для серверной фильтрации
- Исправлены параметры headerFilter для FK колонок
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Исправлена сортировка по дате - заменён ajaxParams на ajaxRequestFunc
для корректной передачи параметров сортировки на сервер
2. Добавлен dropdown фильтр для FK колонок - теперь в заголовке таблицы
для колонок с внешними ключами отображается выпадающий список
со всеми допустимыми значениями
3. Добавлено модальное окно экспорта CSV с опциями:
- Экспорт всех строк / только выделенных / шаблона (только заголовки)
- Выбор отдельных столбцов для экспорта
- Кнопки "Выбрать все" / "Снять все" для столбцов
4. Исправлено множественное выделение строк:
- Включён selectableRows: true
- Добавлен selectableRowsRangeMode: "click" для выбора нескольких строк
- Убран конфликтующий cellClick обработчик
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Убрано глобальное хранилище selectedRowsData для строк текущей страницы
- Используется встроенный механизм Tabulator getSelectedData() при операциях
- Добавлено глобальное хранилище только для кросс-страничного выделения (кнопка "Выделить все")
- Упрощена логика - убраны сложные синхронизации
- Выделение через header checkbox теперь работает стабильно
- Функция selectTable была определена дважды, вызывая SyntaxError
- Удалено первое неполное определение функции
- Оставлено только корректное определение с исправленным rowSelectionChanged
- Исправлена структура файла app.js
- Изменена логика rowSelectionChanged: теперь используется параметр data вместо rows
- Параметр data содержит ВСЕ выделенные строки, а rows - только измененные
- При клике на header checkbox параметр rows пустой, поэтому selectedRowsData не обновлялся
- Добавлена правильная синхронизация выделенных строк между Tabulator и selectedRowsData
- Упрощена логика: полная пересинхронизация при каждом изменении выделения