diff --git a/packages/frontend/src/App.vue b/packages/frontend/src/App.vue index 6954a4c..3ddc5e5 100644 --- a/packages/frontend/src/App.vue +++ b/packages/frontend/src/App.vue @@ -39,17 +39,20 @@ const closeStyleCustomizer = () => {
@@ -79,31 +82,101 @@ const closeStyleCustomizer = () => { flex-direction: column; min-height: 100vh; font-family: var(--font-family-sans-serif); /* 使用字体变量 */ + background-color: var(--app-bg-color); /* Set base background for the whole app */ } header { background-color: var(--header-bg-color); /* 使用头部背景色变量 */ - padding: var(--base-padding); /* 使用基础内边距变量 */ + padding: 0 calc(var(--base-padding) * 1.5); /* Adjust padding: 0 top/bottom, more left/right */ border-bottom: 1px solid var(--border-color); /* 使用边框颜色变量 */ + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); /* Softer shadow */ + height: 55px; /* Slightly taller header */ + display: flex; /* Use flexbox for alignment */ + align-items: center; /* Center items vertically */ + position: sticky; /* Make header sticky */ + top: 0; + z-index: 10; /* Ensure header stays on top */ +} + +nav { + display: flex; + align-items: center; /* Align nav items vertically */ + width: 100%; /* Make nav take full width */ + justify-content: space-between; /* Space out left and right groups */ +} + +.nav-left, .nav-right { + display: flex; + align-items: center; + gap: calc(var(--base-margin) / 3); /* Add small gap between items */ } nav a { - margin: 0 var(--base-margin); /* 使用基础外边距变量 */ text-decoration: none; - color: var(--link-color); /* 使用链接颜色变量 */ + color: var(--text-color-secondary); /* Use secondary text color for inactive links */ + padding: 0.6rem 0.9rem; /* Adjust padding */ + border-radius: 6px; /* Slightly more rounded */ + transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; /* Smooth transition */ + font-size: 0.9rem; + line-height: 1; + white-space: nowrap; + position: relative; /* For potential pseudo-elements */ + border: 1px solid transparent; /* Add transparent border for layout consistency */ } nav a:hover { - color: var(--link-hover-color); /* 使用链接悬停颜色变量 */ + color: var(--link-hover-color); /* Use specific hover color */ + background-color: rgba(128, 128, 128, 0.1); /* Subtle grey background on hover */ } nav a.router-link-exact-active { - font-weight: bold; - color: var(--link-active-color); /* 使用激活链接颜色变量 */ + font-weight: 500; /* Medium weight */ + color: var(--link-active-color); /* Use active link color */ + background-color: transparent; /* Remove background for active link */ + /* Add a bottom border for active state */ } +/* Add a pseudo-element for the active indicator */ +nav a.router-link-exact-active::after { + content: ''; + position: absolute; + bottom: -1px; /* Position slightly below the text, aligning with header border */ + left: 10%; /* Start slightly indented */ + right: 10%; /* End slightly indented */ + height: 2px; /* Thickness of the indicator */ + background-color: var(--link-active-color); /* Color of the indicator */ + border-radius: 1px; +} + + +/* Style the theme icon link */ +nav a[title*="t('nav.customizeStyle')"] { + padding: 0.5rem 0.7rem; /* Adjust padding for icon */ + font-size: 1.1rem; /* Make icon slightly larger */ + color: var(--text-color-secondary); /* Match other inactive links */ +} +nav a[title*="t('nav.customizeStyle')"]:hover { + color: var(--link-hover-color); + background-color: rgba(128, 128, 128, 0.1); +} + +/* Style logout/login link */ +.nav-right a { + /* Specific styles if needed, e.g., slightly different color */ + color: var(--text-color-secondary); +} +.nav-right a:hover { + color: var(--link-hover-color); + background-color: rgba(128, 128, 128, 0.1); +} + + main { flex-grow: 1; + /* padding: var(--base-padding); */ /* Keep padding removed from main */ +} + +footer { padding: var(--base-padding); /* 使用基础内边距变量 */ } diff --git a/packages/frontend/src/components/CommandInputBar.vue b/packages/frontend/src/components/CommandInputBar.vue index a56bd2f..110d846 100644 --- a/packages/frontend/src/components/CommandInputBar.vue +++ b/packages/frontend/src/components/CommandInputBar.vue @@ -36,10 +36,10 @@ const sendCommand = () => { .command-input-bar { display: flex; align-items: center; - padding: 5px 10px; - background-color: #f0f0f0; /* 背景色,可调整 */ - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; + padding: var(--base-margin); /* Use theme variable */ + background-color: var(--header-bg-color); /* Use theme variable */ + border-top: 1px solid var(--border-color); /* Use theme variable */ + border-bottom: 1px solid var(--border-color); /* Use theme variable */ min-height: 40px; /* 保证一定高度 */ } @@ -51,9 +51,11 @@ const sendCommand = () => { .command-input { padding: 6px 10px; - border: 1px solid #ccc; + border: 1px solid var(--border-color); /* Use theme variable */ border-radius: 4px; font-size: 0.9em; + background-color: var(--app-bg-color); /* Use theme variable */ + color: var(--text-color); /* Use theme variable */ width: 60%; /* 输入框宽度,可调整 */ max-width: 800px; /* 最大宽度 */ outline: none; @@ -61,8 +63,8 @@ const sendCommand = () => { } .command-input:focus { - border-color: #007bff; - box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25); + border-color: var(--button-bg-color); /* Use theme variable */ + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25); /* Keep existing shadow or define variable */ } /* 可以添加按钮样式 */ diff --git a/packages/frontend/src/components/FileManager.vue b/packages/frontend/src/components/FileManager.vue index 192a5ce..2a284a2 100644 --- a/packages/frontend/src/components/FileManager.vue +++ b/packages/frontend/src/components/FileManager.vue @@ -845,24 +845,28 @@ const cancelPathEdit = () => { diff --git a/packages/frontend/src/components/LayoutRenderer.vue b/packages/frontend/src/components/LayoutRenderer.vue index 3244964..cdb6376 100644 --- a/packages/frontend/src/components/LayoutRenderer.vue +++ b/packages/frontend/src/components/LayoutRenderer.vue @@ -328,7 +328,7 @@ const handlePaneResize = (eventData: { panes: Array<{ size: number; [key: string display: flex; flex-direction: column; overflow: hidden; /* 隐藏内部滚动条,由子组件处理 */ - background-color: #f8f9fa; /* 默认背景,可能被子组件覆盖 */ + background-color: var(--app-bg-color); /* Use app background */ } /* 确保动态加载的组件能正确应用 pane-content 样式 */ @@ -346,17 +346,17 @@ const handlePaneResize = (eventData: { panes: Array<{ size: number; [key: string justify-content: center; align-items: center; text-align: center; - color: #adb5bd; - background-color: #f8f9fa; + color: var(--text-color-secondary); /* Use secondary text color */ + background-color: var(--header-bg-color); /* Use header background */ font-size: 0.9em; - padding: 1rem; + padding: var(--base-padding); /* Use base padding */ } /* 增强空会话显示样式 */ :deep(.empty-session) { - background-color: #fcfcfc; + background-color: var(--app-bg-color); /* Use app background */ border-radius: 8px; - box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.03); + /* box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.03); */ /* Optional: Consider removing or using theme variables */ width: 100%; height: 100%; display: flex; @@ -377,24 +377,24 @@ const handlePaneResize = (eventData: { panes: Array<{ size: number; [key: string :deep(.empty-session-content i) { font-size: 2.5rem; margin-bottom: 0.75rem; - color: #d1d5db; + color: var(--text-color-secondary); /* Use secondary text color */ } :deep(.empty-session-content span) { font-size: 1.1rem; font-weight: 500; - color: #9ca3af; + color: var(--text-color-secondary); /* Use secondary text color */ margin-bottom: 0.5rem; } :deep(.empty-session-tip) { font-size: 0.85rem; - color: #c0c5cc; + color: var(--text-color-secondary); /* Use secondary text color */ margin-top: 0.5rem; } :deep(.layout-pane-wrapper > .pane-placeholder.error) { - color: #dc3545; /* 错误用红色 */ - background-color: #fdd; + color: #dc3545; /* Keep hardcoded error color for now */ + background-color: #fdd; /* Keep hardcoded error background for now */ } diff --git a/packages/frontend/src/components/NotificationSettings.vue b/packages/frontend/src/components/NotificationSettings.vue index db9bee8..d1ce9ec 100644 --- a/packages/frontend/src/components/NotificationSettings.vue +++ b/packages/frontend/src/components/NotificationSettings.vue @@ -118,18 +118,66 @@ const handleSave = (savedSetting: NotificationSetting) => { diff --git a/packages/frontend/src/components/StatusMonitor.vue b/packages/frontend/src/components/StatusMonitor.vue index 96ee25f..504436f 100644 --- a/packages/frontend/src/components/StatusMonitor.vue +++ b/packages/frontend/src/components/StatusMonitor.vue @@ -190,9 +190,9 @@ const swapDisplay = computed(() => { diff --git a/packages/frontend/src/views/AuditLogView.vue b/packages/frontend/src/views/AuditLogView.vue index 1e5905c..2e00c1f 100644 --- a/packages/frontend/src/views/AuditLogView.vue +++ b/packages/frontend/src/views/AuditLogView.vue @@ -145,24 +145,155 @@ const paginationRange = computed(() => { diff --git a/packages/frontend/src/views/CommandHistoryView.vue b/packages/frontend/src/views/CommandHistoryView.vue index 0973fa7..6b5fd6e 100644 --- a/packages/frontend/src/views/CommandHistoryView.vue +++ b/packages/frontend/src/views/CommandHistoryView.vue @@ -1,19 +1,21 @@