v1.1.9: expand dataDescriptor — nested map params as individual fields
This commit is contained in:
@@ -169,6 +169,28 @@ function showParams(opId,opName){
|
||||
input=`<select name="p_${p.svcOperationCfsParamId}" data-type="ref">${opts}</select>`;
|
||||
}else if(p.dataType==='boolean'){
|
||||
input=`<select name="p_${p.svcOperationCfsParamId}" data-type="boolean"><option value="true" ${dfl==='true'||dfl===true?'selected':''}>true</option><option value="false" ${dfl==='false'||dfl===false?'selected':''}>false</option></select>`;
|
||||
}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=`<select name="p_${p.svcOperationCfsParamId}.${subKey}" data-type="mapchild">${subVl.map(v=>`<option value="${_esc(v)}" ${v==subDfl?'selected':''}>${_esc(v)}</option>`).join('')}</select>`;
|
||||
}else if(sub.dataType==='boolean'){
|
||||
si=`<select name="p_${p.svcOperationCfsParamId}.${subKey}" data-type="mapchild"><option value="true" ${subDfl==='true'||subDfl===true?'selected':''}>true</option><option value="false" ${subDfl==='false'||subDfl===false?'selected':''}>false</option></select>`;
|
||||
}else{
|
||||
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>`;
|
||||
});
|
||||
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}`;
|
||||
}else{
|
||||
const dt=isMap?'map':'';
|
||||
input=`<input type="text" name="p_${p.svcOperationCfsParamId}" value="${_esc(dfl)}" data-type="${dt}" placeholder="${req&&!hasDfl?'обязательно':''}"${isMap?' onblur="validateJson(this)"':''}>`;
|
||||
@@ -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);
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user