// 通用工具函数 import dayjs from 'dayjs' /** * 格式化日期时间 * @param {Date|string|number} date - 日期对象、日期字符串或时间戳 * @param {string} format - 格式化模板,默认 'YYYY-MM-DD HH:mm:ss' * @returns {string} 格式化后的日期字符串 */ export function formatDateTime(date, format = 'YYYY-MM-DD HH:mm:ss') { return dayjs(date).format(format) } /** * 格式化日期 * @param {Date|string|number} date - 日期对象、日期字符串或时间戳 * @returns {string} 格式化后的日期字符串 YYYY-MM-DD */ export function formatDate(date) { return formatDateTime(date, 'YYYY-MM-DD') } /** * 格式化时间 * @param {Date|string|number} date - 日期对象、日期字符串或时间戳 * @returns {string} 格式化后的时间字符串 HH:mm:ss */ export function formatTime(date) { return formatDateTime(date, 'HH:mm:ss') } /** * 数字格式化,添加千分位 * @param {number} num - 数字 * @param {number} decimals - 小数位数,默认0 * @returns {string} 格式化后的数字字符串 */ export function formatNumber(num, decimals = 0) { return Number(num).toLocaleString('zh-CN', { minimumFractionDigits: decimals, maximumFractionDigits: decimals }) } /** * 获取随机颜色 * @returns {string} 颜色值 */ export function getRandomColor() { const colors = [ '#409EFF', '#67C23A', '#E6A23C', '#F56C6C', '#909399', '#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452' ] return colors[Math.floor(Math.random() * colors.length)] } /** * 防抖函数 * @param {Function} func - 要防抖的函数 * @param {number} wait - 等待时间(毫秒) * @returns {Function} 防抖后的函数 */ export function debounce(func, wait = 300) { let timeout return function executedFunction(...args) { const later = () => { clearTimeout(timeout) func(...args) } clearTimeout(timeout) timeout = setTimeout(later, wait) } } /** * 节流函数 * @param {Function} func - 要节流的函数 * @param {number} wait - 等待时间(毫秒) * @returns {Function} 节流后的函数 */ export function throttle(func, wait = 300) { let inThrottle return function executedFunction(...args) { if (!inThrottle) { func(...args) inThrottle = true setTimeout(() => inThrottle = false, wait) } } } /** * 深拷贝 * @param {any} obj - 要拷贝的对象 * @returns {any} 拷贝后的对象 */ export function deepClone(obj) { if (obj === null || typeof obj !== 'object') return obj if (obj instanceof Date) return new Date(obj) if (obj instanceof Array) return obj.map(item => deepClone(item)) if (obj instanceof Object) { const cloneObj = {} for (const key in obj) { if (obj.hasOwnProperty(key)) { cloneObj[key] = deepClone(obj[key]) } } return cloneObj } }