From 5ffbecefd278ff63df01693e51901b5456f35c2f Mon Sep 17 00:00:00 2001 From: jingrow Date: Mon, 27 Oct 2025 03:41:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=B8=82=E5=9C=BA=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=A1=B5=E5=92=8C=E8=AF=A6=E6=83=85=E9=A1=B5=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=B8=BA=E5=8D=B3=E6=97=B6=E6=9F=A5=E8=AF=A2=E5=B7=B2?= =?UTF-8?q?=E5=AE=89=E8=A3=85app=EF=BC=8C=E5=88=A0=E9=99=A4=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=BC=93=E5=AD=98=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/src/views/dev/AppDetail.vue | 44 +++++++++++++++++-- .../frontend/src/views/dev/AppMarketplace.vue | 18 +++----- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/apps/jingrow/frontend/src/views/dev/AppDetail.vue b/apps/jingrow/frontend/src/views/dev/AppDetail.vue index c75ce03..b1b1b4a 100644 --- a/apps/jingrow/frontend/src/views/dev/AppDetail.vue +++ b/apps/jingrow/frontend/src/views/dev/AppDetail.vue @@ -12,11 +12,17 @@ {{ t('Back') }} - + - {{ t('Install') }} + {{ isCurrentAppInstalled ? t('Update') : t('Install') }} @@ -151,8 +157,18 @@ const installMessage = ref('') const installStatus = ref<'success' | 'error' | 'info'>('info') const showProgressModal = ref(false) +// 已安装应用集合 +const installedAppNames = ref>(new Set()) + const appName = computed(() => route.params.name as string) +// 检查当前应用是否已安装 +const isCurrentAppInstalled = computed(() => { + if (!app.value) return false + const appName = app.value.app_name || app.value.name || '' + return installedAppNames.value.has(appName.toLowerCase()) +}) + async function loadAppDetail() { loading.value = true error.value = '' @@ -261,6 +277,9 @@ async function performInstall() { installMessage.value = t('应用安装成功!') message.success(t('应用安装成功')) + // 刷新已安装应用列表 + loadInstalledApps() + setTimeout(() => { showProgressModal.value = false }, 2000) @@ -280,8 +299,27 @@ async function performInstall() { } } +// 加载已安装应用列表 +async function loadInstalledApps() { + try { + const response = await axios.get('/jingrow/installed-app-names') + if (response.data.success) { + const apps = response.data.apps || [] + installedAppNames.value = new Set(apps) + } + } catch (error) { + console.error('Load installed apps error:', error) + } +} + onMounted(() => { loadAppDetail() + loadInstalledApps() + + // 监听全局事件 + window.addEventListener('installedAppsUpdated', () => { + loadInstalledApps() + }) }) diff --git a/apps/jingrow/frontend/src/views/dev/AppMarketplace.vue b/apps/jingrow/frontend/src/views/dev/AppMarketplace.vue index 1710049..d532492 100644 --- a/apps/jingrow/frontend/src/views/dev/AppMarketplace.vue +++ b/apps/jingrow/frontend/src/views/dev/AppMarketplace.vue @@ -361,23 +361,10 @@ function truncateText(text: string, maxLength: number): string { // 加载已安装应用列表 async function loadInstalledApps() { try { - const cached = sessionStorage.getItem('installed_apps_names') - if (cached) { - const data = JSON.parse(cached) - if (Date.now() - data.timestamp < 30 * 60 * 1000) { - installedAppNames.value = new Set(data.apps || []) - return - } - } - const response = await axios.get('/jingrow/installed-app-names') if (response.data.success) { const apps = response.data.apps || [] installedAppNames.value = new Set(apps) - sessionStorage.setItem('installed_apps_names', JSON.stringify({ - apps, - timestamp: Date.now() - })) } } catch (error) { console.error('Load installed apps error:', error) @@ -393,6 +380,11 @@ function isAppInstalled(appName: string): boolean { onMounted(() => { loadApps() loadInstalledApps() + + // 监听全局事件 + window.addEventListener('installedAppsUpdated', () => { + loadInstalledApps() + }) }) // 监听搜索和排序变化