From 4e1d5f221ea86a1bce4198a9dc243dedc84f67f4 Mon Sep 17 00:00:00 2001 From: lokses Date: Tue, 13 Oct 2026 13:12:21 +0300 Subject: [PATCH] =?UTF-8?q?ui:=20=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D1=88=D0=B8=D0=B5?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B1=D0=BE=D0=BA=D0=BE=D0=B2=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8=20=D0=BD=D0=B0=20=D1=86?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20popup.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- apps/it_manager/tests.py | 12 ++++++++++++ apps/locations/tests.py | 13 +++++++++++++ apps/power_assets/tests.py | 3 +++ apps/rro/tests.py | 4 ++++ static/assets/js/chat.js | 8 ++------ static/assets/js/it-manager.js | 6 +++--- static/assets/js/timetrack.js | 6 +++--- templates/pages/chat.html | 18 ++++++++++++------ templates/pages/dislocation.html | 28 +++++++++++++++++----------- templates/pages/it-manager.html | 28 ++++++++++++++++++++-------- templates/pages/power-assets.html | 11 +++++++---- templates/pages/rro.html | 22 +++++++++++----------- 12 files changed, 107 insertions(+), 52 deletions(-) diff --git a/apps/it_manager/tests.py b/apps/it_manager/tests.py index 5e5bb96..f252e92 100644 --- a/apps/it_manager/tests.py +++ b/apps/it_manager/tests.py @@ -152,6 +152,18 @@ class ItManagerEquipmentTests(TestCase): self.assertContains(r, 'role="dialog"') self.assertNotContains(r, 'id="it-equipment-panel-overlay"') + def test_remaining_it_forms_are_popups(self): + r = self.client.get('/it-manager/') + for panel_id in ( + 'it-consumable-panel', + 'it-provider-panel', + 'it-contract-panel', + 'it-servicecall-panel', + ): + self.assertContains(r, f'id="{panel_id}"') + self.assertNotContains(r, f'id="{panel_id}-overlay"') + self.assertNotContains(r, 'translateX(100%)') + def test_models_catalog_is_popup(self): r = self.client.get('/it-manager/') self.assertContains(r, 'id="it-equipment-models-panel"') diff --git a/apps/locations/tests.py b/apps/locations/tests.py index be948c9..5c9f94b 100644 --- a/apps/locations/tests.py +++ b/apps/locations/tests.py @@ -874,6 +874,19 @@ class DislocationVendorsTabTests(TestCase): self.assertContains(r, 'ТестСервис') self.assertNotContains(r, 'Добавить') + def test_vendor_form_is_popup(self): + from django.test import Client + from core.test_utils import login_2fa + + client = Client() + login_2fa(client, self.it_user) + r = client.get('/dislocation/', {'tab': 'vendors'}, HTTP_HX_REQUEST='true') + self.assertEqual(r.status_code, 200) + self.assertContains(r, 'id="dislo-vendor-panel"') + self.assertContains(r, 'role="dialog"') + self.assertNotContains(r, 'id="dislo-vendor-panel-overlay"') + self.assertNotContains(r, 'translateX(100%)') + def test_it_can_create_vendor(self): from django.test import Client from apps.locations.models.base import Location diff --git a/apps/power_assets/tests.py b/apps/power_assets/tests.py index 676c887..1440a2b 100644 --- a/apps/power_assets/tests.py +++ b/apps/power_assets/tests.py @@ -51,6 +51,9 @@ class PowerAssetsTests(TestCase): self.assertEqual(r.context['accounting_active_tab'], 'power') tab_keys = [t[0] for t in r.context['accounting_tabs']] self.assertIn('power', tab_keys) + self.assertContains(r, 'id="power-create-panel"') + self.assertContains(r, 'role="dialog"') + self.assertNotContains(r, 'id="power-create-overlay"') def test_create_inverter_on_location(self): r = self.client.post('/power-assets/create/', { diff --git a/apps/rro/tests.py b/apps/rro/tests.py index 0faa7aa..41946ee 100644 --- a/apps/rro/tests.py +++ b/apps/rro/tests.py @@ -152,6 +152,10 @@ class CashRegisterPortalTests(TestCase): resp = self.client.get('/rro/', HTTP_HX_REQUEST='true') self.assertEqual(resp.status_code, 200) self.assertContains(resp, 'FN-PORTAL-1') + self.assertContains(resp, 'id="rro-form-panel"') + self.assertContains(resp, 'role="dialog"') + self.assertNotContains(resp, 'id="rro-form-overlay"') + self.assertNotContains(resp, 'translateX(100%)') def test_pharmacy_detail_rro_tab(self): self._login() diff --git a/static/assets/js/chat.js b/static/assets/js/chat.js index a4c2ffc..ba14bd5 100644 --- a/static/assets/js/chat.js +++ b/static/assets/js/chat.js @@ -78,17 +78,13 @@ function chatToggleArchived(show) { function chatPanelOpen(id) { var panel = document.getElementById(id); - var overlay = document.getElementById(id + '-overlay'); - if (overlay) overlay.style.display = 'block'; - if (panel) panel.style.transform = 'translateX(0)'; + if (panel) panel.style.display = 'flex'; document.body.style.overflow = 'hidden'; } function chatPanelClose(id) { var panel = document.getElementById(id); - var overlay = document.getElementById(id + '-overlay'); - if (overlay) overlay.style.display = 'none'; - if (panel) panel.style.transform = 'translateX(100%)'; + if (panel) panel.style.display = 'none'; document.body.style.overflow = ''; } diff --git a/static/assets/js/it-manager.js b/static/assets/js/it-manager.js index 203403c..30160da 100644 --- a/static/assets/js/it-manager.js +++ b/static/assets/js/it-manager.js @@ -530,9 +530,9 @@ document.addEventListener('keydown', function (ev) { itModelsDismiss(); return; } - ['it-equipment-panel', 'it-worklog-panel'].forEach(function (id) { - var el = document.getElementById(id); - if (el && el.style.display === 'flex') itPanelClose(id); + document.querySelectorAll('[id^="it-"][role="dialog"]').forEach(function (el) { + if (el.id === 'it-equipment-models-panel' || el.id === 'it-report-preview-modal') return; + if (el.style.display === 'flex') itPanelClose(el.id); }); }); diff --git a/static/assets/js/timetrack.js b/static/assets/js/timetrack.js index be85aea..a5ef239 100644 --- a/static/assets/js/timetrack.js +++ b/static/assets/js/timetrack.js @@ -218,14 +218,14 @@ function ttShowDetail(empId) { '' + ''; - overlay.style.display = 'block'; - panel.style.transform = 'translateX(0)'; + if (overlay) overlay.style.display = 'none'; + panel.style.display = 'flex'; } function ttCloseDetail() { var panel = document.getElementById('tt-detail'); var overlay = document.getElementById('tt-detail-overlay'); - if (panel) panel.style.transform = 'translateX(100%)'; + if (panel) panel.style.display = 'none'; if (overlay) overlay.style.display = 'none'; } diff --git a/templates/pages/chat.html b/templates/pages/chat.html index 21a04a3..f7c8b6d 100644 --- a/templates/pages/chat.html +++ b/templates/pages/chat.html @@ -80,9 +80,11 @@ - - -
+ + - - -
+ + diff --git a/templates/pages/dislocation.html b/templates/pages/dislocation.html index 2a0ddc2..d92b149 100644 --- a/templates/pages/dislocation.html +++ b/templates/pages/dislocation.html @@ -515,8 +515,10 @@
{% if can_manage_vendors and vendor_form %} - -
+
{% endif %}
@@ -667,15 +670,20 @@ function disloVendorPanelOpen() { }); const activeEl = form.querySelector('[name="is_active"]'); if (activeEl) activeEl.checked = true; - document.getElementById('dislo-vendor-panel-overlay').style.display = 'block'; - document.getElementById('dislo-vendor-panel').style.transform = 'translateX(0)'; + disloVendorPanelShow(); +} + +function disloVendorPanelShow() { + const panel = document.getElementById('dislo-vendor-panel'); + if (!panel) return; + panel.style.display = 'flex'; + document.body.style.overflow = 'hidden'; } function disloVendorPanelClose() { - const overlay = document.getElementById('dislo-vendor-panel-overlay'); const panel = document.getElementById('dislo-vendor-panel'); - if (overlay) overlay.style.display = 'none'; - if (panel) panel.style.transform = 'translateX(100%)'; + if (panel) panel.style.display = 'none'; + document.body.style.overflow = ''; } function disloVendorEdit(pk) { @@ -701,13 +709,11 @@ function disloVendorEdit(pk) { set('comments', btn.dataset.comments); const activeEl = form.querySelector('[name="is_active"]'); if (activeEl) activeEl.checked = btn.dataset.active === '1'; - document.getElementById('dislo-vendor-panel-overlay').style.display = 'block'; - document.getElementById('dislo-vendor-panel').style.transform = 'translateX(0)'; + disloVendorPanelShow(); } {% if vendor_form_error and can_manage_vendors %} -document.getElementById('dislo-vendor-panel-overlay').style.display = 'block'; -document.getElementById('dislo-vendor-panel').style.transform = 'translateX(0)'; +disloVendorPanelShow(); {% endif %} disloVendorFilter(); diff --git a/templates/pages/it-manager.html b/templates/pages/it-manager.html index d39a616..f304437 100644 --- a/templates/pages/it-manager.html +++ b/templates/pages/it-manager.html @@ -1059,8 +1059,10 @@ - -
+
@@ -1260,8 +1263,10 @@
- -
+
- -
+
@@ -1522,8 +1531,10 @@
- -
+
diff --git a/templates/pages/power-assets.html b/templates/pages/power-assets.html index 76351bd..a14e9c5 100644 --- a/templates/pages/power-assets.html +++ b/templates/pages/power-assets.html @@ -8,7 +8,7 @@ {% trans "Инверторы и генераторы: объекты, обслуживание и плановое ТО" %}

- @@ -265,11 +265,13 @@ {% include "partials/pagination.html" with page=power_assets_page base_url="/accounting/?tab=power" page_param="power_page" size_param="power_per_page" item_label="единиц" %} - - diff --git a/templates/pages/rro.html b/templates/pages/rro.html index 1ec635e..d83b67b 100644 --- a/templates/pages/rro.html +++ b/templates/pages/rro.html @@ -122,8 +122,10 @@ {% if can_edit_rro %} - -
+ @@ -236,7 +239,6 @@ var TITLE_EDIT = '{% filter escapejs %}{% trans "Редактирование РРО / ПРРО" %}{% endfilter %}'; function panel() { return document.getElementById('rro-form-panel'); } - function overlay() { return document.getElementById('rro-form-overlay'); } function formEl() { return document.getElementById('rro-register-form'); } window.rroKindToggle = function (kind) { @@ -245,17 +247,15 @@ }; window.rroCloseForm = function () { - var p = panel(), o = overlay(); - if (p) p.style.transform = 'translateX(100%)'; - if (o) o.style.display = 'none'; + var p = panel(); + if (p) p.style.display = 'none'; + document.body.style.overflow = ''; }; function openPanel() { - var p = panel(), o = overlay(); - if (o) o.style.display = 'block'; - requestAnimationFrame(function () { - if (p) p.style.transform = 'translateX(0)'; - }); + var p = panel(); + if (p) p.style.display = 'flex'; + document.body.style.overflow = 'hidden'; } function setVal(id, value) {