fix: enhance provider model menu and sidebar session selection handling (#4144)

- Updated `ProviderModelMenu.vue` to manage menu state and load provider configurations dynamically upon opening.
- Filtered provider configurations to exclude those with `enable` set to false.
- Improved session selection logic in `useSessions.ts` to ensure the currently selected session is highlighted and properly managed during navigation.
This commit is contained in:
Soulter
2025-12-21 13:05:15 +08:00
committed by GitHub
parent b5cdb8f650
commit 3598c51eff
2 changed files with 25 additions and 3 deletions
@@ -1,5 +1,5 @@
<template>
<v-menu :close-on-content-click="false" location="top">
<v-menu v-model="menuOpen" :close-on-content-click="false" location="top" @update:model-value="handleMenuToggle">
<template v-slot:activator="{ props: menuProps }">
<v-chip v-bind="menuProps" class="text-none provider-chip" variant="tonal" size="x-small">
<v-icon start size="14">mdi-creation</v-icon>
@@ -72,11 +72,13 @@ interface ProviderConfig {
model: string;
api_base?: string;
model_metadata?: ModelMetadata;
enable?: boolean;
}
const providerConfigs = ref<ProviderConfig[]>([]);
const selectedProviderId = ref('');
const searchQuery = ref('');
const menuOpen = ref(false);
const filteredProviders = computed(() => {
if (!searchQuery.value) {
@@ -107,7 +109,10 @@ function loadProviderConfigs() {
params: { provider_type: 'chat_completion' }
}).then(response => {
if (response.data.status === 'ok') {
providerConfigs.value = response.data.data || [];
// 过滤掉 enable 为 false 的配置
providerConfigs.value = (response.data.data || []).filter(
(p: ProviderConfig) => p.enable !== false
);
}
}).catch(error => {
console.error('获取提供商列表失败:', error);
@@ -140,6 +145,13 @@ function getCurrentSelection() {
};
}
function handleMenuToggle(isOpen: boolean) {
if (isOpen) {
// 每次打开菜单时重新获取数据
loadProviderConfigs();
}
}
onMounted(() => {
loadFromStorage();
loadProviderConfigs();
+11 -1
View File
@@ -41,7 +41,13 @@ export function useSessions(chatboxMode: boolean = false) {
selectedSessions.value = [pendingSessionId.value];
pendingSessionId.value = null;
}
} else if (!currSessionId.value && sessions.value.length > 0) {
} else if (currSessionId.value) {
// 如果当前有选中的会话,确保它在列表中并被选中
const session = sessions.value.find(s => s.session_id === currSessionId.value);
if (session) {
selectedSessions.value = [currSessionId.value];
}
} else if (sessions.value.length > 0) {
// 默认选择第一个会话
const firstSession = sessions.value[0];
selectedSessions.value = [firstSession.session_id];
@@ -65,6 +71,10 @@ export function useSessions(chatboxMode: boolean = false) {
router.push(`${basePath}/${sessionId}`);
await getSessions();
// 确保新创建的会话被选中高亮
selectedSessions.value = [sessionId];
return sessionId;
} catch (err) {
console.error(err);