76 Commits

Author SHA1 Message Date
Mikhail Chusavitin
a102e54c8b Fix bulk edit and insert date field handling
- Bulk edit: only include changed fields in update payload so unchanged
  date fields are not overwritten with null
- Bulk edit: normalize datetime oldValue to date-only for correct comparison
- Insert form: pre-fill date/datetime fields with today's date by default

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:28:42 +03:00
Mikhail Chusavitin
b830522014 Prevent lost updates with optimistic concurrency checks 2026-02-27 16:49:44 +03:00
Mikhail Chusavitin
20d96306e4 Prevent accidental modal close on backdrop 2026-02-25 17:12:43 +03:00
Mikhail Chusavitin
4d608c016d Replace dropdown selects with HTML5 datalist autocomplete in forms
Implemented simple HTML5 datalist for FK (foreign key) autocomplete in Insert and Edit forms, replacing the complex Tabulator form approach.

Changes:
- Added renderFieldInput() function to generate input fields with datalist support
- Replaced Tabulator table in promptForRequiredFields() with simple HTML form
- Replaced Tabulator table in showEditModal() with simple HTML form
- All fields now use native HTML5 inputs with proper type support
- FK fields use <input list="datalist"> for browser-native autocomplete
- Added vendor/, composer.lock, composer.phar to .gitignore

Benefits:
 Simpler implementation with native HTML5 functionality
 No dependency on complex Tabulator configurations
 Better browser compatibility with standard HTML5 inputs
 Smaller code footprint and faster rendering

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-10 16:20:47 +03:00
Mikhail Chusavitin
1ecd0d28fa Replace dropdown selects with Tabulator autocomplete forms
- Replace native HTML <select> elements with Tabulator-based vertical forms
- Implement autocomplete functionality for FK fields in Insert modal
- Implement autocomplete functionality for FK fields in Edit modal (single and batch)
- Add comprehensive CSS styling for vertical form-tables
- Show field descriptions, FK references, and comments inline
- Support NULL values for optional fields with clear button
- Auto-enable checkboxes on field edit in batch mode
- Consistent UX with autocomplete in main table grid

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-10 13:34:42 +03:00
Mikhail Chusavitin
8ee8847600 Fix row checkbox selection behavior in Tabulator 2026-02-04 17:13:09 +03:00
Mikhail Chusavitin
9dfef30ad7 Fix row copy selection and table bottom spacing placement 2026-02-04 17:08:10 +03:00
Mikhail Chusavitin
2a41c5fd0a Add row copy action and improve table bottom spacing 2026-02-04 16:59:46 +03:00
Mikhail Chusavitin
b67bac89ee Harden auth session handling and SQL identifier validation 2026-02-04 16:56:53 +03:00
de477c3e64 Исправлено восстановление скрытых столбцов из сессии
Код восстановления видимости столбцов перемещён внутрь события tableBuilt,
чтобы он выполнялся после полного построения таблицы, когда все столбцы доступны.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 19:22:14 +03:00
654233936e Выравнивание чисел по правому краю в таблице
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:30:02 +03:00
09d62fe433 Разделение app.js на модули
- core.js: API wrapper и утилиты (~150 строк)
- user.js: авторизация и localStorage (~240 строк)
- table.js: дерево и Tabulator (~770 строк)
- operations.js: CRUD операции (~740 строк)
- io.js: импорт/экспорт CSV и бэкап (~600 строк)
- app.js: точка входа (~30 строк)

Старый файл сохранён как app.js.bak

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 08:50:16 +03:00
647ab96d1a Сохранение и восстановление состояния таблицы
- Сохранение последней открытой таблицы в localStorage
- Сохранение фильтров и страницы при изменении
- Восстановление таблицы, фильтров и страницы при входе
- Сброс настроек теперь включает фильтры и последнюю таблицу

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 08:38:06 +03:00
f3be92d1f9 wip commit 2026-01-23 22:55:20 +03:00
5ccc16d1b8 Новый дизайн авторизации и сохранение сессии в localStorage
- Красивый экран авторизации с градиентным фоном
- Header с именем пользователя и dropdown-меню
- Меню: "Сбросить настройки" и "Выйти"
- Автологин при загрузке страницы из localStorage
- Настройки столбцов сохраняются в localStorage (между сессиями)
- Credentials хранятся в localStorage (автоматический вход)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:50:33 +03:00
cc75ba85e3 Добавлен экспорт неимпортированных строк в CSV при ошибках
Backend:
- insertMultipleRows возвращает failedRows с данными и описанием ошибки
- getShortErrorMessage формирует понятные сообщения об ошибках

