From cb8adc40cea55686188ede83fcc799c9afaee2f0 Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 15 Apr 2026 17:00:15 +0800 Subject: [PATCH] feat(dashboard): unify global UI theme across all admin templates --- admin/dashboard/templates/api_docs.html | 16 +- admin/dashboard/templates/base.html | 605 ++++++++++++++---- .../templates/contacts_management.html | 98 +-- admin/dashboard/templates/errors.html | 2 +- admin/dashboard/templates/file_browser.html | 18 +- admin/dashboard/templates/friend_circle.html | 44 +- admin/dashboard/templates/groups.html | 2 +- admin/dashboard/templates/index.html | 159 +++-- admin/dashboard/templates/login.html | 41 +- admin/dashboard/templates/message_list.html | 42 +- .../templates/message_push_management.html | 2 +- admin/dashboard/templates/plugins.html | 4 +- admin/dashboard/templates/plugins_manage.html | 36 +- .../dashboard/templates/robot_management.html | 76 +-- admin/dashboard/templates/system_llm.html | 18 +- admin/dashboard/templates/system_status.html | 16 +- admin/dashboard/templates/users.html | 2 +- .../templates/virtual_group_management.html | 4 +- admin/dashboard/templates/wx_logs.html | 2 +- 19 files changed, 808 insertions(+), 379 deletions(-) diff --git a/admin/dashboard/templates/api_docs.html b/admin/dashboard/templates/api_docs.html index a593b18..8324b5b 100644 --- a/admin/dashboard/templates/api_docs.html +++ b/admin/dashboard/templates/api_docs.html @@ -63,23 +63,23 @@ .page-shell { display: flex; flex-direction: column; gap: 16px; } .page-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; padding: 24px 26px; border-radius: 24px; - background: linear-gradient(135deg, rgba(79,70,229,0.10), rgba(59,130,246,0.08), rgba(255,255,255,0.9)); - border: 1px solid rgba(148, 163, 184, 0.16); box-shadow: 0 18px 40px rgba(15, 23, 42, 0.06); + background: linear-gradient(135deg, rgba(15,118,110,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.9)); + border: 1px solid rgba(101, 121, 113, 0.16); box-shadow: 0 18px 40px rgba(21, 33, 27, 0.06); } .page-hero-actions { display: flex; align-items: center; gap: 12px; } - .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #6366f1; font-weight: 700; margin-bottom: 8px; } - .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #0f172a; } - .page-hero-copy p { color: #64748b; font-size: 14px; } + .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #0b5e57; font-weight: 700; margin-bottom: 8px; } + .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #15211b; } + .page-hero-copy p { color: #4f6258; font-size: 14px; } .workspace-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .workspace-header h3 { font-size: 18px; margin-bottom: 4px; } - .workspace-header p { font-size: 13px; color: #64748b; } + .workspace-header p { font-size: 13px; color: #4f6258; } .iframe-url { max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; - color: #94a3b8; padding: 8px 12px; border-radius: 999px; background: rgba(248,250,252,0.9); border: 1px solid rgba(148,163,184,0.12); + color: #74897f; padding: 8px 12px; border-radius: 999px; background: rgba(247,251,248,0.9); border: 1px solid rgba(101,121,113,0.12); } .iframe-shell-card { height: calc(100vh - 230px); } .iframe-shell-card .el-card__body { height: calc(100% - 73px); } - .iframe-shell { height: 100%; border-radius: 18px; overflow: hidden; border: 1px solid rgba(148,163,184,0.12); background: rgba(248,250,252,0.82); } + .iframe-shell { height: 100%; border-radius: 18px; overflow: hidden; border: 1px solid rgba(101,121,113,0.12); background: rgba(247,251,248,0.82); } .iframe-shell iframe { width: 100%; height: 100%; border: none; display: block; background: #fff; } {% endblock %} diff --git a/admin/dashboard/templates/base.html b/admin/dashboard/templates/base.html index a4fddde..e168054 100644 --- a/admin/dashboard/templates/base.html +++ b/admin/dashboard/templates/base.html @@ -8,31 +8,33 @@ diff --git a/admin/dashboard/templates/contacts_management.html b/admin/dashboard/templates/contacts_management.html index 5e3234c..4f5afa8 100644 --- a/admin/dashboard/templates/contacts_management.html +++ b/admin/dashboard/templates/contacts_management.html @@ -1098,7 +1098,7 @@ responsive: true, maintainAspectRatio: false, scales: { - y: { beginAtZero: true, grid: { color: 'rgba(148,163,184,0.12)' } }, + y: { beginAtZero: true, grid: { color: 'rgba(101,121,113,0.12)' } }, x: { grid: { display: false } } }, plugins: { legend: { display: false } } @@ -1151,7 +1151,7 @@ responsive: true, maintainAspectRatio: false, scales: { - y: { beginAtZero: true, grid: { color: 'rgba(148,163,184,0.12)' } }, + y: { beginAtZero: true, grid: { color: 'rgba(101,121,113,0.12)' } }, x: { grid: { display: false } } }, plugins: { legend: { display: false } } @@ -1429,44 +1429,44 @@ .page-shell { display: flex; flex-direction: column; gap: 16px; } .page-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; padding: 24px 26px; border-radius: 24px; - background: linear-gradient(135deg, rgba(79,70,229,0.10), rgba(59,130,246,0.08), rgba(255,255,255,0.9)); - border: 1px solid rgba(148, 163, 184, 0.16); box-shadow: 0 18px 40px rgba(15, 23, 42, 0.06); + background: linear-gradient(135deg, rgba(15,118,110,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.9)); + border: 1px solid rgba(101, 121, 113, 0.16); box-shadow: 0 18px 40px rgba(21, 33, 27, 0.06); } .page-hero-actions { display: flex; align-items: center; gap: 12px; } .hero-search { width: 260px; } - .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #6366f1; font-weight: 700; margin-bottom: 8px; } - .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #0f172a; } - .page-hero-copy p { color: #64748b; font-size: 14px; } + .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #0b5e57; font-weight: 700; margin-bottom: 8px; } + .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #15211b; } + .page-hero-copy p { color: #4f6258; font-size: 14px; } .overview-grid .el-col { margin-bottom: 16px; } .overview-card { min-height: 112px; } - .overview-card--primary { background: linear-gradient(180deg, rgba(79,70,229,0.10), rgba(255,255,255,0.94)) !important; } - .overview-card--soft { background: linear-gradient(180deg, rgba(59,130,246,0.08), rgba(255,255,255,0.94)) !important; } - .overview-label { font-size: 13px; color: #64748b; margin-bottom: 14px; } - .overview-value { font-size: 30px; font-weight: 700; color: #0f172a; margin-bottom: 10px; } - .overview-note { font-size: 12px; color: #94a3b8; } + .overview-card--primary { background: linear-gradient(180deg, rgba(15,118,110,0.10), rgba(255,255,255,0.94)) !important; } + .overview-card--soft { background: linear-gradient(180deg, rgba(14,165,233,0.08), rgba(255,255,255,0.94)) !important; } + .overview-label { font-size: 13px; color: #4f6258; margin-bottom: 14px; } + .overview-value { font-size: 30px; font-weight: 700; color: #15211b; margin-bottom: 10px; } + .overview-note { font-size: 12px; color: #74897f; } .workspace-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .workspace-header h3 { font-size: 18px; margin-bottom: 4px; } - .workspace-header p { font-size: 13px; color: #64748b; } + .workspace-header p { font-size: 13px; color: #4f6258; } .entity-cell { display: flex; align-items: center; gap: 12px; } .entity-avatar { width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; - background: rgba(79,70,229,0.10); color: #4f46e5; font-size: 14px; flex-shrink: 0; + background: rgba(15,118,110,0.10); color: #0f766e; font-size: 14px; flex-shrink: 0; } .entity-avatar--group { background: rgba(16,185,129,0.12); color: #10b981; } - .entity-title { font-size: 14px; font-weight: 600; color: #0f172a; } - .entity-subtitle { margin-top: 4px; font-size: 12px; color: #94a3b8; } + .entity-title { font-size: 14px; font-weight: 600; color: #15211b; } + .entity-subtitle { margin-top: 4px; font-size: 12px; color: #74897f; } .action-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .pagination-container { margin-top: 20px; text-align: right; } .group-insight-section { margin-top: 20px; } .group-permission-section { margin-top: 20px; } .group-members-section { margin-top: 20px; } .section-title { - margin: 20px 0 15px 0; border-bottom: 1px solid rgba(148,163,184,0.12); padding-bottom: 10px; + margin: 20px 0 15px 0; border-bottom: 1px solid rgba(101,121,113,0.12); padding-bottom: 10px; display: flex; justify-content: space-between; align-items: center; } .section-actions { display: flex; align-items: center; gap: 10px; } .inline-action-button { margin-left: 10px; } - .section-title h3 { margin: 0; font-size: 18px; color: #0f172a; } + .section-title h3 { margin: 0; font-size: 18px; color: #15211b; } .group-search { width: 220px; } .detail-avatar-wrap { text-align: center; margin-bottom: 20px; } .detail-avatar { width: 100px; height: 100px; } @@ -1474,11 +1474,11 @@ display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; padding: 18px 20px; margin-bottom: 16px; border-radius: 22px; background: linear-gradient(135deg, rgba(249,115,22,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.96)); - border: 1px solid rgba(148,163,184,0.14); + border: 1px solid rgba(101,121,113,0.14); } .detail-health-label { font-size: 13px; color: #9a3412; margin-bottom: 8px; } .detail-health-value { font-size: 38px; line-height: 1; font-weight: 700; color: #111827; margin-bottom: 10px; } - .detail-health-note { font-size: 13px; color: #64748b; } + .detail-health-note { font-size: 13px; color: #4f6258; } .detail-tags { display: flex; gap: 10px; flex-wrap: wrap; justify-content: flex-end; } .detail-overview-grid { margin-bottom: 16px; } .overview-value--detail { font-size: 24px; } @@ -1489,11 +1489,11 @@ .detail-panels .el-col { margin-bottom: 16px; } .detail-card { border-radius: 18px; } .detail-card-header { - display: flex; align-items: center; justify-content: space-between; font-weight: 600; color: #0f172a; + display: flex; align-items: center; justify-content: space-between; font-weight: 600; color: #15211b; } - .detail-card-sub { font-size: 12px; color: #94a3b8; font-weight: 500; } + .detail-card-sub { font-size: 12px; color: #74897f; font-weight: 500; } .feature-chip-list { display: flex; gap: 8px; flex-wrap: wrap; min-height: 60px; align-items: flex-start; } - .empty-inline, .detail-inline-note { font-size: 12px; color: #64748b; } + .empty-inline, .detail-inline-note { font-size: 12px; color: #4f6258; } .detail-inline-note { margin-top: 12px; line-height: 1.6; } .suggestion-list { display: flex; flex-direction: column; gap: 12px; } .suggestion-item { border-radius: 14px; } @@ -1501,33 +1501,33 @@ .peak-hour-item { min-width: 132px; padding: 12px 14px; border-radius: 14px; background: linear-gradient(180deg, rgba(14,165,233,0.08), rgba(255,255,255,0.96)); - border: 1px solid rgba(148,163,184,0.12); + border: 1px solid rgba(101,121,113,0.12); } - .peak-hour-rank { font-size: 13px; color: #0f172a; font-weight: 600; margin-bottom: 6px; } - .peak-hour-count { font-size: 12px; color: #64748b; } + .peak-hour-rank { font-size: 13px; color: #15211b; font-weight: 600; margin-bottom: 6px; } + .peak-hour-count { font-size: 12px; color: #4f6258; } .chart-shell { padding: 16px; border-radius: 18px; - background: linear-gradient(180deg, rgba(248,250,252,0.78), rgba(255,255,255,0.96)); - border: 1px solid rgba(148,163,184,0.12); + background: linear-gradient(180deg, rgba(247,251,248,0.78), rgba(255,255,255,0.96)); + border: 1px solid rgba(101,121,113,0.12); } .chart-shell--compact { min-height: 260px; } .chart-shell--mini { min-height: 220px; } .member-context-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 16px 0; } - .member-context-title { display: flex; flex-direction: column; gap: 4px; color: #475569; } + .member-context-title { display: flex; flex-direction: column; gap: 4px; color: #3f5148; } .context-tag { margin-right: 8px; margin-bottom: 8px; } .chat-container { display: flex; flex-direction: column; gap: 14px; min-height: 620px; } .chat-header-card { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 20px; border-radius: 18px; background: linear-gradient(135deg, rgba(14,165,233,0.10), rgba(16,185,129,0.08), rgba(255,255,255,0.96)); - border: 1px solid rgba(148,163,184,0.14); + border: 1px solid rgba(101,121,113,0.14); } .chat-header-main { min-width: 0; } - .chat-header-title { font-size: 20px; font-weight: 700; color: #0f172a; } + .chat-header-title { font-size: 20px; font-weight: 700; color: #15211b; } .chat-header-subtitle { - margin-top: 6px; font-size: 13px; color: #64748b; + margin-top: 6px; font-size: 13px; color: #4f6258; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .chat-header-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; } @@ -1536,49 +1536,49 @@ background: rgba(20, 184, 166, 0.10); border: 1px solid rgba(20, 184, 166, 0.18); } .message-list { - flex: 1; overflow-y: auto; padding: 20px; background: rgba(248,250,252,0.82); border: 1px solid rgba(148,163,184,0.12); + flex: 1; overflow-y: auto; padding: 20px; background: rgba(247,251,248,0.82); border: 1px solid rgba(101,121,113,0.12); border-radius: 18px; } .chat-empty-state { min-height: 280px; display: flex; flex-direction: column; align-items: center; justify-content: center; - color: #94a3b8; text-align: center; gap: 10px; + color: #74897f; text-align: center; gap: 10px; } .chat-empty-state i { font-size: 34px; color: #38bdf8; } - .chat-empty-state p { font-size: 16px; color: #334155; margin: 0; } + .chat-empty-state p { font-size: 16px; color: #27443a; margin: 0; } .chat-empty-state span { max-width: 380px; line-height: 1.6; } .message-item { margin-bottom: 18px; display: flex; flex-direction: column; gap: 6px; } .message-self { align-items: flex-end; } .message-system { align-items: center; } - .message-meta { display: flex; align-items: center; gap: 8px; color: #94a3b8; font-size: 12px; } - .message-sender { color: #475569; font-weight: 600; } + .message-meta { display: flex; align-items: center; gap: 8px; color: #74897f; font-size: 12px; } + .message-sender { color: #3f5148; font-weight: 600; } .message-content { - max-width: 75%; padding: 12px 14px; border-radius: 14px; background: rgba(255,255,255,0.92); color: #0f172a; - border: 1px solid rgba(148,163,184,0.12); box-shadow: 0 8px 20px rgba(15, 23, 42, 0.05); + max-width: 75%; padding: 12px 14px; border-radius: 14px; background: rgba(255,255,255,0.92); color: #15211b; + border: 1px solid rgba(101,121,113,0.12); box-shadow: 0 8px 20px rgba(21, 33, 27, 0.05); } - .message-self .message-content { background: linear-gradient(135deg, #4f46e5, #6366f1); color: #ffffff; } + .message-self .message-content { background: linear-gradient(135deg, #0f766e, #0b5e57); color: #ffffff; } .message-system .message-content { - max-width: 90%; background: rgba(241,245,249,0.92); color: #475569; border-style: dashed; + max-width: 90%; background: rgba(241,245,249,0.92); color: #3f5148; border-style: dashed; text-align: center; box-shadow: none; } .message-system-bubble { display: flex; flex-direction: column; align-items: center; gap: 8px; } .message-system-tags { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: center; } .message-system-tag { display: inline-flex; align-items: center; justify-content: center; min-height: 24px; padding: 0 10px; - border-radius: 999px; font-size: 12px; font-weight: 700; color: #475569; - background: rgba(255,255,255,0.76); border: 1px solid rgba(148,163,184,0.18); + border-radius: 999px; font-size: 12px; font-weight: 700; color: #3f5148; + background: rgba(255,255,255,0.76); border: 1px solid rgba(101,121,113,0.18); } .message-system-tag.is-revoke { color: #9f1239; background: rgba(255,241,242,0.92); border-color: rgba(244,114,182,0.2); } .message-text, .message-system-text { white-space: pre-wrap; word-break: break-word; line-height: 1.7; } .message-media { display: flex; flex-direction: column; gap: 10px; } .message-image, .message-video { max-width: 260px; max-height: 240px; border-radius: 14px; - background: rgba(15,23,42,0.06); object-fit: cover; + background: rgba(21,33,27,0.06); object-fit: cover; } .message-audio { width: 260px; max-width: 100%; } .message-caption { font-size: 12px; line-height: 1.6; opacity: 0.88; } .message-file-chip { display: inline-flex; align-items: center; width: fit-content; padding: 8px 12px; - border-radius: 999px; background: rgba(148,163,184,0.12); font-size: 12px; + border-radius: 999px; background: rgba(101,121,113,0.12); font-size: 12px; } .message-link-card { display: flex; flex-direction: column; gap: 8px; } .message-link-title { font-size: 14px; font-weight: 700; color: inherit; text-decoration: none; } @@ -1594,13 +1594,13 @@ display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 12px; } .emoji-card { - border: 1px solid rgba(148,163,184,0.16); border-radius: 12px; padding: 8px; + border: 1px solid rgba(101,121,113,0.16); border-radius: 12px; padding: 8px; display: flex; flex-direction: column; gap: 8px; align-items: center; background: #fff; } - .emoji-thumb { width: 72px; height: 72px; object-fit: contain; border-radius: 8px; background: rgba(148,163,184,0.08); } - .emoji-md5 { font-size: 11px; color: #64748b; word-break: break-all; text-align: center; min-height: 30px; } + .emoji-thumb { width: 72px; height: 72px; object-fit: contain; border-radius: 8px; background: rgba(101,121,113,0.08); } + .emoji-md5 { font-size: 11px; color: #4f6258; word-break: break-all; text-align: center; min-height: 30px; } .emoji-actions { width: 100%; display: flex; justify-content: center; } - .emoji-empty { color: #94a3b8; padding: 12px; } + .emoji-empty { color: #74897f; padding: 12px; } @media (max-width: 1200px) { .diagnosis-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } diff --git a/admin/dashboard/templates/errors.html b/admin/dashboard/templates/errors.html index a01a50f..c703a89 100644 --- a/admin/dashboard/templates/errors.html +++ b/admin/dashboard/templates/errors.html @@ -42,6 +42,6 @@ new Vue({ el:'#app', mixins:[baseApp], data(){ return { errorLogs:[], errorDetail:{}, errorDetailVisible:false, currentPage:1, pageSize:20, totalErrors:0 } }, mounted(){ this.currentView='5'; this.loadData(); }, methods:{ loadData(){ this.loadErrorLogs(parseInt(this.timeRange)); }, loadErrorLogs(days){ axios.get(`/api/error_logs?days=${days}&limit=${this.pageSize}&offset=${(this.currentPage - 1) * this.pageSize}`).then(r=>{ if(r.data.success){ this.errorLogs=r.data.data.logs||[]; this.totalErrors=r.data.data.total||0; } }).catch(e=>{ console.error('加载错误日志出错:',e); this.$message.error('加载错误日志出错'); }); }, viewErrorDetail(error){ if(error.id){ this.loadErrorDetail(error.id);} else { this.errorDetail=error; this.errorDetailVisible=true; } }, loadErrorDetail(id){ axios.get(`/api/error_detail/${id}`).then(r=>{ if(r.data.success){ this.errorDetail=r.data.data||{}; this.errorDetailVisible=true; } }).catch(e=>{ console.error('加载错误详情出错:',e); this.$message.error('加载错误详情出错'); }); }, handleSizeChange(size){ this.pageSize=size; this.currentPage=1; this.loadData(); }, handleCurrentChange(page){ this.currentPage=page; this.loadData(); } } }); {% endblock %} diff --git a/admin/dashboard/templates/file_browser.html b/admin/dashboard/templates/file_browser.html index dbbb404..8a8f6a9 100644 --- a/admin/dashboard/templates/file_browser.html +++ b/admin/dashboard/templates/file_browser.html @@ -129,26 +129,26 @@ .page-shell { display: flex; flex-direction: column; gap: 16px; } .page-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; padding: 24px 26px; border-radius: 24px; - background: linear-gradient(135deg, rgba(79,70,229,0.10), rgba(59,130,246,0.08), rgba(255,255,255,0.9)); - border: 1px solid rgba(148, 163, 184, 0.16); box-shadow: 0 18px 40px rgba(15, 23, 42, 0.06); + background: linear-gradient(135deg, rgba(15,118,110,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.9)); + border: 1px solid rgba(101, 121, 113, 0.16); box-shadow: 0 18px 40px rgba(21, 33, 27, 0.06); } .page-hero-actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } - .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #6366f1; font-weight: 700; margin-bottom: 8px; } - .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #0f172a; } - .page-hero-copy p { color: #64748b; font-size: 14px; } + .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #0b5e57; font-weight: 700; margin-bottom: 8px; } + .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #15211b; } + .page-hero-copy p { color: #4f6258; font-size: 14px; } .path-pill { max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; - color: #475569; padding: 10px 14px; border-radius: 999px; background: rgba(255,255,255,0.82); border: 1px solid rgba(148,163,184,0.14); + color: #3f5148; padding: 10px 14px; border-radius: 999px; background: rgba(255,255,255,0.82); border: 1px solid rgba(101,121,113,0.14); } .workspace-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .workspace-header h3 { font-size: 18px; margin-bottom: 4px; } - .workspace-header p { font-size: 13px; color: #64748b; } + .workspace-header p { font-size: 13px; color: #4f6258; } .entity-cell { display: flex; align-items: center; gap: 12px; } .entity-avatar { width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; - color: #4f46e5; background: rgba(79,70,229,0.10); + color: #0f766e; background: rgba(15,118,110,0.10); } .entity-avatar--folder { color: #10b981; background: rgba(16,185,129,0.12); } - .entity-avatar--file { color: #3b82f6; background: rgba(59,130,246,0.10); } + .entity-avatar--file { color: #3b82f6; background: rgba(14,165,233,0.10); } {% endblock %} diff --git a/admin/dashboard/templates/friend_circle.html b/admin/dashboard/templates/friend_circle.html index 579169c..6a4a60d 100644 --- a/admin/dashboard/templates/friend_circle.html +++ b/admin/dashboard/templates/friend_circle.html @@ -445,26 +445,26 @@ .page-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; padding: 24px 26px; border-radius: 24px; background: linear-gradient(135deg, rgba(34,197,94,0.10), rgba(56,189,248,0.08), rgba(255,255,255,0.92)); - border: 1px solid rgba(148, 163, 184, 0.16); box-shadow: 0 18px 40px rgba(15, 23, 42, 0.06); + border: 1px solid rgba(101, 121, 113, 0.16); box-shadow: 0 18px 40px rgba(21, 33, 27, 0.06); } .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #16a34a; font-weight: 700; margin-bottom: 8px; } - .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #0f172a; } - .page-hero-copy p { color: #64748b; font-size: 14px; } + .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #15211b; } + .page-hero-copy p { color: #4f6258; font-size: 14px; } .page-hero-actions { display: flex; align-items: center; gap: 12px; } .friend-circle-grid { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(320px, 0.9fr); gap: 16px; align-items: start; } .friend-circle-main, .friend-circle-side { display: flex; flex-direction: column; gap: 16px; } .workspace-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .workspace-header h3 { font-size: 18px; margin-bottom: 4px; } - .workspace-header p { font-size: 13px; color: #64748b; } + .workspace-header p { font-size: 13px; color: #4f6258; } .filter-form { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; } .post-list { display: flex; flex-direction: column; gap: 16px; } .post-card { overflow: hidden; } .post-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 14px; } .post-author { display: flex; align-items: center; gap: 12px; } - .post-author-name { font-size: 16px; font-weight: 700; color: #0f172a; } - .post-meta { font-size: 12px; color: #64748b; margin-top: 3px; } + .post-author-name { font-size: 16px; font-weight: 700; color: #15211b; } + .post-meta { font-size: 12px; color: #4f6258; margin-top: 3px; } .post-actions { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; } - .post-content { color: #0f172a; line-height: 1.8; margin-bottom: 14px; white-space: pre-wrap; word-break: break-word; } + .post-content { color: #15211b; line-height: 1.8; margin-bottom: 14px; white-space: pre-wrap; word-break: break-word; } .post-location { display: inline-flex; align-items: center; gap: 8px; margin-bottom: 14px; padding: 8px 12px; border-radius: 999px; background: rgba(14,165,233,0.08); color: #0369a1; font-size: 13px; font-weight: 600; @@ -473,48 +473,48 @@ .post-media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(108px, 1fr)); gap: 10px; margin-bottom: 14px; } .post-media-item img, .upload-preview-item img { width: 100%; height: 108px; object-fit: cover; border-radius: 16px; cursor: pointer; - border: 1px solid rgba(148,163,184,0.14); box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08); + border: 1px solid rgba(101,121,113,0.14); box-shadow: 0 10px 24px rgba(21, 33, 27, 0.08); } .post-media-item { position: relative; } .post-media-item.is-video::after { content: ''; position: absolute; inset: 0; border-radius: 16px; - background: linear-gradient(180deg, rgba(15,23,42,0.02), rgba(15,23,42,0.3)); + background: linear-gradient(180deg, rgba(21,33,27,0.02), rgba(21,33,27,0.3)); pointer-events: none; } .video-badge { position: absolute; left: 10px; bottom: 10px; display: inline-flex; align-items: center; gap: 6px; - padding: 6px 10px; border-radius: 999px; background: rgba(15,23,42,0.72); color: #fff; + padding: 6px 10px; border-radius: 999px; background: rgba(21,33,27,0.72); color: #fff; font-size: 12px; font-weight: 600; z-index: 2; - box-shadow: 0 8px 20px rgba(15, 23, 42, 0.18); + box-shadow: 0 8px 20px rgba(21, 33, 27, 0.18); } .post-feedback { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .feedback-block { - padding: 14px; border-radius: 18px; background: rgba(248,250,252,0.88); - border: 1px solid rgba(148,163,184,0.12); + padding: 14px; border-radius: 18px; background: rgba(247,251,248,0.88); + border: 1px solid rgba(101,121,113,0.12); } - .feedback-title { font-size: 13px; font-weight: 700; color: #0f172a; margin-bottom: 8px; } + .feedback-title { font-size: 13px; font-weight: 700; color: #15211b; margin-bottom: 8px; } .feedback-list { display: flex; flex-wrap: wrap; gap: 8px; } .feedback-chip { display: inline-flex; align-items: center; padding: 6px 10px; border-radius: 999px; font-size: 12px; - color: #334155; background: rgba(255,255,255,0.95); border: 1px solid rgba(148,163,184,0.12); + color: #27443a; background: rgba(255,255,255,0.95); border: 1px solid rgba(101,121,113,0.12); } - .feedback-empty { color: #94a3b8; font-size: 12px; } + .feedback-empty { color: #74897f; font-size: 12px; } .comment-list { display: flex; flex-direction: column; gap: 8px; } - .comment-item { font-size: 13px; color: #334155; line-height: 1.6; } - .comment-author { font-weight: 700; color: #0f172a; margin-right: 8px; } + .comment-item { font-size: 13px; color: #27443a; line-height: 1.6; } + .comment-author { font-weight: 700; color: #15211b; margin-right: 8px; } .danger-text { color: #ef4444 !important; } .upload-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .upload-trigger { display: inline-flex; align-items: center; justify-content: center; min-height: 38px; padding: 0 14px; - border-radius: 12px; background: rgba(255,255,255,0.92); border: 1px solid rgba(148,163,184,0.2); - color: #0f172a; cursor: pointer; font-size: 13px; font-weight: 600; + border-radius: 12px; background: rgba(255,255,255,0.92); border: 1px solid rgba(101,121,113,0.2); + color: #15211b; cursor: pointer; font-size: 13px; font-weight: 600; } .upload-trigger input { display: none; } .upload-preview-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 12px; } .raw-json { margin: 0; max-height: 520px; overflow: auto; white-space: pre-wrap; word-break: break-all; - padding: 14px; border-radius: 16px; background: rgba(248,250,252,0.9); color: #334155; - border: 1px solid rgba(148,163,184,0.12); + padding: 14px; border-radius: 16px; background: rgba(247,251,248,0.9); color: #27443a; + border: 1px solid rgba(101,121,113,0.12); } .large-preview { width: 100%; border-radius: 18px; } .large-video { width: 100%; max-height: 75vh; border-radius: 18px; background: #000; } diff --git a/admin/dashboard/templates/groups.html b/admin/dashboard/templates/groups.html index 9e357f2..083af1e 100644 --- a/admin/dashboard/templates/groups.html +++ b/admin/dashboard/templates/groups.html @@ -123,6 +123,6 @@ new Vue({ }); {% endblock %} diff --git a/admin/dashboard/templates/index.html b/admin/dashboard/templates/index.html index 4fdbcef..ce73035 100644 --- a/admin/dashboard/templates/index.html +++ b/admin/dashboard/templates/index.html @@ -372,7 +372,7 @@ labels: ['已使用', '可用'], datasets: [{ data: [usageValue, 100 - usageValue], - backgroundColor: [color, 'rgba(226, 232, 240, 0.85)'], + backgroundColor: [color, 'rgba(214, 226, 219, 0.86)'], borderWidth: 0 }] }, @@ -485,8 +485,8 @@ datasets: [{ label: '调用次数', data: data, - backgroundColor: 'rgba(99, 102, 241, 0.72)', - borderColor: 'rgba(79, 70, 229, 1)', + backgroundColor: 'rgba(15, 118, 110, 0.74)', + borderColor: 'rgba(11, 94, 87, 1)', borderRadius: 10, borderWidth: 0 }] @@ -501,7 +501,7 @@ y: { beginAtZero: true, grid: { - color: 'rgba(148, 163, 184, 0.12)' + color: 'rgba(101, 121, 113, 0.18)' } }, x: { @@ -535,8 +535,8 @@ datasets: [{ label: '成功率(%)', data: data, - backgroundColor: 'rgba(16, 185, 129, 0.74)', - borderColor: 'rgba(5, 150, 105, 1)', + backgroundColor: 'rgba(234, 88, 12, 0.64)', + borderColor: 'rgba(194, 65, 12, 1)', borderRadius: 10, borderWidth: 0 }] @@ -552,7 +552,7 @@ beginAtZero: true, max: 100, grid: { - color: 'rgba(148, 163, 184, 0.12)' + color: 'rgba(101, 121, 113, 0.18)' } }, x: { @@ -589,8 +589,8 @@ label: '总调用', data: totalData, fill: false, - backgroundColor: 'rgba(79, 70, 229, 0.2)', - borderColor: 'rgba(79, 70, 229, 1)', + backgroundColor: 'rgba(15, 118, 110, 0.18)', + borderColor: 'rgba(15, 118, 110, 1)', tension: 0.32, borderWidth: 3, pointRadius: 2 @@ -599,8 +599,8 @@ label: '成功调用', data: successData, fill: false, - backgroundColor: 'rgba(16, 185, 129, 0.2)', - borderColor: 'rgba(16, 185, 129, 1)', + backgroundColor: 'rgba(14, 165, 233, 0.16)', + borderColor: 'rgba(14, 165, 233, 1)', tension: 0.32, borderWidth: 3, pointRadius: 2 @@ -609,8 +609,8 @@ label: '失败调用', data: errorData, fill: false, - backgroundColor: 'rgba(239, 68, 68, 0.2)', - borderColor: 'rgba(239, 68, 68, 1)', + backgroundColor: 'rgba(234, 88, 12, 0.20)', + borderColor: 'rgba(234, 88, 12, 1)', tension: 0.32, borderWidth: 3, pointRadius: 2 @@ -628,7 +628,7 @@ y: { beginAtZero: true, grid: { - color: 'rgba(148, 163, 184, 0.12)' + color: 'rgba(101, 121, 113, 0.18)' } }, x: { @@ -698,8 +698,8 @@ label: '消息数量', data: this.hourlyMessageTrendData.counts, fill: true, - backgroundColor: 'rgba(59, 130, 246, 0.10)', - borderColor: 'rgba(59, 130, 246, 1)', + backgroundColor: 'rgba(15, 118, 110, 0.12)', + borderColor: 'rgba(15, 118, 110, 1)', tension: 0.32, borderWidth: 3, pointRadius: 2 @@ -712,7 +712,7 @@ y: { beginAtZero: true, grid: { - color: 'rgba(148, 163, 184, 0.12)' + color: 'rgba(101, 121, 113, 0.18)' } }, x: { @@ -745,7 +745,7 @@ {% block styles %} {% endblock %} diff --git a/admin/dashboard/templates/login.html b/admin/dashboard/templates/login.html index 2566c53..d03018f 100644 --- a/admin/dashboard/templates/login.html +++ b/admin/dashboard/templates/login.html @@ -13,25 +13,26 @@ {% endblock %} diff --git a/admin/dashboard/templates/message_push_management.html b/admin/dashboard/templates/message_push_management.html index 1ea7ba7..78bc030 100644 --- a/admin/dashboard/templates/message_push_management.html +++ b/admin/dashboard/templates/message_push_management.html @@ -150,6 +150,6 @@ new Vue({ }); {% endblock %} diff --git a/admin/dashboard/templates/plugins.html b/admin/dashboard/templates/plugins.html index 9176d02..d129c18 100644 --- a/admin/dashboard/templates/plugins.html +++ b/admin/dashboard/templates/plugins.html @@ -28,9 +28,9 @@ {% block scripts %} {% endblock %} diff --git a/admin/dashboard/templates/plugins_manage.html b/admin/dashboard/templates/plugins_manage.html index 3613d5a..b6688d5 100644 --- a/admin/dashboard/templates/plugins_manage.html +++ b/admin/dashboard/templates/plugins_manage.html @@ -361,15 +361,15 @@ gap: 18px; padding: 24px 26px; border-radius: 24px; - background: linear-gradient(135deg, rgba(79,70,229,0.10), rgba(59,130,246,0.08), rgba(255,255,255,0.9)); - border: 1px solid rgba(148, 163, 184, 0.16); - box-shadow: 0 18px 40px rgba(15, 23, 42, 0.06); + background: linear-gradient(135deg, rgba(15,118,110,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.9)); + border: 1px solid rgba(101, 121, 113, 0.16); + box-shadow: 0 18px 40px rgba(21, 33, 27, 0.06); } .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; - color: #6366f1; + color: #0b5e57; font-weight: 700; margin-bottom: 8px; } @@ -377,43 +377,43 @@ font-size: 30px; line-height: 1.1; margin-bottom: 10px; - color: #0f172a; + color: #15211b; } .page-hero-copy p { - color: #64748b; + color: #4f6258; font-size: 14px; } .overview-grid .el-col { margin-bottom: 16px; } .overview-card { min-height: 112px; } .overview-card--primary { - background: linear-gradient(180deg, rgba(79,70,229,0.10), rgba(255,255,255,0.94)) !important; + background: linear-gradient(180deg, rgba(15,118,110,0.10), rgba(255,255,255,0.94)) !important; } .overview-card--soft { - background: linear-gradient(180deg, rgba(59,130,246,0.08), rgba(255,255,255,0.94)) !important; + background: linear-gradient(180deg, rgba(14,165,233,0.08), rgba(255,255,255,0.94)) !important; } - .overview-label { font-size: 13px; color: #64748b; margin-bottom: 14px; } - .overview-value { font-size: 30px; font-weight: 700; color: #0f172a; margin-bottom: 10px; } - .overview-note { font-size: 12px; color: #94a3b8; } + .overview-label { font-size: 13px; color: #4f6258; margin-bottom: 14px; } + .overview-value { font-size: 30px; font-weight: 700; color: #15211b; margin-bottom: 10px; } + .overview-note { font-size: 12px; color: #74897f; } .workspace-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .workspace-header h3 { font-size: 18px; margin-bottom: 4px; } - .workspace-header p { font-size: 13px; color: #64748b; } + .workspace-header p { font-size: 13px; color: #4f6258; } .entity-cell { display: flex; align-items: center; gap: 12px; } .entity-badge { width: 30px; height: 30px; border-radius: 50%; display: inline-flex; align-items: center; - justify-content: center; background: rgba(79,70,229,0.10); color: #4f46e5; font-size: 12px; + justify-content: center; background: rgba(15,118,110,0.10); color: #0f766e; font-size: 12px; font-weight: 700; flex-shrink: 0; } - .entity-title { font-size: 14px; font-weight: 600; color: #0f172a; } - .entity-subtitle { margin-top: 4px; font-size: 12px; color: #94a3b8; } + .entity-title { font-size: 14px; font-weight: 600; color: #15211b; } + .entity-subtitle { margin-top: 4px; font-size: 12px; color: #74897f; } .action-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .plugin-detail-container { max-height: 70vh; overflow-y: auto; } .plugin-descriptions { width: 100%; } - .dialog-intro { margin-bottom: 14px; color: #64748b; font-size: 13px; } + .dialog-intro { margin-bottom: 14px; color: #4f6258; font-size: 13px; } .config-container { - max-height: 320px; overflow-y: auto; background: rgba(248,250,252,0.82); border: 1px solid rgba(148,163,184,0.12); - border-radius: 14px; padding: 12px; font-size: 12px; color: #334155; + max-height: 320px; overflow-y: auto; background: rgba(247,251,248,0.82); border: 1px solid rgba(101,121,113,0.12); + border-radius: 14px; padding: 12px; font-size: 12px; color: #27443a; } .config-container pre { margin: 0; white-space: pre-wrap; word-break: break-word; } .command-tags { display: flex; flex-wrap: wrap; gap: 6px; } diff --git a/admin/dashboard/templates/robot_management.html b/admin/dashboard/templates/robot_management.html index 1142a70..b5477dc 100644 --- a/admin/dashboard/templates/robot_management.html +++ b/admin/dashboard/templates/robot_management.html @@ -689,8 +689,8 @@ label: '消息数量', data: this.messageTrendData.counts, fill: true, - backgroundColor: 'rgba(79, 70, 229, 0.10)', - borderColor: 'rgba(79, 70, 229, 1)', + backgroundColor: 'rgba(15, 118, 110, 0.10)', + borderColor: 'rgba(15, 118, 110, 1)', tension: 0.28, borderWidth: 3, pointRadius: 2 @@ -704,7 +704,7 @@ y: { beginAtZero: true, grid: { - color: 'rgba(148,163,184,0.12)' + color: 'rgba(101,121,113,0.12)' } }, x: { @@ -756,7 +756,7 @@ y: { beginAtZero: true, grid: { - color: 'rgba(148,163,184,0.12)' + color: 'rgba(101,121,113,0.12)' } }, x: { @@ -824,7 +824,7 @@ y: { beginAtZero: true, grid: { - color: 'rgba(148,163,184,0.12)' + color: 'rgba(101,121,113,0.12)' } }, x: { @@ -868,16 +868,16 @@ gap: 18px; padding: 24px 26px; border-radius: 24px; - background: linear-gradient(135deg, rgba(79,70,229,0.10), rgba(59,130,246,0.08), rgba(255,255,255,0.9)); - border: 1px solid rgba(148, 163, 184, 0.16); - box-shadow: 0 18px 40px rgba(15, 23, 42, 0.06); + background: linear-gradient(135deg, rgba(15,118,110,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.9)); + border: 1px solid rgba(101, 121, 113, 0.16); + box-shadow: 0 18px 40px rgba(21, 33, 27, 0.06); } .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; - color: #6366f1; + color: #0b5e57; font-weight: 700; margin-bottom: 8px; } @@ -886,11 +886,11 @@ font-size: 30px; line-height: 1.1; margin-bottom: 10px; - color: #0f172a; + color: #15211b; } .page-hero-copy p { - color: #64748b; + color: #4f6258; font-size: 14px; } @@ -913,29 +913,29 @@ } .overview-card--primary { - background: linear-gradient(180deg, rgba(79,70,229,0.10), rgba(255,255,255,0.94)) !important; + background: linear-gradient(180deg, rgba(15,118,110,0.10), rgba(255,255,255,0.94)) !important; } .overview-card--soft { - background: linear-gradient(180deg, rgba(59,130,246,0.08), rgba(255,255,255,0.94)) !important; + background: linear-gradient(180deg, rgba(14,165,233,0.08), rgba(255,255,255,0.94)) !important; } .overview-label { font-size: 13px; - color: #64748b; + color: #4f6258; margin-bottom: 14px; } .overview-value { font-size: 30px; font-weight: 700; - color: #0f172a; + color: #15211b; margin-bottom: 10px; } .overview-note { font-size: 12px; - color: #94a3b8; + color: #74897f; } .workspace-header { @@ -952,7 +952,7 @@ .workspace-header p { font-size: 13px; - color: #64748b; + color: #4f6258; } .workspace-actions { @@ -964,7 +964,7 @@ .selection-summary { font-size: 13px; - color: #475569; + color: #3f5148; margin-right: 4px; } @@ -981,8 +981,8 @@ display: inline-flex; align-items: center; justify-content: center; - background: rgba(79,70,229,0.10); - color: #4f46e5; + background: rgba(15,118,110,0.10); + color: #0f766e; font-size: 12px; font-weight: 700; flex-shrink: 0; @@ -991,13 +991,13 @@ .entity-title { font-size: 14px; font-weight: 600; - color: #0f172a; + color: #15211b; } .entity-subtitle { margin-top: 4px; font-size: 12px; - color: #94a3b8; + color: #74897f; } .action-row { @@ -1009,7 +1009,7 @@ .dialog-intro { margin-bottom: 14px; - color: #64748b; + color: #4f6258; font-size: 13px; } @@ -1023,15 +1023,15 @@ .chart-shell { padding: 16px; border-radius: 18px; - background: linear-gradient(180deg, rgba(248,250,252,0.78), rgba(255,255,255,0.96)); - border: 1px solid rgba(148,163,184,0.12); + background: linear-gradient(180deg, rgba(247,251,248,0.78), rgba(255,255,255,0.96)); + border: 1px solid rgba(101,121,113,0.12); } .chart-heading { margin-bottom: 12px; font-size: 14px; font-weight: 600; - color: #334155; + color: #27443a; } .detail-hero { @@ -1043,7 +1043,7 @@ margin-bottom: 16px; border-radius: 22px; background: linear-gradient(135deg, rgba(249,115,22,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.96)); - border: 1px solid rgba(148,163,184,0.14); + border: 1px solid rgba(101,121,113,0.14); } .detail-health-label { @@ -1062,7 +1062,7 @@ .detail-health-note { font-size: 13px; - color: #64748b; + color: #4f6258; } .detail-tags { @@ -1087,7 +1087,7 @@ .section-title { font-size: 15px; font-weight: 600; - color: #0f172a; + color: #15211b; margin-bottom: 12px; } @@ -1103,20 +1103,20 @@ .diagnosis-title { font-size: 13px; - color: #64748b; + color: #4f6258; margin-bottom: 10px; } .diagnosis-value { font-size: 24px; font-weight: 700; - color: #0f172a; + color: #15211b; margin-bottom: 8px; } .diagnosis-desc { font-size: 12px; - color: #94a3b8; + color: #74897f; line-height: 1.5; } @@ -1133,12 +1133,12 @@ align-items: center; justify-content: space-between; font-weight: 600; - color: #0f172a; + color: #15211b; } .detail-card-sub { font-size: 12px; - color: #94a3b8; + color: #74897f; font-weight: 500; } @@ -1153,7 +1153,7 @@ .empty-inline, .detail-inline-note { font-size: 12px; - color: #64748b; + color: #4f6258; } .detail-inline-note { @@ -1183,19 +1183,19 @@ padding: 12px 14px; border-radius: 14px; background: linear-gradient(180deg, rgba(14,165,233,0.08), rgba(255,255,255,0.96)); - border: 1px solid rgba(148,163,184,0.12); + border: 1px solid rgba(101,121,113,0.12); } .peak-hour-rank { font-size: 13px; - color: #0f172a; + color: #15211b; font-weight: 600; margin-bottom: 6px; } .peak-hour-count { font-size: 12px; - color: #64748b; + color: #4f6258; } .chart-shell--compact { diff --git a/admin/dashboard/templates/system_llm.html b/admin/dashboard/templates/system_llm.html index ffb5a26..3223bb0 100644 --- a/admin/dashboard/templates/system_llm.html +++ b/admin/dashboard/templates/system_llm.html @@ -260,20 +260,20 @@ .system-page { display: flex; flex-direction: column; gap: 24px; } .page-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; - background: linear-gradient(135deg, rgba(248,250,252,0.96), rgba(226,232,240,0.88)); - border: 1px solid rgba(148,163,184,0.16); - border-radius: 24px; padding: 28px 32px; box-shadow: 0 18px 48px rgba(15,23,42,0.06); + background: linear-gradient(135deg, rgba(247,251,248,0.96), rgba(214,226,219,0.88)); + border: 1px solid rgba(101,121,113,0.16); + border-radius: 24px; padding: 28px 32px; box-shadow: 0 18px 48px rgba(21,33,27,0.06); } - .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #6366f1; font-weight: 700; margin-bottom: 8px; } - .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #0f172a; } - .page-hero-copy p { color: #64748b; font-size: 14px; } + .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #0b5e57; font-weight: 700; margin-bottom: 8px; } + .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #15211b; } + .page-hero-copy p { color: #4f6258; font-size: 14px; } .workspace-card .el-card__body { display: flex; flex-direction: column; gap: 16px; } .workspace-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .workspace-header h3 { font-size: 18px; margin-bottom: 4px; } - .workspace-header p { font-size: 13px; color: #64748b; } - .config-meta { display: flex; gap: 12px; color: #64748b; font-size: 12px; flex-wrap: wrap; } + .workspace-header p { font-size: 13px; color: #4f6258; } + .config-meta { display: flex; gap: 12px; color: #4f6258; font-size: 12px; flex-wrap: wrap; } .backend-list { display: flex; flex-direction: column; gap: 16px; } - .backend-card { border-radius: 18px; border: 1px solid rgba(148,163,184,0.16); } + .backend-card { border-radius: 18px; border: 1px solid rgba(101,121,113,0.16); } .backend-card-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .backend-grid { display: grid; diff --git a/admin/dashboard/templates/system_status.html b/admin/dashboard/templates/system_status.html index 7202584..3cea5c0 100644 --- a/admin/dashboard/templates/system_status.html +++ b/admin/dashboard/templates/system_status.html @@ -89,23 +89,23 @@ .page-shell { display: flex; flex-direction: column; gap: 16px; } .page-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; padding: 24px 26px; border-radius: 24px; - background: linear-gradient(135deg, rgba(79,70,229,0.10), rgba(59,130,246,0.08), rgba(255,255,255,0.9)); - border: 1px solid rgba(148, 163, 184, 0.16); box-shadow: 0 18px 40px rgba(15, 23, 42, 0.06); + background: linear-gradient(135deg, rgba(15,118,110,0.10), rgba(14,165,233,0.08), rgba(255,255,255,0.9)); + border: 1px solid rgba(101, 121, 113, 0.16); box-shadow: 0 18px 40px rgba(21, 33, 27, 0.06); } .page-hero-actions { display: flex; align-items: center; gap: 12px; } - .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #6366f1; font-weight: 700; margin-bottom: 8px; } - .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #0f172a; } - .page-hero-copy p { color: #64748b; font-size: 14px; } + .page-eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: #0b5e57; font-weight: 700; margin-bottom: 8px; } + .page-hero-copy h1 { font-size: 30px; line-height: 1.1; margin-bottom: 10px; color: #15211b; } + .page-hero-copy p { color: #4f6258; font-size: 14px; } .workspace-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .workspace-header h3 { font-size: 18px; margin-bottom: 4px; } - .workspace-header p { font-size: 13px; color: #64748b; } + .workspace-header p { font-size: 13px; color: #4f6258; } .iframe-url { max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; - color: #94a3b8; padding: 8px 12px; border-radius: 999px; background: rgba(248,250,252,0.9); border: 1px solid rgba(148,163,184,0.12); + color: #74897f; padding: 8px 12px; border-radius: 999px; background: rgba(247,251,248,0.9); border: 1px solid rgba(101,121,113,0.12); } .iframe-shell-card { height: calc(100vh - 230px); } .iframe-shell-card .el-card__body { height: calc(100% - 73px); } - .iframe-shell { height: 100%; border-radius: 18px; overflow: hidden; border: 1px solid rgba(148,163,184,0.12); background: rgba(248,250,252,0.82); } + .iframe-shell { height: 100%; border-radius: 18px; overflow: hidden; border: 1px solid rgba(101,121,113,0.12); background: rgba(247,251,248,0.82); } .iframe-shell iframe { width: 100%; height: 100%; border: none; display: block; background: #fff; } @media (max-width: 960px) { .page-hero { flex-direction: column; align-items: flex-start; } diff --git a/admin/dashboard/templates/users.html b/admin/dashboard/templates/users.html index b821608..da9c568 100644 --- a/admin/dashboard/templates/users.html +++ b/admin/dashboard/templates/users.html @@ -57,6 +57,6 @@ new Vue({ el:'#app', mixins:[baseApp], data(){return{userStats:[],detailDialogVisible:false,detailLoading:false,detailData:null}}, computed:{ totalCalls(){return this.userStats.reduce((s,i)=>s+(parseInt(i.total_calls)||0),0)}, averageSuccessRate(){ if(!this.userStats.length) return '0.00'; const sum=this.userStats.reduce((s,i)=>s+(i.total_calls?((i.success_calls/i.total_calls)*100):0),0); return (sum/this.userStats.length).toFixed(2)} }, mounted(){ this.currentView='3'; this.loadData(); }, methods:{ loadData(){ this.loadUserStats(parseInt(this.timeRange)); }, loadUserStats(days){ axios.get(`/api/user_stats?days=${days}&limit=20`).then(r=>{ if(r.data.success) this.userStats=r.data.data||[]; }).catch(e=>{ console.error('加载用户统计数据出错:',e); this.$message.error('加载用户统计数据出错'); }); }, viewUserDetail(user){ if(!user||!user.user_id)return; this.detailDialogVisible=true; this.detailLoading=true; this.detailData=null; axios.get(`/api/user_stats/${encodeURIComponent(user.user_id)}?days=30`).then(r=>{ if(r.data.success){ this.detailData=r.data.data||null; } else { this.$message.error(r.data.error||'加载用户详情失败'); } }).catch(e=>{ console.error('加载用户详情出错:',e); this.$message.error('加载用户详情出错'); }).finally(()=>{ this.detailLoading=false; }); } } }); {% endblock %} diff --git a/admin/dashboard/templates/virtual_group_management.html b/admin/dashboard/templates/virtual_group_management.html index 35eeb7a..6909696 100644 --- a/admin/dashboard/templates/virtual_group_management.html +++ b/admin/dashboard/templates/virtual_group_management.html @@ -66,7 +66,7 @@ - {% raw %}{{ group.name }}{% endraw %}{% raw %}{{ group.wxid }}{% endraw %} + {% raw %}{{ group.name }}{% endraw %}{% raw %}{{ group.wxid }}{% endraw %} @@ -97,6 +97,6 @@ new Vue({ }); {% endblock %} diff --git a/admin/dashboard/templates/wx_logs.html b/admin/dashboard/templates/wx_logs.html index 21146d0..fa8233a 100644 --- a/admin/dashboard/templates/wx_logs.html +++ b/admin/dashboard/templates/wx_logs.html @@ -28,6 +28,6 @@ new Vue({ el:'#app', mixins:[baseApp], data(){ return { loading:false, logType:'info', logLines:100, logContent:[], logText:'', refreshInterval:0, refreshTimer:null, currentView:'9', showTimeRangeSelector:false, cancelSource:null, isAutoScroll:true } }, mounted(){ this.loadLogs(); this.$nextTick(()=>{ const logDiv=this.$el.querySelector('.log-content'); if(logDiv){ logDiv.addEventListener('scroll',()=>{ const nearBottom=(logDiv.scrollHeight-logDiv.scrollTop-logDiv.clientHeight)<50; this.isAutoScroll=nearBottom; }); } }); }, beforeDestroy(){ this.clearRefreshTimer(); if(this.cancelSource){ this.cancelSource.cancel('component destroyed'); this.cancelSource=null; } }, methods:{ loadLogs(){ this.loading=true; if(this.cancelSource){ this.cancelSource.cancel('new request'); } this.cancelSource=axios.CancelToken.source(); axios.get(`/api/wx_logs`,{ params:{ type:this.logType, lines:this.logLines }, cancelToken:this.cancelSource.token }).then(response=>{ if(response.data.success){ this.logContent=response.data.data.content||[]; this.logText=this.logContent.join('\n'); this.$nextTick(()=>{ const logDiv=this.$el.querySelector('.log-content'); const pre=this.$refs.logPre; if(pre) pre.textContent=this.logText; if(logDiv&&this.isAutoScroll) logDiv.scrollTop=logDiv.scrollHeight; }); } else { this.$message.error('加载日志失败'); } }).catch(error=>{ if(!axios.isCancel(error)){ console.error('加载日志出错:',error); this.$message.error('加载日志出错'); } }).finally(()=>{ this.loading=false; }); }, handleRefreshInterval(){ this.clearRefreshTimer(); if(this.refreshInterval>0){ this.refreshTimer=setInterval(()=>this.loadLogs(), this.refreshInterval*1000); } }, clearRefreshTimer(){ if(this.refreshTimer){ clearInterval(this.refreshTimer); this.refreshTimer=null; } } } }); {% endblock %}