优化API密钥管理界面,添加可折叠内容功能,改进按钮样式和交互逻辑,提升用户体验

This commit is contained in:
Zylan
2025-03-22 21:31:53 +08:00
parent 642b5d4678
commit 5a1ca6761c
3 changed files with 112 additions and 79 deletions

View File

@@ -27,6 +27,9 @@ class SettingsManager {
this.setupEventListeners();
this.updateUIBasedOnModelType();
});
// 初始化可折叠内容逻辑
this.initCollapsibleContent();
}
// 从配置文件加载模型定义
@@ -317,30 +320,11 @@ class SettingsManager {
const modelInfo = this.modelDefinitions[selectedModel];
if (!modelInfo) return;
const requiredApiKeyId = modelInfo.apiKeyId;
const providerInfo = this.providerDefinitions[modelInfo.provider];
// 更新API密钥标签突出显示而不是隐藏不需要的密钥
this.apiKeyGroups.forEach(group => {
const keyInputId = group.querySelector('input').id;
const isRequired = keyInputId === requiredApiKeyId;
// 为需要的API密钥添加突出显示样式
if (isRequired) {
group.classList.add('api-key-active');
} else {
group.classList.remove('api-key-active');
}
// 更新Mathpix相关输入框的必要性
if ((keyInputId === 'mathpixAppId' || keyInputId === 'mathpixAppKey') &&
!modelInfo.supportsMultimodal) {
group.classList.add('api-key-active'); // 非多模态模型需要Mathpix
}
});
// 更新模型版本显示
// 仅更新模型版本显示
this.updateModelVersionDisplay(selectedModel);
// 不再需要高亮API密钥
// 这里我们不再进行API密钥的高亮处理
}
updateUIBasedOnModelType() {
@@ -476,6 +460,33 @@ class SettingsManager {
this.settingsPanel.classList.add('hidden');
});
}
/**
* 初始化可折叠内容的交互逻辑
*/
initCollapsibleContent() {
// 获取API密钥折叠切换按钮和内容
const apiKeysToggle = document.getElementById('apiKeysCollapseToggle');
const apiKeysContent = document.getElementById('apiKeysContent');
// 添加点击事件以切换折叠状态
if (apiKeysToggle && apiKeysContent) {
apiKeysToggle.addEventListener('click', () => {
// 切换折叠状态
apiKeysContent.classList.toggle('collapsed');
// 更新图标方向
const icon = apiKeysToggle.querySelector('.fa-chevron-down, .fa-chevron-up');
if (icon) {
if (apiKeysContent.classList.contains('collapsed')) {
icon.classList.replace('fa-chevron-up', 'fa-chevron-down');
} else {
icon.classList.replace('fa-chevron-down', 'fa-chevron-up');
}
}
});
}
}
}
// Export for use in other modules

View File

@@ -1095,20 +1095,20 @@ button:disabled {
}
.toggle-btn {
background: transparent;
background: none;
border: none;
color: var(--text-secondary);
cursor: pointer;
width: 32px;
height: 32px;
color: var(--text-color);
padding: 5px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
transition: background-color 0.3s ease;
}
.toggle-btn:hover {
color: var(--primary);
background-color: var(--hover-color);
}
.thinking-content {
@@ -1311,18 +1311,33 @@ button:disabled {
/* API密钥高亮显示样式 */
.api-key-group {
transition: all 0.3s ease;
border-left: 3px solid transparent;
padding-left: 0.5rem;
}
.api-key-active {
border-left: 3px solid var(--primary);
background-color: rgba(var(--primary-rgb), 0.05);
padding-left: 0.5rem;
border-radius: 4px;
/* 可折叠内容样式 */
.collapsible-header {
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
padding-bottom: 1rem;
}
.api-key-active label {
color: var(--primary);
font-weight: 600;
.collapsible-header h3 {
margin-bottom: 0 !important;
}
.collapsible-content {
overflow: hidden;
transition: max-height 0.3s ease, padding-top 0.3s ease;
}
.collapsible-content.collapsed {
max-height: 0;
padding-top: 0;
}
.collapsible-content:not(.collapsed) {
max-height: 2000px;
padding-top: 1rem;
border-top: 1px dashed var(--border-color);
}

View File

@@ -138,50 +138,57 @@
<!-- 2. 所有API密钥集中在一个区域 -->
<div class="settings-section">
<h3><i class="fas fa-key"></i> API密钥设置</h3>
<div class="setting-group api-key-group">
<label for="AnthropicApiKey">Anthropic API Key</label>
<div class="input-group">
<input type="password" id="AnthropicApiKey" placeholder="输入 Anthropic API key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
</div>
<div class="collapsible-header" id="apiKeysCollapseToggle">
<h3><i class="fas fa-key"></i> API密钥设置</h3>
<button class="toggle-btn">
<i class="fas fa-chevron-down"></i>
</button>
</div>
<div class="setting-group api-key-group">
<label for="OpenaiApiKey">OpenAI API Key</label>
<div class="input-group">
<input type="password" id="OpenaiApiKey" placeholder="输入 OpenAI API key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
<div class="collapsible-content collapsed" id="apiKeysContent">
<div class="setting-group api-key-group">
<label for="AnthropicApiKey">Anthropic API Key</label>
<div class="input-group">
<input type="password" id="AnthropicApiKey" placeholder="输入 Anthropic API key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
</div>
<div class="setting-group api-key-group">
<label for="DeepseekApiKey">DeepSeek API Key</label>
<div class="input-group">
<input type="password" id="DeepseekApiKey" placeholder="输入 DeepSeek API key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
<div class="setting-group api-key-group">
<label for="OpenaiApiKey">OpenAI API Key</label>
<div class="input-group">
<input type="password" id="OpenaiApiKey" placeholder="输入 OpenAI API key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
</div>
<div class="setting-group api-key-group">
<label for="mathpixAppId">Mathpix App ID</label>
<div class="input-group">
<input type="password" id="mathpixAppId" placeholder="输入 Mathpix App ID">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
<div class="setting-group api-key-group">
<label for="DeepseekApiKey">DeepSeek API Key</label>
<div class="input-group">
<input type="password" id="DeepseekApiKey" placeholder="输入 DeepSeek API key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
</div>
<div class="setting-group api-key-group">
<label for="mathpixAppKey">Mathpix App Key</label>
<div class="input-group">
<input type="password" id="mathpixAppKey" placeholder="输入 Mathpix App Key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
<div class="setting-group api-key-group">
<label for="mathpixAppId">Mathpix App ID</label>
<div class="input-group">
<input type="password" id="mathpixAppId" placeholder="输入 Mathpix App ID">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
<div class="setting-group api-key-group">
<label for="mathpixAppKey">Mathpix App Key</label>
<div class="input-group">
<input type="password" id="mathpixAppKey" placeholder="输入 Mathpix App Key">
<button class="btn-icon toggle-api-key">
<i class="fas fa-eye"></i>
</button>
</div>
</div>
</div>
</div>