var coreServer = $("#coreServer").val(); var isPC = ($(window).width()>768); var globalUserData = ''; var GLOBAL_TOKEN = 'X-Token'; var GLOBAL_USER_ID = 0; // 用户Id var GLOBAL_USER_IDENTITY = 0;//2-会员机构;3-供应商;4-普通机构 var GLOBAL_SHOP_ID = 0; // 供应商Id var GLOBAL_VIP_FLAG = 0; // 超级会员标记 var GLOBAL_CLUB_TYPE = 0; // 会员类型 1 医美机构 2 胜美机构 var IDENTITY = 0; // 用户标记 var isForbidTabs = true; //控制菜单 var isShopIsOrder = false; //控制菜单 if(localStorage.getItem('userInfo')){ globalUserData = JSON.parse(localStorage.getItem('userInfo')); GLOBAL_TOKEN = globalUserData.token; GLOBAL_USER_ID = globalUserData.userId*1; GLOBAL_USER_IDENTITY = globalUserData.userIdentity*1; IDENTITY = globalUserData.userIdentity*1; GLOBAL_VIP_FLAG = globalUserData.vipFlag; GLOBAL_SHOP_ID = globalUserData.shopId*1; GLOBAL_CLUB_TYPE = globalUserData.firstClubType ? globalUserData.firstClubType : null; if (GLOBAL_USER_ID === 5261 || GLOBAL_USER_ID === 10947 || GLOBAL_USER_ID === 11579) { GLOBAL_USER_IDENTITY = 1; GLOBAL_VIP_FLAG = 1; IDENTITY = 1; }else if(GLOBAL_CLUB_TYPE === 1){ IDENTITY = 5; } if(globalUserData.listingFee === 1){ isForbidTabs = false; } if(globalUserData){ isShopIsOrder = globalUserData.shopIsOrder; } console.log('isShopIsOrder',isShopIsOrder) } else { var pathname = window.location.pathname; var weChatLoginFlag = (Number(getBaseCookie("weChatAutoLogin"))===1 || Number(getBaseCookie("weChatAutoLogin"))===2); if(pathname.indexOf('/product/auth/') === -1 && !weChatLoginFlag ){ var userAgent = navigator.userAgent.toLowerCase(); if (userAgent.match(/MicroMessenger/i)) { // 微信浏览器自动授权登录 var urlForWeChat = 'https://www.caimei365.com/we_chat/redirect_uri.html'; $.get(coreServer+'/user/login/auth/link?mode=1&redirectUri='+urlForWeChat, function(r){ if(r.code===0 && r.data){ setBaseCookie("weChatAutoLogin", 1); setBeforeUrl(); window.location.href = r.data; } }); } } } // 头部 var globalHead = new Vue({ el: '#globalHead', data: { loginStatus: false, userData: {}, classify: [], headCart: { cartList: [], cartCount: 0, productCount: 0, priceTotal: 0 }, noticeNum:0, shopId:'', userIdentity:'', articleType: '', isFiexd:false, classifyIndex:1, supplierLinks: [ { title: '美业参谋', link: '/supplier/attraction.html', }, { title: '供应商协议', link: '/help/1007.html', }, { title: '商家登录', link: '/supplierlogin.html', }, { title: '隐私政策', link: '/help/1013.html', }, { title: '入驻流程', link: '/help/1044.html', }, ], // 供应商链接 activeLinks: [], }, watch:{ isFiexd: function(nVal,oVal){ // 防止跳动 // if(nVal && isPC){ // $("body").css('paddingTop', $("#globalHead").height() + "px"); // }else{ // $("body").css('paddingTop', "0px"); // } }, loginStatus: { handler(val) { if (val) { this.activeLinks = this.supplierLinks.filter((i, index) => index !== 2) } else { this.activeLinks = this.supplierLinks } }, deep: true, immediate: true } }, methods: { changeClassify: function(value){ this.classifyIndex=value; }, // 初始化分类菜单效果 initClassufyTab: function(){ if(isPC){ setTimeout(function(){ $('#mainClassify').slide({ mainCell:".clsCon", titCell:".clsTab a", trigger: "mouseover" }); $('#mainClassify_1').slide({ mainCell:".tabItem_right", titCell:".tabItem_lift a", trigger: "mouseover" }); $('#mainClassify_2').slide({ mainCell:".tabItem_right", titCell:".tabItem_lift a", trigger: "mouseover" }); $("#mainClassify_2 .tabItem_lift a").eq(0).trigger("mouseover"); $("#mainClassify_1 .tabItem_lift a").eq(0).trigger("mouseover"); },500); }else{ setTimeout(function(){ $('#mainClassify').slide({ mainCell:".clsCon", titCell:".clsTab a", trigger: "click" }); $('#mainClassify_1').slide({ mainCell:".tabItem_right", titCell:".tabItem_lift a", trigger: "click" }); $('#mainClassify_2').slide({ mainCell:".tabItem_right", titCell:".tabItem_lift a", trigger: "click" }); $("#mainClassify_2 .tabItem_lift a").eq(0).trigger("click"); $("#mainClassify_1 .tabItem_lift a").eq(0).trigger("click"); },500); } }, // 头部购物车数据 getHeadCart: function(userId) { var _self = this; ShoppingApi.getHeaderCartList({userId: userId},function(response){ if (response.code === 0 && response.data) { var data = response.data; _self.headCart.cartList = data.list; _self.headCart.cartCount = data.list.length; _self.headCart.productCount = 0; _self.headCart.priceTotal = 0; data.list.map(function(item){ _self.headCart.productCount += item.number; _self.headCart.priceTotal += item.number*item.price; }); }else if(r.code== -99){ CAIMEI.Storage.clear(); location.href = "/login.html"; } }); }, getAuthClubCount:function (clubId) { var _self = this; PublicApi.getAuthClubCount({commonId: clubId},function(response){ if (response.code === 0 && response.data) { var data = response.data; if(data.count>99){ _self.noticeNum = '99+' }else{ _self.noticeNum = data.count } console.log('noticeNum',_self.noticeNum) }else{ console.log('获取机构通知消息数量异常') } }); }, getAuthShopCount:function (shopId) { var _self = this; PublicApi.getAuthShopCount({commonId: shopId},function(response){ if (response.code === 0 && response.data) { var data = response.data; if(data.count>99){ _self.noticeNum = '99+' }else{ _self.noticeNum = data.count } localStorage.setItem('noticeNum', _self.noticeNum) }else{ console.log('获取供应商通知消息数量异常') } }); }, goMsgLinkFn:function (url) { var _self = this; if(_self.loginStatus){ window.location.href= url; }else{ window.location.href='/login.html'; } }, goSupplierLink() { window.location.href = '/supplier/attraction.html' }, // 头部供应商跳转链接 goHeaderLink(link) { if (link) { window.location.href = link } }, goCartsLinkFn:function(){ var _self = this; if(_self.loginStatus){ window.location.href='/shopping/cart.html'; }else{ window.location.href='/login.html'; } }, productDetailsFn:function(id){ // 跳转详情 window.location.href='/product-'+id+'.html'; }, DeleteCartProducts:function(id){ // 删除购物车 var _self = this; ShoppingApi.DeleteCartProducts({userId: this.userData.userId, productIds: id},function(response){ if(response.code === 0){ _self.getHeadCart(_self.userData.userId); }else{ CAIMEI.Alert(response.msg,'确定',false); } }); }, pageLinkSupplier: function(){//预览商品 window.open('/supplier-'+this.shopId+'.html'); }, // 退出登录 userLogOut: function(){ localStorage.removeItem('userInfo'); delBaseCookie("loginBeforePath"); this.loginStatus = false; window.location.href = "/index.html"; }, showGlobalMenu: function(){ if(!isPC){ $("#mGlobalMenu").show().find(".cShow").slideDown(500); } }, hideGlobalMenu: function(){ if(!isPC){ $("#mGlobalMenu").hide().find(".cShow").hide(); } }, // init auto-input complete initAuthInputComplete(){ new AutoComplete({ el: '.auto-input', callback: async function(keyword){ try { const res = await PublicApi.fetchQueryKeywordList({keyword: keyword}); if(!res.data) return []; return res.data.map(item => item.keyword); } catch (e) { console.log(e); } }, itemClick: function (keyword) { window.location.href = '/product/list.html?keyword='+keyword + '&productFlag=1' + '&linkageFlag=1'; } }); }, }, created: function () { var _self = this; // 判断登录状态 if (globalUserData.token) { this.loginStatus = true; this.userData = globalUserData; if(this.userData.userIdentity === 3){ // 获取头部通知消息数量 setTimeout(function(){ _self.getAuthShopCount(_self.userData.shopId); }, 1000); // 获取头部通知消息数量 var timerShopCount = setInterval(function(){ _self.getAuthShopCount(_self.userData.shopId); }, 1000*120); }else{ setTimeout(function(){ // 获取头部购物车数据 _self.getHeadCart(_self.userData.userId); _self.getAuthClubCount(_self.userData.clubId); }, 1000); // 获取头部通知消息数量 var timerClubCount = setInterval(function(){ _self.getAuthClubCount(_self.userData.clubId); }, 1000*120); } } // 信息中心 this.articleType = getUrlParam("type"); }, mounted:function(){ var _self = this; // 初始化分类菜单效果 this.initClassufyTab(); var userData = JSON.parse(window.localStorage.getItem('userInfo')); if(userData!=null) { this.userIdentity = userData.userIdentity; this.shopId = userData.shopId; } if($(window).height() > 750){ $(window).on('scroll', function() { var scrollTop = $(this).scrollTop(); if(scrollTop>200){ _self.isFiexd = true; }else{ _self.isFiexd = false; } }) } // 判断导航菜单高亮-对比url setTimeout(function(){ var path = window.location.pathname; var paramsArr = path.split(".")[0].split("-"); var key = paramsArr[0].split("/")[1]; var pageId = paramsArr.length>=1 ? paramsArr[1] : ''; if(key && key.length>0) { $('.navBox li').each(function () { var href = $(this).find('a').attr("href"); if (href.indexOf(path)>=0){ $(this).find('a').addClass('on'); return false; } else if (key != 'product' && key != 'info' && href.indexOf('/'+key)>=0) { $(this).find('a').addClass('on'); return false; } }); } },500); this.initAuthInputComplete(); } }); // 底部 var globalFot = new Vue({ el: '#globalFot', data: { isShowIcon: true, }, computed:{ copyrightYear(){ let date = new Date() return date.getFullYear() } }, methods:{ goSupplierLink() { window.location.href = '/supplier/attraction.html' }, }, mounted(){ } }) // 初始化效果 $(function(){ // PC,H5切换时刷新 $(window).resize(function() { var flag = (isPC && $(window).width()<=768) || (!isPC && $(window).width()>768); if(flag){ window.location.reload(); } }); // 导航分类 if(isPC){ jqClickShow(".baseHeadTop .cTab", ".baseHeadTop .cShow"); jqSelect(".jqSelect"); jqHoverShow(".classBtn", "#mainClassify"); }else{ jqMultipleShow("click", ".footLink .list", ".tab", ".con", true); $('body').on('click', '.baseHeadCenter .mClassBtn',function () { $('#mainClassify').show(); fixedBody(); }).on('click', '#mainClassify .close,#mainClassify .mClassBtn',function () { $('#mainClassify').hide(); looseBody(); }).on('click', '#mainClassify',function (e) { e.stopPropagation(); }); } // 登录弹窗 function loginAert(content, btnTxt){ $.confirm({ useBootstrap: false, boxWidth: (isPC?'338px':'74.6vw'), title: false, content:'
'+content+'
', closeIcon: true, animation: 'opacity', closeAnimation: 'opacity', animateFromElement: false, scrollToPreviousElement: false, buttons: { login: { text: btnTxt, btnClass: 'btn-confirm-login', action: function(){ setBeforeUrl(); window.location.href = '/login.html'; } }, close: { text: '取消', btnClass: 'btn-cancel-login' } } }); } // 去登录弹窗 $('body').on("click", '.toLogin',function () { //loginAert('你还未登录请登录后再进行购买', '去登录'); setBeforeUrl(); window.location.href = '/login.html'; }); // 退出登录 $('body').on("click", '.toLogOut',function () { localStorage.removeItem('userInfo'); delBaseCookie("loginBeforePath"); globalHead.loginStatus = false; window.location.href = "/index.html"; }); // 置顶 $('#scrollTop').on("click", '.toTop',function () { $("html,body").animate({scrollTop:0},500); }); // 热线 if(!isPC){ $('#scrollTop').on("click", '.phone',function () { $('#scrollTop').find('.phoneHover').show(); fixedBody(); }).on("click", '.phoneHover div',function (e) { e.stopPropagation(); }).on("click", '.phoneHover,.phoneHover .close',function () { $('#scrollTop').find('.phoneHover').hide(); looseBody(); }); $('body').on("click", '#centerNav .home',function () { if($('#centerNav').find('.home').hasClass("on")){ $('#centerNav').find('.home').removeClass("on"); $('#centerNav').find('.centerBox').slideUp(); looseBody(); }else{ $('#centerNav').find('.home').addClass("on"); $('#centerNav').find('.centerBox').slideDown(); fixedBody(); } }).on("click", '#centerNav .wrap',function (e) { e.stopPropagation(); }).on("click", '#centerNav .centerBox',function () { $('#centerNav').find('.home').removeClass("on"); $('#centerNav').find('.centerBox').slideUp(); looseBody(); }); } // 侧边栏滚动判断 $(window).scroll(function () { if($('body').attr("style") && $('body').attr("style").indexOf('fixed')>0){ return false; } var scoll = Math.max($('html').scrollTop(), $('body').scrollTop()); if(scoll >200){ $('#scrollTop').show(); }else { $('#scrollTop').hide(); } }); // 顶部搜索框 $('#topSearch').on("click", '.searchBtn', function () { /* * 搜索类型 type * 0:产品 1:供应商 2:项目仪器 NaN:文章 * 关键词 keyword * */ var type = isPC ? $('#topSearch').find('[data-select]').attr("data-select") * 1 : $('#topSearch').find('select').val() * 1; var keyword = $.trim($('#topSearch').find('.keyword').val()); var tip = isNaN(type) ? '请输入文章关键字!' : '请至少输入两个关键字!'; if ((type === 0 && keyword.length < 2) || (!type && !keyword)) { $.confirm({ useBootstrap: false, boxWidth: (isPC ? '300px' : '70%'), title: '提示', content: tip, closeIcon: true, animation: 'opacity', closeAnimation: 'opacity', animateFromElement: false, buttons: { close: { text: '确定', btnClass: 'btn-confirm' } } }); return false; } if (type === 0) { // 产品 window.location.href = '/product/list.html?keyword=' + encodeURIComponent(keyword); } else if (type === 1) { // 供应商 if (!keyword) { window.location.href = '/supplier/list.html'; } else { window.location.href = '/supplier/list.html?keyword=' + encodeURIComponent(keyword); } } else if (type === 2) { // 项目仪器 if (!keyword) { window.location.href = '/equipment/list.html'; } else { window.location.href = '/equipment/list.html?keyword=' + encodeURIComponent(keyword); } } else { // 文章 window.location.href = '/info/search-1.html?keyword=' + encodeURIComponent(keyword); } // 搜索词统计 BeautyArchiveApi.setSearchKeywords({keyword}, (res) => { if (res.code === 0) { console.log('搜索词统计成功') } }) }).on('keyup', '.keyword', function (event) { // 搜索输入框 按回车键搜索 var keyCode = event.keyCode || event.which; if (keyCode === 13) { $(this).parents('#topSearch').find('.searchBtn').trigger("click"); } // 搜索词统计 BeautyArchiveApi.setSearchKeywords({keyword}, (res) => { if (res.code === 0) { console.log('搜索词统计成功') } }) }).on("click", '.hotKey .word', function () { // 点击热词 触发搜索 $(this).parents('#topSearch').find('.keyword').val($(this).text()); $(this).parents('#topSearch').find('.searchBtn').trigger("click"); }); // 支付弹框复制标识 $('body').on("click", '.payAlert .copy',function () { var oInput = document.createElement('textarea'); oInput.value = $(this).parents('.payAlert').find('.no').text(); document.body.appendChild(oInput); oInput.select(); // 选择对象 document.execCommand("Copy"); // 执行浏览器复制命令 document.body.removeChild(oInput); CAIMEI.dialog('复制成功'); }); }); /*function uuid() { var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); } s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010 s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 s[8] = s[13] = s[18] = s[23] = "-"; return s.join(""); }*/ function setBeforeUrl(){ var baseUrl = window.location.href; var flag = baseUrl.indexOf('/login.html')>0 || baseUrl.indexOf('/register.html')>0 || baseUrl.indexOf('/we_chat/redirect_uri.html')>0; if(!flag){ setBaseCookie("loginBeforePath", baseUrl); } } // 公共方法 function setBaseCookie(cname,cvalue,exdays){ if (exdays) { var d = new Date(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); var expires = "expires="+d.toGMTString(); document.cookie = cname+"="+cvalue+"; path=/; "+expires; } else { document.cookie = cname+"="+cvalue+"; path=/"; } } function getBaseCookie(cname){ if (document.cookie) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i'+$(options[i]).text()+''; if($(options[i]).val()===select.val()){ $(this).find("[data-select]").text($(options[i]).text()).attr('data-select',$(options[i]).val()); } } $(this).find("ul").html(list); $(this).find("ul").slideToggle("fast"); }).on("click", selectBox + " li", function(e){ e.stopPropagation(); $(this).parent().prev().attr('data-select',$(this).attr("data-id")).text($(this).text()); $(this).parents("pc").next().val($(this).attr("data-id")); $(this).parent().slideUp("fast"); }).on("click", function(){ $(selectBox).find("ul").slideUp("fast"); }); } //解决移动端滚动穿透 function fixedBody(){ var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; setTimeout(function(){ document.body.style.cssText += 'position:fixed;top:-'+scrollTop+'px;'; },10); } function looseBody() { var body = document.body; body.style.position = ''; var top = body.style.top; document.body.scrollTop = document.documentElement.scrollTop = -parseInt(top); body.style.top = ''; } //url参数 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = decodeURIComponent(window.location.search).substr(1).match(reg); if (r != null) { return (r[2]) } return null; } function updateUrlParam(params) { var loca = window.location; var baseUrl = loca.origin + loca.pathname + "?"; var query = loca.search.substr(1).toLowerCase(); var queryArr = query.split("&"); var keys = Object.keys(params); if (keys.length > 0) { var obj = {}; for (var i = 0; i < queryArr.length; i++) { queryArr[i] = queryArr[i].split("="); obj[queryArr[i][0]] = queryArr[i][1] } for (var k = 0; k < keys.length; k++) { var name = keys[k]; var value = params[name]; obj[name.toLowerCase()] = value; } var url = baseUrl + JSON.stringify(obj).replace(/["\{\}]/g, "").replace(/\:/g, "=").replace(/\,/g, "&"); return url; } } function setSearchProductList(list, userId, callback) {//处理搜索 var productIdArr = []; var resultData = []; list.map(function (item) { resultData.push({ productId: item.productId, name: item.name, image: item.image, unit: item.unit, brandName: item.brandName, priceFlag: item.priceFlag, priceGrade: item.priceGrade, actStatus: 0, priceLoaded: false, beautyActFlag:item.beautyActFlag, productType:item.productType }); // 0公开价格 1不公开价格 2仅对会员机构公开 if (item.priceFlag !== 1) { productIdArr.push(item.productId) } }); if (userId && userId > 0) { setProductPrice(resultData, productIdArr.join(","), userId, callback); }else { setProductPrice(resultData, productIdArr.join(","), 0, callback); } return resultData; } function setProductPrice(productList, productIds, userId, callback){ $.getJSON(coreServer+"/commodity/price/list",{ userId: userId, productIds: productIds, source: 1 }).done(function (r) { if (r.code === 0 && r.data) { var priceList = r.data; productList.map(function(product){ priceList.map(function(item){ if(product.productId*1 === item.productId){ product.shopId = item.shopId; product.userIdentity = item.userIdentity; product.price = item.price; product.originalPrice = item.originalPrice; product.priceLoaded = true; product.ladderPriceFlag = item.ladderPriceFlag; product.actStatus =item.actStatus; product.couponsLogo =item.couponsLogo; product.promotions =item.promotions; product.svipPriceTag =item.svipPriceTag; product.svipPriceType =item.svipPriceType; product.svipProductFlag =item.svipProductFlag; } }); }); } return callback(); }).fail(function(){ return callback(); }) } // 登录后返回登录前页面 function toBeforePath(){ var loginBeforePath = getBaseCookie("loginBeforePath"); if (loginBeforePath && loginBeforePath!='undefined' && loginBeforePath.indexOf('.html')>0) { delBaseCookie("loginBeforePath"); window.location.href = loginBeforePath; } window.location.href = '/index.html'; } function toLogin() {//去登录 setBeforeUrl(); window.location.href = '/login.html'; } function upgrade () { //升级会员 window.location.href=''; } function toLogOut() {//登出 localStorage.removeItem('userInfo'); delBaseCookie("loginBeforePath"); this.loginStatus = false; window.location.href = "/index.html"; } /** * 至少保留两位小数 * 10 => "10.00" * @param {number} num */ function toFloat(num) { var temp = String(num).split('.'); if (temp.length === 1 || temp[1].length < 2) { return Number(num).toFixed(2); }else{ return Number(num); } } /** 表单输入框校验 */ function verifyHandle(obj){ if ($(obj).is(":hidden")) { return false; } var v = $.trim($(obj).val()).replace(/\s+/g,""); var reg = $(obj).attr("rule"); var errorTxt = $(obj).siblings('.errTips').attr("tips"); if ($.trim(v) === '') { if ($(obj).attr("placeholder") && $(obj).attr("placeholder").indexOf("请输入")>=0) { errorTxt = $(obj).attr("placeholder").split("请输入")[1]+'不能为空'; } else { errorTxt = '不能为空'; } setErrorTxt(obj, errorTxt); return false; }else if (typeof reg != "undefined") { reg = new RegExp(reg); if (!reg.test(v)) { setErrorTxt(obj, errorTxt); return false; } } clearErrorTxt(obj); } function setErrorTxt(obj, txt) { $(obj).parent().addClass("error").find('.checked').removeClass("show"); $(obj).siblings('.errTips').text(txt).addClass("show"); } function clearErrorTxt(obj) { $(obj).siblings('.errTips').removeClass("show"); $(obj).parent().removeClass("error").find('.checked').addClass("show"); } function clearAllErrorTxt(obj) { $(obj).siblings('.errTips').removeClass("show"); $(obj).parent().removeClass("error"); } // 提交时验证表单 function verifyForm() { $("[needverify]:visible").each(function (index, ele) { if (!$(ele).siblings('.checked').hasClass("show")) { verifyHandle(ele); } }); var len = $('.errTips.show:visible').length; return (len === 0); } // 单个验证表单 function verifyCheack(ele) { if (!$(ele).siblings('.checked').hasClass("show")) { verifyHandle(ele); } var len = $(ele).siblings('.errTips.show:visible').length; return (len === 0); } // 公共信息提示弹框 function alertInfo(txt,callback) { $.confirm({ useBootstrap: false, boxWidth: (isPC?'300px':'70%'), title:'提示', content: txt, closeIcon: true, animation: 'opacity', closeAnimation: 'opacity', animateFromElement: false, buttons: { close: { text: '确定', btnClass: 'btn-confirm', action: function () { callback() } } } }); } //公共吐司 function dialog(txt,callback) { $.confirm({ title: false, content: txt, boxWidth: (isPC?'300px':'70%'), autoClose: 'close|2000', useBootstrap:false, buttons: { close:{ isHidden: true, action: function () { callback() } } } }); } /** 时间格式化 * @param {Date} date 标准时间格式 -> new Date() * @param {string} format 时间格式化的格式 'yyyy-MM-dd hh:mm:ss' * @returns {string} 格式化后的时间 '2017-01-01 01:00:00' */ function dateFormat(date = new Date(), format = 'yyyy-MM-dd hh:mm:ss') { var o = { 'M+': date.getMonth() + 1, // month 'd+': date.getDate(), // day 'h+': date.getHours(), // hour 'm+': date.getMinutes(), // minute 's+': date.getSeconds(), // second 'q+': Math.floor((date.getMonth() + 3) / 3), // quarter S: date.getMilliseconds(), // millisecond }; if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) } for (var 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 } /** * @param {Array} actual * @returns {Array} */ function cleanArray(actual) { const newArray = [] for (let i = 0; i < actual.length; i++) { if (actual[i]) { newArray.push(actual[i]) } } return newArray } /** * @param {Object} json * @returns {Array} */ function param(json) { if (!json) return '' return cleanArray( Object.keys(json).map(key => { if (json[key] === undefined) return '' return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) }) ).join('&') } /** * 防抖 */ function debounce(func, wait = 200, immediate = false) { let timeout, result; return function () { const context = this; const args = arguments; if (timeout) clearTimeout(timeout); if (immediate) { const callNow = !timeout; timeout = setTimeout(function () { timeout = null; }, wait); if (callNow) result = func.apply(context, args); } else { timeout = setTimeout(function () { func.apply(context, args); }, wait); } return result; }; } /* 深度克隆 */ function deepClone(obj, cache = new WeakMap()) { if (typeof obj !== 'object') return obj // 普通类型,直接返回 if (obj === null) return obj if (cache.get(obj)) return cache.get(obj) // 防止循环引用,程序进入死循环 if (obj instanceof Date) return new Date(obj) if (obj instanceof RegExp) return new RegExp(obj) // 找到所属原型上的constructor,所属原型上的constructor指向当前对象的构造函数 let cloneObj = new obj.constructor() cache.set(obj, cloneObj) // 缓存拷贝的对象,用于处理循环引用的情况 for (let key in obj) { if (obj.hasOwnProperty(key)) { cloneObj[key] = deepClone(obj[key], cache) // 递归拷贝 } } return cloneObj }