/** * Soul创业实验 - 工具函数 */ // 格式化时间 const formatTime = date => { const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() const second = date.getSeconds() return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}` } const formatNumber = n => { n = n.toString() return n[1] ? n : `0${n}` } // 格式化日期 const formatDate = date => { const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() return `${year}-${formatNumber(month)}-${formatNumber(day)}` } // 格式化金额 const formatMoney = (amount, decimals = 2) => { return Number(amount).toFixed(decimals) } // 防抖函数 const debounce = (fn, delay = 300) => { let timer = null return function (...args) { if (timer) clearTimeout(timer) timer = setTimeout(() => { fn.apply(this, args) }, delay) } } // 节流函数 const throttle = (fn, delay = 300) => { let last = 0 return function (...args) { const now = Date.now() if (now - last >= delay) { fn.apply(this, args) last = now } } } // 生成唯一ID const generateId = () => { return 'id_' + Date.now().toString(36) + Math.random().toString(36).substr(2) } // 检查手机号格式 const isValidPhone = phone => { return /^1[3-9]\d{9}$/.test(phone) } // 检查微信号格式 const isValidWechat = wechat => { return wechat && wechat.length >= 6 && wechat.length <= 20 } // 深拷贝 const 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 copy = {} Object.keys(obj).forEach(key => { copy[key] = deepClone(obj[key]) }) return copy } } // 获取URL参数 const getQueryParams = url => { const params = {} const queryString = url.split('?')[1] if (queryString) { queryString.split('&').forEach(pair => { const [key, value] = pair.split('=') params[decodeURIComponent(key)] = decodeURIComponent(value || '') }) } return params } // 存储操作 const storage = { get(key) { try { return wx.getStorageSync(key) } catch (e) { console.error('获取存储失败:', e) return null } }, set(key, value) { try { wx.setStorageSync(key, value) return true } catch (e) { console.error('设置存储失败:', e) return false } }, remove(key) { try { wx.removeStorageSync(key) return true } catch (e) { console.error('删除存储失败:', e) return false } }, clear() { try { wx.clearStorageSync() return true } catch (e) { console.error('清除存储失败:', e) return false } } } // 显示Toast const showToast = (title, icon = 'none', duration = 2000) => { wx.showToast({ title, icon, duration }) } // 显示Loading const showLoading = (title = '加载中...') => { wx.showLoading({ title, mask: true }) } // 隐藏Loading const hideLoading = () => { wx.hideLoading() } // 显示确认框 const showConfirm = (title, content) => { return new Promise((resolve) => { wx.showModal({ title, content, success: res => resolve(res.confirm) }) }) } module.exports = { formatTime, formatDate, formatMoney, formatNumber, debounce, throttle, generateId, isValidPhone, isValidWechat, deepClone, getQueryParams, storage, showToast, showLoading, hideLoading, showConfirm }