From e24cf8a105d3bfbb8aa2c1d4b1ae432b1af4f176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=88=D0=BA=D0=B8=D0=BD=20=D0=A1=D0=B5=D1=80?= =?UTF-8?q?=D0=B3=D0=B5=D0=B9?= Date: Tue, 25 Nov 2025 10:19:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D1=81=D0=BE=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/mainapp/objitem_list.html | 100 ++++++--- .../templates/mainapp/source_list.html | 192 +++++++++++++++--- 2 files changed, 229 insertions(+), 63 deletions(-) diff --git a/dbapp/mainapp/templates/mainapp/objitem_list.html b/dbapp/mainapp/templates/mainapp/objitem_list.html index e90456b..140e4b1 100644 --- a/dbapp/mainapp/templates/mainapp/objitem_list.html +++ b/dbapp/mainapp/templates/mainapp/objitem_list.html @@ -554,7 +554,29 @@ }); } - // Остальной ваш JavaScript код остается без изменений + // Column visibility functions with localStorage support + function getColumnVisibilityKey() { + return 'objitemListColumnVisibility'; + } + + function saveColumnVisibility() { + const columnCheckboxes = document.querySelectorAll('.column-toggle'); + const visibility = {}; + columnCheckboxes.forEach(checkbox => { + const columnIndex = checkbox.getAttribute('data-column'); + visibility[columnIndex] = checkbox.checked; + }); + localStorage.setItem(getColumnVisibilityKey(), JSON.stringify(visibility)); + } + + function loadColumnVisibility() { + const saved = localStorage.getItem(getColumnVisibilityKey()); + if (saved) { + return JSON.parse(saved); + } + return null; + } + function toggleColumn(checkbox) { const columnIndex = parseInt(checkbox.getAttribute('data-column')); const table = document.querySelector('.table'); @@ -569,7 +591,27 @@ cell.style.display = 'none'; }); } + + // Save state after toggle + saveColumnVisibility(); } + + function toggleColumnWithoutSave(checkbox) { + const columnIndex = parseInt(checkbox.getAttribute('data-column')); + const table = document.querySelector('.table'); + const cells = table.querySelectorAll(`td:nth-child(${columnIndex + 1}), th:nth-child(${columnIndex + 1})`); + + if (checkbox.checked) { + cells.forEach(cell => { + cell.style.display = ''; + }); + } else { + cells.forEach(cell => { + cell.style.display = 'none'; + }); + } + } + function toggleAllColumns(selectAllCheckbox) { const columnCheckboxes = document.querySelectorAll('.column-toggle'); columnCheckboxes.forEach(checkbox => { @@ -734,36 +776,32 @@ // Initialize column visibility - hide creation columns by default function initColumnVisibility() { - const creationDateCheckbox = document.querySelector('input[data-column="15"]'); - const creationUserCheckbox = document.querySelector('input[data-column="16"]'); - if (creationDateCheckbox) { - creationDateCheckbox.checked = false; - toggleColumn(creationDateCheckbox); - } - - if (creationUserCheckbox) { - creationUserCheckbox.checked = false; - toggleColumn(creationUserCheckbox); - } - - // Hide comment, is_average, and standard columns by default - const commentCheckbox = document.querySelector('input[data-column="17"]'); - const isAverageCheckbox = document.querySelector('input[data-column="18"]'); - const standardCheckbox = document.querySelector('input[data-column="19"]'); - - if (commentCheckbox) { - commentCheckbox.checked = false; - toggleColumn(commentCheckbox); - } - - if (isAverageCheckbox) { - isAverageCheckbox.checked = false; - toggleColumn(isAverageCheckbox); - } - - if (standardCheckbox) { - standardCheckbox.checked = false; - toggleColumn(standardCheckbox); + const savedVisibility = loadColumnVisibility(); + + if (savedVisibility) { + // Restore saved state + const columnCheckboxes = document.querySelectorAll('.column-toggle'); + columnCheckboxes.forEach(checkbox => { + const columnIndex = checkbox.getAttribute('data-column'); + if (savedVisibility.hasOwnProperty(columnIndex)) { + checkbox.checked = savedVisibility[columnIndex]; + toggleColumnWithoutSave(checkbox); + } + }); + } else { + // Default state: hide specific columns + const columnsToHide = [15, 16, 17, 18, 19]; // Создано, Кем(созд), Комментарий, Усреднённое, Стандарт + + columnsToHide.forEach(columnIndex => { + const checkbox = document.querySelector(`input[data-column="${columnIndex}"]`); + if (checkbox) { + checkbox.checked = false; + toggleColumnWithoutSave(checkbox); + } + }); + + // Save initial state + saveColumnVisibility(); } } // Filter counter functionality diff --git a/dbapp/mainapp/templates/mainapp/source_list.html b/dbapp/mainapp/templates/mainapp/source_list.html index f63cf53..ecec3ae 100644 --- a/dbapp/mainapp/templates/mainapp/source_list.html +++ b/dbapp/mainapp/templates/mainapp/source_list.html @@ -1054,7 +1054,29 @@ function updateFilterCounter() { } } -// Column visibility functions +// Column visibility functions with localStorage support +function getColumnVisibilityKey() { + return 'sourceListColumnVisibility'; +} + +function saveColumnVisibility() { + const columnCheckboxes = document.querySelectorAll('.column-toggle'); + const visibility = {}; + columnCheckboxes.forEach(checkbox => { + const columnIndex = checkbox.getAttribute('data-column'); + visibility[columnIndex] = checkbox.checked; + }); + localStorage.setItem(getColumnVisibilityKey(), JSON.stringify(visibility)); +} + +function loadColumnVisibility() { + const saved = localStorage.getItem(getColumnVisibilityKey()); + if (saved) { + return JSON.parse(saved); + } + return null; +} + function toggleColumn(checkbox) { const columnIndex = parseInt(checkbox.getAttribute('data-column')); const table = document.querySelector('.table'); @@ -1069,6 +1091,9 @@ function toggleColumn(checkbox) { cell.style.display = 'none'; }); } + + // Save state after toggle + saveColumnVisibility(); } function toggleAllColumns(selectAllCheckbox) { @@ -1081,17 +1106,52 @@ function toggleAllColumns(selectAllCheckbox) { // Initialize column visibility - hide Создано and Обновлено columns by default function initColumnVisibility() { - const createdAtCheckbox = document.querySelector('input[data-column="11"]'); - const updatedAtCheckbox = document.querySelector('input[data-column="12"]'); + const savedVisibility = loadColumnVisibility(); - if (createdAtCheckbox) { - createdAtCheckbox.checked = false; - toggleColumn(createdAtCheckbox); + if (savedVisibility) { + // Restore saved state + const columnCheckboxes = document.querySelectorAll('.column-toggle'); + columnCheckboxes.forEach(checkbox => { + const columnIndex = checkbox.getAttribute('data-column'); + if (savedVisibility.hasOwnProperty(columnIndex)) { + checkbox.checked = savedVisibility[columnIndex]; + toggleColumnWithoutSave(checkbox); + } + }); + } else { + // Default state: hide Создано and Обновлено columns + const createdAtCheckbox = document.querySelector('input[data-column="11"]'); + const updatedAtCheckbox = document.querySelector('input[data-column="12"]'); + + if (createdAtCheckbox) { + createdAtCheckbox.checked = false; + toggleColumnWithoutSave(createdAtCheckbox); + } + + if (updatedAtCheckbox) { + updatedAtCheckbox.checked = false; + toggleColumnWithoutSave(updatedAtCheckbox); + } + + // Save initial state + saveColumnVisibility(); } - - if (updatedAtCheckbox) { - updatedAtCheckbox.checked = false; - toggleColumn(updatedAtCheckbox); +} + +// Helper function to toggle without saving (used during initialization) +function toggleColumnWithoutSave(checkbox) { + const columnIndex = parseInt(checkbox.getAttribute('data-column')); + const table = document.querySelector('.table'); + const cells = table.querySelectorAll(`td:nth-child(${columnIndex + 1}), th:nth-child(${columnIndex + 1})`); + + if (checkbox.checked) { + cells.forEach(cell => { + cell.style.display = ''; + }); + } else { + cells.forEach(cell => { + cell.style.display = 'none'; + }); } } @@ -1366,6 +1426,29 @@ function setupModalSelectAll() { } } +// Modal column visibility functions with localStorage support +function getModalColumnVisibilityKey() { + return 'sourceListModalColumnVisibility'; +} + +function saveModalColumnVisibility() { + const columnCheckboxes = document.querySelectorAll('.modal-column-toggle'); + const visibility = {}; + columnCheckboxes.forEach(checkbox => { + const columnIndex = checkbox.getAttribute('data-column'); + visibility[columnIndex] = checkbox.checked; + }); + localStorage.setItem(getModalColumnVisibilityKey(), JSON.stringify(visibility)); +} + +function loadModalColumnVisibility() { + const saved = localStorage.getItem(getModalColumnVisibilityKey()); + if (saved) { + return JSON.parse(saved); + } + return null; +} + // Function to toggle modal column visibility function toggleModalColumn(checkbox) { const columnIndex = parseInt(checkbox.getAttribute('data-column')); @@ -1390,6 +1473,9 @@ function toggleModalColumn(checkbox) { } } }); + + // Save state after toggle + saveModalColumnVisibility(); } // Function to toggle all modal columns @@ -1401,38 +1487,80 @@ function toggleAllModalColumns(selectAllCheckbox) { }); } -// Initialize modal column visibility -function initModalColumnVisibility() { - // Hide columns by default: Создано (16), Кем(созд) (17), Комментарий (18), Усреднённое (19), Стандарт (20), Sigma (22) - const columnsToHide = [16, 17, 18, 19, 20, 22]; +// Helper function to toggle modal column without saving +function toggleModalColumnWithoutSave(checkbox) { + const columnIndex = parseInt(checkbox.getAttribute('data-column')); - // Get the specific tbody for objitems const tbody = document.getElementById('objitemTableBody'); - if (!tbody) { - console.log('objitemTableBody not found'); - return; - } + if (!tbody) return; - // Get the parent table const table = tbody.closest('table'); - if (!table) { - console.log('Table not found'); - return; - } + if (!table) return; - // Hide columns that should be hidden by default - columnsToHide.forEach(columnIndex => { - // Get all rows in the table (including thead and tbody) - const rows = table.querySelectorAll('tr'); - rows.forEach(row => { - const cells = row.children; - if (cells[columnIndex]) { + const rows = table.querySelectorAll('tr'); + rows.forEach(row => { + const cells = row.children; + if (cells[columnIndex]) { + if (checkbox.checked) { + cells[columnIndex].style.removeProperty('display'); + } else { cells[columnIndex].style.setProperty('display', 'none', 'important'); } - }); + } }); } +// Initialize modal column visibility +function initModalColumnVisibility() { + const savedVisibility = loadModalColumnVisibility(); + + if (savedVisibility) { + // Restore saved state + const columnCheckboxes = document.querySelectorAll('.modal-column-toggle'); + columnCheckboxes.forEach(checkbox => { + const columnIndex = checkbox.getAttribute('data-column'); + if (savedVisibility.hasOwnProperty(columnIndex)) { + checkbox.checked = savedVisibility[columnIndex]; + toggleModalColumnWithoutSave(checkbox); + } + }); + } else { + // Default state: hide columns by default: Создано (16), Кем(созд) (17), Комментарий (18), Усреднённое (19), Стандарт (20), Sigma (22) + const columnsToHide = [16, 17, 18, 19, 20, 22]; + + const tbody = document.getElementById('objitemTableBody'); + if (!tbody) { + console.log('objitemTableBody not found'); + return; + } + + const table = tbody.closest('table'); + if (!table) { + console.log('Table not found'); + return; + } + + // Update checkboxes and hide columns + columnsToHide.forEach(columnIndex => { + const checkbox = document.querySelector(`.modal-column-toggle[data-column="${columnIndex}"]`); + if (checkbox) { + checkbox.checked = false; + } + + const rows = table.querySelectorAll('tr'); + rows.forEach(row => { + const cells = row.children; + if (cells[columnIndex]) { + cells[columnIndex].style.setProperty('display', 'none', 'important'); + } + }); + }); + + // Save initial state + saveModalColumnVisibility(); + } +} + // Function to show LyngSat modal function showLyngsatModal(lyngsatId) { const modal = new bootstrap.Modal(document.getElementById('lyngsatModal'));