diff --git a/src/utils/useDebounce.js b/src/utils/useDebounce.js index 2a702dc..69da5c5 100644 --- a/src/utils/useDebounce.js +++ b/src/utils/useDebounce.js @@ -1,43 +1,57 @@ -import { getCurrentInstance, onUnmounted } from 'vue'; +import { getCurrentInstance, onUnmounted } from 'vue' // 防抖 -export function useDebounce(fn, delay = 500) { - let timer = null; - let instance = getCurrentInstance(); // 获取当前组件实例 +export function useDebounce(fn, delay = 500, immediate = false) { + let timer = null + let instance = getCurrentInstance() // 获取当前组件实例 const debounced = (...args) => { - if (timer) clearTimeout(timer); + if (timer) clearTimeout(timer) + + if (immediate && !timer) { + // 立即执行 + fn.apply(this, args) + } + timer = setTimeout(() => { - fn(...args); - }, delay); - }; + if (!immediate) fn.apply(this, args) + timer = null // 清理timer引用 + }, delay) + } + + // 取消防抖执行 + debounced.cancel = () => { + clearTimeout(timer) + timer = null + } + + // 立即执行 + debounced.flush = (...args) => { + clearTimeout(timer) + timer = null + fn.apply(this, args) + } + if (instance) { // 自动注册卸载钩子(仅组件内生效) onUnmounted(() => { - clearTimeout(timer); // 清理定时器 - timer = null; - }); - } else { - // 非组件环境返回手动清理方法 - debounced.cancel = () => { - clearTimeout(timer); - timer = null; - }; + debounced.cancel() + }) } - return debounced; + return debounced } // 节流 export function useThrottle(fn, delay = 1000) { - let lastCall = 0; + let lastCall = 0 const throttled = (...args) => { - const now = Date.now(); - if (now - lastCall < delay) return; - lastCall = now; - fn(...args); - }; + const now = Date.now() + if (now - lastCall < delay) return + lastCall = now + fn(...args) + } - return throttled; + return throttled } diff --git a/src/views/Invitation/inviteAgency.vue b/src/views/Invitation/inviteAgency.vue index b4313c8..4d18054 100644 --- a/src/views/Invitation/inviteAgency.vue +++ b/src/views/Invitation/inviteAgency.vue @@ -218,9 +218,12 @@