v1.1.10: real svc per instance, create header, required marks for nested

This commit is contained in:
2026-07-28 13:50:34 +04:00
parent d326b63aa2
commit da88fa6bd8
2 changed files with 9 additions and 5 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ from routes.api import bp as api_bp
from routes.api_test import bp as api_test_bp from routes.api_test import bp as api_test_bp
# Версия — меняется при КАЖДОМ изменении кода. Показывается в топбаре UI. # Версия — меняется при КАЖДОМ изменении кода. Показывается в топбаре UI.
VERSION = "1.1.9" VERSION = "1.1.10"
app = Flask(__name__, template_folder="templates", static_folder="static") 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") app.config["NUBES_API_ENDPOINT"] = os.getenv("NUBES_API_ENDPOINT", "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc")
+8 -4
View File
@@ -54,7 +54,7 @@ async function selectService(svcId){
const sc=status==='running'?'badge-success':''; const sc=status==='running'?'badge-success':'';
html+=`<div class="inst-item" onclick="toggleInstance('${i.instanceUid}')" data-iuid="${i.instanceUid}"> html+=`<div class="inst-item" onclick="toggleInstance('${i.instanceUid}')" data-iuid="${i.instanceUid}">
<span style="display:inline-block;width:220px;">${i.displayName}</span> <span style="display:inline-block;width:220px;">${i.displayName}</span>
<span style="display:inline-block;width:160px;color:var(--muted);font-size:11px;">${currentSvcName}</span> <span style="display:inline-block;width:160px;color:var(--muted);font-size:11px;">${i.svc||''}</span>
<span class="badge ${sc}" style="font-size:9px;">${status}</span> <span class="badge ${sc}" style="font-size:9px;">${status}</span>
</div>`; </div>`;
html+=`<div class="inst-ops" id="ops-${i.instanceUid}"></div>`; html+=`<div class="inst-ops" id="ops-${i.instanceUid}"></div>`;
@@ -150,7 +150,8 @@ function showParams(opId,opName){
} }
const form=document.getElementById('params-form'); const form=document.getElementById('params-form');
const displayNameValue=isCreate?makeCreateDisplayName():''; const displayNameValue=isCreate?makeCreateDisplayName():'';
form.innerHTML=(opName==='create'?`<div class="param-row"><label class="req">displayName</label><span style="font-size:12px;color:var(--muted);white-space:nowrap;">${AUTOTEST_PREFIX}</span><input type="text" id="param-displayname" value="${_esc(displayNameValue)}" autocomplete="off"></div>`:'') const createHeader=isCreate?`<div style="font-weight:600;font-size:13px;margin-bottom:8px;color:var(--brand-primary);">Создание: ${currentSvcName}</div>`:'';
form.innerHTML=createHeader+(opName==='create'?`<div class="param-row"><label class="req">displayName</label><span style="font-size:12px;color:var(--muted);white-space:nowrap;">${AUTOTEST_PREFIX}</span><input type="text" id="param-displayname" value="${_esc(displayNameValue)}" autocomplete="off"></div>`:'')
+ params.map(p=>{ + params.map(p=>{
const req=p.isRequired; const req=p.isRequired;
const hasDfl=p.defaultValue!==null&&p.defaultValue!==undefined&&p.defaultValue!==''; const hasDfl=p.defaultValue!==null&&p.defaultValue!==undefined&&p.defaultValue!=='';
@@ -179,6 +180,9 @@ function showParams(opId,opName){
const sub=dd[subKey]; const sub=dd[subKey];
const subDfl=dflObj[subKey]!==undefined?dflObj[subKey]:''; const subDfl=dflObj[subKey]!==undefined?dflObj[subKey]:'';
const subVl=sub.valueList; const subVl=sub.valueList;
const subReq=sub.isRequired;
const subNoDfl=subReq&&!subDfl&&subDfl!==0&&subDfl!==false;
const subLblCls=subNoDfl?'req-nodfl':'';
let si; let si;
if(subVl&&Array.isArray(subVl)){ if(subVl&&Array.isArray(subVl)){
si=`<select name="p_${p.svcOperationCfsParamId}.${subKey}" data-type="mapchild">${subVl.map(v=>`<option value="${_esc(v)}" ${v==subDfl?'selected':''}>${_esc(v)}</option>`).join('')}</select>`; si=`<select name="p_${p.svcOperationCfsParamId}.${subKey}" data-type="mapchild">${subVl.map(v=>`<option value="${_esc(v)}" ${v==subDfl?'selected':''}>${_esc(v)}</option>`).join('')}</select>`;
@@ -187,7 +191,7 @@ function showParams(opId,opName){
}else{ }else{
si=`<input type="text" name="p_${p.svcOperationCfsParamId}.${subKey}" value="${_esc(subDfl)}" data-type="mapchild">`; si=`<input type="text" name="p_${p.svcOperationCfsParamId}.${subKey}" value="${_esc(subDfl)}" data-type="mapchild">`;
} }
subHtml+=`<div class="param-row"><label>${_esc(subKey)}</label>${si}</div>`; subHtml+=`<div class="param-row"><label class="${subLblCls}">${_esc(subKey)}</label>${si}</div>`;
}); });
input=`<div style="border-left:2px solid var(--brand-gray);margin-left:8px;padding:0 0 4px 8px;">${subHtml}</div>`; input=`<div style="border-left:2px solid var(--brand-gray);margin-left:8px;padding:0 0 4px 8px;">${subHtml}</div>`;
return `<div class="param-row"><label class="${labelCls}">${_esc(p.name)}</label></div>${input}`; return `<div class="param-row"><label class="${labelCls}">${_esc(p.name)}</label></div>${input}`;
@@ -354,7 +358,7 @@ async function refreshInstances(){
const sc=status==='running'?'badge-success':''; const sc=status==='running'?'badge-success':'';
html+=`<div class="inst-item" onclick="toggleInstance('${i.instanceUid}')" data-iuid="${i.instanceUid}"> html+=`<div class="inst-item" onclick="toggleInstance('${i.instanceUid}')" data-iuid="${i.instanceUid}">
<span style="display:inline-block;width:220px;">${i.displayName}</span> <span style="display:inline-block;width:220px;">${i.displayName}</span>
<span style="display:inline-block;width:160px;color:var(--muted);font-size:11px;">${currentSvcName}</span> <span style="display:inline-block;width:160px;color:var(--muted);font-size:11px;">${i.svc||''}</span>
<span class="badge ${sc}" style="font-size:9px;">${status}</span> <span class="badge ${sc}" style="font-size:9px;">${status}</span>
</div>`; </div>`;
html+=`<div class="inst-ops" id="ops-${i.instanceUid}"></div>`; html+=`<div class="inst-ops" id="ops-${i.instanceUid}"></div>`;