From 0cbc31812a62548569478672f9518b1fcfdae819 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Oct 2025 09:55:33 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BD=D0=BE=D0=B2=D0=B0=D1=8F=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../018_create_and_seed_isic_tables.sql | 6 +- backend/routes/isic.js | 2 +- frontend/src/components/BaseLayout.vue | 31 +- frontend/src/components/ChatInterface.vue | 8 +- frontend/src/views/SettingsView.vue | 8 +- .../src/views/settings/DleDeployFormView.vue | 364 ++++++++++++++++-- .../views/settings/SecuritySettingsView.vue | 234 ++++++----- .../src/views/settings/SettingsIndexView.vue | 8 +- 8 files changed, 517 insertions(+), 144 deletions(-) diff --git a/backend/db/migrations/018_create_and_seed_isic_tables.sql b/backend/db/migrations/018_create_and_seed_isic_tables.sql index 56b2c3f..667626b 100644 --- a/backend/db/migrations/018_create_and_seed_isic_tables.sql +++ b/backend/db/migrations/018_create_and_seed_isic_tables.sql @@ -38,7 +38,7 @@ BEGIN -- Загружаем данные во временную таблицу COPY tmp_isic_level_names (code_level_tmp, level_name_en_tmp) - FROM '/app/db/data/isic_level_names.csv' + FROM '/mnt/isic_csv_data/isic_level_names.csv' WITH (FORMAT CSV, HEADER TRUE, DELIMITER ',', QUOTE '"'); -- Вставляем данные в основную таблицу @@ -74,11 +74,11 @@ BEGIN -- Загружаем данные во временные таблицы COPY tmp_isic_titles (sort_order_tmp, code_tmp, description_tmp, inclusion_tmp, exclusion_tmp) - FROM '/app/db/data/isic_titles.csv' + FROM '/mnt/isic_csv_data/isic_titles.csv' WITH (FORMAT CSV, HEADER TRUE, DELIMITER ',', QUOTE '"'); COPY tmp_isic_structure (sort_order_tmp, code_tmp, code_level_tmp, level1_tmp, level2_tmp, level3_tmp, level4_tmp, level5_tmp, level6_tmp) - FROM '/app/db/data/isic_structure.csv' + FROM '/mnt/isic_csv_data/isic_structure.csv' WITH (FORMAT CSV, HEADER TRUE, DELIMITER ',', QUOTE '"'); -- Переносим и объединяем данные из временных таблиц в основную таблицу isic_rev4_codes diff --git a/backend/routes/isic.js b/backend/routes/isic.js index 21b1543..abd4e6e 100644 --- a/backend/routes/isic.js +++ b/backend/routes/isic.js @@ -91,7 +91,7 @@ router.get('/codes', async (req, res) => { const baseQuerySelect = ` SELECT c.code, c.description, c.code_level, c.explanatory_note_inclusion, c.explanatory_note_exclusion, - l.level_name_en, + l.level_name_en_encrypted as level_name_en, c.level1, c.level2, c.level3, c.level4, c.level5, c.level6 FROM isic_rev4_codes c LEFT JOIN isic_rev4_level_names l ON c.code_level = l.code_level diff --git a/frontend/src/components/BaseLayout.vue b/frontend/src/components/BaseLayout.vue index 278fb23..b06ce45 100644 --- a/frontend/src/components/BaseLayout.vue +++ b/frontend/src/components/BaseLayout.vue @@ -273,10 +273,11 @@ onMounted(() => { display: flex; flex-direction: column; max-width: calc(100% - 350px); - padding: 0 20px; + padding: 0 20px 20px 20px; /* Уменьшаем отступ снизу */ background-color: var(--color-white); - height: 100vh; - overflow: hidden; + min-height: 100vh; /* Изменяем на min-height для возможности прокрутки */ + overflow-y: auto; /* Разрешаем вертикальную прокрутку */ + overflow-x: hidden; } .main-content.no-right-sidebar { @@ -293,18 +294,7 @@ onMounted(() => { @media (max-width: 768px) { .main-content { max-width: 100%; - padding-bottom: 20px; /* Убираем большой отступ, так как панель теперь полноэкранная */ - } - - .main-content.no-right-sidebar { - padding-bottom: 20px; - } -} - -@media (max-width: 480px) { - .main-content { - padding: 0 10px; - padding-bottom: 10px; /* Убираем большой отступ */ + padding-bottom: 10px; /* Уменьшаем отступ для мобильных устройств */ } .main-content.no-right-sidebar { @@ -312,5 +302,16 @@ onMounted(() => { } } +@media (max-width: 480px) { + .main-content { + padding: 0 10px; + padding-bottom: 5px; /* Минимальный отступ для очень маленьких экранов */ + } + + .main-content.no-right-sidebar { + padding-bottom: 5px; + } +} + \ No newline at end of file diff --git a/frontend/src/components/ChatInterface.vue b/frontend/src/components/ChatInterface.vue index db419b4..87a5a9b 100644 --- a/frontend/src/components/ChatInterface.vue +++ b/frontend/src/components/ChatInterface.vue @@ -583,6 +583,8 @@ async function handleAiReply() { transition: all var(--transition-normal); z-index: 10; box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.05); + position: sticky; + bottom: 0; } .chat-input textarea { @@ -769,7 +771,8 @@ async function handleAiReply() { @media (max-width: 480px) { .chat-input { - position: static !important; + position: sticky !important; + bottom: 0 !important; border-radius: 0 !important; padding: 8px 12px !important; background: #f8f8f8 !important; @@ -783,7 +786,8 @@ async function handleAiReply() { @media (max-width: 600px) { .chat-input { - position: static !important; + position: sticky !important; + bottom: 0 !important; border-radius: 0 !important; padding: 8px 12px !important; background: #f8f8f8 !important; diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue index 73a543a..f9a4835 100644 --- a/frontend/src/views/SettingsView.vue +++ b/frontend/src/views/SettingsView.vue @@ -77,7 +77,10 @@ const pageTitle = computed(() => { return 'Создать новое DLE (Digital Legal Entity)'; } if (route.name === 'settings-dle-v2-deploy') { - return 'Создать современное DLE v2 (Digital Legal Entity)'; + return 'Деплой контракта DLE (Digital Legal Entity)'; + } + if (route.name === 'settings-security') { + return ''; // Убираем заголовок для страницы безопасности, так как он есть внутри компонента } return 'Настройки'; }); @@ -119,7 +122,8 @@ onBeforeUnmount(() => { border-radius: var(--block-radius); box-shadow: var(--shadow-md); margin-top: 20px; - margin-bottom: 20px; + margin-bottom: 20px; /* Уменьшаем отступ, так как он уже есть в BaseLayout */ + min-height: auto; /* Убираем фиксированную высоту */ } /* Заголовки */ diff --git a/frontend/src/views/settings/DleDeployFormView.vue b/frontend/src/views/settings/DleDeployFormView.vue index f35b1d0..a7e1923 100644 --- a/frontend/src/views/settings/DleDeployFormView.vue +++ b/frontend/src/views/settings/DleDeployFormView.vue @@ -34,8 +34,8 @@ - -
+ +

Загрузка российских классификаторов...

@@ -196,12 +196,14 @@
- +
- + - -
+ +
@@ -241,6 +243,77 @@
+ +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+

Выбранный код: {{ currentSelectedIsicText }}

+ +
+
+