diff --git a/wwwroot/index.ui b/wwwroot/index.ui
index f5f64d0..9b73664 100644
--- a/wwwroot/index.ui
+++ b/wwwroot/index.ui
@@ -128,6 +128,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "card",
"width": "60%",
"borderRadius": "12px",
"padding": "20px"
@@ -187,6 +188,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "card",
"width": "40%",
"borderRadius": "12px",
"padding": "20px"
@@ -208,199 +210,206 @@
"minWidth": "120px"
},
"subwidgets": [
+ {
+ "widgettype": "Button",
+ "options": {
+ "css": "quick-link",
+ "padding": "16px",
+ "borderRadius": "8px",
+ "textAlign": "center"
+ },
+ "binds": [
+ {
+ "wid": "self",
+ "event": "click",
+ "actiontype": "urlwidget",
+ "target": "app.sage_main_content",
+ "options": {
+ "url": "{{entire_url('/llmage/llm')}}"
+ },
+ "mode": "replace"
+ }
+ ],
+ "subwidgets": [
+ {
+ "widgettype": "VBox",
+ "options": {
+ "alignItems": "center"
+ },
+ "subwidgets": [
{
- "widgettype": "Button",
+ "widgettype": "Svg",
"options": {
- "padding": "16px",
- "borderRadius": "8px",
- "textAlign": "center"
- },
- "binds": [
- {
- "wid": "self",
- "event": "click",
- "actiontype": "urlwidget",
- "target": "app.sage_main_content",
- "options": {
- "url": "{{entire_url('/llmage/llm')}}"
- },
- "mode": "replace"
- }
- ],
- "subwidgets": [
- {
- "widgettype": "VBox",
- "options": {
- "alignItems": "center"
- },
- "subwidgets": [
- {
- "widgettype": "Svg",
- "options": {
- "svg": ""
- }
- },
- {
- "widgettype": "Text",
- "options": {
- "fontWeight": "600",
- "fontSize": "13px",
- "marginTop": "8px",
- "otext": "模型管理",
- "i18n": true
- }
- }
- ]
- }
- ]
+ "svg": ""
+ }
},
{
- "widgettype": "Button",
+ "widgettype": "Text",
"options": {
- "padding": "16px",
- "borderRadius": "8px",
- "textAlign": "center"
- },
- "binds": [
- {
- "wid": "self",
- "event": "click",
- "actiontype": "urlwidget",
- "target": "app.sage_main_content",
- "options": {
- "url": "{{entire_url('/rbac/users')}}"
- },
- "mode": "replace"
- }
- ],
- "subwidgets": [
- {
- "widgettype": "VBox",
- "options": {
- "alignItems": "center"
- },
- "subwidgets": [
- {
- "widgettype": "Svg",
- "options": {
- "svg": ""
- }
- },
- {
- "widgettype": "Text",
- "options": {
- "fontWeight": "600",
- "fontSize": "13px",
- "marginTop": "8px",
- "otext": "用户管理",
- "i18n": true
- }
- }
- ]
- }
- ]
- },
- {
- "widgettype": "Button",
- "options": {
- "padding": "16px",
- "borderRadius": "8px",
- "border": "none",
- "textAlign": "center"
- },
- "binds": [
- {
- "wid": "self",
- "event": "click",
- "actiontype": "urlwidget",
- "target": "app.sage_main_content",
- "options": {
- "url": "{{entire_url('/rag/kdb')}}"
- },
- "mode": "replace"
- }
- ],
- "subwidgets": [
- {
- "widgettype": "VBox",
- "options": {
- "alignItems": "center"
- },
- "subwidgets": [
- {
- "widgettype": "Svg",
- "options": {
- "svg": ""
- }
- },
- {
- "widgettype": "Text",
- "options": {
- "fontSize": "13px",
- "marginTop": "8px",
- "otext": "知识库",
- "i18n": true
- }
- }
- ]
- }
- ]
- },
- {
- "widgettype": "Button",
- "options": {
- "padding": "16px",
- "borderRadius": "8px",
- "border": "none",
- "textAlign": "center"
- },
- "binds": [
- {
- "wid": "self",
- "event": "click",
- "actiontype": "urlwidget",
- "target": "app.sage_main_content",
- "options": {
- "url": "{{entire_url('/llmage/failed_accounting.ui')}}"
- },
- "mode": "replace"
- }
- ],
- "subwidgets": [
- {
- "widgettype": "VBox",
- "options": {
- "alignItems": "center"
- },
- "subwidgets": [
- {
- "widgettype": "Svg",
- "options": {
- "svg": ""
- }
- },
- {
- "widgettype": "Text",
- "options": {
- "fontSize": "13px",
- "marginTop": "8px",
- "otext": "异常记录",
- "i18n": true
- }
- }
- ]
- }
- ]
+ "fontWeight": "600",
+ "fontSize": "13px",
+ "marginTop": "8px",
+ "otext": "模型管理",
+ "i18n": true
+ }
}
]
}
]
+ },
+ {
+ "widgettype": "Button",
+ "options": {
+ "css": "quick-link",
+ "padding": "16px",
+ "borderRadius": "8px",
+ "textAlign": "center"
+ },
+ "binds": [
+ {
+ "wid": "self",
+ "event": "click",
+ "actiontype": "urlwidget",
+ "target": "app.sage_main_content",
+ "options": {
+ "url": "{{entire_url('/rbac/users')}}"
+ },
+ "mode": "replace"
+ }
+ ],
+ "subwidgets": [
+ {
+ "widgettype": "VBox",
+ "options": {
+ "alignItems": "center"
+ },
+ "subwidgets": [
+ {
+ "widgettype": "Svg",
+ "options": {
+ "svg": ""
+ }
+ },
+ {
+ "widgettype": "Text",
+ "options": {
+ "fontWeight": "600",
+ "fontSize": "13px",
+ "marginTop": "8px",
+ "otext": "用户管理",
+ "i18n": true
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "widgettype": "Button",
+ "options": {
+ "css": "quick-link",
+ "padding": "16px",
+ "borderRadius": "8px",
+ "border": "none",
+ "textAlign": "center"
+ },
+ "binds": [
+ {
+ "wid": "self",
+ "event": "click",
+ "actiontype": "urlwidget",
+ "target": "app.sage_main_content",
+ "options": {
+ "url": "{{entire_url('/rag/kdb')}}"
+ },
+ "mode": "replace"
+ }
+ ],
+ "subwidgets": [
+ {
+ "widgettype": "VBox",
+ "options": {
+ "alignItems": "center"
+ },
+ "subwidgets": [
+ {
+ "widgettype": "Svg",
+ "options": {
+ "svg": ""
+ }
+ },
+ {
+ "widgettype": "Text",
+ "options": {
+ "fontWeight": "600",
+ "fontSize": "13px",
+ "marginTop": "8px",
+ "otext": "知识库",
+ "i18n": true
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "widgettype": "Button",
+ "options": {
+ "css": "quick-link",
+ "padding": "16px",
+ "borderRadius": "8px",
+ "border": "none",
+ "textAlign": "center"
+ },
+ "binds": [
+ {
+ "wid": "self",
+ "event": "click",
+ "actiontype": "urlwidget",
+ "target": "app.sage_main_content",
+ "options": {
+ "url": "{{entire_url('/llmage/failed_accounting.ui')}}"
+ },
+ "mode": "replace"
+ }
+ ],
+ "subwidgets": [
+ {
+ "widgettype": "VBox",
+ "options": {
+ "alignItems": "center"
+ },
+ "subwidgets": [
+ {
+ "widgettype": "Svg",
+ "options": {
+ "svg": ""
+ }
+ },
+ {
+ "widgettype": "Text",
+ "options": {
+ "fontWeight": "600",
+ "fontSize": "13px",
+ "marginTop": "8px",
+ "otext": "异常记录",
+ "i18n": true
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
}
]
},
{
"widgettype": "VBox",
"options": {
+ "css": "card",
"width": "100%",
"borderRadius": "12px",
"padding": "20px",
@@ -429,6 +438,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "card",
"width": "100%",
"borderRadius": "12px",
"padding": "20px",
@@ -465,6 +475,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "card",
"width": "50%",
"borderRadius": "12px",
"padding": "20px"
@@ -492,6 +503,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "card",
"width": "50%",
"borderRadius": "12px",
"padding": "20px"
diff --git a/wwwroot/shell_theme.css b/wwwroot/shell_theme.css
index 6d5cdd9..bd5f453 100644
--- a/wwwroot/shell_theme.css
+++ b/wwwroot/shell_theme.css
@@ -726,6 +726,20 @@ body {
color: var(--sage-text-primary);
}
+[data-theme="light"] .tabular { background-color: #f5f5f5; color: #1E293B; }
+[data-theme="light"] .tabular-header-row { background-color: #E2E8F0; color: #0F172A; font-weight: 600; }
+[data-theme="light"] .tabular-header-row .tabular-cell { color: #0F172A; }
+[data-theme="light"] .tabular-row { color: #1E293B; }
+[data-theme="light"] .tabular-row:nth-child(odd) { background-color: #FFFFFF; }
+[data-theme="light"] .tabular-row:nth-child(even) { background-color: #F8FAFC; }
+[data-theme="light"] .tabular-cell { border-color: #E2E8F0; color: #1E293B; }
+[data-theme="light"] .card { color: #1E293B; }
+[data-theme="light"] .inputbox { color: #1E293B; background-color: #FFFFFF; }
+[data-theme="light"] .popup, [data-theme="light"] .modal { color: #1E293B; }
+[data-theme="light"] .accordion-item-info { color: #475569; }
+[data-theme="light"] .toolbar-button { color: #334155; }
+[data-theme="light"] .message { color: #1E293B; }
+
/* ===== Menu Overrides ===== */
[data-theme="dark"] .menu-item {
color: var(--sage-text-secondary);
diff --git a/wwwroot/stat_active_users.ui b/wwwroot/stat_active_users.ui
index b383f55..76c276f 100644
--- a/wwwroot/stat_active_users.ui
+++ b/wwwroot/stat_active_users.ui
@@ -1,6 +1,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "stat-card",
"padding": "20px",
"borderRadius": "12px",
"flex": "1",
@@ -30,6 +31,7 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "{{get_active_users_today(request)}}",
"fontSize": "32px",
"fontWeight": "700",
@@ -39,6 +41,7 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-label",
"fontSize": "14px",
"marginTop": "4px",
"otext": "今日活跃用户",
diff --git a/wwwroot/stat_concurrent.ui b/wwwroot/stat_concurrent.ui
index 76cfa0d..dbe99e7 100644
--- a/wwwroot/stat_concurrent.ui
+++ b/wwwroot/stat_concurrent.ui
@@ -1,10 +1,8 @@
{
"widgettype": "VBox",
"options": {
- "bgcolor": "#1E293B",
"padding": "20px",
"borderRadius": "12px",
- "border": "1px solid #334155",
"flex": "1",
"minHeight": "110px"
},
@@ -32,10 +30,10 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "{{get_concurrent_users(request)}}",
"fontSize": "32px",
"fontWeight": "700",
- "color": "#F1F5F9",
"lineHeight": "1.1"
}
},
@@ -43,7 +41,6 @@
"widgettype": "Text",
"options": {
"fontSize": "14px",
- "color": "#94A3B8",
"marginTop": "4px",
"otext": "在线用户",
"i18n": true
diff --git a/wwwroot/stat_errors.ui b/wwwroot/stat_errors.ui
index 7f785de..1dcb2ac 100644
--- a/wwwroot/stat_errors.ui
+++ b/wwwroot/stat_errors.ui
@@ -1,6 +1,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "stat-card",
"padding": "20px",
"borderRadius": "12px",
"flex": "1",
@@ -30,6 +31,7 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "{{get_accounting_errors(request)}}",
"fontSize": "32px",
"fontWeight": "700",
diff --git a/wwwroot/stat_new_users_month.ui b/wwwroot/stat_new_users_month.ui
index d64b797..57390fc 100644
--- a/wwwroot/stat_new_users_month.ui
+++ b/wwwroot/stat_new_users_month.ui
@@ -1,10 +1,8 @@
{
"widgettype": "VBox",
"options": {
- "bgcolor": "#1E293B",
"padding": "20px",
"borderRadius": "12px",
- "border": "1px solid #334155",
"flex": "1",
"minHeight": "110px"
},
@@ -32,10 +30,10 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "{{get_new_users_month(request)}}",
"fontSize": "32px",
"fontWeight": "700",
- "color": "#F1F5F9",
"lineHeight": "1.1"
}
},
@@ -43,7 +41,6 @@
"widgettype": "Text",
"options": {
"fontSize": "14px",
- "color": "#94A3B8",
"marginTop": "4px",
"otext": "本月新增用户",
"i18n": true
diff --git a/wwwroot/stat_today_amount.ui b/wwwroot/stat_today_amount.ui
index 95d42a2..8eaa019 100644
--- a/wwwroot/stat_today_amount.ui
+++ b/wwwroot/stat_today_amount.ui
@@ -1,10 +1,9 @@
{
"widgettype": "VBox",
"options": {
- "bgcolor": "#1E293B",
+ "css": "stat-card",
"padding": "20px",
"borderRadius": "12px",
- "border": "1px solid #334155",
"flex": "1",
"minHeight": "110px"
},
@@ -19,7 +18,7 @@
{
"widgettype": "Svg",
"options": {
- "svg": "",
+ "svg": "",
"width": "24px",
"height": "24px"
}
@@ -32,22 +31,22 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "¥{{get_today_amount(request)|round(2)}}",
"fontSize": "32px",
"fontWeight": "700",
- "color": "#F1F5F9",
"lineHeight": "1.1"
}
},
{
"widgettype": "Text",
"options": {
+ "css": "stat-label",
"fontSize": "14px",
- "color": "#94A3B8",
"marginTop": "4px",
- "otext": "今日消费金额",
+ "otext": "今日交易金额",
"i18n": true
}
}
]
-}
\ No newline at end of file
+}
diff --git a/wwwroot/stat_today_usage.ui b/wwwroot/stat_today_usage.ui
index 64bb7ac..2b99454 100644
--- a/wwwroot/stat_today_usage.ui
+++ b/wwwroot/stat_today_usage.ui
@@ -1,6 +1,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "stat-card",
"padding": "20px",
"borderRadius": "12px",
"flex": "1",
@@ -18,7 +19,7 @@
{
"widgettype": "Svg",
"options": {
- "svg": "",
+ "svg": "",
"width": "24px",
"height": "24px"
}
@@ -31,6 +32,7 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "{{get_today_usage(request)}}",
"fontSize": "32px",
"fontWeight": "700",
@@ -40,6 +42,7 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-label",
"fontSize": "14px",
"marginTop": "4px",
"otext": "今日调用笔数",
diff --git a/wwwroot/stat_total_orgs.ui b/wwwroot/stat_total_orgs.ui
index 410a756..f074316 100644
--- a/wwwroot/stat_total_orgs.ui
+++ b/wwwroot/stat_total_orgs.ui
@@ -1,10 +1,8 @@
{
"widgettype": "VBox",
"options": {
- "bgcolor": "#1E293B",
"padding": "20px",
"borderRadius": "12px",
- "border": "1px solid #334155",
"flex": "1",
"minHeight": "110px"
},
@@ -32,10 +30,10 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "{{get_total_orgs(request)}}",
"fontSize": "32px",
"fontWeight": "700",
- "color": "#F1F5F9",
"lineHeight": "1.1"
}
},
@@ -43,7 +41,6 @@
"widgettype": "Text",
"options": {
"fontSize": "14px",
- "color": "#94A3B8",
"marginTop": "4px",
"otext": "组织机构数",
"i18n": true
diff --git a/wwwroot/stat_total_users.ui b/wwwroot/stat_total_users.ui
index f0a9898..6b7dcc4 100644
--- a/wwwroot/stat_total_users.ui
+++ b/wwwroot/stat_total_users.ui
@@ -1,6 +1,7 @@
{
"widgettype": "VBox",
"options": {
+ "css": "stat-card",
"padding": "20px",
"borderRadius": "12px",
"flex": "1",
@@ -17,7 +18,7 @@
{
"widgettype": "Svg",
"options": {
- "svg": "",
+ "svg": "",
"width": "24px",
"height": "24px"
}
@@ -30,6 +31,7 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-value",
"text": "{{get_total_users(request)}}",
"fontSize": "32px",
"fontWeight": "700",
@@ -39,6 +41,7 @@
{
"widgettype": "Text",
"options": {
+ "css": "stat-label",
"fontSize": "14px",
"marginTop": "4px",
"otext": "用户总数",
@@ -46,4 +49,4 @@
}
}
]
-}
\ No newline at end of file
+}
diff --git a/wwwroot/table_top_providers_amount.ui b/wwwroot/table_top_providers_amount.ui
index 0c928c0..40472c2 100644
--- a/wwwroot/table_top_providers_amount.ui
+++ b/wwwroot/table_top_providers_amount.ui
@@ -48,7 +48,6 @@
"options": {
"text": "¥{{p.total_amount}}",
"width": "100px",
- "color": "#22C55E",
"fontSize": "14px",
"fontWeight": "600",
"textAlign": "right"
diff --git a/wwwroot/table_top_providers_count.ui b/wwwroot/table_top_providers_count.ui
index e94d51c..da5f7dc 100644
--- a/wwwroot/table_top_providers_count.ui
+++ b/wwwroot/table_top_providers_count.ui
@@ -49,7 +49,6 @@
"options": {
"text": "¥{{p.total_amount}}",
"width": "100px",
- "color": "#22C55E",
"fontSize": "13px",
"textAlign": "right"
}
diff --git a/wwwroot/table_top_users.ui b/wwwroot/table_top_users.ui
index 589dbe3..ec86c5d 100644
--- a/wwwroot/table_top_users.ui
+++ b/wwwroot/table_top_users.ui
@@ -1,16 +1,74 @@
+{% set users = get_top_users_by_amount(request) %}
{
"widgettype": "VBox",
"options": {
"width": "100%"
},
"subwidgets": [
+{% for u in users %}
{
- "widgettype": "RefreshWidget",
- "id": "table_top_users_amount",
+ "widgettype": "HBox",
"options": {
- "period_seconds": 30,
- "url": "{{entire_url('table_top_users_amount.ui')}}"
+ "width": "100%",
+ "padding": "12px 0",
+{% if not loop.first %}
+ "borderTop": "1px solid var(--sage-border-weak)",
+{% endif %}
+ "alignItems": "center"
+ },
+ "subwidgets": [
+ {
+ "widgettype": "Text",
+ "options": {
+ "text": "{{loop.index}}",
+ "width": "30px",
+ "fontSize": "14px",
+ "textAlign": "center"
+ }
+ },
+ {
+ "widgettype": "Text",
+ "options": {
+ "text": "{{u.user_name}}",
+ "flex": "1",
+ "fontSize": "14px",
+ "fontWeight": "500"
+ }
+ },
+ {
+ "widgettype": "Text",
+ "options": {
+ "text": "{{u.cnt}} 笔",
+ "width": "80px",
+ "fontSize": "13px",
+ "textAlign": "right"
+ }
+ },
+ {
+ "widgettype": "Text",
+ "options": {
+ "text": "¥{{u.total_amount}}",
+ "width": "100px",
+ "fontSize": "14px",
+ "fontWeight": "600",
+ "textAlign": "right"
+ }
+ }
+ ]
+ }{% if not loop.last %},{% endif %}
+{% endfor %}
+{% if not users %}
+ {
+ "widgettype": "Text",
+ "options": {
+ "otext": "暂无数据",
+
+ "i18n": true,
+ "fontSize": "14px",
+ "textAlign": "center",
+ "padding": "20px 0"
}
}
+{% endif %}
]
}
diff --git a/wwwroot/table_top_users_amount.ui b/wwwroot/table_top_users_amount.ui
index 5dcedd6..00b73f1 100644
--- a/wwwroot/table_top_users_amount.ui
+++ b/wwwroot/table_top_users_amount.ui
@@ -12,7 +12,7 @@
"width": "100%",
"padding": "12px 0",
{% if not loop.first %}
- "borderTop": "1px solid #334155",
+ "borderTop": "1px solid var(--sage-border-weak)",
{% endif %}
"alignItems": "center"
},
@@ -22,7 +22,6 @@
"options": {
"text": "{{loop.index}}",
"width": "30px",
- "color": "#64748B",
"fontSize": "14px",
"textAlign": "center"
}
@@ -32,7 +31,6 @@
"options": {
"text": "{{u.user_name}}",
"flex": "1",
- "color": "#F1F5F9",
"fontSize": "14px",
"fontWeight": "500"
}
@@ -42,7 +40,6 @@
"options": {
"text": "{{u.cnt}} 笔",
"width": "80px",
- "color": "#94A3B8",
"fontSize": "13px",
"textAlign": "right"
}
@@ -52,7 +49,6 @@
"options": {
"text": "¥{{u.total_amount}}",
"width": "100px",
- "color": "#22C55E",
"fontSize": "14px",
"fontWeight": "600",
"textAlign": "right"
diff --git a/wwwroot/table_top_users_count.ui b/wwwroot/table_top_users_count.ui
index 8aec086..7ecbb5c 100644
--- a/wwwroot/table_top_users_count.ui
+++ b/wwwroot/table_top_users_count.ui
@@ -49,7 +49,6 @@
"options": {
"text": "¥{{u.total_amount}}",
"width": "100px",
- "color": "#22C55E",
"fontSize": "13px",
"textAlign": "right"
}