96 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
105e822089 Add bible submodule 2026-03-01 22:35:59 +03:00
1740f2581a Rename bible/ to bible-local/ 2026-03-01 22:35:54 +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
c97d49e762 Add project Bible and consolidate documentation
- Create bible/ as single source of truth (architecture, API, frontend, installation, usage, security, roadmap)
- Verify and fix Bible against actual source code (API methods, endpoints, data flow)
- Trim README.md and CLAUDE.md to minimal stubs pointing to the Bible
- Remove duplicate claude.md (lowercase)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 14:11:57 +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
155b1ba9d0 Update documentation files (README.md and claude.md) based on codebase analysis 2026-01-31 00:33:25 +03:00
73c63b5d86 Обновлён README: Docker как рекомендуемый метод установки
- Добавлена секция Installation (Docker) с примером запуска
- Таблица переменных окружения (DB_HOST, DB_PORT, DB_CHARSET)
- Обновлена секция Configuration и Troubleshooting

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 04:02:17 +03:00
e03c0b2208 Добавлен Dockerfile на базе Alpine Linux
- Dockerfile с PHP 8.3 и необходимыми расширениями
- Конфигурация БД через переменные окружения: DB_HOST, DB_PORT, DB_CHARSET
- .dockerignore для оптимизации сборки

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 03:43:29 +03:00
de477c3e64 Исправлено восстановление скрытых столбцов из сессии
Код восстановления видимости столбцов перемещён внутрь события tableBuilt,
чтобы он выполнялся после полного построения таблицы, когда все столбцы доступны.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
v1.0.0
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
666a24c971 Исправлено подключение mysqldump - убраны --host/--port
mysqldump теперь использует Unix сокет по умолчанию вместо TCP.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:25:51 +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
9da765de77 Delete .vscode/launch.json 2026-01-23 18:48:01 +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
9ac52afb8b Удалена ошибочная ссылка на $logFile 2026-01-22 11:21:47 +03:00
Mikhail Chusavitin
fcfd785b04 Исправлена сортировка: обработка массива sort от Tabulator
Tabulator отправляет sort как массив [{"field":..., "dir":...}],
а код ожидал объект {"field":..., "dir":...}. Добавлена конвертация.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 11:18:16 +03:00
Mikhail Chusavitin
d5602ae398 Логирование в файл debug.log 2026-01-22 11:17:06 +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