feat: 设置支持选择选择会话默认进入的标签页

This commit is contained in:
digua authored and digua committed 2026-03-28 00:10:29 +08:00
1 parent d1d817718f
commit 4ea4df7480
8 files changed
+62 -3

No files matched your search

+6
View File
@@ -27,6 +27,12 @@
"light": "Light",
"dark": "Dark"
},
"defaultTab": {
"title": "Default Tab",
"description": "Default page when entering a session",
"overview": "Overview",
"aiChat": "AI Chat"
},
"screenshot": {
"title": "Screenshot",
"mobileAdapt": "Mobile Adaptation",
+6
View File
@@ -27,6 +27,12 @@
"light": "ライトモード",
"dark": "ダークモード"
},
"defaultTab": {
"title": "デフォルトタブ",
"description": "セッションに入った時に表示するページ",
"overview": "概要",
"aiChat": "AI チャット"
},
"screenshot": {
"title": "スクリーンショット設定",
"mobileAdapt": "モバイル対応",
+6
View File
@@ -27,6 +27,12 @@
"light": "浅色模式",
"dark": "深色模式"
},
"defaultTab": {
"title": "默认标签页",
"description": "进入会话后默认显示的页面",
"overview": "总览",
"aiChat": "AI 对话"
},
"screenshot": {
"title": "截图设置",
"mobileAdapt": "移动端适配",
+6
View File
@@ -27,6 +27,12 @@
"light": "淺色模式",
"dark": "深色模式"
},
"defaultTab": {
"title": "預設標籤頁",
"description": "進入會話後預設顯示的頁面",
"overview": "總覽",
"aiChat": "AI 對話"
},
"screenshot": {
"title": "截圖設定",
"mobileAdapt": "行動畫面適配",
+4 -1
View File
@@ -20,6 +20,7 @@ const MessageExportModal = defineAsyncComponent(() => import('@/components/Messa
import LoadingState from '@/components/UI/LoadingState.vue'
import { useSessionStore } from '@/stores/session'
import { useLayoutStore } from '@/stores/layout'
import { useSettingsStore } from '@/stores/settings'
import { useTimeSelect } from '@/composables'
const { t } = useI18n()
@@ -28,6 +29,7 @@ const route = useRoute()
const router = useRouter()
const sessionStore = useSessionStore()
const layoutStore = useLayoutStore()
const settingsStore = useSettingsStore()
const { currentSessionId } = storeToRefs(sessionStore)
// 会话索引弹窗状态
@@ -68,7 +70,8 @@ const tabs = computed(() => allTabs)
function resolveActiveTabFromRoute(): string {
const routeTab = route.query.tab as string | undefined
return allTabs.some((tab) => tab.id === routeTab) ? routeTab! : 'overview'
if (routeTab && allTabs.some((tab) => tab.id === routeTab)) return routeTab
return settingsStore.defaultSessionTab
}
const activeTab = ref(resolveActiveTabFromRoute())
+4 -1
View File
@@ -20,6 +20,7 @@ const MessageExportModal = defineAsyncComponent(() => import('@/components/Messa
import LoadingState from '@/components/UI/LoadingState.vue'
import { useSessionStore } from '@/stores/session'
import { useLayoutStore } from '@/stores/layout'
import { useSettingsStore } from '@/stores/settings'
import { useTimeSelect } from '@/composables'
const { t } = useI18n()
@@ -28,6 +29,7 @@ const route = useRoute()
const router = useRouter()
const sessionStore = useSessionStore()
const layoutStore = useLayoutStore()
const settingsStore = useSettingsStore()
const { currentSessionId } = storeToRefs(sessionStore)
// 会话索引弹窗状态
@@ -65,7 +67,8 @@ const tabs = [
function resolveActiveTabFromRoute(): string {
const routeTab = route.query.tab as string | undefined
return tabs.some((tab) => tab.id === routeTab) ? routeTab! : 'overview'
if (routeTab && tabs.some((tab) => tab.id === routeTab)) return routeTab
return settingsStore.defaultSessionTab
}
const activeTab = ref(resolveActiveTabFromRoute())
@@ -15,7 +15,7 @@ const { t } = useI18n()
const layoutStore = useLayoutStore()
const settingsStore = useSettingsStore()
const { screenshotMobileAdapt } = storeToRefs(layoutStore)
const { locale } = storeToRefs(settingsStore)
const { locale, defaultSessionTab } = storeToRefs(settingsStore)
// Color Mode
const colorMode = useColorMode({
@@ -44,6 +44,12 @@ const currentLocale = computed({
set: (val: LocaleType) => settingsStore.setLocale(val),
})
// Default session tab options
const defaultTabOptions = computed(() => [
{ label: t('settings.basic.defaultTab.overview'), value: 'overview' },
{ label: t('settings.basic.defaultTab.aiChat'), value: 'ai-chat' },
])
// Sync theme with main process
import { watch } from 'vue'
watch(
@@ -98,6 +104,26 @@ watch(
</div>
</div>
<!-- 默认标签页 -->
<div>
<h3 class="mb-3 flex items-center gap-2 text-sm font-semibold text-gray-900 dark:text-white">
<UIcon name="i-heroicons-rectangle-stack" class="h-4 w-4 text-purple-500" />
{{ t('settings.basic.defaultTab.title') }}
</h3>
<div class="rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800/50">
<div class="flex items-center justify-between">
<div class="flex-1 pr-4">
<p class="text-sm font-medium text-gray-900 dark:text-white">
{{ t('settings.basic.defaultTab.description') }}
</p>
</div>
<div class="w-64">
<UTabs v-model="defaultSessionTab" size="sm" class="gap-0" :items="defaultTabOptions"></UTabs>
</div>
</div>
</div>
</div>
<!-- 截图设置 -->
<div>
<h3 class="mb-3 flex items-center gap-2 text-sm font-semibold text-gray-900 dark:text-white">
+3
View File
@@ -15,6 +15,8 @@ export const useSettingsStore = defineStore(
() => {
const locale = ref<LocaleType>(getLocale())
const defaultSessionTab = ref<'overview' | 'ai-chat'>('overview')
const debugMode = ref(false)
function setDebugMode(enabled: boolean) {
@@ -87,6 +89,7 @@ export const useSettingsStore = defineStore(
locale,
setLocale,
initLocale,
defaultSessionTab,
debugMode,
setDebugMode,
aiPreprocessConfig,