const extend = function extend(target) { var sources = Array.prototype.slice.call(arguments, 1) for (var i = 0; i < sources.length; i += 1) { var source = sources[i] for (var key in source) { if (source.hasOwnProperty(key)) { target[key] = source[key] } } } return target } /** * 获取当前时间戳 */ const getTimestamp = (date) => { date = date || new Date() return Math.round(date / 1000) } /** * 保留指定小数位 */ const toDecimal = (float, num) => { if (typeof float !== 'number') float = parseFloat(float) return parseFloat(float.toFixed(num)) } /** * 时间戳转 yyyy-MM-dd hh:mm */ export function formatDate(timestamp, format) { const date = timestamp ? new Date(timestamp * 1000) : new Date(); const data = { 'M+': date.getMonth() + 1, 'd+': date.getDate(), 'h+': date.getHours(), 'm+': date.getMinutes(), 's+': date.getSeconds(), 'q+': Math.floor((date.getMonth() + 3) / 3), 'S+': date.getMilliseconds() } if (/(y+)/i.test(format)) { format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) } for (var key in data) { if (new RegExp('(' + key + ')').test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? data[key] : ('00' + data[key]).substr(('' + data[key]).length)) } } return format } /** * 分钟、小时、天前的处理 */ const timeAgo = function(timestamp, format) { const minute = 1000 * 60 // 把分,时,天,周,半个月,一个月用毫秒表示 const hour = minute * 60 const day = hour * 24 const now = new Date().getTime() // 获取当前时间毫秒 const spreadTime = now - timestamp * 1000 // 时间差 if (spreadTime < 0) { return } const minC = spreadTime / minute const hourC = spreadTime / hour const dayC = spreadTime / day let result if (spreadTime >= 0 && spreadTime <= minute) { result = '刚刚' } else if (minC >= 1 && minC <= 59) { result = parseInt(minC) + '分钟前' } else if (hourC >= 1 && hourC <= 23) { result = parseInt(hourC) + '小时前' } else if (dayC >= 1 && dayC < 3) { result = parseInt(dayC) + '天前' } else if (dayC >= 3 && dayC <= 7) { result = '3天前' } else { result = formatDate(timestamp, format) } return result } /** * param 将要转为URL参数字符串的对象 * key URL参数字符串的前缀 * encode true/false 是否进行URL编码,默认为true * * return URL参数字符串 */ const urlEncode = (param, key, encode) => { if (param == null) return '' const t = typeof(param) let paramStr = '' if (t === 'string' || t === 'number' || t === 'boolean') { paramStr += '&' + key + '=' + ((encode == null || encode) ? encodeURIComponent(param) : param) } else { for (let i in param) { let k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '[' + i + ']') paramStr += urlEncode(param[i], k, encode) } } return paramStr } /** * return */ const urlDecode = (query) => { if (!query) return null let hash, object = {} const hashes = query.slice(query.indexOf('?') + 1).split('&') for (let i = 0; i < hashes.length; i++) { hash = hashes[i].split('=') object[hash[0]] = hash[1] } return object; } /** * 对象合并 */ const deepAssign = (origin, source) => { for (let key in source) { if (source.hasOwnProperty(key)) { if (source[key] instanceof Object) { deepAssign(origin[key], source[key]) } else { origin[key] = source[key] } } } } /** * 状态数据 */ const display = { toast: false, // 无用 modal: false, loading: false, } // 显示消息提示 const showToast = function(text, icon) { wx.showToast({ title: text || '加载中', icon: icon || 'none', mask: true, duration: 2000 }) } // 隐藏消息提示 const hideToast = function() { wx.hideToast() } // 显示 loading const showLoading = function(text) { if (!display.loading) { display.loading = true wx.showLoading({ title: text || '加载中', mask: true }) } } // 隐藏 loading const hideLoading = function() { if (display.loading) { display.loading = false wx.hideLoading() } } // 显示失败提示 const showModal = (title, content) => { if (display.toast) hideToast() if (display.loading) hideLoading() if (!display.modal) { title = title || '信息提示' content = content || '未知错误' // content 为 null 时会报错 display.modal = true wx.showModal({ title, content: typeof content === 'object' ? JSON.stringify(content) : content, showCancel: false, confirmColor: '#3B99FC', complete: function(e) { display.modal = false } }) } } export function buildPageUrl(page, options) { let pageUrl = page; if (options) { let params = urlEncode(options) pageUrl += '?' + params.substring(1, params.length); } return pageUrl; } export function encodeRedirectUrl(page, options) { return encodeURIComponent(buildPageUrl(page, options)); } export function decodeRedirectUrl(url) { return decodeURIComponent(url); } /** * 处理富文本里的图片宽度自适应 * 1.去掉img标签里的style、width、height属性 * 2.img标签添加style属性:max-width:100%;height:auto * 3.修改所有style里的width属性为max-width:100% * 4.去掉
标签 * * @param html * @returns {void|string|*} */ export function formatRichText(html) { let newContent = html.replace(/]*>/gi, function(match, capture) { match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, ''); match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, ''); match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, ''); return match; }); newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) { match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;'); return match; }); newContent = newContent.replace(/]*\/>/gi, ''); newContent = newContent.replace(/\= res.db_time) { uni.removeStorageSync(name); return ''; } return res.value; } catch (e) { //TODO handle the exception return ''; } } /** * 下载图片 */ function getCachedImage(image_url) { return new Promise((resolve, reject) => { let arr = image_url.split('/'); let image_name = arr[arr.length - 1]; var u = getDb('cms' + image_name); if (u) { resolve(u); } else { // 本地没有缓存 需要下载 uni.downloadFile({ url: image_url, success: res => { if (res.statusCode === 200) { uni.saveFile({ tempFilePath: res.tempFilePath, success: function(res) { setDb('cms' + image_name, res.savedFilePath) resolve(res.savedFilePath); } }); } else { reject('下载失败'); } }, fail: function() { reject('下载失败'); } }); } }); } /** * 重设tabbar * @param {Object} tablist */ function setTabbar(tablist) { tablist.list.forEach((item, index) => { uni.setTabBarItem({ index: index, text: item.text, iconPath: item.image, selectedIconPath: item.selectedImage, pagePath: item.path }) }) uni.setTabBarStyle({ color: tablist.color, selectedColor: tablist.selectColor, backgroundColor: tablist.bgColor, borderStyle: 'black' }) } export default { extend, toDecimal, getTimestamp, formatDate, timeAgo, urlEncode, urlDecode, deepAssign, showToast, hideToast, showLoading, hideLoading, showModal, formatRichText, strlen, isWeiXinBrowser, getQueryString, getPath, uniCopy, setDb, getDb, getCachedImage, setTabbar, encodeRedirectUrl }