feat: добавлено множественное выделение строк и исправлен размер шрифта при редактировании
- Включено множественное выделение строк (selectableRows: true) - Исправлен размер шрифта в ячейках при редактировании (добавлены CSS стили для tabulator-cell input) - Улучшено визуальное отображение редактируемых ячеек - Обновлена логика удаления для работы с множественным выбором
This commit is contained in:
@@ -123,7 +123,7 @@ async function selectTable(schema, tableName) {
|
||||
}
|
||||
|
||||
table = new Tabulator("#table", {
|
||||
selectableRows: 1,
|
||||
selectableRows: true, // ✅ Множественное выделение (вместо selectableRows: 1)
|
||||
columns: columns,
|
||||
layout: "fitColumns",
|
||||
resizableColumnFit: true,
|
||||
@@ -188,7 +188,14 @@ async function selectTable(schema, tableName) {
|
||||
},
|
||||
|
||||
rowClick: function(e, row) {
|
||||
row.toggleSelect();
|
||||
// ✅ Ctrl/Cmd + Click для множественного выбора
|
||||
if (e.ctrlKey || e.metaKey) {
|
||||
row.toggleSelect();
|
||||
} else {
|
||||
// Обычный клик - снимаем выделение с других и выделяем текущую
|
||||
table.deselectRow();
|
||||
row.toggleSelect();
|
||||
}
|
||||
},
|
||||
|
||||
cellEdited: function(cell) {
|
||||
@@ -247,6 +254,7 @@ async function selectTable(schema, tableName) {
|
||||
|
||||
|
||||
|
||||
|
||||
// CRUD кнопки
|
||||
document.getElementById('btnInsert').addEventListener('click', async () => {
|
||||
if (!currentSchema || !currentTable || !currentMeta) {
|
||||
@@ -487,22 +495,39 @@ document.getElementById('btnDelete').addEventListener('click', async () => {
|
||||
if (!table || !currentSchema || !currentTable) return;
|
||||
const selected = table.getSelectedData();
|
||||
if (selected.length === 0) {
|
||||
alert('Ничего не выбрано');
|
||||
alert('Выберите строки для удаления (используйте Ctrl+Click для выбора нескольких)');
|
||||
return;
|
||||
}
|
||||
if (!confirm(`Удалить ${selected.length} строк(и)?`)) return;
|
||||
|
||||
const confirmMsg = selected.length === 1
|
||||
? 'Удалить выбранную строку?'
|
||||
: `Удалить ${selected.length} выбранных строк?`;
|
||||
|
||||
if (!confirm(confirmMsg)) return;
|
||||
|
||||
try {
|
||||
let deleted = 0;
|
||||
for (const row of selected) {
|
||||
await api('/api/table/delete', 'POST', { schema: currentSchema, table: currentTable, row });
|
||||
deleted++;
|
||||
}
|
||||
await table.replaceData();
|
||||
alert(`✓ Удалено строк: ${deleted}`);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
alert('Ошибка удаления: ' + e.message);
|
||||
}
|
||||
});
|
||||
|
||||
// ✅ Снятие выделения
|
||||
document.getElementById('btnDeselectAll').addEventListener('click', () => {
|
||||
if (table) {
|
||||
table.deselectRow();
|
||||
console.log('Выделение снято');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// ========== ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ CSV ==========
|
||||
|
||||
// Функция автоопределения разделителя
|
||||
|
||||
Reference in New Issue
Block a user