feat: market checks local installs, shows installed badge
This commit is contained in:
@@ -34,8 +34,12 @@ const PageMarket = {
|
|||||||
const res = await fetch(endpoint);
|
const res = await fetch(endpoint);
|
||||||
const data = await res.json();
|
const data = await res.json();
|
||||||
const items = data.items || [];
|
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; }
|
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>'; }
|
} 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>'; }
|
} 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 icon = isScene ? '🎬' : (d.icon || '📦');
|
||||||
const btnLabel = isScene ? '安装场景' : '安装';
|
const label = installed ? '已安装' : (isScene ? '安装场景' : '安装');
|
||||||
const btnClass = isScene ? 'btn-m-install-scene' : 'btn-m-install';
|
const btnClass = isScene ? 'btn-m-install-scene' : 'btn-m-install';
|
||||||
return `<div class="glass-card theme-card">
|
return `<div class="glass-card theme-card">
|
||||||
<div class="theme-card-preview">${icon}</div>
|
<div class="theme-card-preview">${icon}</div>
|
||||||
@@ -72,7 +76,7 @@ const PageMarket = {
|
|||||||
<div class="theme-card-meta" style="margin-top:4px">
|
<div class="theme-card-meta" style="margin-top:4px">
|
||||||
<span>${d.author||''}</span><span style="color:var(--text-tertiary)">${d.downloads||0} 次</span>
|
<span>${d.author||''}</span><span style="color:var(--text-tertiary)">${d.downloads||0} 次</span>
|
||||||
</div>
|
</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>`;
|
</div></div>`;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user