157 lines
8.4 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", "label": "刷新", "css": "small" },
"binds": [{
"wid": "self", "event": "click", "actiontype": "script", "target": "self",
"script": "var c=bricks.getWidgetById('chat_scroll');if(c)c.render({});var s=bricks.getWidgetById('stats_row');if(s)s.render({});"
}]
}
]
},
{
"widgettype": "HBox",
"options": {
"width": "100%",
"padding": "8px 24px 8px 24px",
"cheight": 4,
"gap": "16px"
},
"subwidgets": [
{
"widgettype": "urlwidget",
"id": "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": "chat_scroll",
"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": 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": "10px 14px 10px 14px",
"gap": "6px"
},
"subwidgets": [
{
"widgettype": "HBox",
"id": "file_list",
"options": {
"width": "100%",
"wrap": "wrap",
"gap": "4px",
"minHeight": "0"
},
"subwidgets": []
},
{
"widgettype": "Form",
"id": "chat_form",
"options": {
"name": "chat_form",
"padding": "0",
"fields": [
{ "name": "message_text", "uitype": "textarea", "placeholder": "输入需求或回复 Agent...", "rows": 2 }
]
}
},
{
"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 list=document.getElementById('cockpit_file_bag');if(!list){list=document.createElement('div');list.id='cockpit_file_bag';list.style.cssText='display:flex;flex-wrap:wrap;gap:4px';var fl=bricks.getWidgetById('file_list');if(fl)fl.dom_element.appendChild(list);}for(var i=0;i<this.files.length;i++){var n=this.files[i].name;if(list.querySelector('[data-fn=\"'+n.replace(/\"/g,'')+'\"]'))continue;var chip=document.createElement('span');chip.setAttribute('data-fn',n);chip.style.cssText='display:inline-flex;align-items:center;gap:3px;background:#e8f0fe;color:#1e40af;padding:2px 8px;border-radius:12px;font-size:12px;max-width:200px';chip.innerHTML='<span style=\"overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">'+n+'</span><span style=\"cursor:pointer;font-weight:bold;color:#ef4444;margin-left:2px\" onclick=\"this.parentElement.remove()\">×</span>';list.appendChild(chip);}};inp.click();"
}
]
},
{ "widgettype": "Filler" },
{
"widgettype": "Button",
"options": { "name": "send_btn", "label": "发送", "css": "primary" },
"binds": [
{
"wid": "self", "event": "click", "actiontype": "script", "target": "self",
"script": "var form=bricks.getWidgetById('chat_form');var msg=form?form.getValue('message_text'):'';if(!msg||!msg.trim()){bricks.show_error({title:'提示',message:'请输入内容'});return;}var iter=bricks.getWidgetById('current_iteration_id');var iid=iter?iter.options.value:'';if(!iid){bricks.show_error({title:'提示',message:'请先选择迭代'});return;}var files=[];var bag=document.getElementById('cockpit_file_bag');if(bag){var chips=bag.querySelectorAll('[data-fn]');for(var j=0;j<chips.length;j++)files.push(chips[j].getAttribute('data-fn'));}var body='message_text='+encodeURIComponent(msg)+'&iteration_id='+encodeURIComponent(iid)+'&action=send_message&file_paths='+encodeURIComponent(JSON.stringify(files));fetch('/pipeline-sdlc/api/cockpit_chat.dspy',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:body}).then(function(r){return r.json()}).then(function(r){if(r.success||r.error){form.setValue('message_text','');if(bag)bag.innerHTML='';var c=bricks.getWidgetById('chat_scroll');if(c)c.render({});}});"
}
]
}
]
}
]
}
]
}
]
}