mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-10-26 02:04:37 +08:00
feat: 设置支持选择选择会话默认进入的标签页
This commit is contained in:
1 parent
d1d817718f
commit
4ea4df7480
8 files changed
+62
-3
No files matched your search
@@ -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",
|
||||
|
||||
@@ -27,6 +27,12 @@
|
||||
"light": "ライトモード",
|
||||
"dark": "ダークモード"
|
||||
},
|
||||
"defaultTab": {
|
||||
"title": "デフォルトタブ",
|
||||
"description": "セッションに入った時に表示するページ",
|
||||
"overview": "概要",
|
||||
"aiChat": "AI チャット"
|
||||
},
|
||||
"screenshot": {
|
||||
"title": "スクリーンショット設定",
|
||||
"mobileAdapt": "モバイル対応",
|
||||
|
||||
@@ -27,6 +27,12 @@
|
||||
"light": "浅色模式",
|
||||
"dark": "深色模式"
|
||||
},
|
||||
"defaultTab": {
|
||||
"title": "默认标签页",
|
||||
"description": "进入会话后默认显示的页面",
|
||||
"overview": "总览",
|
||||
"aiChat": "AI 对话"
|
||||
},
|
||||
"screenshot": {
|
||||
"title": "截图设置",
|
||||
"mobileAdapt": "移动端适配",
|
||||
|
||||
@@ -27,6 +27,12 @@
|
||||
"light": "淺色模式",
|
||||
"dark": "深色模式"
|
||||
},
|
||||
"defaultTab": {
|
||||
"title": "預設標籤頁",
|
||||
"description": "進入會話後預設顯示的頁面",
|
||||
"overview": "總覽",
|
||||
"aiChat": "AI 對話"
|
||||
},
|
||||
"screenshot": {
|
||||
"title": "截圖設定",
|
||||
"mobileAdapt": "行動畫面適配",
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user