From 43bd51e7153e831b0320cf82b3c2a1035b534679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 4 Aug 2026 15:22:57 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BD=D0=B5=D0=BB=D1=8C=D0=B7=D1=8F=20?= =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B8=D1=82=D1=8C=20=D1=81?= =?UTF-8?q?=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B9=20=E2=80=94=20=D0=B2?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D1=8F=20+=20svcId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20instance=5Fref=20(v1.2.47)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Баг 1: collectFormSteps не вычислял svcId для instance_ref (output-ссылка не резолвилась в service_id) Баг 2: валидация требовала service_id для ВСЕХ шагов, включая не-create с instance_ref/instance_uid --- site/app.py | 2 +- site/static/js/scenario-form.js | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/site/app.py b/site/app.py index 3d6e9a0..99775ec 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.46" +VERSION = "1.2.47" # 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 fb7152c..b2dbc12 100644 --- a/site/static/js/scenario-form.js +++ b/site/static/js/scenario-form.js @@ -501,7 +501,14 @@ function collectFormSteps() { svcId = cloud.serviceId; s.instance_uid = ref; // облачный UUID } else { - s.instance_ref = ref; // output-ссылка + // output-ссылка — ищем service_id в предыдущих create-шагах + s.instance_ref = ref; + for (let j = 0; j < idx; j++) { + if (st.steps[j].output === ref) { + svcId = st.steps[j].service_id; + break; + } + } } } } @@ -541,8 +548,16 @@ async function saveScenario() { if (!name) { alert('Введите название'); return; } if (!steps.length) { alert('Добавьте хотя бы один шаг'); return; } for (let i = 0; i < steps.length; i++) { - if (!steps[i].service_id) { alert('Шаг ' + (i+1) + ': выберите сервис или инстанс'); return; } - if (!steps[i].operation) { alert('Шаг ' + (i+1) + ': выберите операцию'); return; } + const s = steps[i]; + if (!s.operation) { alert('Шаг ' + (i+1) + ': выберите операцию'); return; } + // CREATE: нужен service_id. Не-CREATE: service_id ИЛИ instance_ref/instance_uid + if (s.operation === 'create') { + if (!s.service_id) { alert('Шаг ' + (i+1) + ': выберите сервис'); return; } + } else { + if (!s.service_id && !s.instance_ref && !s.instance_uid) { + alert('Шаг ' + (i+1) + ': выберите инстанс (из create-шага или облака)'); return; + } + } } const st = scenarioEditorState;