it: каталог моделей в popup и возврат к добавлению экземпляров.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-13 11:41:22 +03:00
parent f2e9129a77
commit a3356cdd90
4 changed files with 159 additions and 18 deletions
+90 -1
View File
@@ -53,9 +53,93 @@ function itPanelClose(id) {
document.body.style.overflow = '';
}
var IT_EQ_DRAFT_KEY = 'it-equipment-draft';
function itEquipmentDraftSave() {
var form = document.querySelector('#it-equipment-panel form');
if (!form || !window.sessionStorage) return;
var data = {};
form.querySelectorAll('input, textarea, select').forEach(function (el) {
if (!el.name || el.name === 'csrfmiddlewaretoken') return;
if (el.type === 'checkbox' || el.type === 'radio') {
data[el.name] = el.checked ? (el.value || '1') : '';
data['__checked__' + el.name] = el.checked;
} else {
data[el.name] = el.value;
}
});
try { sessionStorage.setItem(IT_EQ_DRAFT_KEY, JSON.stringify(data)); } catch (e) {}
}
function itEquipmentDraftRestore() {
if (!window.sessionStorage) return;
var raw;
try { raw = sessionStorage.getItem(IT_EQ_DRAFT_KEY); } catch (e) { return; }
if (!raw) return;
var data;
try { data = JSON.parse(raw); } catch (e) { return; }
var form = document.querySelector('#it-equipment-panel form');
if (!form) return;
Object.keys(data).forEach(function (name) {
if (name.indexOf('__checked__') === 0) return;
var el = form.querySelector('[name="' + name + '"]');
if (!el) return;
if (el.type === 'checkbox' || el.type === 'radio') {
el.checked = !!data['__checked__' + name];
} else {
el.value = data[name] || '';
if (el.tagName === 'SELECT') {
el.dispatchEvent(new Event('change', { bubbles: true }));
}
}
});
var model = document.getElementById('it-equipment-model-select');
if (model && model.value && typeof itSetSearchableSelectValue === 'function') {
itSetSearchableSelectValue('it-equipment-model-select', model.value);
}
}
function itEquipmentDraftClear() {
try { sessionStorage.removeItem(IT_EQ_DRAFT_KEY); } catch (e) {}
}
function itModelsOpenCatalog() {
var ret = document.getElementById('it-models-return-to');
if (ret) ret.value = '';
itPanelOpen('it-equipment-models-panel');
}
function itModelsOpenFromEquipment() {
itEquipmentDraftSave();
var ret = document.getElementById('it-models-return-to');
if (ret) ret.value = 'equipment';
itPanelClose('it-equipment-panel');
itPanelOpen('it-equipment-models-panel');
}
function itModelsDismiss() {
var ret = document.getElementById('it-models-return-to');
var back = ret && ret.value === 'equipment';
itPanelClose('it-equipment-models-panel');
if (back) {
itPanelOpen('it-equipment-panel');
itEquipmentDraftRestore();
}
}
function itModalsInit(root) {
if (!root) return;
if (root.getAttribute('data-it-equipment-open') === '1') itPanelOpen('it-equipment-panel');
if (root.getAttribute('data-it-models-open') === '1') {
itPanelOpen('it-equipment-models-panel');
return;
}
if (root.getAttribute('data-it-equipment-open') === '1') {
itPanelOpen('it-equipment-panel');
itEquipmentDraftRestore();
var mid = root.getAttribute('data-it-select-model-id');
if (mid) itSetSearchableSelectValue('it-equipment-model-select', mid);
itEquipmentDraftClear();
}
if (root.getAttribute('data-it-worklog-open') === '1') itPanelOpen('it-worklog-panel');
}
@@ -441,6 +525,11 @@ document.addEventListener('keydown', function (ev) {
itReportPreviewClose();
return;
}
var models = document.getElementById('it-equipment-models-panel');
if (models && models.style.display === 'flex') {
itModelsDismiss();
return;
}
['it-equipment-panel', 'it-worklog-panel'].forEach(function (id) {
var el = document.getElementById(id);
if (el && el.style.display === 'flex') itPanelClose(id);