directive.ts 1.64 KB
import type { App } from 'vue'
const customClick = (e, binding, el) => {
  //阻止事件冒泡
  e.stopPropagation()
  if (!el.disabled) { // 判断条件
    el.disabled = true
    setTimeout(() => {
      el.disabled = false
    }, binding.arg || 1000)
    // 正常触发点击事件
    binding.value();
  } else {
    // 已经成功拦截点击事件
    console.log('已经成功拦截点击事件');
  };

};

export default function directive(app: App) {
  // 注册 v-auth 和 v-auth-all 指令
  app.directive('auth', {
    mounted: (el, binding) => {
      if (!useAuth().auth(binding.value)) {
        el.remove()
      }
    },
  })
  app.directive('auth-all', {
    mounted: (el, binding) => {
      if (!useAuth().authAll(binding.value)) {
        el.remove()
      }
    },
  })
  app.directive('preReClick', {
    mounted: (el, binding) => {
      nextTick(() => {
        el.addEventListener('click', () => {
          if (el.style['pointer-events'] != 'none') {
            el.style['pointer-events'] = 'none';
            setTimeout(() => {
              el.style['pointer-events'] = 'auto';
            }, binding.value || 500)
          }
        })
      })
    },
  })
  app.directive('loadmore', {
    mounted: (el, binding) => {
      nextTick(() => {
        const element = el.querySelector(".el-select-dropdown .el-select-dropdown__wrap")
        element && element.addEventListener("scroll", () => {
          const { scrollTop, scrollHeight, clientHeight } = element
          const scrollDistance = scrollHeight - scrollTop <= clientHeight
          if (scrollDistance) {
            binding.value()
          }
        })
      })
    },
  })
}