227 lines
11 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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": "Button",
"options": {
"name": "refresh_btn",
"label": "刷新",
"css": "small"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "self",
"script": "var c=bricks.getWidgetById('cockpit_chat');if(c)c.render({});var s=bricks.getWidgetById('cockpit_stats_row');if(s)s.render({});"
}
]
}
]
},
{
"widgettype": "HBox",
"options": {
"width": "100%",
"padding": "8px 24px 8px 24px",
"cheight": 4,
"gap": "16px"
},
"subwidgets": [
{
"widgettype": "urlwidget",
"id": "cockpit_stats_row",
"options": {
"url": "{{entire_url('/pipeline-sdlc/api/cockpit_stats.dspy')}}",
"method": "GET"
}
}
]
},
{
"widgettype": "VBox",
"options": {
"css": "filler",
"width": "100%",
"height": "100%",
"padding": "0 24px 0 24px",
"gap": "0"
},
"subwidgets": [
{
"widgettype": "VScrollPanel",
"id": "cockpit_chat",
"options": {
"css": "filler",
"width": "100%",
"height": "100%",
"bgcolor": "#f8fafc",
"border": "1px solid #e2e8f0",
"borderBottom": "none",
"borderRadius": "8px 8px 0 0",
"padding": "16px"
},
"subwidgets": [
{
"widgettype": "VBox",
"options": { "alignItems": "center", "padding": "40px 0", "gap": "12px" },
"subwidgets": [
{
"widgettype": "Text",
"options": {
"text": "🤖",
"cfontsize": 2.5,
"color": "#94a3b8"
}
},
{
"widgettype": "Text",
"options": {
"text": "选择一个迭代后,在下方输入你的需求。",
"cfontsize": 1,
"color": "#64748b"
}
},
{
"widgettype": "Text",
"options": {
"text": "Agent 将自动分析需求、生成设计方案、驱动开发产线。",
"cfontsize": 0.85,
"color": "#94a3b8"
}
}
]
}
]
},
{
"widgettype": "VBox",
"options": {
"width": "100%",
"bgcolor": "#fff",
"border": "1px solid #e2e8f0",
"borderTop": "none",
"borderRadius": "0 0 8px 8px",
"padding": "12px 16px 12px 16px",
"gap": "8px"
},
"subwidgets": [
{
"widgettype": "HBox",
"id": "file_list_area",
"options": {
"width": "100%",
"wrap": "wrap",
"gap": "6px",
"minHeight": "0"
},
"subwidgets": []
},
{
"widgettype": "Form",
"id": "chat_form",
"options": {
"name": "chat_form",
"submit_url": "{{entire_url('/pipeline-sdlc/api/cockpit_chat.dspy')}}",
"fields": [
{ "name": "message_text", "uitype": "textarea", "placeholder": "输入需求或回复 Agent...", "rows": 3 },
{ "name": "iteration_id", "uitype": "hide", "value": "" },
{ "name": "task_id", "uitype": "hide", "value": "" },
{ "name": "action", "uitype": "hide", "value": "send_message" },
{ "name": "file_paths", "uitype": "hide", "value": "[]" }
]
},
"binds": [
{
"wid": "self",
"event": "beforesubmit",
"actiontype": "script",
"target": "self",
"script": "var iter=bricks.getWidgetById('current_iteration_id');if(!iter||!iter.options.value){bricks.show_error({title:'提示',message:'请先选择迭代'});return false;}var msg=this.getValue('message_text');if(!msg||!msg.trim()){bricks.show_error({title:'提示',message:'请输入内容'});return false;}var files=[];var fa=document.getElementById('cockpit_file_list');if(fa){var kids=fa.children;for(var i=0;i<kids.length;i++){var name=kids[i].getAttribute('data-filename');if(name)files.push(name);}}this.setValue('file_paths',JSON.stringify(files));return true;"
},
{
"wid": "self",
"event": "submited",
"actiontype": "script",
"target": "self",
"script": "this.setValue('message_text','');var fa=document.getElementById('cockpit_file_list');if(fa)fa.innerHTML='';var fb=bricks.getWidgetById('file_list_area');if(fb)fb.render({});var c=bricks.getWidgetById('cockpit_chat');if(c)c.render({});"
}
]
},
{
"widgettype": "HBox",
"options": {
"width": "100%",
"alignItems": "center",
"gap": "8px",
"padding": "4px 0 0 0"
},
"subwidgets": [
{
"widgettype": "Button",
"options": {
"name": "attach_btn",
"label": ""
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "self",
"script": "var inp=document.createElement('input');inp.type='file';inp.multiple=true;inp.onchange=function(){var fa=document.getElementById('cockpit_file_list');if(!fa){fa=document.createElement('div');fa.id='cockpit_file_list';fa.style.cssText='display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px';var area=document.querySelector('[id$=file_list_area]');if(area)area.appendChild(fa);}for(var i=0;i<this.files.length;i++){var n=this.files[i].name;if(fa.querySelector('[data-filename=\"'+n+'\"]'))continue;var chip=document.createElement('span');chip.setAttribute('data-filename',n);chip.style.cssText='display:inline-flex;align-items:center;gap:4px;background:#e8f0fe;color:#1e40af;padding:2px 8px;border-radius:12px;font-size:12px;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';chip.innerHTML='<span style=\"overflow:hidden;text-overflow:ellipsis\">'+n+'</span><span style=\"cursor:pointer;font-weight:bold;color:#ef4444;margin-left:2px\" onclick=\"this.parentElement.remove()\">×</span>';fa.appendChild(chip);}};inp.click();"
}
]
},
{
"widgettype": "Filler"
},
{
"widgettype": "Button",
"options": {
"name": "send_btn",
"label": "发送",
"type": "submit",
"css": "primary"
}
}
]
}
]
}
]
}
]
}