- rename_kb_form.dspy: {{entire_url(...)}} Jinja syntax invalid in .dspy, use Python entire_url()
- kb_list.dspy: card VBox click restored (navigates to detail.ui)
- rename button: add event.stopPropagation() script before urlwidget
- delete button: add event.stopPropagation(), use json.dumps for namestr safety
76 lines
4.8 KiB
Plaintext
76 lines
4.8 KiB
Plaintext
env = request._run_ns
|
|
cards = []
|
|
async with get_sor_context(env, 'rag') as sor:
|
|
recs = await sor.R("knowledge_bases", {})
|
|
for r in recs:
|
|
doc_count = r.doc_count or 0
|
|
total_size = r.total_size or 0
|
|
if total_size >= 1073741824:
|
|
size_str = "%.1fGB" % (total_size / 1073741824)
|
|
elif total_size >= 1048576:
|
|
size_str = "%.0fMB" % (total_size / 1048576)
|
|
elif total_size >= 1024:
|
|
size_str = "%.0fKB" % (total_size / 1024)
|
|
else:
|
|
size_str = str(total_size) + "B"
|
|
engine = r.embedding_engine or "CLIP"
|
|
idstr = str(r.id)
|
|
namestr = r.name or ''
|
|
safe_name = json.dumps(namestr, ensure_ascii=False)
|
|
cards.append({
|
|
"widgettype": "VBox",
|
|
"options": {"cwidth": 16, "cheight": 12, "bgcolor": "#f0f7ff", "padding": "12px",
|
|
"css": "card clickable", "border": "1px solid #d0e4f7"},
|
|
"subwidgets": [
|
|
{"widgettype": "Text", "options": {"text": "\U0001f4da " + namestr,
|
|
"cfontsize": 16, "fontWeight": "bold"}},
|
|
{"widgettype": "Text", "options": {"text": str(engine) + " \u00b7 1024\u7ef4",
|
|
"cfontsize": 12, "color": "#888", "padding": "2px 0 6px 0"}},
|
|
{"widgettype": "HBox", "options": {"spacing": "12px", "padding": "0 0 8px 0"}, "subwidgets": [
|
|
{"widgettype": "Text", "options": {"text": "\U0001f4c4 " + str(doc_count) + "\u6587\u6863",
|
|
"cfontsize": 12, "color": "#666"}},
|
|
{"widgettype": "Text", "options": {"text": "\U0001f4be " + size_str,
|
|
"cfontsize": 12, "color": "#666"}}
|
|
]},
|
|
{"widgettype": "HBox", "options": {"justifyContent": "flex-end", "spacing": "6px",
|
|
"padding": "4px 0 0 0", "borderTop": "1px solid #e8f0fe"}, "subwidgets": [
|
|
{"widgettype": "Text", "options": {"text": "\u270f\ufe0f \u91cd\u547d\u540d",
|
|
"cfontsize": 12, "color": "#4a90d9", "css": "clickable",
|
|
"padding": "2px 8px", "borderRadius": "4px", "bgcolor": "#e3f0fb"},
|
|
"binds": [
|
|
{"wid": "self", "event": "click", "actiontype": "script",
|
|
"script": "event.stopPropagation()"},
|
|
{"wid": "self", "event": "click", "actiontype": "urlwidget",
|
|
"target": "PopupWindow",
|
|
"popup_options": {"title": "\u91cd\u547d\u540d\u300c" + namestr + "\u300d",
|
|
"width": "30%", "height": "auto",
|
|
"movable": True, "resizable": True, "modal": True},
|
|
"options": {"url": "/rag/knowledge_bases_list/rename_kb_form.dspy?kb_id=" + idstr}}
|
|
]},
|
|
{"widgettype": "Text", "options": {"text": "\U0001f5d1\ufe0f \u5220\u9664",
|
|
"cfontsize": 12, "color": "#e74c3c", "css": "clickable",
|
|
"padding": "2px 8px", "borderRadius": "4px", "bgcolor": "#fee"},
|
|
"binds": [{"wid": "self", "event": "click", "actiontype": "script",
|
|
"script": "event.stopPropagation();"
|
|
"if(!confirm('\u786e\u8ba4\u5220\u9664\u77e5\u8bc6\u5e93\u300c" + namestr + "\u300d\uff1f\n\n\u8be5\u64cd\u4f5c\u4f1a\u5220\u9664\u77e5\u8bc6\u5e93\u5185\u6240\u6709\u6587\u4ef6\u3001\u6807\u7b7e\u548c\u6570\u636e\uff0c\u4e0d\u53ef\u6062\u590d\uff01'))return;"
|
|
"fetch('/rag/knowledge_bases_list/delete_kb.dspy?kb_id=" + idstr + "').then(function(r){return r.json()}).then(function(d){"
|
|
"if(d.status==='error'){alert('\u5220\u9664\u5931\u8d25\uff1a'+d.error);return;}"
|
|
"window.location.href='/rag/knowledge_bases_list/index.ui';"
|
|
"}).catch(function(){alert('\u7f51\u7edc\u9519\u8bef')});"}]}
|
|
]}
|
|
],
|
|
"binds": [
|
|
{"wid": "self", "event": "click", "actiontype": "urlwidget",
|
|
"target": "app.rag_main_content", "mode": "replace",
|
|
"options": {"url": "/rag/knowledge_bases_list/detail.ui",
|
|
"params": {"kb_id": idstr, "kb_name": namestr}}}
|
|
]
|
|
})
|
|
|
|
if not cards:
|
|
cards.append({"widgettype": "Text", "options": {
|
|
"text": "\u6682\u65e0\u77e5\u8bc6\u5e93", "cfontsize": 14, "color": "#aaa", "halign": "center"}})
|
|
|
|
return json.dumps({"widgettype": "HBox", "options": {"width": "100%", "spacing": "12px", "wrap": True},
|
|
"subwidgets": cards}, ensure_ascii=False, default=str)
|