Pārlūkot izejas kodu

fix: 字段/店铺下拉支持点击空白处与 Esc 关闭

- 之前只有点按钮切换,点页面空白不收起
- 新增 document 级点击监听(菜单内部与按钮自身不触发)与 Esc 关闭
liangzhao 2 nedēļas atpakaļ
vecāks
revīzija
352e756d13
1 mainītis faili ar 23 papildinājumiem un 0 dzēšanām
  1. 23 0
      public/ops.js

+ 23 - 0
public/ops.js

@@ -201,6 +201,28 @@
     return { refresh: () => { refreshButton(); renderList(); } };
   }
 
+  let menuDismissBound = false;
+
+  /** 点击空白处 / Esc 关闭下拉(按钮本身已 stopPropagation,不会误关) */
+  function bindMenuDismiss() {
+    if (menuDismissBound) return;
+    menuDismissBound = true;
+    document.addEventListener('click', (event) => {
+      document.querySelectorAll('.ops-multi').forEach((root) => {
+        const menu = root.querySelector('.ops-multi-menu');
+        if (!menu || menu.hidden) return;
+        if (root.contains(event.target)) return;
+        menu.hidden = true;
+        const btn = root.querySelector('.ops-multi-btn');
+        if (btn) btn.setAttribute('aria-expanded', 'false');
+      });
+    });
+    document.addEventListener('keydown', (event) => {
+      if (event.key !== 'Escape') return;
+      document.querySelectorAll('.ops-multi-menu').forEach((menu) => { menu.hidden = true; });
+    });
+  }
+
   function renderBar() {
     const bar = $('opsBar');
     if (!bar) return;
@@ -818,6 +840,7 @@
   }
 
   function bindOnce() {
+    bindMenuDismiss();
     const uploadBtn = $('btnOpsUpload');
     if (uploadBtn) uploadBtn.addEventListener('click', openUpload);
     const recordsBtn = $('btnOpsRecords');