directives.js 726 B

123456789101112131415161718192021222324252627
  1. import Vue from 'vue';
  2. // 定义全局自定义指令
  3. Vue.directive('submit-once', {
  4. bind(el, binding, vnode) {
  5. el.addEventListener('click', async () => {
  6. if (el.disabled) return;
  7. // 禁用按钮并显示加载状态
  8. el.disabled = true;
  9. const originalText = el.innerHTML;
  10. el.innerHTML = '<i class="el-icon-loading"></i> 提交中...';
  11. try {
  12. // 调用传入的提交方法
  13. if (typeof binding.value === 'function') {
  14. await binding.value();
  15. }
  16. } catch (error) {
  17. console.error('提交出错:', error);
  18. } finally {
  19. // 恢复按钮状态
  20. el.disabled = false;
  21. el.innerHTML = originalText;
  22. }
  23. });
  24. }
  25. });