diff --git a/static/js/pages/market.js b/static/js/pages/market.js
index a103b5f..b87be2a 100644
--- a/static/js/pages/market.js
+++ b/static/js/pages/market.js
@@ -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 ? `` : '';
return `
${icon}
@@ -77,6 +78,7 @@ const PageMarket = {
${d.author||''}${d.downloads||0} 次
+ ${uninstallBtn}
`;
},
@@ -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) => {