From 10a2677d74e1ae12b0efe6d5fc8106cf8dab5e57 Mon Sep 17 00:00:00 2001 From: digua Date: Mon, 25 May 2026 22:43:53 +0800 Subject: [PATCH] feat(home): refactor import area and add API/auto-sync import methods Restructure import components into dedicated import/ directory with new ImportTabSelector, ApiImportCard, and AutoSyncCard components. Add demo import, entry animation, and tutorial links to home page. Update i18n translations for all locales. Add chatApi init guard in registry and defaultPath to DataDirInfo preload interface. Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 10 +- apps/desktop/preload/apis/utils.ts | 1 + apps/desktop/preload/index.d.ts | 1 + src/assets/images/logo.svg | 17 ++ .../common/Settings/ApiSettingsTab.vue | 15 +- src/i18n/locales/en-US/home.json | 29 ++- src/i18n/locales/ja-JP/home.json | 29 ++- src/i18n/locales/zh-CN/home.json | 29 ++- src/i18n/locales/zh-TW/home.json | 29 ++- .../home/components/import/ApiImportCard.vue | 38 ++++ .../home/components/import/AutoSyncCard.vue | 38 ++++ .../components/{ => import}/ChatSelector.vue | 0 .../components/{ => import}/FileListItem.vue | 0 .../{ => import}/FormatSelectorModal.vue | 0 .../components/{ => import}/ImportArea.vue | 32 +-- .../components/import/ImportTabSelector.vue | 112 ++++++++++ src/pages/home/index.vue | 208 ++++++++++++++---- src/services/registry.ts | 4 + 18 files changed, 457 insertions(+), 135 deletions(-) create mode 100644 src/assets/images/logo.svg create mode 100644 src/pages/home/components/import/ApiImportCard.vue create mode 100644 src/pages/home/components/import/AutoSyncCard.vue rename src/pages/home/components/{ => import}/ChatSelector.vue (100%) rename src/pages/home/components/{ => import}/FileListItem.vue (100%) rename src/pages/home/components/{ => import}/FormatSelectorModal.vue (100%) rename src/pages/home/components/{ => import}/ImportArea.vue (95%) create mode 100644 src/pages/home/components/import/ImportTabSelector.vue diff --git a/.gitignore b/.gitignore index 98a5585d..76a0865a 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,11 @@ yarn-error.log* *.log error-log-*.txt +# IDE +.vscode/* +!.vscode/settings.json +!.vscode/snippets.code-snippets + # Project dist/ dist-web/ @@ -23,7 +28,6 @@ docs/.vitepress/dist/ apps/cli/native/ .history/ out -.obskey release-config.json src/auto-imports.d.ts src/components.d.ts @@ -34,9 +38,7 @@ yarn.lock # AI .cursor -.vscode/* -!.vscode/settings.json -!.vscode/snippets.code-snippets +.antigravitycli .docs .playwright-mcp/ diff --git a/apps/desktop/preload/apis/utils.ts b/apps/desktop/preload/apis/utils.ts index 4932e7de..1fd079dd 100644 --- a/apps/desktop/preload/apis/utils.ts +++ b/apps/desktop/preload/apis/utils.ts @@ -77,6 +77,7 @@ export interface CacheInfo { export interface DataDirInfo { path: string + defaultPath?: string isCustom: boolean } diff --git a/apps/desktop/preload/index.d.ts b/apps/desktop/preload/index.d.ts index 8e8dfab8..c3d57ecc 100644 --- a/apps/desktop/preload/index.d.ts +++ b/apps/desktop/preload/index.d.ts @@ -890,6 +890,7 @@ interface CacheInfo { interface DataDirInfo { path: string + defaultPath?: string isCustom: boolean } diff --git a/src/assets/images/logo.svg b/src/assets/images/logo.svg new file mode 100644 index 00000000..1a89ebf1 --- /dev/null +++ b/src/assets/images/logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/components/common/Settings/ApiSettingsTab.vue b/src/components/common/Settings/ApiSettingsTab.vue index d9a532f6..efa10df0 100644 --- a/src/components/common/Settings/ApiSettingsTab.vue +++ b/src/components/common/Settings/ApiSettingsTab.vue @@ -1,9 +1,10 @@ + + diff --git a/src/pages/home/components/import/AutoSyncCard.vue b/src/pages/home/components/import/AutoSyncCard.vue new file mode 100644 index 00000000..5945315a --- /dev/null +++ b/src/pages/home/components/import/AutoSyncCard.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/pages/home/components/ChatSelector.vue b/src/pages/home/components/import/ChatSelector.vue similarity index 100% rename from src/pages/home/components/ChatSelector.vue rename to src/pages/home/components/import/ChatSelector.vue diff --git a/src/pages/home/components/FileListItem.vue b/src/pages/home/components/import/FileListItem.vue similarity index 100% rename from src/pages/home/components/FileListItem.vue rename to src/pages/home/components/import/FileListItem.vue diff --git a/src/pages/home/components/FormatSelectorModal.vue b/src/pages/home/components/import/FormatSelectorModal.vue similarity index 100% rename from src/pages/home/components/FormatSelectorModal.vue rename to src/pages/home/components/import/FormatSelectorModal.vue diff --git a/src/pages/home/components/ImportArea.vue b/src/pages/home/components/import/ImportArea.vue similarity index 95% rename from src/pages/home/components/ImportArea.vue rename to src/pages/home/components/import/ImportArea.vue index c4262b9b..5f30ff57 100644 --- a/src/pages/home/components/ImportArea.vue +++ b/src/pages/home/components/import/ImportArea.vue @@ -7,11 +7,9 @@ import { storeToRefs } from 'pinia' import { ref, computed } from 'vue' import { useRouter } from 'vue-router' import { useI18n } from 'vue-i18n' -import { getChatlabSiteLocalePath } from '@/utils/chatlabSiteLocale' import { useSessionStore, type BatchFileInfo, type MergeFileInfo } from '@/stores/session' import { useDataService, useImportService, useSessionIndexService, usePlatformService } from '@/services' import { IS_ELECTRON } from '@/utils/platform' -import DemoImportButton from './DemoImportButton.vue' import { getSessionGapThreshold } from '@/composables/useUiConfig' const { t } = useI18n() @@ -64,9 +62,6 @@ const router = useRouter() // 合并导入开关 const mergeImportEnabled = ref(false) -// 是否展示 Demo 按钮(仅无任何会话时) -const showDemoButton = computed(() => sessionStore.sessions.length === 0) - // 计算是否正在导入(单文件、批量或合并) const isAnyImporting = computed(() => isImporting.value || isBatchImporting.value || isMergeImporting.value) @@ -543,14 +538,6 @@ async function handleGoToSession(sessionId: string) { await navigateToSession(sessionId) } -// 教程链接:根据语言动态生成 -const tutorialUrl = computed(() => { - const { locale } = useI18n() - const localePath = getChatlabSiteLocalePath(locale.value) - const langPath = localePath ? `/${localePath}` : '' - return `https://chatlab.fun${langPath}/usage/how-to-export?utm_source=app` -}) - // 打开最新的导入日志文件 async function openLatestImportLog() { const result = await window.cacheApi.getLatestImportLog() @@ -637,7 +624,7 @@ const getMergeFileProgressText = (file: MergeFileInfo) =>