diff --git a/site/app.py b/site/app.py index 534312b..f1f8325 100644 --- a/site/app.py +++ b/site/app.py @@ -32,7 +32,7 @@ from routes.api_scenario_defs import bp_defs as api_scenario_defs_bp # Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода. # Нужна для фильтрации истории (пользователь видит только записи своей версии). -VERSION = "1.2.17" +VERSION = "1.2.18" # Flask-приложение с Jinja2-шаблонами из папки templates/ app = Flask(__name__, template_folder="templates", static_folder="static") diff --git a/site/static/js/scenario-form.js b/site/static/js/scenario-form.js index 42fab86..8c79c0d 100644 --- a/site/static/js/scenario-form.js +++ b/site/static/js/scenario-form.js @@ -385,11 +385,26 @@ function renderStepRow(idx, step) { // ═══════════════════════════════════════════════════════ /** - * Изменение операции в выпадающем списке → сброс параметров + перерисовка. + * Изменение операции в выпадающем списке → сохранить выбор + сброс + перерисовка. + * + * ВАЖНО: сначала читаем новое значение из DOM-селекта и сохраняем в step.operation, + * иначе renderEditor() перерисует старый селект (предыдущее значение). */ function onOpChange(idx) { - scenarioEditorState.steps[idx].params = {}; // сброс сохранённых параметров - scenarioEditorState.steps[idx]._svcOpId = null; // сброс кеша svcOpId + // Считать новое значение из DOM ДО перерисовки + const opEl = document.getElementById('step-' + idx + '-op'); + const newOp = (opEl?.value || '').trim(); + + const step = scenarioEditorState.steps[idx]; + step.operation = newOp; // сохранить выбранную операцию + step.params = {}; // сброс параметров (для новой операции — другие) + step._svcOpId = null; // сброс кеша svcOperationId + + // Для не-create: автоматически показать облачные инстансы + if (newOp && newOp !== 'create') { + step._showCloud = true; + } + renderEditor(); }