feat: 新增点击空白关闭指令

Former-commit-id: b972dcaec196fe3e5a261cebfece91d3596a51ab
This commit is contained in:
haoxr
2023-01-21 15:35:15 +08:00
parent 919bedcc0e
commit 3924565087
4 changed files with 71 additions and 3 deletions

View File

@@ -0,0 +1,52 @@
import { Directive } from 'vue';
declare type NoNameFUnctionReturnVoid = () => void;
export const clickOutside: Directive<HTMLElement, NoNameFUnctionReturnVoid> =
(() => {
const checkIfClickedInside = (
event: Event,
element: HTMLElement,
callBackFn: NoNameFUnctionReturnVoid
) => {
console.log('element', element);
const isInside = event.composedPath().includes(element);
if (isInside) {
return false;
} else {
callBackFn();
}
};
const allListeners: {
element: HTMLElement;
listener: (e: Event) => void;
}[] = [];
return {
created(element) {
element.dataset.clicked = 'false';
},
mounted(element, binding) {
const myListener = (e: Event) => {
checkIfClickedInside(e, element, binding.value);
};
allListeners.push({ element, listener: myListener });
window.addEventListener('click', myListener);
},
unmounted(element) {
const eventIndex = allListeners.findIndex(
listener => listener.element === element
);
if (eventIndex !== -1) {
const listener = allListeners[eventIndex].listener;
window.removeEventListener('click', listener);
allListeners.splice(eventIndex, 1);
}
}
};
})();

View File

@@ -0,0 +1,15 @@
import { Directive } from 'vue';
/**
* 按钮防抖
*/
export const deBounce: Directive = {
mounted(el: HTMLElement) {
el.addEventListener('click', () => {
el.classList.add('is-disabled');
setTimeout(() => {
el.classList.remove('is-disabled');
}, 2000);
});
}
};

View File

@@ -1,2 +1,3 @@
export { hasPerm, hasRole } from './permission';
export { deBounce } from './utils';
export { clickOutside } from './ClickOutside';
export { deBounce } from './Debounce';

View File

@@ -2,7 +2,7 @@ import { useUserStoreHook } from '@/store/modules/user';
import { Directive, DirectiveBinding } from 'vue';
/**
* 按钮权限校验
* 按钮权限
*/
export const hasPerm: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
@@ -32,7 +32,7 @@ export const hasPerm: Directive = {
};
/**
* 角色权限校验
* 角色权限
*/
export const hasRole: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {