update 优化点击外部关闭popover的功能
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user