diff --git a/site/app.py b/site/app.py index 04f651f..59618d8 100644 --- a/site/app.py +++ b/site/app.py @@ -18,7 +18,7 @@ from routes.api import bp as api_bp from routes.api_test import bp as api_test_bp # Версия — меняется при КАЖДОМ изменении кода. Показывается в топбаре UI. -VERSION = "1.1.8" +VERSION = "1.1.9" app = Flask(__name__, template_folder="templates", static_folder="static") app.config["NUBES_API_ENDPOINT"] = os.getenv("NUBES_API_ENDPOINT", "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc") diff --git a/site/static/app.js b/site/static/app.js index c20c319..397beee 100644 --- a/site/static/app.js +++ b/site/static/app.js @@ -169,6 +169,28 @@ function showParams(opId,opName){ input=``; }else if(p.dataType==='boolean'){ input=``; + }else if(p.dataDescriptor&&isMap){ + // Раскрыть dataDescriptor — вложенные поля вместо JSON-строки + const dd=p.dataDescriptor; + let subHtml=''; + let dflObj={}; + try{dflObj=JSON.parse(dfl||'{}');}catch(e){} + Object.keys(dd).forEach(subKey=>{ + const sub=dd[subKey]; + const subDfl=dflObj[subKey]!==undefined?dflObj[subKey]:''; + const subVl=sub.valueList; + let si; + if(subVl&&Array.isArray(subVl)){ + si=``; + }else if(sub.dataType==='boolean'){ + si=``; + }else{ + si=``; + } + subHtml+=`
${si}
`; + }); + input=`
${subHtml}
`; + return `
${input}`; }else{ const dt=isMap?'map':''; input=``; @@ -190,13 +212,25 @@ function showParams(opId,opName){ return; } const pp={}; + const nested={}; // {parentKey: {subKey: value, ...}} document.querySelectorAll('#params-form [name^="p_"]').forEach(el=>{ let v=el.value; const dt=el.dataset.type||''; + if(dt==='mapchild'){ + const name=el.name.replace('p_',''); + const dot=name.indexOf('.'); + const parentKey=name.substring(0,dot); + const subKey=name.substring(dot+1); + if(!nested[parentKey]) nested[parentKey]={}; + nested[parentKey][subKey]=v; + return; + } if(dt==='array'||dt.startsWith('array')) v=JSON.stringify([v]); if(dt==='map'||dt==='map-fixed') v=v||'{}'; pp[el.name.replace('p_','')]=v; }); + // Сериализовать вложенные объекты в JSON строки + for(const pk in nested) pp[pk]=JSON.stringify(nested[pk]); executeOp(pp); }; });