update 优化点击外部关闭popover的功能

This commit is contained in:
2026-01-08 19:03:39 +08:00
parent 58b99b675d
commit 0c5a97514b
2 changed files with 17 additions and 19 deletions

View File

@@ -53,22 +53,26 @@ const chartPopover = ref();
const handleClickOutside = (event: Event) => {
const popover = chartPopover.value;
if (!popover) return;
const triggerEl = popover.popperRef?.triggerRef;
const popperEl = popover.popperRef?.popperRef;
// 获取所有的 popover 弹出层,包括可能存在的其他 popover
const allPopovers = document.querySelectorAll('.el-popover');
// 检查点击是否在任何 popover 内部
const isClickInsidePopover = Array.from(allPopovers).some((popover) =>
popover.contains(event.target as Node)
);
// 如果点击的是触发元素、弹出层内容或任何 popover 内部,不执行关闭操作
if (
triggerEl?.contains(event.target as Node) ||
popperEl?.contains(event.target as Node) ||
isClickInsidePopover
) {
// 检查是否点击在当前popover内
if (triggerEl?.contains(event.target as Node) || popperEl?.contains(event.target as Node)) {
return;
}
// 检查是否点击在其他popper类组件内包括时间选择器等
const target = event.target as HTMLElement;
const isInPopper = target.closest('.el-popper') ||
target.closest('.el-picker-panel') ||
target.closest('.el-select-dropdown') ||
target.closest('.el-cascader-panel');
if (isInPopper) {
return;
}
// 点击外部时关闭 popover
visible.value = false;
};

View File

@@ -24,19 +24,13 @@ initThemeColor();
const app = createApp(App);
import { hasPermission, permission } from '@/utils/permission';
import { permission } from '@/utils/permission';
// 全局引入图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component);
}
app.directive('permission', permission); // 按钮权限_自定义指令
declare global {
interface Window {
hasPermission: typeof hasPermission
}
}
window.hasPermission = hasPermission;
app.use(createPinia());
app.use(router);