Frontend:
- Диалог с результатами импорта (успешных/ошибок)
- Группировка ошибок по типу
- Кнопка "Скачать ошибки CSV" - файл с проблемными строками + колонки _ОШИБКА и _СТРОКА

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:39:06 +03:00
15214b2f69 Добавлена очистка пробелов при вставке чисел из Excel
mutatorEdit для числовых колонок:
- Удаляет все пробелы (обычные, неразрывные)
- Заменяет запятую на точку для дробных чисел
- " 20 138 " → 20138

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:34:46 +03:00
3f10c49ddc Объединены кнопки Экспорт CSV и Бэкап в одну кнопку Экспорт
- Единый диалог с вкладками: CSV таблицы и Бэкап БД
- Удалена отдельная кнопка Бэкап
- Удалён дублирующий код showExportModal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:32:44 +03:00
07b27a6514 Изменён формат имён скачиваемых файлов: YYYY-MM-DD-filename
- Бэкапы: 2026-01-23-backup_all.sql.gz, 2026-01-23-dbname.sql.gz
- CSV экспорт: 2026-01-23-tablename.csv

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:28:17 +03:00
978f6b3cd8 Исправлен битый архив бэкапа - использование временного файла
shell_exec некорректно работает с бинарными данными.
Теперь mysqldump пишет во временный файл, который потом стримится клиенту.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:24:11 +03:00
cf275bba9c Исправлена ошибка: получение списка БД через API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:22:12 +03:00
b76402694a Добавлен функционал резервного копирования баз данных
- Кнопка "Бэкап" в toolbar открывает диалог выбора БД
- Можно скачать дамп одной БД или всех сразу
- Дамп создаётся через mysqldump и сразу стримится пользователю (gzip)
- Без сохранения на сервере

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:20:32 +03:00
3cd138cd2d Убрано ложное окрашивание строк при начале редактирования
Строка теперь окрашивается в жёлтый только при реальном изменении значения,
а не при клике на ячейку для редактирования.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:08:38 +03:00
f7c90aca76 Исправлено сравнение значений для выпадающих списков и форматирование чисел
- Унифицировано сравнение через normalizeValue() для всех типов ячеек
- Intl.NumberFormat с сохранением исходного количества знаков после запятой

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:06:04 +03:00
1f9183f04e Добавлено форматирование чисел с разделителем тысяч и запятой
Числовые колонки теперь отображаются в русской локализации:
- Пробел как разделитель тысяч (90217 → 90 217)
- Запятая для дробной части (90217.4 → 90 217,4)

Fixes #5

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:01:34 +03:00
b9ce7c6d04 Исправлено сравнение типов при проверке изменений ячейки
Добавлена проверка для случая, когда oldValue - число, а newValue - строка
(например, 90217.4 vs "90217.4"), что вызывало ложное срабатывание сохранения.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 21:59:13 +03:00
5eee3bbf70 Исправлено ложное срабатывание сохранения при выборе того же значения
- Добавлена проверка изменения значения в cellEdited (oldValue vs newValue)
- Добавлен обработчик cellEditCancelled для сброса подсветки при отмене
- Устранена отправка запросов в БД без реальных изменений

Fixes #4

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 21:47:49 +03:00
Mikhail Chusavitin
c001aed149 Исправлена работа чекбоксов и пагинации в таблице
- Чекбоксы теперь работают только при клике на сам чекбокс (не на строку)
- Повторный клик на чекбокс снимает выделение
- Множественное выделение строк работает корректно
- Исправлен выбор количества записей на странице (сервер читает параметр 'size')

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 15:17:46 +03:00
Mikhail Chusavitin
0700fcd584 Улучшена обработка ошибок API
Бэкенд:
- Добавлен try-catch для insert, update, delete, delete-batch
- Ошибки возвращаются как JSON с полем message

