44 lines
1.9 KiB
JavaScript
44 lines
1.9 KiB
JavaScript
// scenario-create.js — создание и клонирование сценариев
|
|
//
|
|
// createScenario() — открыть редактор для нового сценария
|
|
// cloneScenario(id) — клонировать существующий (prompt имени → POST /api/scenario/definitions)
|
|
|
|
/**
|
|
* Создать новый сценарий — открывает модальный редактор.
|
|
*/
|
|
async function createScenario() {
|
|
showScenarioEditor(null); // null = новый, без определения
|
|
}
|
|
|
|
/**
|
|
* Клонировать существующий сценарий.
|
|
*
|
|
* Алгоритм:
|
|
* 1. prompt — спросить имя для копии
|
|
* 2. GET /api/scenario/definitions/{id} — загрузить исходные steps
|
|
* 3. POST /api/scenario/definitions — создать копию с новым именем
|
|
* 4. Обновить список сценариев
|
|
*
|
|
* @param {number} defId — ID исходного сценария
|
|
* @param {string} origName — имя исходного (для prompt)
|
|
*/
|
|
async function cloneScenario(defId, origName) {
|
|
const newName = prompt('Имя нового сценария (копия «' + origName + '»):', origName + '_copy');
|
|
if (!newName) return;
|
|
try {
|
|
const r = await fetch('/api/scenario/definitions/' + defId);
|
|
const def = await r.json();
|
|
if (def.error) { alert(def.error); return; }
|
|
const rr = await fetch('/api/scenario/definitions', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ name: newName, steps: def.steps })
|
|
});
|
|
const d = await rr.json();
|
|
if (d.error) { alert(d.error); return; }
|
|
await loadScenarios(); // обновить список
|
|
} catch (e) {
|
|
alert('Ошибка клонирования: ' + e.message);
|
|
}
|
|
}
|