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 icon = isScene ? '🎬' : (d.icon || '📦');
|
||||||
const label = installed ? '已安装' : (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';
|
||||||
|
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">
|
return `<div class="glass-card theme-card">
|
||||||
<div class="theme-card-preview">${icon}</div>
|
<div class="theme-card-preview">${icon}</div>
|
||||||
<div class="theme-card-info">
|
<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>
|
<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%" ${installed?'disabled':''}>${label}</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>
|
||||||
|
${uninstallBtn}
|
||||||
</div></div>`;
|
</div></div>`;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -107,6 +109,22 @@ const PageMarket = {
|
|||||||
const btnUpdate = e.target.closest('.btn-my-update');
|
const btnUpdate = e.target.closest('.btn-my-update');
|
||||||
const btnDelete = e.target.closest('.btn-my-delete');
|
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) {
|
if (btnUpdate) {
|
||||||
const input = document.createElement('input'); input.type = 'file'; input.accept = btnUpdate.dataset.type;
|
const input = document.createElement('input'); input.type = 'file'; input.accept = btnUpdate.dataset.type;
|
||||||
input.onchange = async (ev) => {
|
input.onchange = async (ev) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user