Фронтенд:
- Улучшена функция api() для парсинга JSON ошибок
- Извлечение понятного сообщения из ответа сервера

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 11:41:39 +03:00
Mikhail Chusavitin
23e557d792 Фильтр FK колонок: заменён dropdown на ввод с автоподстановкой
- autocomplete: true - показывает подсказки при вводе
- freetext: true - разрешает свободный ввод
- filterFunc - фильтрация по вхождению подстроки
- clearable: true - кнопка очистки

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 11:23:40 +03:00
Mikhail Chusavitin
1d4bb980c0 Добавлено логирование сортировки для отладки 2026-01-22 11:14:46 +03:00
Mikhail Chusavitin
198571ecf5 Исправление сортировки: явное включение headerSort и sorter
- Добавлен headerSort: true для каждой колонки
- Добавлен sorter на основе типа данных (string/number/datetime)
- Добавлены обработчики событий dataSorting/dataSorted для отладки

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 11:12:34 +03:00
Mikhail Chusavitin
d0605c722e Добавлен функционал множественного редактирования записей
1. Добавлена кнопка "Изменить" в toolbar
2. Модальное окно редактирования:
   - Для одной записи: все поля доступны для редактирования
   - Для нескольких записей: галочки для выбора изменяемых полей
   - Поля с одинаковыми значениями показывают текущее значение
   - Поля с разными значениями отображаются пустыми с пометкой
3. Исправлена сортировка: добавлен headerSort: true в columnDefaults

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 11:09:57 +03:00
Mikhail Chusavitin
10cd6e36df Исправлена фильтрация и сортировка таблицы
- Исправлен ajaxParams: использование this вместо глобальной переменной
- Добавлен headerFilterFunc для всех колонок для серверной фильтрации
- Исправлены параметры headerFilter для FK колонок

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 11:02:17 +03:00
Mikhail Chusavitin
d23a5dd829 Исправления таблицы: сортировка, фильтры FK, экспорт CSV, выделение строк
1. Исправлена сортировка по дате - заменён ajaxParams на ajaxRequestFunc
   для корректной передачи параметров сортировки на сервер

2. Добавлен dropdown фильтр для FK колонок - теперь в заголовке таблицы
   для колонок с внешними ключами отображается выпадающий список
   со всеми допустимыми значениями

3. Добавлено модальное окно экспорта CSV с опциями:
   - Экспорт всех строк / только выделенных / шаблона (только заголовки)
   - Выбор отдельных столбцов для экспорта
   - Кнопки "Выбрать все" / "Снять все" для столбцов

4. Исправлено множественное выделение строк:
   - Включён selectableRows: true
   - Добавлен selectableRowsRangeMode: "click" для выбора нескольких строк
   - Убран конфликтующий cellClick обработчик

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 10:51:47 +03:00
edf2bdbcce Теперь заголовок и ячейки столбца с чекбоксами должны иметь одинаковую ширину (40px) и одинаковый padding (4px), что устраняет несоответствие. 2026-01-21 22:18:22 +03:00
05c62440b3 Упростил код, убрав лишние правила, которые ломали макет. 2026-01-21 22:15:51 +03:00
03f7b08f25 Упростил код, убрав лишние правила, которые ломали макет 2026-01-21 22:15:30 +03:00
5f52a3ad8e another column size fix atempt 2026-01-21 22:12:34 +03:00
ba5a11c6c2 Enhance table header cell styling with consistent padding and box-sizing 2026-01-21 22:06:47 +03:00
19905cef4e fix duplicate styles 2026-01-21 22:03:15 +03:00
Mikhail Chusavitin
71e6b3f271 one more resize fix 2026-01-21 19:15:18 +03:00
Mikhail Chusavitin
0d9436977e check box table fi 2026-01-21 19:13:19 +03:00
Mikhail Chusavitin
74ebea7077 fix uneven row size 2026-01-21 19:09:11 +03:00
Mikhail Chusavitin
698a99afc5 Pretier rows 2026-01-21 19:05:10 +03:00
Mikhail Chusavitin
2f3ec82424 comment for optional fields 2026-01-21 18:54:20 +03:00
Mikhail Chusavitin
f727d6c742 typo fix 2026-01-21 18:53:14 +03:00
Mikhail Chusavitin
cce71a095c SQL comments for rows used now in tolltips 2026-01-21 18:52:17 +03:00
Mikhail Chusavitin
5c917c5d7c dynamic dropdown menus 2026-01-21 18:37:35 +03:00
Mikhail Chusavitin
2f7a180543 add dropdown menu for FK values 2026-01-21 18:32:53 +03:00