feat: market checks local installs, shows installed badge

This commit is contained in:
2026-07-27 08:47:35 +08:00
parent 3ffee330a5
commit d04ab1138c
+8 -4
View File
@@ -34,8 +34,12 @@ const PageMarket = {
const res = await fetch(endpoint);
const data = await res.json();
const items = data.items || [];
let localIds = [];
try { const lr = await fetch('/api/dashboards?category=all'); const ld = await lr.json(); if (Array.isArray(ld)) localIds = ld.map(d => d.id); } catch(e) {}
if (!items.length) { grid.innerHTML = this._emptyHtml(isScene ? '暂无场景' : '暂无仪表盘'); return; }
grid.innerHTML = items.map(d => this._cardHtml(d, isScene)).join('');
grid.innerHTML = items.map(d => this._cardHtml(d, isScene, localIds.includes(d.name || d.id))).join('');
} catch (e) { grid.innerHTML = '<div style="text-align:center;padding:40px;color:var(--danger);">加载失败</div>'; }
},
@@ -58,9 +62,9 @@ const PageMarket = {
} catch (e) { grid.innerHTML = '<div style="text-align:center;padding:40px;color:var(--danger);">加载失败</div>'; }
},
_cardHtml(d, isScene) {
_cardHtml(d, isScene, installed) {
const icon = isScene ? '🎬' : (d.icon || '📦');
const btnLabel = isScene ? '安装场景' : '安装';
const label = installed ? '已安装' : (isScene ? '安装场景' : '安装');
const btnClass = isScene ? 'btn-m-install-scene' : 'btn-m-install';
return `<div class="glass-card theme-card">
<div class="theme-card-preview">${icon}</div>
@@ -72,7 +76,7 @@ const PageMarket = {
<div class="theme-card-meta" style="margin-top:4px">
<span>${d.author||''}</span><span style="color:var(--text-tertiary)">${d.downloads||0} 次</span>
</div>
<button class="btn btn-sm btn-primary ${btnClass}" data-id="${d.id}" data-file="${d.file||''}" style="margin-top:8px;width:100%">${btnLabel}</button>
<button class="btn btn-sm btn-primary ${btnClass}" data-id="${d.id}" data-file="${d.file||''}" style="margin-top:8px;width:100%" ${installed?'disabled':''}>${label}</button>
</div></div>`;
},