ui: 模型选择栏布局重设计

- 新增渐变图标指示器
- select 更大圆角 + 更粗边框 + hover/focus 渐变高亮
- 能力标签改为独立彩色 pill(Think 紫色、Vision 青色)
- 箭头图标改为青色
- model-bar.js 适配新 badge 元素
This commit is contained in:
thzxx
2026-04-03 13:10:00 +08:00
parent 7f842fc02e
commit 66acfb7f3e
3 changed files with 78 additions and 36 deletions
+10 -18
View File
@@ -6,14 +6,15 @@
import { state, KEYS } from '../state.js';
import { formatSize } from '../utils.js';
let modelSelectEl, modelInfoBadgeEl, thinkCheckbox, thinkWrap;
let modelSelectEl, badgeThinkEl, badgeVisionEl, thinkCheckbox, thinkWrap;
/** 缓存模型能力 { modelName: { think: bool, vision: bool } } */
const modelCapabilityCache = new Map();
export function initModelBar() {
modelSelectEl = document.querySelector('#modelSelect');
modelInfoBadgeEl = document.querySelector('#modelInfoBadge');
badgeThinkEl = document.querySelector('#badgeThink');
badgeVisionEl = document.querySelector('#badgeVision');
thinkCheckbox = document.querySelector('#toggleThink');
thinkWrap = document.querySelector('#thinkToggleWrap');
@@ -25,7 +26,8 @@ export function initModelBar() {
await checkModelCapability(model);
} else {
setThinkAvailable(false);
setModelBadge('');
badgeThinkEl.style.display = 'none';
badgeVisionEl.style.display = 'none';
}
});
}
@@ -45,7 +47,7 @@ export async function loadModels() {
if (!data.models || data.models.length === 0) {
modelSelectEl.innerHTML = '<option value="">未安装任何模型</option>';
setModelBadge('');
badgeThinkEl.style.display = 'none'; badgeVisionEl.style.display = 'none';
return;
}
@@ -74,7 +76,7 @@ export async function loadModels() {
} catch (err) {
console.error('[ModelBar] 加载模型失败:', err);
modelSelectEl.innerHTML = '<option value="">加载失败 - 检查连接</option>';
setModelBadge('');
badgeThinkEl.style.display = 'none'; badgeVisionEl.style.display = 'none';
}
}
@@ -116,11 +118,9 @@ async function checkModelCapability(modelName) {
function applyCapability(modelName, caps) {
setThinkAvailable(caps.think);
// 更新信息标签
const tags = [];
if (caps.think) tags.push('🧠 Think');
if (caps.vision) tags.push('👁️ Vision');
setModelBadge(tags.join(' '));
// 更新能力标签
badgeThinkEl.style.display = caps.think ? '' : 'none';
badgeVisionEl.style.display = caps.vision ? '' : 'none';
}
/**
@@ -139,14 +139,6 @@ function setThinkAvailable(available) {
}
}
/**
* 更新模型信息标签
*/
function setModelBadge(text) {
modelInfoBadgeEl.textContent = text;
modelInfoBadgeEl.style.display = text ? '' : 'none';
}
/**
* 获取当前选择的模型
*/