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 @@