2026-08-12 14:10:13 +08:00

137 lines
11 KiB
XML

{
"widgettype": "VBox",
"options": {
"width": "100%",
"height": "100%",
"padding": "0"
},
"subwidgets": [
{
"widgettype": "HBox",
"options": {
"width": "100%",
"alignItems": "center",
"padding": "16px 24px 8px 24px",
"cheight": 6,
"gap": "12px"
},
"subwidgets": [
{
"widgettype": "Title2",
"options": {
"text": "开发产线驾驶舱"
}
},
{
"widgettype": "Text",
"options": {
"text": "AI驱动的对话式开发",
"cfontsize": 0.9,
"color": "#94a3b8"
}
},
{
"widgettype": "Filler"
}
]
},
{
"widgettype": "HBox",
"id": "context_bar",
"options": {
"width": "100%",
"padding": "4px 24px 4px 24px",
"cheight": 2.5,
"gap": "12px",
"alignItems": "center",
"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){if(d.project_id){var sel=bricks.getWidgetById('project_selector',bricks.app);if(sel)sel.setValue(d.project_id);}})},200);</script>",
"height": "0",
"width": "0"
}
},
{
"widgettype": "Form",
"id": "project_form",
"options": {
"name": "project_form",
"cols": 1,
"fields": [
{
"name": "project_id",
"uitype": "code",
"label": "",
"placeholder": "选择项目",
"cwidth": 20,
"dataurl": "/pipeline-sdlc/api/cockpit_project_picker.dspy",
"valueField": "value",
"textField": "text",
"nullable": true
}
]
},
"binds": [
{
"wid": "self",
"event": "changed",
"actiontype": "script",
"target": "self",
"script": "var v=this.getValue();var pid=(v||{}).project_id||'';if(!pid)return;fetch('/pipeline-sdlc/api/cockpit_context_update.dspy',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'project_id='+encodeURIComponent(pid)}).then(function(r){return r.json()}).then(function(r){if(r.success){var pl=bricks.getWidgetById('task_btn',bricks.app);if(pl&&pl.text_w)pl.text_w.set_text('任务');}})"
}
]
},
{
"widgettype": "Button",
"id": "task_btn",
"options": {
"label": "任务",
"css": "small"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "self",
"script": "fetch('/pipeline-sdlc/api/cockpit_context.dspy').then(function(r){return r.json()}).then(function(d){var pid=d.project_id||'';var pn=d.project_name||'';if(!pid){var pw=new bricks.PopupWindow({title:'选择项目',cwidth:32,cheight:16,auto_open:true});var form=new bricks.Form({name:'p_picker',cols:1,fields:[{name:'project_id',uitype:'code',label:'项目',placeholder:'请选择项目',cwidth:26,dataurl:'/pipeline-sdlc/api/cockpit_project_picker.dspy',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:'project_id='+encodeURIComponent(v)}).then(function(r){return r.json()}).then(function(r){if(r.success){pw.destroy();var sel2=bricks.getWidgetById('project_selector',bricks.app);if(sel2)sel2.setValue(r.project_id);var tb=bricks.getWidgetById('task_btn',bricks.app);if(tb&&tb.text_w)tb.text_w.set_text('\\u4efb\\u52a1');}});});},500);return;}var upw=new bricks.PopupWindow({title:pn+' - \\u4efb\\u52a1\\u5217\\u8868',cwidth:60,cheight:30,auto_open:true});var vs=new bricks.VScrollPanel({css:'filler',padding:'12px',gap:'8px'});upw.content_w.add_widget(vs);fetch('/pipeline-sdlc/api/cockpit_project_tasks.dspy').then(function(r){return r.json()}).then(function(data){var tasks=data.tasks||[];if(tasks.length===0){vs.add_widget(new bricks.Text({text:'\\u6682\\u65e0\\u4efb\\u52a1',cfontsize:0.9,color:'#94a3b8'}));return;}for(var i=0;i<tasks.length;i++){var t=tasks[i];var card=new bricks.VBox({bgcolor:'#fff',border:'1px solid #e2e8f0',borderRadius:'8px',padding:'10px 14px',gap:'4px',marginBottom:'4px'});var hdr=new bricks.HBox({alignItems:'center',gap:'8px'});var st=t.state||'';var sc='#64748b';if(st==='running')sc='#2563eb';else if(st==='completed')sc='#16a34a';else if(st==='failed')sc='#dc2626';hdr.add_widget(new bricks.Text({text:'\\u25cf',cfontsize:0.8,color:sc,fontWeight:'bold'}));hdr.add_widget(new bricks.Text({text:(t.title||'')+(t.role?' ['+t.role+']':''),cfontsize:0.95,color:'#1e293b',fontWeight:'bold'}));card.add_widget(hdr);if(t.description)card.add_widget(new bricks.Text({text:t.description,cfontsize:0.8,color:'#64748b'}));var meta=new bricks.HBox({gap:'12px'});meta.add_widget(new bricks.Text({text:'\\u72b6\\u6001:'+st,cfontsize:0.75,color:sc}));meta.add_widget(new bricks.Text({text:'v'+t.current_version,cfontsize:0.75,color:'#94a3b8'}));if(t.created_at)meta.add_widget(new bricks.Text({text:t.created_at.substring(0,16),cfontsize:0.75,color:'#94a3b8'}));card.add_widget(meta);vs.add_widget(card);}});})"
}
]
},
{
"widgettype": "Button",
"id": "workspace_btn",
"options": {
"label": "工作空间",
"css": "small"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "self",
"script": "fetch('/pipeline-sdlc/api/cockpit_context.dspy').then(function(r){return r.json()}).then(function(d){var pid=d.project_id||'';var pn=d.project_name||'';if(!pid){var pw=new bricks.PopupWindow({title:'提示',cwidth:30,cheight:8,auto_open:true});pw.content_w.add_widget(new bricks.Text({text:'请先选择项目',cfontsize:1,color:'#64748b',padding:'20px'}));return;}var pw=new bricks.PopupWindow({title:pn+' - 工作空间',cwidth:80,cheight:36,auto_open:true});var tv={'widgettype':'Tree','id':'ws_tree','options':{'dataurl':'/pipeline-sdlc/api/workspace_tree.dspy','css':'filler','padding':'4px','cheight':'100%'},'binds':[{'wid':'self','event':'selected','actiontype':'urlwidget','target':'ws_files','options':{'url':'/pipeline-sdlc/api/workspace_files.dspy'}}]};var fv={'widgettype':'VScrollPanel','id':'ws_files','options':{'css':'filler','padding':'8px','gap':'4px'}};var hsplit={'widgettype':'Splitter','options':{'direction':'horizontal','split':'30%'},'subwidgets':[tv,fv]};fetch('/pipeline-sdlc/api/workspace_browse.dspy').then(function(r){return r.json()}).then(function(d){function rn(n,depth){var h='<div style="padding-left:'+(depth*16)+'px;padding-top:2px;padding-bottom:2px">';if(n.children&&n.children.length){h+='<span style="cursor:pointer;color:#2563eb">&#x1f4c1; </span>'+n.name;}else{h+='<span style="color:#64748b">&#x1f4c4; </span>'+n.name;}if(n.files&&n.files.length){h+='<div style="padding-left:'+((depth+1)*16)+'px">';for(var i=0;i<n.files.length;i++){var icon=n.files[i].is_text?'&#x1f4dd;':'&#x1f4e6;';h+='<div style="color:#94a3b8;padding:2px 0;cursor:pointer" onclick="var pw=bricks.getWidgetById(\'ws_files_panel\',bricks.app);if(pw){pw.dom_element.innerHTML=\'<div style=padding:20px;color:#64748b>\'+n.files[i].name+\'</div>\';fetch(\'/pipeline-sdlc/api/workspace_file.dspy?path=\'+encodeURIComponent(n.files[i].path)+\'\').then(function(r){return r.text()}).then(function(t){pw.dom_element.innerHTML=\'<pre style=white-space:pre-wrap;padding:8px;font-size:12px>\'+t.replace(/</g,\'&lt;\')+\'</pre>\';});}">'+icon+' '+n.files[i].name+' ('+(n.files[i].size>1024?(n.files[i].size/1024).toFixed(1)+'K':n.files[i].size+'B')+')</div>';}h+='</div>';}h+='</div>';if(n.children)for(var j=0;j<n.children.length;j++)h+=rn(n.children[j],depth+1);return h;}var left=new bricks.VScrollPanel({css:'filler',padding:'8px',width:'35%'});var right=new bricks.VScrollPanel({id:'ws_files_panel',css:'filler',padding:'8px',width:'65%'});var hb=new bricks.HBox({css:'filler',gap:'0'});hb.dom_element.style.width='100%';hb.dom_element.style.height='100%';left.dom_element.style.borderRight='1px solid #e2e8f0';var html='<div style="font-size:13px;line-height:1.6;font-family:monospace">';if(d.tree)html+=rn(d.tree,0);html+='</div>';left.dom_element.innerHTML=html;hb.add_widget(left);hb.add_widget(right);pw.content_w.add_widget(hb);});});"
}
]
}
],
"binds": []
},
{
"widgettype": "AgentIO",
"id": "chat_io",
"options": {
"css": "filler",
"url": "/pipeline-sdlc/api/cockpit_chat_v2.dspy",
"model_dataurl": "/pipeline-sdlc/api/cockpit_model_options.dspy",
"model_cwidth": 14,
"placeholder": "输入你的需求..."
}
}
]
}