feat: uninstall button for locally installed market packages
This commit is contained in:
@@ -66,6 +66,7 @@ const PageMarket = {
|
||||
const icon = isScene ? '🎬' : (d.icon || '📦');
|
||||
const label = installed ? '已安装' : (isScene ? '安装场景' : '安装');
|
||||
const btnClass = isScene ? 'btn-m-install-scene' : 'btn-m-install';
|
||||
const uninstallBtn = installed ? `<button class="btn btn-sm btn-danger btn-m-uninstall" data-name="${d.name||d.id}" style="margin-top:4px;width:100%">卸载</button>` : '';
|
||||
return `<div class="glass-card theme-card">
|
||||
<div class="theme-card-preview">${icon}</div>
|
||||
<div class="theme-card-info">
|
||||
@@ -77,6 +78,7 @@ const PageMarket = {
|
||||
<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%" ${installed?'disabled':''}>${label}</button>
|
||||
${uninstallBtn}
|
||||
</div></div>`;
|
||||
},
|
||||
|
||||
@@ -107,6 +109,22 @@ const PageMarket = {
|
||||
const btnUpdate = e.target.closest('.btn-my-update');
|
||||
const btnDelete = e.target.closest('.btn-my-delete');
|
||||
|
||||
if (e.target.closest('.btn-m-uninstall')) {
|
||||
const ubtn = e.target.closest('.btn-m-uninstall');
|
||||
if (!confirm('确定卸载 "' + (ubtn.dataset.name||'') + '"?')) return;
|
||||
try {
|
||||
const r = await fetch('/api/dashboards?category=all');
|
||||
const list = (await r.json()) || [];
|
||||
const dash = list.find(d => d.id === ubtn.dataset.name || d.name === ubtn.dataset.name);
|
||||
if (dash) {
|
||||
await fetch('/api/dashboards/' + dash.id, { method: 'DELETE' });
|
||||
Toast.show('已卸载', 'success');
|
||||
this._loadItems();
|
||||
} else { Toast.show('未找到本地安装', 'error'); }
|
||||
} catch (e) { Toast.show('卸载失败', 'error'); }
|
||||
return;
|
||||
}
|
||||
|
||||
if (btnUpdate) {
|
||||
const input = document.createElement('input'); input.type = 'file'; input.accept = btnUpdate.dataset.type;
|
||||
input.onchange = async (ev) => {
|
||||
|
||||
Reference in New Issue
Block a user