/** * 截断文本,超过最大长度追加省略号 * @param {string} text * @param {number} [maxLen=80] * @returns {string} */ export function truncate(text, maxLen = 80) { if (!text) return '' const s = String(text) return s.length > maxLen ? `${s.slice(0, maxLen)}…` : s } /** * 安全拼接类名 * @param {...(string | false | null | undefined)} args * @returns {string} */ export function classnames(...args) { return args.filter(Boolean).join(' ') } /** * 防抖 * @param {Function} fn * @param {number} [wait=300] * @returns {Function} */ export function debounce(fn, wait = 300) { let timer = null return function debounced(...args) { if (timer) { clearTimeout(timer) } timer = setTimeout(() => { fn.apply(this, args) }, wait) } }