fix: 用Html+script替代失效的datawidget,页面加载时fetch context更新按钮

This commit is contained in:
yumoqing 2026-08-07 17:47:49 +08:00
parent ba454f84cc
commit 78e9d6a903
2 changed files with 18 additions and 36 deletions

View File

@ -47,6 +47,14 @@
"bgcolor": "#e8f0fe"
},
"subwidgets": [
{
"widgettype": "Html",
"options": {
"html": "<script>setTimeout(function(){fetch('/pipeline-sdlc/api/cockpit_context.dspy').then(function(r){return r.json()}).then(function(d){var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);if(pl&&pl.text_w)pl.text_w.set_text(d.project_name?'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a'+d.project_name:'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a--');if(il&&il.text_w)il.text_w.set_text('\\ud83d\\udd04 \\u5f53\\u524d\\u8fed\\u4ee3\\uff1a'+(d.iteration_name||'--'));})},300);</script>",
"height": "0",
"width": "0"
}
},
{
"widgettype": "Button",
"id": "project_label",
@ -82,26 +90,9 @@
"script": "var ctx=bricks.getWidgetById('context_data',bricks.app);var d=ctx?ctx.getValue():{};var iid=d.iteration_id||'';var pid=d.project_id||'';if(!iid){var iter_url='/pipeline-sdlc/api/cockpit_iteration_picker.dspy';if(pid)iter_url+='?project_id='+encodeURIComponent(pid);var pw=new bricks.PopupWindow({title:'选择迭代',cwidth:32,cheight:16,auto_open:true});var form=new bricks.Form({name:'iteration_picker',cols:1,fields:[{name:'iteration_id',uitype:'code',label:'迭代',placeholder:'请选择迭代',cwidth:26,dataurl:iter_url,valueField:'value',textField:'text'}]});var vb=new bricks.VBox({padding:'12px',gap:'12px'});vb.add_widget(new bricks.Text({text:'没有当前迭代,请选择一个迭代:',cfontsize:0.95,color:'#64748b'}));vb.add_widget(form);pw.content_w.add_widget(vb);setTimeout(function(){var sel=pw.content_w.dom_element.querySelector('select');if(sel)sel.addEventListener('change',function(){var v=sel.value;if(!v)return;fetch('/pipeline-sdlc/api/cockpit_context_update.dspy',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'iteration_id='+encodeURIComponent(v)+'&project_id='+encodeURIComponent(pid)}).then(function(r){return r.json()}).then(function(r){if(r.success){pw.destroy();var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);if(pl)pl.text_w.set_text(r.project_name?'📁 当前项目:'+r.project_name:'📁 当前项目:--');if(il)il.text_w.set_text('🔄 当前迭代:'+(r.iteration_name||'--'));var cd=bricks.getWidgetById('context_data',bricks.app);if(cd)cd.setValue(r);}});});},500);return;}var box=new bricks.VBox();box.add_widget(new bricks.Text({text:'迭代名称:'+(d.iteration_name||'--'),cfontsize:1.1,fontWeight:'bold',marginBottom:'8px'}));box.add_widget(new bricks.Text({text:'迭代ID'+iid,cfontsize:0.85,color:'#64748b',marginBottom:'4px'}));box.add_widget(new bricks.Text({text:'所属项目:'+(d.project_name||pid),cfontsize:0.85,color:'#64748b'}));var pw=new bricks.PopupWindow({title:'迭代详情',cwidth:36,cheight:14,auto_open:true});pw.content_w.add_widget(box);"
}
]
},
{
"widgettype": "datawidget",
"id": "context_data",
"options": {
"dataurl": "/pipeline-sdlc/api/cockpit_context.dspy",
"method": "GET",
"datascript": "(function(d){var d=d||{};var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);if(pl){pl.text_w.set_text(d.project_name?'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a'+d.project_name:'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a--');}if(il){il.text_w.set_text('\\ud83d\\udd04 \\u5f53\\u524d\\u8fed\\u4ee3\\uff1a'+(d.iteration_name||'--'));}return d;})"
}
}
],
"binds": [
{
"wid": "self",
"event": "render",
"actiontype": "script",
"target": "self",
"script": "fetch('/pipeline-sdlc/api/cockpit_context.dspy').then(function(r){return r.json()}).then(function(d){var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);if(pl)pl.text_w.set_text(d.project_name?'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a'+d.project_name:'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a--');if(il)il.text_w.set_text('\\ud83d\\udd04 \\u5f53\\u524d\\u8fed\\u4ee3\\uff1a'+(d.iteration_name||'--'));})"
}
]
"binds": []
},
{
"widgettype": "VBox",

View File

@ -66,6 +66,14 @@
"bgcolor": "#e8f0fe"
},
"subwidgets": [
{
"widgettype": "Html",
"options": {
"html": "<script>setTimeout(function(){fetch('/pipeline-sdlc/api/cockpit_context.dspy').then(function(r){return r.json()}).then(function(d){var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);if(pl&&pl.text_w)pl.text_w.set_text(d.project_name?'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a'+d.project_name:'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a--');if(il&&il.text_w)il.text_w.set_text('\\ud83d\\udd04 \\u5f53\\u524d\\u8fed\\u4ee3\\uff1a'+(d.iteration_name||'--'));})},300);</script>",
"height": "0",
"width": "0"
}
},
{
"widgettype": "Button",
"id": "project_label",
@ -101,26 +109,9 @@
"script": "var ctx=bricks.getWidgetById('context_data',bricks.app);var d=ctx?ctx.getValue():{};var iid=d.iteration_id||'';var pid=d.project_id||'';if(!iid){var iter_url='/pipeline-sdlc/api/cockpit_iteration_picker.dspy';if(pid)iter_url+='?project_id='+encodeURIComponent(pid);var pw=new bricks.PopupWindow({title:'选择迭代',cwidth:32,cheight:16,auto_open:true});var form=new bricks.Form({name:'iteration_picker',cols:1,fields:[{name:'iteration_id',uitype:'code',label:'迭代',placeholder:'请选择迭代',cwidth:26,dataurl:iter_url,valueField:'value',textField:'text'}]});var vb=new bricks.VBox({padding:'12px',gap:'12px'});vb.add_widget(new bricks.Text({text:'没有当前迭代,请选择一个迭代:',cfontsize:0.95,color:'#64748b'}));vb.add_widget(form);pw.content_w.add_widget(vb);setTimeout(function(){var sel=pw.content_w.dom_element.querySelector('select');if(sel)sel.addEventListener('change',function(){var v=sel.value;if(!v)return;fetch('/pipeline-sdlc/api/cockpit_context_update.dspy',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'iteration_id='+encodeURIComponent(v)+'&project_id='+encodeURIComponent(pid)}).then(function(r){return r.json()}).then(function(r){if(r.success){pw.destroy();var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);if(pl)pl.text_w.set_text(r.project_name?'📁 当前项目:'+r.project_name:'📁 当前项目:--');if(il)il.text_w.set_text('🔄 当前迭代:'+(r.iteration_name||'--'));var cd=bricks.getWidgetById('context_data',bricks.app);if(cd)cd.setValue(r);}});});},500);return;}var box=new bricks.VBox();box.add_widget(new bricks.Text({text:'迭代名称:'+(d.iteration_name||'--'),cfontsize:1.1,fontWeight:'bold',marginBottom:'8px'}));box.add_widget(new bricks.Text({text:'迭代ID'+iid,cfontsize:0.85,color:'#64748b',marginBottom:'4px'}));box.add_widget(new bricks.Text({text:'所属项目:'+(d.project_name||pid),cfontsize:0.85,color:'#64748b'}));var pw=new bricks.PopupWindow({title:'迭代详情',cwidth:36,cheight:14,auto_open:true});pw.content_w.add_widget(box);"
}
]
},
{
"widgettype": "datawidget",
"id": "context_data",
"options": {
"dataurl": "/pipeline-sdlc/api/cockpit_context.dspy",
"method": "GET",
"datascript": "(function(d){var d=d||{};var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);var pn=d.project_name||'';if(pl){pl.text_w.set_text(pn?'📁 当前项目:'+pn:'📁 当前项目:--');}if(il){il.text_w.set_text(d.iteration_name?(d.iteration_name.length>15?d.iteration_name.slice(0,15)+'...':d.iteration_name):'🔄 当前迭代:--');il.text_w.set_text('🔄 当前迭代:'+(d.iteration_name||'--'));}return d;})"
}
}
],
"binds": [
{
"wid": "self",
"event": "render",
"actiontype": "script",
"target": "self",
"script": "fetch('/pipeline-sdlc/api/cockpit_context.dspy').then(function(r){return r.json()}).then(function(d){var pl=bricks.getWidgetById('project_label',bricks.app);var il=bricks.getWidgetById('iteration_label',bricks.app);if(pl)pl.text_w.set_text(d.project_name?'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a'+d.project_name:'\\ud83d\\udcc1 \\u5f53\\u524d\\u9879\\u76ee\\uff1a--');if(il)il.text_w.set_text('\\ud83d\\udd04 \\u5f53\\u524d\\u8fed\\u4ee3\\uff1a'+(d.iteration_name||'--'));})"
}
]
"binds": []
},
{
"widgettype": "VBox",