From 820649225d5718db3fe6ae7890591ab4fbb2f65c Mon Sep 17 00:00:00 2001 From: AoXuan Date: Sun, 14 Sep 2025 01:16:51 +0800 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20=E4=BF=AE=E5=A4=8D=E6=B7=B1?= =?UTF-8?q?=E8=89=B2=E6=A8=A1=E5=BC=8F=E4=B8=8B=E8=83=8C=E6=99=AF=E7=9C=8B?= =?UTF-8?q?=E4=B8=8D=E6=B8=85=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/Initialization.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/views/Initialization.vue b/frontend/src/views/Initialization.vue index 025c2b7..66e9608 100644 --- a/frontend/src/views/Initialization.vue +++ b/frontend/src/views/Initialization.vue @@ -288,6 +288,8 @@ onUnmounted(() => { box-sizing: border-box; width: 100%; min-height: 100%; + background-color: var(--ant-color-bg-layout); + color: var(--ant-color-text); } /* 响应式优化 */ From a15b2bd8ce992a67eb01795bdc15c102f4aff8c6 Mon Sep 17 00:00:00 2001 From: AoXuan Date: Sun, 14 Sep 2025 01:24:31 +0800 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E6=BA=90=E5=8A=A0=E8=BD=BD=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=BA=91=E7=AB=AF=E6=95=B0=E6=8D=AE=E6=9B=BF?= =?UTF-8?q?=E4=BB=A3=E9=9D=99=E6=80=81=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/initialization/BackendStep.vue | 32 ++++++++++++------- .../initialization/DependenciesStep.vue | 18 +++++++---- .../components/initialization/PythonStep.vue | 18 +++++++---- 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/frontend/src/components/initialization/BackendStep.vue b/frontend/src/components/initialization/BackendStep.vue index 16562a1..45dee0d 100644 --- a/frontend/src/components/initialization/BackendStep.vue +++ b/frontend/src/components/initialization/BackendStep.vue @@ -142,22 +142,20 @@ import { ref, onMounted, computed } from 'vue' import { getConfig, saveConfig } from '@/utils/config' import { - GIT_MIRRORS, - getOfficialMirrors, - getMirrorMirrors, sortMirrorsBySpeedAndRecommendation, type MirrorConfig } from '@/config/mirrors' +import { mirrorManager } from '@/utils/mirrorManager' defineProps<{ backendExists: boolean }>() -const gitMirrors = ref(GIT_MIRRORS) +const gitMirrors = ref([]) // 按类型分组的镜像源 -const officialMirrors = computed(() => getOfficialMirrors('git')) -const mirrorMirrors = computed(() => getMirrorMirrors('git')) +const officialMirrors = computed(() => gitMirrors.value.filter(m => m.type === 'official')) +const mirrorMirrors = computed(() => gitMirrors.value.filter(m => m.type === 'mirror')) // 按速度和推荐排序的镜像源 const sortedOfficialMirrors = computed(() => sortMirrorsBySpeedAndRecommendation(officialMirrors.value)) @@ -174,18 +172,26 @@ const addingCustomMirror = ref(false) // 加载配置中的镜像源选择 async function loadMirrorConfig() { try { + // 从镜像管理器获取最新的Git镜像源配置(包含云端数据) + const cloudMirrors = mirrorManager.getMirrors('git') + const config = await getConfig() selectedGitMirror.value = config.selectedGitMirror || 'ghproxy_edgeone' // 加载自定义镜像源 if (config.customGitMirrors && Array.isArray(config.customGitMirrors)) { customMirrors.value = config.customGitMirrors - // 将自定义镜像源添加到gitMirrors中 - gitMirrors.value = [...GIT_MIRRORS, ...customMirrors.value] + // 将云端镜像源和自定义镜像源合并 + gitMirrors.value = [...cloudMirrors, ...customMirrors.value] + } else { + // 只使用云端镜像源 + gitMirrors.value = [...cloudMirrors] } console.log('Git镜像源配置已加载:', selectedGitMirror.value) + console.log('云端镜像源已加载:', cloudMirrors.length, '个') console.log('自定义镜像源已加载:', customMirrors.value.length, '个') + console.log('云端Git镜像源详情:', cloudMirrors.map(m => ({ name: m.name, key: m.key }))) } catch (error) { console.warn('加载Git镜像源配置失败:', error) } @@ -321,8 +327,9 @@ async function addCustomMirror() { // 添加到自定义镜像源列表 customMirrors.value.push(newMirror) - // 更新完整的镜像源列表 - gitMirrors.value = [...GIT_MIRRORS, ...customMirrors.value] + // 更新完整的镜像源列表(云端 + 自定义) + const cloudMirrors = mirrorManager.getMirrors('git') + gitMirrors.value = [...cloudMirrors, ...customMirrors.value] // 自动选择新添加的镜像源 selectedGitMirror.value = customKey @@ -366,8 +373,9 @@ async function removeCustomMirror(key: string) { // 从自定义镜像源列表中移除 customMirrors.value = customMirrors.value.filter(m => m.key !== key) - // 更新完整的镜像源列表 - gitMirrors.value = [...GIT_MIRRORS, ...customMirrors.value] + // 更新完整的镜像源列表(云端 + 自定义) + const cloudMirrors = mirrorManager.getMirrors('git') + gitMirrors.value = [...cloudMirrors, ...customMirrors.value] // 如果当前选中的是被删除的镜像源,切换到默认镜像源 if (selectedGitMirror.value === key) { diff --git a/frontend/src/components/initialization/DependenciesStep.vue b/frontend/src/components/initialization/DependenciesStep.vue index 65bf215..af8fcd6 100644 --- a/frontend/src/components/initialization/DependenciesStep.vue +++ b/frontend/src/components/initialization/DependenciesStep.vue @@ -81,18 +81,16 @@ import { ref, onMounted, computed } from 'vue' import { getConfig, saveConfig } from '@/utils/config' import { - PIP_MIRRORS, - getOfficialMirrors, - getMirrorMirrors, sortMirrorsBySpeedAndRecommendation, type MirrorConfig, } from '@/config/mirrors' +import { mirrorManager } from '@/utils/mirrorManager' -const pipMirrors = ref(PIP_MIRRORS) +const pipMirrors = ref([]) // 按类型分组的镜像源 -const officialMirrors = computed(() => getOfficialMirrors('pip')) -const mirrorMirrors = computed(() => getMirrorMirrors('pip')) +const officialMirrors = computed(() => pipMirrors.value.filter(m => m.type === 'official')) +const mirrorMirrors = computed(() => pipMirrors.value.filter(m => m.type === 'mirror')) // 按速度和推荐排序的镜像源 const sortedOfficialMirrors = computed(() => @@ -106,9 +104,15 @@ const testingPipSpeed = ref(false) // 加载配置中的镜像源选择 async function loadMirrorConfig() { try { + // 从镜像管理器获取最新的pip镜像源配置(包含云端数据) + const cloudMirrors = mirrorManager.getMirrors('pip') + pipMirrors.value = [...cloudMirrors] + const config = await getConfig() - selectedPipMirror.value = config.selectedPipMirror + selectedPipMirror.value = config.selectedPipMirror || 'aliyun' console.log('pip镜像源配置已加载:', selectedPipMirror.value) + console.log('云端pip镜像源已加载:', cloudMirrors.length, '个') + console.log('云端pip镜像源详情:', cloudMirrors.map(m => ({ name: m.name, key: m.key }))) } catch (error) { console.warn('加载pip镜像源配置失败:', error) } diff --git a/frontend/src/components/initialization/PythonStep.vue b/frontend/src/components/initialization/PythonStep.vue index fa8a8f6..8e17b77 100644 --- a/frontend/src/components/initialization/PythonStep.vue +++ b/frontend/src/components/initialization/PythonStep.vue @@ -90,22 +90,20 @@ import { ref, onMounted, computed } from 'vue' import { getConfig, saveConfig } from '@/utils/config' import { - PYTHON_MIRRORS, - getOfficialMirrors, - getMirrorMirrors, sortMirrorsBySpeedAndRecommendation, type MirrorConfig } from '@/config/mirrors' +import { mirrorManager } from '@/utils/mirrorManager' const props = defineProps<{ pythonInstalled: boolean }>() -const pythonMirrors = ref(PYTHON_MIRRORS) +const pythonMirrors = ref([]) // 按类型分组的镜像源 -const officialMirrors = computed(() => getOfficialMirrors('python')) -const mirrorMirrors = computed(() => getMirrorMirrors('python')) +const officialMirrors = computed(() => pythonMirrors.value.filter(m => m.type === 'official')) +const mirrorMirrors = computed(() => pythonMirrors.value.filter(m => m.type === 'mirror')) // 按速度和推荐排序的镜像源 const sortedOfficialMirrors = computed(() => sortMirrorsBySpeedAndRecommendation(officialMirrors.value)) @@ -118,9 +116,15 @@ const reinstalling = ref(false) // 加载配置中的镜像源选择 async function loadMirrorConfig() { try { + // 从镜像管理器获取最新的Python镜像源配置(包含云端数据) + const cloudMirrors = mirrorManager.getMirrors('python') + pythonMirrors.value = [...cloudMirrors] + const config = await getConfig() - selectedPythonMirror.value = config.selectedPythonMirror + selectedPythonMirror.value = config.selectedPythonMirror || 'aliyun' console.log('Python镜像源配置已加载:', selectedPythonMirror.value) + console.log('云端Python镜像源已加载:', cloudMirrors.length, '个') + console.log('云端Python镜像源详情:', cloudMirrors.map(m => ({ name: m.name, key: m.key }))) } catch (error) { console.warn('加载Python镜像源配置失败:', error) } From 4d8d71f294b1c144094e8fc2f86d83c561be5d0e Mon Sep 17 00:00:00 2001 From: AoXuan Date: Sun, 14 Sep 2025 02:04:31 +0800 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E6=A3=80=E6=9F=A5=E9=80=BB=E8=BE=91=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=8E=AF=E5=A2=83=E4=B8=8D=E5=AE=8C=E6=95=B4=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/electron/main.ts | 52 +++++ frontend/electron/preload.ts | 2 + .../components/initialization/AutoMode.vue | 14 +- .../initialization/EnvironmentIncomplete.vue | 185 ++++++++++++++++++ .../components/initialization/ManualMode.vue | 16 +- frontend/src/views/Initialization.vue | 61 ++++-- 6 files changed, 296 insertions(+), 34 deletions(-) create mode 100644 frontend/src/components/initialization/EnvironmentIncomplete.vue diff --git a/frontend/electron/main.ts b/frontend/electron/main.ts index 72bcb66..184fca2 100644 --- a/frontend/electron/main.ts +++ b/frontend/electron/main.ts @@ -516,6 +516,47 @@ ipcMain.handle('check-environment', async () => { return checkEnvironment(appRoot) }) +// 关键文件检查 - 每次都重新检查exe文件是否存在 +ipcMain.handle('check-critical-files', async () => { + try { + const appRoot = getAppRoot() + + // 检查Python可执行文件 + const pythonPath = path.join(appRoot, 'environment', 'python', 'python.exe') + const pythonExists = fs.existsSync(pythonPath) + + // 检查pip(通常与Python一起安装) + const pipPath = path.join(appRoot, 'environment', 'python', 'Scripts', 'pip.exe') + const pipExists = fs.existsSync(pipPath) + + // 检查Git可执行文件 + const gitPath = path.join(appRoot, 'environment', 'git', 'bin', 'git.exe') + const gitExists = fs.existsSync(gitPath) + + // 检查后端主文件 + const mainPyPath = path.join(appRoot, 'main.py') + const mainPyExists = fs.existsSync(mainPyPath) + + const result = { + pythonExists, + pipExists, + gitExists, + mainPyExists + } + + log.info('关键文件检查结果:', result) + return result + } catch (error) { + log.error('检查关键文件失败:', error) + return { + pythonExists: false, + pipExists: false, + gitExists: false, + mainPyExists: false + } + } +}) + // Python相关 ipcMain.handle('download-python', async (_event, mirror = 'tsinghua') => { const appRoot = getAppRoot() @@ -547,6 +588,17 @@ ipcMain.handle('download-git', async () => { return downloadGit(appRoot) }) +ipcMain.handle('check-git-update', async () => { + try { + // 这里可以实现检查Git仓库更新的逻辑 + // 暂时返回false,表示没有更新 + return { hasUpdate: false } + } catch (error) { + log.error('检查Git更新失败:', error) + return { hasUpdate: false, error: error instanceof Error ? error.message : String(error) } + } +}) + ipcMain.handle( 'clone-backend', async (_event, repoUrl = 'https://github.com/AUTO-MAS-Project/AUTO-MAS.git') => { diff --git a/frontend/electron/preload.ts b/frontend/electron/preload.ts index 3866a77..c7331ed 100644 --- a/frontend/electron/preload.ts +++ b/frontend/electron/preload.ts @@ -19,9 +19,11 @@ contextBridge.exposeInMainWorld('electronAPI', { // 初始化相关API checkEnvironment: () => ipcRenderer.invoke('check-environment'), + checkCriticalFiles: () => ipcRenderer.invoke('check-critical-files'), downloadPython: (mirror?: string) => ipcRenderer.invoke('download-python', mirror), installPip: () => ipcRenderer.invoke('install-pip'), downloadGit: () => ipcRenderer.invoke('download-git'), + checkGitUpdate: () => ipcRenderer.invoke('check-git-update'), installDependencies: (mirror?: string) => ipcRenderer.invoke('install-dependencies', mirror), cloneBackend: (repoUrl?: string) => ipcRenderer.invoke('clone-backend', repoUrl), updateBackend: (repoUrl?: string) => ipcRenderer.invoke('update-backend', repoUrl), diff --git a/frontend/src/components/initialization/AutoMode.vue b/frontend/src/components/initialization/AutoMode.vue index 0f61829..55e4e9a 100644 --- a/frontend/src/components/initialization/AutoMode.vue +++ b/frontend/src/components/initialization/AutoMode.vue @@ -32,7 +32,7 @@ - + + + + + \ No newline at end of file diff --git a/frontend/src/components/initialization/ManualMode.vue b/frontend/src/components/initialization/ManualMode.vue index 020240c..8147af0 100644 --- a/frontend/src/components/initialization/ManualMode.vue +++ b/frontend/src/components/initialization/ManualMode.vue @@ -48,7 +48,7 @@ - + @@ -136,7 +136,7 @@