/** * 金钱单位置换 2999 --> 2,999.00 * @param val * @param unit * @param location * @returns {*} */ export function unitPrice(val, unit, location) { let price = formatPrice(val) if (location === 'before') { return price.substr(0, price.length - 3) } if (location === 'after') { return price.substr(-2) } return (unit || '') + price } // 转义 export function enCode(v1) { var entry = { "'": "'", "<": "<", ">": ">", "(": "(", ")": ")" }; v1 = v1.replace(/(')|(<)|(>)|(()|())|\s/gi, function($0) { return entry[$0] || $0; }); return v1; } import {router} from "@/router/index"; /** * 自定义跳转 */ export function customRouterPush(push){ const setting = window.localStorage.getItem('admin-setting') ? JSON.parse(window.localStorage.getItem('admin-setting')) : {}; if(setting.isUseTabsRouter){ router.push(push) } else{ if(Object.keys(setting).length == 0){router.push(push)} else{ let url = router.resolve(push); window.open(url.href, '_blank'); } } } /** * 订单来源 */ export function clientTypeWay(val) { if (val == "H5") { return "移动端"; } else if (val == "PC") { return "PC端"; } else if (val == "WECHAT_MP") { return "小程序端"; } else if (val == "APP") { return "移动应用端"; } else { return val; } } let timer, flag; /** * 节流原理:在一定时间内,只能触发一次 * * @param {Function} func 要执行的回调函数 * @param {Number} wait 延时的时间 * @param {Boolean} immediate 是否立即执行 * @return null */ export function throttle(func, wait = 500, immediate = true) { if (immediate) { if (!flag) { flag = true; // 如果是立即执行,则在wait毫秒内开始时执行 typeof func === 'function' && func(); timer = setTimeout(() => { flag = false; }, wait); } } else { if (!flag) { flag = true // 如果是非立即执行,则在wait毫秒内的结束处执行 timer = setTimeout(() => { flag = false typeof func === 'function' && func(); }, wait); } } }; let timeout = null; /** * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数 * * @param {Function} func 要执行的回调函数 * @param {Number} wait 延时的时间 * @param {Boolean} immediate 是否立即执行 * @return null */ export function debounce(func, wait = 500, immediate = false) { // 清除定时器 if (timeout !== null) clearTimeout(timeout); // 立即执行,此类情况一般用不到 if (immediate) { var callNow = !timeout; timeout = setTimeout(function() { timeout = null; }, wait); if (callNow) typeof func === 'function' && func(); } else { // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法 timeout = setTimeout(function() { typeof func === 'function' && func(); }, wait); } } /** * 货币格式化 * @param price * @returns {string} */ export function formatPrice(price) { if (typeof price !== 'number') return price return String(Number(price).toFixed(2)).replace(/\B(?=(\d{3})+(?!\d))/g, ',') } /** * 处理unix时间戳,转换为可阅读时间格式 * @param unix * @param format * @returns {*|string} */ export function unixToDate(unix, format) { let _format = format || 'yyyy-MM-dd hh:mm:ss' const d = new Date(unix * 1000) const o = { 'M+': d.getMonth() + 1, 'd+': d.getDate(), 'h+': d.getHours(), 'm+': d.getMinutes(), 's+': d.getSeconds(), 'q+': Math.floor((d.getMonth() + 3) / 3), S: d.getMilliseconds() } if (/(y+)/.test(_format)) _format = _format.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length)) for (const k in o) if (new RegExp('(' + k + ')').test(_format)) _format = _format.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) return _format } //是否格式化 export function unixWhether(status) { switch (status) { case 'YES': return "是" case 'NO': return "否" } } export function unixSellerBillStatus(status_code) { switch (status_code) { case 'OUT': return '已出账' case 'CHECK': return '已对账' case 'EXAMINE': return '已审核' case 'PAY': return '已结算' case 'COMPLETE': return '已完成' } } export function unixSwitchStatus(status_code) { switch (status_code) { case 'OPEN': return '开启' case 'CLOSE': return '关闭' } } /** * 13888888888 -> 138****8888 * @param mobile * @returns {*} */ export function secrecyMobile(mobile) { mobile = String(mobile) if (!/\d{11}/.test(mobile)) { return mobile } return mobile.replace(/(\d{3})(\d{4})(\d{4})/, '$1****$3') } export function formatDate(date, fmt) { if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); } let o = { 'M+': date.getMonth() + 1, 'd+': date.getDate(), 'h+': date.getHours(), 'm+': date.getMinutes(), 's+': date.getSeconds() }; for (let k in o) { if (new RegExp(`(${k})`).test(fmt)) { let str = o[k] + ''; fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str)); } } return fmt; }; // 楼层装修,选择链接处理跳转方式 export function formatLinkType (item) { const types = ['goods', 'category', 'shops', 'marketing', 'pages', 'other','special'] // 所有跳转的分类 依次为 商品、分类、店铺、活动、页面、其他 let url = ''; switch (item.___type) { case 'goods': url = `/goodsDetail?skuId=${item.id}&goodsId=${item.goodsId}`; break; case 'special': url = `/topic?id=${item.id}` break; case 'category': url = `/goodsList?categoryId=${item.allId}`; break; case 'shops': url = `/merchant?id=${item.id}`; break; case 'marketing': // 暂无数据,需要后续修改 url = `/seckill?id=${item.id}`; break; case 'pages': // 暂无数据,需要后续修改 url = `/article?id=${item.id}`; break; case 'other': switch (item.title) { case '首页': url = '/'; break; case '购物车': url = '/cart'; break; case '我的订单': url = '/home/MyOrder'; break; case '收藏商品': url = '/home/Favorites'; break; case '个人中心': url = '/home'; break; case '外部链接': url = item.url; break; case '秒杀频道': url = '/seckill'; break; case '领券中心': url = '/coupon'; break; } break; } return url; }