From 3c1a17f4d7308fe922cec0061b5d861e010d4e79 Mon Sep 17 00:00:00 2001 From: Qiufeng Date: Fri, 28 Aug 2026 00:53:31 +0800 Subject: [PATCH] fix: normalize marketplace version status --- plugins/plugin-admin/ui/app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/plugin-admin/ui/app.js b/plugins/plugin-admin/ui/app.js index 030e8a1..089a0e6 100644 --- a/plugins/plugin-admin/ui/app.js +++ b/plugins/plugin-admin/ui/app.js @@ -42,6 +42,7 @@ const logout = async () => { try { await api('/logout', { method: 'POST' }) } catch (_) {} csrf = ''; setLoggedIn(null); $('#login-form').hidden = false; $('#twofa-form').hidden = true } const badge = (state) => `${escapeHtml(state || 'unknown')}` const escapeHtml = (value) => String(value == null ? '' : value).replace(/[&<>"']/g, (char) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[char])) + const normalizedVersion = (value) => String(value || '').trim().replace(/^v/, '') const marketplaceInstalled = (item) => { const installed = installedPlugins.get(String(item.plugin_id || '')) return !!(item.installed || installed) @@ -55,7 +56,7 @@ if (!items.length) { root.innerHTML = '
暂无可用插件
'; return } for (const item of items) { const pluginId = String(item.plugin_id || ''); const version = String(item.version || '') - const installed = marketplaceInstalled(item); const sameVersion = installed && String(item.installed_version || '') === version; const card = document.createElement('article'); card.className = 'market-card' + const installed = marketplaceInstalled(item); const sameVersion = installed && normalizedVersion(item.installed_version) === normalizedVersion(version); const card = document.createElement('article'); card.className = 'market-card' const marketButtonLabel = installed ? (sameVersion ? '已入库' : '请在已入库卡片中升级') : '下载并入库' card.innerHTML = `

${escapeHtml(item.name || pluginId)}

${escapeHtml(pluginId)} · v${escapeHtml(version)}

${marketplaceStatus(item)}

${escapeHtml(item.description || '由受控插件目录提供的 Business Plugin')}

发布者
${escapeHtml(item.publisher || item.publisher_key_id || '-')}
兼容性
${escapeHtml(item.compatibility && item.compatibility.status || item.compatibility_status || 'unknown')}
包 SHA-256
${escapeHtml(item.archive_sha256 || item.sha256 || '-')}
` root.appendChild(card)