directives.js 914 B

1234567891011121314151617181920212223242526272829303132333435
  1. import Vue from 'vue';
  2. // 定义全局自定义指令
  3. Vue.directive('submit-once', {
  4. inserted(el, binding) {
  5. const [fn, ...args] = binding.value;
  6. console.log(fn, args);
  7. if (typeof fn !== 'function') {
  8. console.error('v-submit-once 指令需要传入一个函数');
  9. return;
  10. }
  11. el.addEventListener('click', async () => {
  12. console.log(el);
  13. if (el.disabled) return;
  14. // 禁用按钮并显示加载状态
  15. el.disabled = true;
  16. const originalText = el.innerHTML;
  17. el.innerHTML = '<i class="el-icon-loading"></i> 处理中...';
  18. try {
  19. // 调用传入的提交方法
  20. await fn(...args);
  21. } catch (error) {
  22. console.error('提交出错:', error);
  23. } finally {
  24. console.log('fn调用完了');
  25. // 恢复按钮状态
  26. el.disabled = false;
  27. el.innerHTML = originalText;
  28. }
  29. });
  30. }
  31. });