diff --git a/packages/ui/src/components/FavoriteImportPanel.vue b/packages/ui/src/components/FavoriteImportPanel.vue index f1b84cca..fa7c2f4f 100644 --- a/packages/ui/src/components/FavoriteImportPanel.vue +++ b/packages/ui/src/components/FavoriteImportPanel.vue @@ -173,6 +173,7 @@ import { getEnvVar } from '@prompt-optimizer/core' import { useToast } from '../composables/ui/useToast' import type { AppServices } from '../types/services' import { getI18nErrorMessage } from '../utils/error' +import { openExternalUrl } from '../utils/open-external-url' import { parsePromptGardenImportInput } from '../utils/prompt-garden-import' import { importFavoriteResourcePackage, @@ -230,25 +231,8 @@ const handleFileChange = (options: UploadChangeParam) => { fileList.value = options.fileList.slice(0, 1) } -const openExternalUrl = async (url: string) => { - if (!url) return - - if (typeof window !== 'undefined' && window.electronAPI?.shell) { - try { - await window.electronAPI.shell.openExternal(url) - return - } catch (error) { - console.error('[PromptGarden] Failed to open external URL in Electron:', error) - } - } - - if (typeof window !== 'undefined') { - window.open(url, '_blank') - } -} - const handlePromptGardenDiscover = () => { - void openExternalUrl(promptGardenBaseUrl.value) + void openExternalUrl(promptGardenBaseUrl.value, { logPrefix: 'PromptGarden' }) } const readFileAsArrayBuffer = (file: File) => diff --git a/packages/ui/src/components/MainLayout.vue b/packages/ui/src/components/MainLayout.vue index cec8aa1e..155d10d8 100644 --- a/packages/ui/src/components/MainLayout.vue +++ b/packages/ui/src/components/MainLayout.vue @@ -76,6 +76,7 @@ import { NLayout, NLayoutHeader, NLayoutContent, NFlex, NText } from 'naive-ui' import ToastUI from './Toast.vue' import logoImage from '../assets/logo.png' import AppPreviewImage from './media/AppPreviewImage.vue' +import { openExternalUrl } from '../utils/open-external-url' const { t } = useI18n() @@ -125,20 +126,7 @@ const logoSize = computed(() => { }) const openBrandWebsite = async () => { - const url = 'https://always200.com' - - if (typeof window !== 'undefined' && window.electronAPI?.shell) { - try { - await window.electronAPI.shell.openExternal(url) - return - } catch (error) { - console.error('Failed to open brand website in Electron:', error) - } - } - - if (typeof window !== 'undefined') { - window.open(url, '_blank') - } + await openExternalUrl('https://always200.com', { logPrefix: 'MainLayout' }) } diff --git a/packages/ui/src/components/OutputDisplayCore.vue b/packages/ui/src/components/OutputDisplayCore.vue index 3d1bbc5d..2a5b1fda 100644 --- a/packages/ui/src/components/OutputDisplayCore.vue +++ b/packages/ui/src/components/OutputDisplayCore.vue @@ -40,7 +40,6 @@ - - - - + + + + + + + + + - @@ -193,15 +221,19 @@