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 @@
-
-
-
-
+
+
+
+
+
+
- {
flex-direction: column;
height: 100%; /* 填充父 Pane 高度 */
overflow: hidden;
- background-color: var(--color-bg-secondary);
+ background-color: var(--app-bg-color); /* Use standard app background */
+ padding: 0.5rem; /* Keep overall padding */
+ box-sizing: border-box;
}
-.history-controls {
+/* Remove original .history-controls styles */
+/* .history-controls { ... } */
+
+/* Styles for controls embedded within the list container */
+.embedded-controls {
display: flex;
align-items: center;
- padding: 8px;
- border-bottom: 1px solid var(--color-border);
- background-color: var(--color-bg-tertiary);
- flex-shrink: 0; /* 防止被压缩 */
+ padding: 0.5rem; /* Add padding around embedded controls */
+ /* Removed border-bottom and margin-bottom */
+ flex-shrink: 0;
+ gap: 0.25rem;
}
.search-input {
flex-grow: 1;
- padding: 6px 8px;
- border: 1px solid var(--color-border);
- border-radius: 3px;
- background-color: var(--color-input-bg);
- color: var(--color-text);
- margin-right: 8px;
+ min-width: 8px; /* Added smaller min-width */
+ padding: 0.3rem 0.5rem; /* Reduced padding */
+ border: 1px solid var(--border-color); /* Use standard border color */
+ border-radius: 4px; /* Consistent border radius */
+ background-color: var(--app-bg-color); /* Use app background */
+ color: var(--text-color); /* Use standard text color */
+ /* margin-right: 8px; */ /* Replaced by gap */
font-size: 0.9em;
}
+.search-input:focus {
+ outline: none;
+ border-color: var(--button-bg-color); /* Highlight border on focus */
+ box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25); /* Example focus shadow */
+}
.clear-button {
background: none;
- border: none;
- color: var(--color-text-secondary);
+ border: 1px solid var(--border-color); /* Add border */
+ color: var(--text-color-secondary); /* Use standard secondary text color */
cursor: pointer;
- padding: 5px;
- font-size: 1.1em;
+ padding: 0.3rem 0.5rem; /* Reduced padding */
+ font-size: 0.9em; /* Match input font size */
line-height: 1;
+ border-radius: 4px; /* Consistent border radius */
+ transition: color 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;
}
.clear-button:hover {
- color: var(--color-danger);
+ color: var(--bs-danger, red); /* Use danger color on hover */
+ border-color: var(--bs-danger, red);
+ background-color: rgba(220, 53, 69, 0.1); /* Subtle danger background */
}
+.clear-button i {
+ display: block; /* Ensure icon takes space */
+}
+
.history-list-container {
flex-grow: 1; /* 占据剩余空间 */
overflow-y: auto; /* 超出时显示滚动条 */
+ border: 1px solid var(--border-color); /* Keep border */
+ border-radius: 5px; /* Keep radius */
+ background-color: var(--app-bg-color); /* Ensure background */
+ /* Add display:flex and flex-direction:column to stack controls and list */
+ display: flex;
+ flex-direction: column;
}
.history-list {
@@ -171,18 +199,18 @@ const executeCommand = (command: string) => {
display: flex;
justify-content: space-between;
align-items: center;
- padding: 8px 12px;
- cursor: default; /* 列表项本身不可点击 */
- border-bottom: 1px solid var(--color-border-light);
- transition: background-color 0.2s ease;
+ padding: 0.4rem 0.75rem; /* Reduced padding */
+ cursor: pointer; /* Make item clickable */
+ border-bottom: 1px solid var(--border-color); /* Use standard border color */
+ transition: background-color 0.15s ease;
}
.history-item:last-child {
- border-bottom: none;
+ border-bottom: none; /* Keep removing border for last item */
}
.history-item:hover {
- background-color: var(--color-bg-hover);
+ background-color: var(--header-bg-color); /* Use header background for hover */
}
.command-text {
@@ -191,8 +219,9 @@ const executeCommand = (command: string) => {
text-overflow: ellipsis;
margin-right: 10px;
flex-grow: 1;
- font-family: var(--font-family-mono);
+ font-family: var(--font-family-mono, monospace); /* Use mono font variable */
font-size: 0.9em;
+ color: var(--text-color); /* Use standard text color */
}
.item-actions {
@@ -204,26 +233,31 @@ const executeCommand = (command: string) => {
.action-button {
background: none;
border: none;
- color: var(--color-text-secondary);
+ color: var(--text-color-secondary); /* Use standard secondary text color */
cursor: pointer;
- padding: 2px 4px;
- margin-left: 6px;
- font-size: 0.9em;
+ padding: 2px 4px; /* Reduced padding */
+ margin-left: 4px; /* Reduced margin */
+ font-size: 1em; /* Slightly larger icon size */
line-height: 1;
+ border-radius: 4px; /* Add radius for hover */
+ transition: color 0.15s ease, background-color 0.15s ease;
}
.action-button:hover {
- color: var(--color-primary);
+ background-color: rgba(128, 128, 128, 0.1); /* Subtle hover background */
+ color: var(--link-hover-color); /* Use link hover color */
}
.action-button.delete:hover {
- color: var(--color-danger);
+ color: var(--bs-danger, red); /* Use danger color */
+ background-color: rgba(220, 53, 69, 0.1); /* Subtle danger background */
}
.loading-message,
.empty-message {
- padding: 20px;
+ padding: calc(var(--base-padding, 1rem) * 2); /* Increase padding */
text-align: center;
- color: var(--color-text-secondary);
+ color: var(--text-color-secondary); /* Use standard secondary text color */
+ font-style: italic;
}
diff --git a/packages/frontend/src/views/ConnectionsView.vue b/packages/frontend/src/views/ConnectionsView.vue
index 92ac969..532c6f1 100644
--- a/packages/frontend/src/views/ConnectionsView.vue
+++ b/packages/frontend/src/views/ConnectionsView.vue
@@ -237,26 +237,44 @@ const handleFileChange = async (event: Event) => {
diff --git a/packages/frontend/src/views/NotificationsView.vue b/packages/frontend/src/views/NotificationsView.vue
index 008c982..45beab9 100644
--- a/packages/frontend/src/views/NotificationsView.vue
+++ b/packages/frontend/src/views/NotificationsView.vue
@@ -12,6 +12,8 @@ import NotificationSettings from '../components/NotificationSettings.vue';
diff --git a/packages/frontend/src/views/ProxiesView.vue b/packages/frontend/src/views/ProxiesView.vue
index b4fa658..bbdc2cc 100644
--- a/packages/frontend/src/views/ProxiesView.vue
+++ b/packages/frontend/src/views/ProxiesView.vue
@@ -63,19 +63,36 @@ const closeForm = () => {
diff --git a/packages/frontend/src/views/QuickCommandsView.vue b/packages/frontend/src/views/QuickCommandsView.vue
index b0ea52c..d9606ab 100644
--- a/packages/frontend/src/views/QuickCommandsView.vue
+++ b/packages/frontend/src/views/QuickCommandsView.vue
@@ -1,26 +1,23 @@
-
-
+
+
+
+
+
+
+
- {
quickCommandsStore.setSearchTerm(target.value);
};
-const updateSortBy = (event: Event) => {
- const target = event.target as HTMLSelectElement;
- const newSortBy = target.value as QuickCommandSortByType;
- quickCommandsStore.setSortBy(newSortBy);
+// 切换排序方式
+const toggleSortBy = () => {
+ const newSortBy = sortBy.value === 'name' ? 'usage_count' : 'name';
+ quickCommandsStore.setSortBy(newSortBy);
};
+// 计算排序按钮的 title 和 icon
+const sortButtonTitle = computed(() => {
+ return sortBy.value === 'name'
+ ? t('quickCommands.sortByName', '按名称排序')
+ : t('quickCommands.sortByUsage', '按使用频率排序');
+});
+
+const sortButtonIcon = computed(() => {
+ // 使用 Font Awesome 图标示例
+ return sortBy.value === 'name' ? 'fas fa-sort-alpha-down' : 'fas fa-sort-numeric-down';
+});
+
+
const openAddForm = () => {
commandToEdit.value = null;
isFormVisible.value = true;
@@ -141,73 +151,103 @@ const executeCommand = (command: QuickCommandFE) => {
.quick-commands-view {
display: flex;
flex-direction: column;
- height: 100%;
+ height: 100%; /* Occupy available height */
overflow: hidden;
- background-color: var(--color-bg-secondary);
+ background-color: var(--app-bg-color); /* Use standard app background */
+ padding: 0.5rem; /* Keep overall padding */
+ box-sizing: border-box;
}
-.view-header {
+/* Remove original .view-header styles */
+/* .view-header { ... } */
+
+/* Styles for controls embedded within the list container */
+.embedded-controls {
display: flex;
align-items: center;
- padding: 8px 12px;
- border-bottom: 1px solid var(--color-border);
- background-color: var(--color-bg-tertiary);
+ flex-wrap: wrap; /* Allow wrapping */
+ padding: 0.5rem; /* Add padding around embedded controls */
+ /* Removed border-bottom and margin-bottom */
flex-shrink: 0;
+ gap: 0.25rem;
}
.search-input {
- flex-grow: 1;
- padding: 6px 8px;
- border: 1px solid var(--color-border);
- border-radius: 3px;
- background-color: var(--color-input-bg);
- color: var(--color-text);
- margin-right: 12px;
+ flex-grow: 1; /* Allow search to grow */
+ flex-basis: 10px; /* Give search a base width before growing */
+ min-width: 8px; /* Reduced min-width */
+ padding: 0.3rem 0.5rem; /* Reduced padding */
+ border: 1px solid var(--border-color); /* Use standard border color */
+ border-radius: 4px; /* Consistent border radius */
+ background-color: var(--app-bg-color); /* Use app background for input */
+ color: var(--text-color); /* Use standard text color */
+ /* margin-right: 12px; */ /* Replaced by gap */
font-size: 0.9em;
}
-
-.sort-controls {
- display: flex;
- align-items: center;
- margin-right: 12px;
+.search-input:focus {
+ outline: none;
+ border-color: var(--button-bg-color); /* Highlight border on focus */
+ box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25); /* Example focus shadow */
}
-.sort-controls label {
- margin-right: 6px;
- font-size: 0.9em;
- color: var(--color-text-secondary);
+/* 移除 .sort-controls 和 select 样式 */
+
+.sort-toggle-button {
+ background: none;
+ border: 1px solid var(--border-color);
+ color: var(--text-color-secondary);
+ cursor: pointer;
+ padding: 0.3rem 0.5rem; /* Match input padding */
+ font-size: 0.9em; /* Match input font size */
+ line-height: 1;
+ border-radius: 4px;
+ transition: color 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;
+ flex-shrink: 0; /* Prevent shrinking */
+}
+.sort-toggle-button:hover {
+ color: var(--text-color);
+ border-color: var(--button-bg-color);
+ background-color: rgba(128, 128, 128, 0.1);
+}
+.sort-toggle-button i {
+ display: block; /* Ensure icon takes space */
}
-.sort-controls select {
- padding: 5px 8px;
- border: 1px solid var(--color-border);
- border-radius: 3px;
- background-color: var(--color-input-bg);
- color: var(--color-text);
- font-size: 0.9em;
-}
.add-button {
- padding: 6px 12px;
- background-color: var(--color-primary);
- color: white;
+ padding: 0.3rem 0.6rem; /* Default padding */
+ background-color: var(--button-bg-color); /* Use standard button color */
+ color: var(--button-text-color); /* Use standard button text color */
border: none;
- border-radius: 3px;
+ border-radius: 4px; /* Consistent border radius */
cursor: pointer;
font-size: 0.9em;
display: flex;
align-items: center;
+ white-space: nowrap;
+ transition: background-color 0.15s ease;
+ flex-shrink: 0; /* Prevent shrinking */
+}
+.add-button.icon-only {
+ padding: 0.3rem 0.5rem; /* Slightly adjust padding for icon only */
}
.add-button i {
- margin-right: 4px;
+ margin-right: 0; /* Remove margin when text is gone */
}
.add-button:hover {
- background-color: var(--color-primary-dark);
+ background-color: var(--button-hover-bg-color); /* Use standard hover color */
}
.commands-list-container {
flex-grow: 1;
overflow-y: auto;
+ /* Add subtle border/background for visual separation */
+ border: 1px solid var(--border-color);
+ border-radius: 5px;
+ background-color: var(--app-bg-color);
+ /* Add display:flex and flex-direction:column to stack controls and list */
+ display: flex;
+ flex-direction: column;
}
.commands-list {
@@ -220,18 +260,18 @@ const executeCommand = (command: QuickCommandFE) => {
display: flex;
justify-content: space-between;
align-items: center;
- padding: 10px 12px;
+ padding: 0.4rem 0.75rem; /* Reduced padding */
cursor: pointer;
- border-bottom: 1px solid var(--color-border-light);
- transition: background-color 0.2s ease;
+ border-bottom: 1px solid var(--border-color); /* Use standard border color */
+ transition: background-color 0.15s ease;
}
.command-item:last-child {
- border-bottom: none;
+ border-bottom: none; /* Keep removing border for last item */
}
.command-item:hover {
- background-color: var(--color-bg-hover);
+ background-color: var(--header-bg-color); /* Use header background for hover */
}
.command-info {
@@ -243,8 +283,8 @@ const executeCommand = (command: QuickCommandFE) => {
}
.command-name {
- font-weight: bold;
- color: var(--color-text);
+ font-weight: 500; /* Medium weight */
+ color: var(--text-color); /* Use standard text color */
font-size: 0.95em;
white-space: nowrap;
overflow: hidden;
@@ -256,13 +296,13 @@ const executeCommand = (command: QuickCommandFE) => {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
- font-family: var(--font-family-mono);
+ font-family: var(--font-family-mono, monospace); /* Use mono font variable */
font-size: 0.85em;
- color: var(--color-text-secondary);
+ color: var(--text-color-secondary); /* Use standard secondary text color */
}
.command-text.full-width { /* 当没有名称时,指令占据全部空间 */
font-size: 0.9em; /* 可以稍微大一点 */
- color: var(--color-text); /* 颜色也可以更深 */
+ color: var(--text-color); /* Use standard text color */
}
@@ -274,40 +314,44 @@ const executeCommand = (command: QuickCommandFE) => {
.usage-count {
font-size: 0.8em;
- color: var(--color-text-muted);
- margin-right: 8px;
- background-color: var(--color-bg-tertiary);
- padding: 2px 5px;
- border-radius: 3px;
- min-width: 18px; /* 保证宽度 */
+ color: var(--text-color-secondary); /* Use standard secondary text color */
+ margin-right: 4px; /* Reduced margin */
+ background-color: var(--header-bg-color); /* Use header background */
+ padding: 2px 4px; /* Reduced padding */
+ border-radius: 4px; /* Consistent border radius */
+ min-width: 18px; /* Adjust min-width */
text-align: center;
+ font-weight: 500;
}
.action-button {
background: none;
border: none;
- color: var(--color-text-secondary);
+ color: var(--text-color-secondary); /* Use standard secondary text color */
cursor: pointer;
- padding: 2px 4px;
- margin-left: 6px;
- font-size: 0.9em;
+ padding: 2px 4px; /* Reduced padding */
+ margin-left: 4px; /* Reduced margin */
+ font-size: 1em; /* Slightly larger icon size */
line-height: 1;
+ border-radius: 4px; /* Add radius for hover effect */
+ transition: color 0.15s ease, background-color 0.15s ease;
}
.action-button:hover {
- color: var(--color-primary);
+ background-color: rgba(128, 128, 128, 0.1); /* Subtle hover background */
}
.action-button.edit:hover {
- color: var(--color-warning); /* 编辑按钮用警告色 */
+ color: var(--bs-warning, orange); /* Use Bootstrap warning or fallback */
}
.action-button.delete:hover {
- color: var(--color-danger);
+ color: var(--bs-danger, red); /* Use Bootstrap danger or fallback */
}
.loading-message,
.empty-message {
- padding: 20px;
+ padding: var(--base-padding, 1rem) * 2; /* Increase padding */
text-align: center;
- color: var(--color-text-secondary);
+ color: var(--text-color-secondary); /* Use standard secondary text color */
+ font-style: italic;
}
diff --git a/packages/frontend/src/views/SettingsView.vue b/packages/frontend/src/views/SettingsView.vue
index d8c26fa..3650118 100644
--- a/packages/frontend/src/views/SettingsView.vue
+++ b/packages/frontend/src/views/SettingsView.vue
@@ -574,14 +574,17 @@ onMounted(async () => {