{"version":3,"sources":["components.js"],"names":["BigPicture","needInit","this","data","$ppicture","$","$button_open","$button_close","$button_up","$button_down","$div_checked","find","$ul","maxShowNumber","currentIndex","windowIndex","page","totalPage","totalCount","init","prototype","constructor","window","height","addClass","__initCount","bindEvent","length","parseInt","_this","on","css","show","hide","$this","index","attr","showWithIndex","gotoPrevPage","gotoNextPage","renderPicture","Array","src","html","i","name","empty","append","eq","getWindowIndex","setCheckImage","showBigImage","first","showFirstImage","showMaxImage","$showImage","$hiddenImage","showSrc","getBigPicSrc","removeClass","width","hasClass","result","replace","PDUtil","isRunInNode","module","exports","components","$util","BiXuanZengPin","all","$container","$box","$box_kxzp","$box_check","$a_edit_gifts","getAllData","renderDom","e","warn","userData","$p","gifts","o","url","promotion","goodsDetailUrl","code","cutPicturePath","path","goodsName","animate","_data","processBXZPNeedShowList","emptyBoxDom","showCheckButton","showEditButton","BuyGroup","$button_buy","$button_notice","$button_shoppingcart","$span_stock","$box_ewm","__initEWM","__initSNCode","__initPrice","__initBuyButton","__initShoppingcartButton","processNoticeButton","isShow","__initNoticeButton","updateGouMaiZiXunUrl","refreshBuyButton","processBuyButton","eventHandler","isDisabled","ljgm","setBuyButton","showText","baseInfo","stock","text","waterLevelDesc","getPhoneNumber","pattern","notice_phoneNumber","trim","val","leId","getCookie","alert","test","jsonpNoticeSendSms","mobile","success","t","off","time","setInterval","clearInterval","__detailConfig","getApiPath","after","saveClick","notice_verificationCode","lenovoAccount","passport","cookie","loginName","lenovoID","lenovoId","leID","jsonpNoticeSave","productCode","activityType","clientType","linkAddress","location","href","phone","smsCode","mallName","resultMsg","processAddCartButton","setAddCartButtonClickHandler","processShowPrice","setPriceDom","ewmImageSrc","extensionTerminal","indexOf","extensionContent","self","checkSNCode","fadeOut","$number","num","updatePrice","calcPrice","gmsl","isNaN","document","is","$lenovoKefu","$thinkKefu","$eppKefu","price","getBuyNumber","txt","disabled","clickHandler","type","defaultType","event","extend","handler","setButtonClickHandler","jrgwc","setBuyButtonClickHandler","$target","defaultHandler","tcjrgwc","packID","jsonpAddItemToCart","terminal","itemtype","gcodes","opgcode","servicecode","icount","rc","ljyy","isLogin","jsonpShangouYuyue","title","reservationId","fadeIn","buygroup","msg","passort","loginRedirect","ljgm_sg","activity","ShanGou","jsonpIsBookUser","status","Date","getMilliseconds","c_url","errorMessage","busy","$OKButton","inputSNCode","encodeURIComponent","ajaxCheckSNCode","res","SNCode","info","machineNo","_price","parseFloat","toFixed","getAllGoodCodes","xj","tjxj","selectedArray","push","guige","isExist_gg","itemType","join","kxzp","getKXZP","service","getSelectedService","shareCode","isPersonalPositions","srdz","getdz","buOwner","tc","isLcodeProduct","kCode","LCode","isNeedSN","isService","salesType","gcode","jsonpIsTuangouUser","hasPurchased","customids","Configuration","showTabIndex","comments","labels","pageIndex","level","label","declarationUrl","$box_pagebar","$box_information","$box_configuration","$box_comment","$commentList","$commentLabels","$button_showthis","pagebar","PageBar","onPageChange","renderComment","renderCommentLables","renderCommentNumber","adddeclaration","bigImageIndex","$defaultLi","siblings","$button","parent","$span","slideDown","parentNode","$pic","click","getShowCodes","checked","_spec","specInfo","gsdlist","j","$imageDiv","codes","jsonpEvaluateList","callback_commentListSuccess","jsonpEvaluateLable","lable","$all","$haoping","$zhongping","$chaping","$hpl","jsonpEvaluateNumber","total","good","medium","bad","picnum","hpl","Math","floor","$title","productcommment","db","totalpagecount","render","euser","escore","etime","lableAndScore","k","edesc","eimagelist","miniUrl","picUrl","reply","retname","rettime","retdesc","Guige","__setGuige","fn_Specifications","SpecificationsRels","tlist","each","v","temp_tlist","typeid","ii","iv","isgsd","ti","tv","gsdId","SpecificationsRelList","valeDefault","sid","activeLength","sflist","valeDisabled","getgcode","f","len","HotList","list","noBorder","callback","loadHostList","KeXuanZengPin","$button_ok","$button_cancel","$a_close","hasChecked","bxzp","giftsSelectable","quantity","closeCheckBox","debug","dropSome","$prev","exists","findFirst","g","concat","processKXZPNeedShowList","removeAttr","pageSize","interval","$pre","pagecount","ceil","start","max","end","min","$pagebtn","$next","pageNum","gotoPage","p","PlayPicture","initPicList","$winpic","$button_left","$button_right","$div_list","__initGoodPicList","setButtonShow","PromotionInfo","needShow","nowNumber","setXDLJ","setMJ","setXSQG","setShangou","setPresell","pcPromotion","saleReduction","totime","$des","$djs","fromtime","discountAmount","fromtimeStr","timer","str","fullReduction","fullsetList","full","reduce","getPresellInfo","loadPresellInfo","sell","sucessHandler","terminalname","$div","presellway","deposit","activitystarttime_date","activitystarttime","activityendtime_date","activityendtime","presellstarttime_date","presellstarttime","currentdatetime_date","currenttime","process","setPreheat","setPay","setEnd","stime","marketable","refreshStatus","loadProductInfo","processStatus","flushSaleJson","showPrice","refreshShangou","processShangou","shangou","startNumber","endTimeStr","endNumber","$shangou","yystartNumber","yystartTimeStr","yyendNumber","yyendTimeStr","startTimeStr","fyyStartTimeStr","fyyStartNumber","initWindow","phoneNum","checkTelNo","jsonpSaveBookShangouTel","trigger","isShowShangou","ScrollPicture","$detail_main","$detail_left","$detail_right","load","sc","__initFloat","$document","preStatus","nowStatus","offset","minY","top","maxY","scrollTop","_top","$sc","p_get","suc","fun","loadMyFavorite","d","removeFavorites","addFavorites","doSC","jQuery","Service","allService","loadData","loadServiceInfo","formatServiceData","group","_arrows","display","removeSelectedService","addSelectedService","newPrice","$top","prev","removeCode","addCode","cateCode","categoryName","has","__PDUtil","__jquery","__isNode","global","require","shareComponents","Share","classPrefix","buttonList","weibo","id","className","icon","qzone","renren","weixin","webMapping","before_click","getButtonByKey","Key","getButtonByClassName","jiathis_config","__initShare","summary","__title","getShareTitle","protocol","host","pathname","pic","call","button","share","$aList","web","parameter","browser","navigator","appName","b_version","appVersion","version","split","trim_Version","qrcode","srdzComponents","Srdz","$dialog","selectedID","postData","$box_content","modeMapping","picture","des","words","isPP","getdata","removePostData","showFirstTabStyle","setButtonShowHide","stopPropagation","eventHandlerForOKButton","bindImageEvents","$dzBox","ID","side","ptmode","$price","priceid","$dl","imageCode","imageUrl","imageName","priceID","ptside","pttype","ptpicCode","pturl","picName","addPostData","$text","word","ptword","showImageListWithCateCode","parents","left","$bigImage","renderData","now","personalType","renderImage","renderText","tmpl","datas","dataID","appendTo","scrollButtonEvent","renderPalyPic","ajax","dataType","srcArr","printPicArr","playpic","encodeURI","error","err","tabIndex","$boxImages","$priceTabs","count","oldPrice","newPrices","oldData","isEmptyObject","arr","JSON","stringify","Taocan","selectedItem","packs","dialog","pack","_url","discount","canSell","_index","current","processTaocanNeedShowList","pages","ThinkO2OCityList","$box_city","openCheckBox","$provinceTitle","$cityTitle","province","_text","_city","$cityBox","thinko2oCities","TuiJianXuanJian","options","processXJNeedShowList","getSelectedCodeArray"],"mappings":"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","file":"../js/components.js","sourcesContent":["/**\n * Created by liuyc14 on 2016年11月23日16:49:41.\n * 大图组件\n */\n(function () {\n function BigPicture(needInit){\n /*定义默认数据结构*/\n this.data = {}; \n this.$ppicture = $('#ppicture');\n this.$button_open = $('#ppicture_open');\n this.$button_close = $('#ppicture_close');\n this.$button_up = $('#ppicture_up');\n this.$button_down = $('#ppicture_down');\n this.$div_checked = this.$ppicture.find('div.pp-checked');\n this.$ul = $('#ppscroll_ul');\n this.maxShowNumber = 4;/*缩略图最大展示数量*/\n this.currentIndex = 1;/*当前index 从1开始*/\n this.windowIndex = 1;/*当前展示的缩略图的可视区域位置 从1开始*/\n this.page = 1;\n this.totalPage = 1;\n this.totalCount = 0;/*图片总数*/\n if(needInit) this.init();\n }\n BigPicture.prototype= {\n constructor: BigPicture,\n /**\n * 首次渲染时调用\n */\n init: function () {\n if($(window).height() >= 850){\n this.$ppicture.addClass('ppicture-800');\n }\n this.__initCount();\n /*if (this.totalPage == 1) {\n this.$button_down.hide();\n }*/\n this.bindEvent();\n },\n __initCount: function () {\n this.totalCount = this.$ul.find('>li').length;\n //this.$button_up.hide();\n if (this.totalCount == this.maxShowNumber) {\n this.totalPage = 1;\n } else {\n this.totalPage = parseInt(this.totalCount / this.maxShowNumber) + 1;\n }\n },\n bindEvent: function () {\n var _this = this;\n /*打开图片层*/\n this.$button_open.on('click', function () {\n $('html, body').css('overflow', 'hidden');\n _this.$ppicture.show();\n });\n /*关闭图片层*/\n this.$button_close.on('click', function () {\n $('html, body').css('overflow', 'auto');\n _this.$ppicture.hide();\n });\n /*单击某一张图片*/\n this.$ul.on('click', 'li', function () {\n var $this = $(this);\n var index = parseInt($this.attr('data-index'));\n _this.showWithIndex(index);\n });\n /*上一张图片*/\n this.$button_up.on('click', function () {\n if(_this.currentIndex <= 1) return false;\n if(_this.windowIndex == 1){\n _this.gotoPrevPage();\n }else{\n _this.showWithIndex(_this.currentIndex - 1);\n }\n });\n /*下一张图片*/\n this.$button_down.on('click', function () {\n if(_this.currentIndex >= _this.totalCount) return false;\n if(_this.windowIndex == _this.maxShowNumber){\n _this.gotoNextPage();\n }else{\n _this.showWithIndex(_this.currentIndex + 1);\n }\n });\n },\n /**\n * 重新渲染图库\n * @param data\n */\n renderPicture: function (data) {\n if(data && (data instanceof Array) && data.length > 0){\n if(data[0] && data[0].src){\n $('#winpic').attr('src', data[0].src);\n }\n var html = '';\n for(var i = 0; i < data.length; i++){\n html += '
  • '\n + ''\n + '\"'+
  • ';\n }\n this.$ul.empty().append(html);\n\n this.__initCount();\n this.showWithIndex(1);\n }\n },\n showWithIndex: function (index) {\n var $this = this.$ul.find('li').eq(index - 1);\n this.currentIndex = index;\n this.getWindowIndex();\n this.setCheckImage();\n this.showBigImage($this.find('img').first().attr('src'));\n },\n gotoNextPage: function () {\n if (this.page >= this.totalPage) return false;\n this.$ul.css('top', '-=' + (this.maxShowNumber * 110));\n this.page++;\n this.showFirstImage();\n //this.$button_up.show();\n /*\n if(this.page == this.totalPage){\n this.$button_down.hide();\n }else{\n this.$button_down.show();\n }*/\n },\n gotoPrevPage: function () {\n if (this.page <= 1) return false;\n this.$ul.css('top', '+=' + (this.maxShowNumber * 110));\n this.page--;\n this.showMaxImage();\n //this.$button_down.show();\n /*\n if(this.page == 1){\n this.$button_up.hide();\n }else{\n this.$button_up.show();\n }*/\n },\n /*显示缩略图对应的大图*/\n showBigImage: function (src) {\n var $showImage = this.$ppicture.find('.pp-right img.show');\n var $hiddenImage = this.$ppicture.find('.pp-right img.normal');\n var showSrc = this.getBigPicSrc(src);\n $showImage.removeClass('show').addClass('normal');\n $hiddenImage.attr('src', showSrc).removeClass('normal').addClass('show');\n },\n /*获取缩略图对应的大图路径*/\n getBigPicSrc: function (src) {\n var width = this.$ppicture.hasClass('ppicture-800') ? 800 : 650;\n var result = src.replace(/w\\d{2,3}\\.(jpg|png|jpeg)$/gi, 'w' + width + '.$1');\n return result;\n },\n /**\n * 根据当前page和 currentIndex计算出windowIndex\n */\n getWindowIndex: function () {\n return this.windowIndex = this.currentIndex - (this.page - 1) * this.maxShowNumber;\n },\n setCheckImage: function () {\n this.$div_checked.css('top', ((this.windowIndex - 1) * 110 + 10));\n },\n /**\n * 显示当前可视区域第一张图片\n */\n showFirstImage: function () {\n this.currentIndex = (this.page - 1) * this.maxShowNumber + 1;\n var $this = this.$ul.find('li').eq(this.currentIndex - 1);\n this.getWindowIndex();\n this.setCheckImage();\n this.showBigImage($this.find('img').first().attr('src'));\n },\n /**\n * 显示当前可视区域最后一张图片\n */\n showMaxImage: function () {\n this.currentIndex = this.page * this.maxShowNumber;\n var $this = this.$ul.find('li').eq(this.currentIndex - 1);\n this.getWindowIndex();\n this.setCheckImage();\n this.showBigImage($this.find('img').first().attr('src'));\n }\n };\n if(PDUtil.isRunInNode() == true && module && module.exports){\n module.exports = BigPicture;\n }else{\n if(!window.components){\n window.components = {};\n }\n window.components.BigPicture = BigPicture;\n }\n})();\n/**\n * Created by liuyc14 on 2016/10/18.\n * 必选赠品组件,负责相关信息的Dom操作和数据逻辑\n */\n(function ($util) {\n function BiXuanZengPin(needInit){\n /*定义默认数据结构*/\n this.data = {\n all: []/*必选赠品数据*/\n };\n this.$container = $('#container_zengpin');\n this.$box = $('#div_zengpin');\n this.$box_kxzp = $('#div_kexuan');\n this.$box_check = $('#div_check');\n this.$a_edit_gifts = $('#a_edit_gifts');\n if(needInit) this.init();\n }\n BiXuanZengPin.prototype = {\n constructor: BiXuanZengPin,\n /**\n * 首次渲染时调用\n */\n init: function () {\n try{\n this.getAllData();\n this.renderDom();\n this.bindEvent();\n }catch (e){\n $util.warn('必选赠品组件=> init方法错误 ---------->');\n $util.warn(e);\n }\n },\n renderDom:function (userData) {\n try{\n var $p = window.$p;\n var gifts = userData || this.data.all;\n var html = '';\n for (var i = 0; i < gifts.length; i++) {\n var o = gifts[i];\n var url = ($p.promotion.goodsDetailUrl && $p.promotion.goodsDetailUrl[o.code]) || ('/product/' + o.code + '.html');\n /*向DOM中追加元素*/\n html += '
    ' +\n '' +\n '' + o.goodsName + '' +\n '
    ';\n }\n if (html.length > 0) {\n this.$box.append(html);\n this.$container.removeClass('hidden');\n }\n }catch (e){\n $util.warn('必选赠品组件=> renderDom方法错误 --------->');\n $util.warn(e);\n }\n },\n /**\n * 绑定必选赠品的事件\n */\n bindEvent: function () {\n var _this = this;\n /*选择可选赠品*/\n _this.$box_check.on('click', function () {\n var height = _this.$box_kxzp.height();\n _this.$box_check.hide();\n _this.$box_kxzp.css({width:10, height:10}).show();\n _this.$box_kxzp.animate({width:'570', height: height});\n });\n _this.$a_edit_gifts.on('click', function () {\n var height = _this.$box_kxzp.height();\n _this.$a_edit_gifts.hide();\n _this.$box_kxzp.css({width:10, height:10}).show();\n _this.$box_kxzp.animate({width:'570', height: height});\n });\n },\n /**\n * 获取选件所有的数据\n */\n getAllData: function () {\n var _data = window.$p.processBXZPNeedShowList();\n this.data.all = _data;\n return _data;\n },\n /**\n * 清空box里的dom元素\n */\n emptyBoxDom:function () {\n this.$box.empty();\n },\n show:function () {\n this.$container.removeClass('hidden');\n },\n hide: function () {\n this.$container.addClass('hidden');\n },\n /**\n * 显示选择赠品的大按钮\n */\n showCheckButton:function () {\n this.$a_edit_gifts.hide();\n this.$box_check.show();\n },\n /**\n * 显示修改赠品按钮\n */\n showEditButton: function () {\n this.$a_edit_gifts.show();\n this.$box_check.hide();\n }\n };\n\n if (!window.components) {\n window.components = {};\n }\n window.components.BiXuanZengPin = BiXuanZengPin;\n})(window.PDUtil);\n\n/**\n * Created by liuyc14 on 2016/10/18.\n * 购买相关组件\n */\n(function ($util) {\n function BuyGroup(needInit){\n /*定义默认数据结构*/\n this.data = {};\n this.$container = $('#container_buygroup');\n this.$button_buy = $('#ljgm'); /*立即购买按钮*/\n this.$button_notice = $('#dhtz'); /*到货通知按钮*/\n this.$button_shoppingcart = $('#jrgwc'); /*购物车按钮*/\n this.$span_stock = $('#span_stock_dec');/*库存描述*/\n this.$box_ewm = $('#box_ewm'); /*二维码box*/\n if(needInit) this.init();\n }\n BuyGroup.prototype= {\n constructor: BuyGroup,\n /**\n * 首次渲染时调用\n */\n init: function () {\n try{\n /*添加埋点*/\n this.$button_buy.attr('latag', 'latag_pc_detail_orderimmediately_' + window['code']);\n this.$button_shoppingcart.attr('latag', 'latag_pc_detail_orderimmediately_' + window['code']);\n\n this.__initEWM();\n this.__initSNCode();\n this.__initPrice();\n this.__initBuyButton();\n this.__initShoppingcartButton();\n /*实物商品,并且不是17商城的商品,没有库存的时候显示到货通知*/\n if (window.$p.processNoticeButton().isShow) {\n this.__initNoticeButton();\n }\n this.bindEvent();\n\n this.updateGouMaiZiXunUrl();\n }catch (e){\n $util.warn('BuyGroup组件=> init方法错误------------>');\n $util.warn(e);\n }\n },\n /*私有方法*/\n __initBuyButton: function () { \n this.refreshBuyButton();\n },\n refreshBuyButton: function () {\n var result = window.$p.processBuyButton();\n var eventHandler = result.isDisabled ? null : ljgm;\n this.setBuyButton(result.showText, result.isDisabled, eventHandler);\n if(result.isShow){\n this.$button_buy.show();\n }\n if(!result.isDisabled && window.$p.baseInfo.stock > 0){\n this.$span_stock.text('有库存');\n }\n if(window.$p.baseInfo.waterLevelDesc){\n this.$span_stock.text(window.$p.baseInfo.waterLevelDesc)\n }\n },\n __initNoticeButton: function () {\n var sendsms = __detailConfig.getApiPath(\"sendsms\");\n this.$button_notice = $('');\n $(\"#ljgm\").after(this.$button_notice);\n this.$button_notice.on('click', function () {\n $(\"#notice_box\").show();\n $(\"#layer_zhezhao\").show();\n });\n $(\"#notice_box .close\").on('click', function () {\n $(\"#notice_box\").hide();\n $(\"#layer_zhezhao\").hide();\n });\n function getPhoneNumber() {\n var pattern = /^1[34578]\\d{9}$/;\n var notice_phoneNumber = window.$.trim($(\"#notice_phoneNumber\").val());\n var leId = $util.getCookie(\"leid\");\n if (notice_phoneNumber == \"\") {\n alert(\"请输入手机号\");\n return false;\n } else if (!pattern.test(notice_phoneNumber)) {\n alert(\"请输正确的手机号\");\n return false;\n }\n window.$p.jsonpNoticeSendSms({\n mobile: notice_phoneNumber,\n leId: leId\n }, function (data) {\n if (data.success == true) {\n var t = 119;\n $(\"#notice_getVerificationCode\").off('click').val(\"已发送(120)\");\n var time = setInterval(function () {\n $(\"#notice_getVerificationCode\").val(\"已发送(\" + t + \")\");\n if (t == 0) {\n $(\"#notice_getVerificationCode\").on(\"click\", getPhoneNumber).val(\"获取验证码\");\n clearInterval(time);\n }\n t--;\n }, 1000)\n } else {\n alert(data['resultMsg']);\n }\n });\n }\n\n $(\"#notice_getVerificationCode\").on(\"click\", getPhoneNumber);\n var saveClick = 1;\n $(\"#notice_savePhoneNumber\").on('click', function () {\n if (saveClick == 0) {\n return;\n }\n saveClick = 0;\n var notice_verificationCode = window.$.trim($(\"#notice_verificationCode\").val());\n if (notice_verificationCode == \"\") {\n saveClick = 1;\n alert(\"请输入验证码\");\n return\n }\n var notice_phoneNumber = window.$.trim($(\"#notice_phoneNumber\").val());\n var lenovoAccount = window.passport.cookie ? window.passport.cookie.loginName : \"\";\n var lenovoID = window.passport.cookie ? window.passport.cookie.lenovoId : \"\";\n var leID = $util.getCookie(\"leid\");\n window.$p.jsonpNoticeSave({\n \"productCode\": code,\n \"activityType\": window.$p.baseInfo.activityType,\n \"clientType\": \"PC\",\n \"linkAddress\": window.location.href,\n \"phone\": notice_phoneNumber,\n \"smsCode\": notice_verificationCode,\n \"lenovoAccount\": lenovoAccount,\n \"lenovoID\": lenovoID,\n \"leID\": leID,\n \"mallName\": \"联想官网\"\n }, function (data) {\n if (data.success == true) {\n $(\"#notice_box\").hide();\n $(\"#layer_zhezhao\").hide();\n saveClick = 1;\n alert(\"订阅成功\");\n } else {\n saveClick = 1;\n alert(data.resultMsg);\n }\n }, function () {\n saveClick = 1;\n alert(\"系统繁忙\");\n });\n });\n },\n __initShoppingcartButton: function () {\n var result = window.$p.processAddCartButton();\n if (result.isShow) {\n this.$button_shoppingcart.off('click');\n this.setAddCartButtonClickHandler().show();\n }\n },\n __initPrice: function () {\n var result = window.$p.processShowPrice();\n setPriceDom(result.showText);\n },\n /**\n * 初始化二维码信息\n * @private\n */\n __initEWM:function () {\n var show = false;\n var html = '
    ' +\n '
    联想商城APP
    ';\n if(window.$p.baseInfo.extensionTerminal.indexOf('app') < 0 && window.$p.baseInfo.extensionContent){\n show = true;\n html += '
    ' + window.$p.baseInfo.extensionContent + '
    ';\n }\n html += '
    ';\n this.$container.find('div.detail_con').append(html);\n this.$box_ewm = $('#box_ewm');\n if(show) this.$box_ewm.show();\n },\n __initSNCode: function () {\n var self = this;\n $(\"#checkSNcode_bt\").on('click', function(){\n self.checkSNCode();\n });\n $(\"#checkSNcode_box .close\").on('click', function(){\n $(\"#checkSNcode_box\").fadeOut(500, function () {\n $('#layer_zhezhao').hide();\n });\n $(\"#SNcode\").val(\"\");\n });\n },\n bindEvent: function () {\n var _this = this;\n var $number = $('#buy_number');\n /*加减购物数量事件*/\n $('#reduce_buy_number').on('click', function () {\n var num = parseInt($number.val());\n if (num - 1 <= 0) {\n return false;\n } else {\n $number.val(--num);\n }\n _this.updatePrice(window.$p.calcPrice());\n });\n $('#add_buy_number').on('click', function () {\n var num = parseInt($number.val());\n if (num + 1 > window.$p.baseInfo.gmsl) {\n return false;\n } else {\n $number.val(++num);\n }\n _this.updatePrice(window.$p.calcPrice());\n });\n $number.on('change', function () {\n var num = parseInt($number.val());\n if(!(/^\\d$/.test($number.val()))){\n $number.val(num);\n }\n\n if (isNaN(num) || num <= 0) {\n $number.val(1);\n _this.updatePrice(window.$p.calcPrice());\n }\n else if (num > window.$p.baseInfo.gmsl) {\n $number.val(window.$p.baseInfo.gmsl);\n alert('当前商品最多只能购买' + window.$p.baseInfo.gmsl + '个');\n }else{\n _this.updatePrice(window.$p.calcPrice());\n }\n });\n\n this.$container.find('div.detail_con div#ewm_icon')\n .on('mouseover', function () {\n $('#box_ewm').show();\n })\n .on('mouseleave', function () {\n $('#box_ewm').hide();\n });\n $(document).on('click', function () {\n if(_this.$box_ewm.is(':visible')){\n _this.$box_ewm.hide();\n }\n });\n },\n /**\n * 设置购买咨询的链接\n * @param url\n */\n updateGouMaiZiXunUrl: function(){\n var $lenovoKefu = $('.rightbar_show_ask dl dd:eq(0) a:eq(0)');\n var $thinkKefu = $('.shop_rightbar .shop_pointer .V_icon_cont .V_user_infor dd:eq(0) a:eq(0)');\n var $eppKefu = $('#J_MUIMallbar .ns_parentBox .ns_mbar-qq .ns_mbar-inner a:eq(0)');\n if($lenovoKefu && $lenovoKefu.length == 1){\n $('#a_gmzx').attr('href', $lenovoKefu.attr('href'));\n }else if($thinkKefu && $thinkKefu.length == 1){\n $('#a_gmzx').attr('href', $thinkKefu.attr('href'));\n }else{\n $('#a_gmzx').attr('href', $eppKefu.attr('href'));\n }\n },\n /*更新价格显示*/\n updatePrice: function (price) {\n setPriceDom(price);\n },\n /*获取购买数量*/\n getBuyNumber: function(){\n var txt = $('#buy_number').val();\n if(/^[1-9][0-9]*$/.test(txt)){\n return parseInt(txt);\n }else{\n return 1;\n }\n },\n /**\n * 设置立即购买按钮\n * @param text 文本显示信息\n * @param disabled 是否可用\n * @param clickHandler 单击事件\n * @param type 类型,{event: 'click', type: 'replace'}\n */\n setBuyButton: function (text, disabled, clickHandler, type) {\n var defaultType = {event: 'click', type: 'replace'};\n type = window.$.extend(defaultType, type || {});\n /*设置立即购买按钮文本*/\n this.$button_buy.text(text || '立即购买').attr('title', text || '立即购买');\n /*设置立即购买为不可用*/\n if (disabled) {\n this.$button_buy.addClass(\"button-gray\").off('click');\n } else {\n this.$button_buy.removeClass('button-gray');\n /*添加或替换立即购买按钮的指定事件*/\n if (clickHandler && typeof clickHandler == 'function') {\n if (type.type == 'replace') {\n this.$button_buy.off(type.event).on(type.event, clickHandler);\n } else {\n this.$button_buy.on(type.event, clickHandler);\n }\n }\n }\n return this.$button_buy;\n },\n /**\n * 给添加购物车按钮附加click事件\n * @param handler\n * @returns {*|jQuery|HTMLElement}\n */\n setAddCartButtonClickHandler: function (handler) {\n return this.setButtonClickHandler(this.$button_shoppingcart, handler, jrgwc);\n },\n /**\n * 给立即购买按钮附加click事件\n * @param handler\n * @returns {*|jQuery|HTMLElement}\n */\n setBuyButtonClickHandler: function (handler) {\n return this.setButtonClickHandler(this.$button_buy, handler, ljgm); \n },\n setButtonClickHandler: function($target, handler, defaultHandler){\n if(handler){\n $target.on('click', handler);\n }else{\n $target.on('click', defaultHandler);\n }\n return $target;\n },\n ljgm: function () {\n ljgm();\n },\n jrgwc: function () {\n jrgwc();\n },\n tcjrgwc: function (packID) {\n window.$p.jsonpAddItemToCart({\n terminal: window.$p.terminal,\n itemtype: 3, /* 商品类型0普通商品2选件搭售3 套餐7标识批量购买*/\n gcodes: window['code'] + \",\" + packID,\n opgcode: \"\",\n servicecode: \"\",\n icount: 1\n }, function(data){\n if (data.rc == 0) {\n // 添加购物车成功,跳转链接\n window.location.href = __detailConfig.getApiPath(\"gwc\") + \"getcart.jhtml?plat=\" + window.$p.terminal;\n } else {\n $util.warn(\"additemtocart return data fail\" + data.rc);\n alert('套餐加入购物车失败,请稍后再试');\n }\n });\n },\n /*立即预约*/\n ljyy:function() {\n var _this = this;\n if (window.passport && window.passport.isLogin()) {\n window.$p.jsonpShangouYuyue(function (data) {\n if (data.rc == \"0\") {\n window.$p.components.title.reservationId = data.reservationId;// 获取预约id\n // 弹出输入手机号的弹层\n $('#layer_zhezhao, #window_shangouyy').fadeIn(500);\n // 将立即预约按钮置灰并去掉绑定的事件\n window.$p.components.buygroup.setBuyButton('已预约', true);\n } else {\n alert(data.msg || '系统正忙, 请稍后再试!');\n }\n });\n\n } else {\n try {\n window.passport.show();\n passort.loginRedirect = window.location.href;\n } catch (e) {\n $util.warn('立即预约失败。。');\n $util.warn(e);\n }\n\n }\n },\n /*闪购立即购买*/\n ljgm_sg: function () {\n var $p = window['$p'];\n try{\n if (window.passport && window.passport.isLogin()) {\n if ($p.baseInfo.activityType == 2) {\n if ($p.activity.ShanGou && ($p.activity.ShanGou.type == 1 || $p.activity.ShanGou.type == 2)) {\n $p.jsonpIsBookUser(function (data) {\n if (data.rc == 0) {\n // 1 已预约 0 未预约\n if (data.status == 1) {\n window.location.href = __detailConfig.getApiPath(\"gwc\") + \"directbuy.jhtml?ss=\"\n + new Date().getMilliseconds() + \"&itemtype=0\"\n + \"&gcodes=\" + code + \"&icount=\" + $p.components.buygroup.getBuyNumber() + \"&terminal=\" + $p.terminal;\n } else {\n alert(\"你未预约该商品,没有购买资格!\");\n }\n } else {\n alert(\"系统正忙,请稍后再试!\");\n }\n }, function () {\n alert(\"系统正忙,请稍后再试!\");\n });\n }\n }\n } else {\n window.passport.show();\n passort.loginRedirect = c_url;\n }\n }catch (e){\n $util.warn('BuyGroup组件=> ljgm_sg方法错误 ------------->');\n $util.warn(e);\n alert($util.errorMessage.busy);\n }\n },\n checkSNCode: function () {\n var $p = window.$p;\n $('#layer_zhezhao').show();\n $('#checkSNcode_box').fadeIn(500);\n\n var $OKButton = $(\"#checkSNcode_bt\").text(\"验证中...\");\n\n var inputSNCode = $(\"#SNcode\").val();\n if(!inputSNCode){\n alert('请输入SN码!');\n return false;\n }\n var inputSNCode = encodeURIComponent(inputSNCode);\n $p.ajaxCheckSNCode(inputSNCode, function (data) {\n var _data = data.data;\n if(data.status == 200 && _data.res == true){\n $OKButton.text(\"确定\");\n $p.baseInfo.SNCode = _data && _data.info && _data.info.machineNo;\n if(!$p.baseInfo.SNCode){\n alert('SN码验证失败');\n $OKButton.text(\"确定\");\n return false;\n }\n ljgm();\n }else{\n $OKButton.text(\"确定\");\n alert((_data && _data.info && _data.info.errorMessage) || 'SN码验证失败');\n }\n }, function () {\n alert('系统繁忙,请稍后再试!');\n return false;\n })\n }\n };\n\n /**\n * 设置dom节点显示价格信息\n * @param price 要显示的价格\n */\n var setPriceDom = function(price){\n var _price = parseFloat(price);\n if(isNaN(_price)){\n $(\"#price_unit\").text(\"\");\n $(\"#span_price\").text(price);\n }\n else{\n $(\"#price_unit\").text(\"RMB\");\n $(\"#span_price\").text(_price.toFixed(2));\n }\n };\n\n /**\n * 获取所有商品code数组\n * @returns {*[]}\n */\n var getAllGoodCodes = function(){\n var gcodes = [code];\n var xj = window.$p.components.tjxj.data.selectedArray;\n for(var i = 0; i < xj.length; i++){\n gcodes.push(xj[i].code);\n }\n return gcodes;\n };\n /**\n * 立即购买方法\n * @returns {boolean}\n */\n var ljgm = function () {\n try{\n var $p = window.$p;\n if(!$p.components.guige.isExist_gg()) return false;\n var gcodes = getAllGoodCodes();\n var itemType = gcodes.length > 1 ? 2 : 0;\n var url = __detailConfig.getApiPath(\"gwc\") + \"directbuy.jhtml?ss=\" + new Date().getMilliseconds()\n + \"&itemtype=\" + itemType + \"&gcodes=\" + gcodes.join(',')\n + \"&icount=\" + $(\"#buy_number\").val()\n + \"&opgcode=\" + $p.components.kxzp.getKXZP().join()\n + \"&servicecode=\" + $p.components.service.getSelectedService().join()\n + \"&customids=\"\n + \"&sharecode=\" + $p.shareCode\n + \"&terminal=\" + $p.terminal;\n if($p.baseInfo.isPersonalPositions && $p.baseInfo.isPersonalPositions.length > 0){\n url+= '&personalization=' + $p.components.srdz.getdz();\n }\n if($p.baseInfo.buOwner==90){//lgq add by data 2016/05/06 dongde\n //判断懂得通信90\n if($(\"#showpop\").val()==\"\"){\n alert('请选择号码');\n return false;\n }\n var tc = $(\"div.de_info_section1 .de_sec_main\").eq(1).find(\"span.active\").attr(\"code\");\n url += \"&phoneServiceNumber=\" + $(\"#showpop\").val() + \"&dpackageId=\" + tc;\n url += \"&goodsId=\" + $(\"#showpop\").attr(\"goodsid\");\n }\n if($p.isLcodeProduct()){\n var kCode = $p.baseInfo.LCode;\n url += '&kcode=' + kCode;\n }\n /*sn逻辑*/\n if($p.baseInfo.isNeedSN && $p.baseInfo.isService){\n if($p.baseInfo.SNCode){\n url += '&SN=' + $p.baseInfo.SNCode;\n }else{\n $p.components.buygroup && $p.components.buygroup.checkSNCode();\n return false;\n }\n }\n switch ($p.baseInfo.salesType) {\n case '5':// 定制\n url = 'custommade.html?code=' + $p.gcode;\n break;\n }\n if (window['passport'] && window['passport']['isLogin']()) {\n if($p.activity && $p.baseInfo.activityType == 1 && $p.activity['purchaseLimiting'] == 1){\n $p.jsonpIsTuangouUser(function (data) {\n if (data.rc == 0 && $p.activity.hasPurchased == 1) {\n $p.components.buygroup.setBuyButton('您已参团', true);\n alert(\"您已参团\");\n }\n });\n }\n window.location.href = url;\n } else {\n window['passport'].show();\n window['passport'].loginRedirect =url;\n }\n }catch (e){\n $util.warn('BuyGroup组件=> ljgm方法错误 ------------->');\n $util.warn(e);\n alert($util.errorMessage.busy);\n }\n };\n\n /**\n * 加入购物车方法\n * @returns {boolean}\n */\n var jrgwc = function () {\n try{\n if(!window.$p.components.guige.isExist_gg()) return false;\n var gcodes = getAllGoodCodes();\n var itemType = gcodes.length > 1 ? 2 : 0;\n window.$p.jsonpAddItemToCart({\n terminal: window.$p.terminal,\n itemtype: itemType, /* 商品类型0普通商品2选件搭售3 套餐7标识批量购买*/\n gcodes: gcodes.join(','),\n opgcode: window.$p.components.kxzp.getKXZP().join(),\n servicecode: window.$p.components.service.getSelectedService().join(),\n customids: window.$p.components.srdz.getdz(),\n icount: $(\"#buy_number\").val()\n }, function(data){\n if (data.rc == 0) {\n // 添加购物车成功,跳转链接\n window.location.href = __detailConfig.getApiPath(\"gwc\") + \"getcart.jhtml?plat=\" + window.$p.terminal;\n } else {\n $util.warn(\"additemtocart return data fail\" + data.rc);\n alert('加入购物车失败,请稍后再试');\n }\n });\n }catch (e){\n $util.warn('BuyGroup组件=> jrgwc方法错误 ------------->');\n $util.warn(e);\n alert($util.errorMessage.busy);\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.BuyGroup = BuyGroup;\n})(window.PDUtil);\n/**\n * Created by liuyc14 on 2017/02/28.\n * 配置信息组件,负责商品信息、配置信息、评价信息的逻辑\n * dependence: pageBar组件\n */\n(function ($util) {\n function Configuration(needInit){\n var self = this;\n /*定义默认数据结构*/\n this.data = {\n totalCount: 0,\n showTabIndex: 0,\n comments: [],\n labels: [],\n pageIndex: 1,\n level: 0,\n label: \"\"\n };\n this.declarationUrl = '//www.lenovo.com.cn/series/product/xiaoxin/images/pcmianzeshengming.jpg';\n this.$container = $('#container_info');\n this.$box_pagebar = $('#pj_number > ul');\n this.$box_information = $('#box_information');\n this.$box_configuration = $('#box_configuration');\n this.$box_comment = $('#box_comment');\n this.$commentList = $('#assess_item');\n this.$commentLabels = $('#comment_labels');\n this.$button_showthis = $('#comment_only_show_this');\n /*分页组件*/\n try{\n this.pagebar = new components.PageBar(this.$box_pagebar);\n this.pagebar.data.onPageChange = function (page) {\n self.data.pageIndex = self.pagebar.data.pageIndex = page;\n self.renderComment();\n };\n }catch(e){\n $util.warn('Configuration组件 init方法错误 ---------->');\n $util.warn(e);\n }\n\n if(needInit)this.init();\n }\n Configuration.prototype= {\n constructor: Configuration,\n /**\n * 首次渲染时调用\n */\n init: function () {\n try{\n this.bindEvent();\n }catch (e){\n $util.warn('Configuration.bindEvent error');\n $util.warn(e);\n }\n\n this.renderComment();\n try{\n this.renderCommentLables();\n }catch (e){\n $util.warn('Configuration.renderCommentLables error');\n $util.warn(e);\n }\n try{\n this.renderCommentNumber();\n }catch (e){\n $util.warn('Configuration.renderCommentNumber error');\n $util.warn(e);\n }\n this.adddeclaration();\n },\n /**\n * 绑定推荐选件的事件\n */\n bindEvent: function () {\n var bigImageIndex = 0;\n var self = this;\n this.$box_comment.find('.assess_tRight .assess_btn').first().addClass('checked');\n var $defaultLi = this.$container.find('ul.ul-box li.checked');\n if($defaultLi && $defaultLi.length == 1){\n this.data.showTabIndex = parseInt($defaultLi.attr('data-index'));\n if(this.data.showTabIndex == 2){\n self.$container.find('.info-box').eq(2).show();\n }\n }\n\n /*tab选项卡点击事件*/\n this.$container.find('ul.ul-box li').on('click', function () {\n var $this = $(this);\n var index = $this.attr('data-index');\n if(self.data.showTabIndex == index){\n return false;\n }else{\n $this.siblings('.checked').removeClass('checked');\n $this.addClass('checked');\n self.$container.find('.info-box').eq(self.data.showTabIndex).hide();\n self.data.showTabIndex = index;\n self.$container.find('.info-box').eq(index).show();\n }\n });\n\n /*评论好评差评切换事件*/\n this.$box_comment.find('.assess_tRight .assess_btn').on('click', function () {\n var $this = $(this);\n var level = $this.attr('data-level');\n if(self.data.level == level){\n return false;\n }else{\n $this.siblings('.checked').removeClass('checked');\n $this.addClass('checked');\n self.data.level = level;\n self.data.label = \"\";\n self.data.pageIndex = 1;\n\n $('#comment_labels div.mjyx_info').removeClass('mjyx_active');\n self.renderComment();\n }\n });\n /*评论label切换事件*/\n this.$box_comment.find('#comment_labels').on('click', '.mjyx_info', function (e) {\n var $this = $(this);\n var $button = $this;\n if(!$this.hasClass('mjyx_info')){\n $button = $this.parent();\n }\n if($button.hasClass('mjyx_active')){\n return false;\n }\n $('#comment_labels div.mjyx_active').removeClass('mjyx_active');\n $button.addClass('mjyx_active');\n var $span = $button.find('span:first');\n self.data.label = $span.text();\n self.data.pageIndex = 1;\n self.renderComment();\n\n return false;\n });\n /***只看当前商品点击事件***/\n this.$button_showthis.on('click', function () {\n self.data.pageIndex = 1;\n self.data.label = \"\";\n self.renderComment();\n self.renderCommentLables();\n self.renderCommentNumber();\n });\n /***************评论图片点击事件****************/\n /*点击小图打开大图*/\n self.$commentList.on('click', 'div.assess_picBtn', function() {\n var _this = $(this);\n var index = bigImageIndex = parseInt(_this.attr('data-index') || 0);\n _this.addClass('borderActive').siblings().removeClass('borderActive');\n _this.find('span').slideDown(1000);\n _this.siblings().find('span').hide();\n _this.parent().parent().find('ul.assess_ul li').eq(index).show().siblings().hide();\n _this.parent().parent().find('.btn_div').show();\n });\n /*隐藏大图*/\n self.$commentList.on('click', 'ul.assess_ul li', function() {\n var _this = $(this);\n _this.hide();\n var index = _this.index();\n $('.btn_div').hide();\n $('.assess_picBtn').eq(index).removeClass('borderActive');\n $('.assess_picBtn').eq(index).find('span').hide();\n });\n self.$commentList.on('click', 'span.assess_btnRight', function() {\n var parentNode = $(this).parent().parent().parent();\n var num = parentNode.find('.assess_ul li').length;\n bigImageIndex++;\n if(bigImageIndex >= num) {\n bigImageIndex = 0;\n }\n var $pic = parentNode.find('.assess_picBtn').eq(bigImageIndex);\n $pic.addClass('borderActive').siblings().removeClass('borderActive');\n $pic.find('span').show();\n $pic.siblings().find('span').hide();\n parentNode.find('.assess_ul li').eq(bigImageIndex).show().siblings().hide();\n\n //\n });\n self.$commentList.on('click', 'span.assess_btnLeft', function() {\n var parentNode = $(this).parent().parent().parent();\n var num = parentNode.find('.assess_ul li').length;\n if(bigImageIndex <= 0) {\n bigImageIndex = num;\n }\n bigImageIndex--;\n var $pic = parentNode.find('.assess_picBtn').eq(bigImageIndex);\n $pic.addClass('borderActive').siblings().removeClass('borderActive');\n $pic.find('span').show();\n $pic.siblings().find('span').hide();\n parentNode.find('.assess_ul li').eq(bigImageIndex).show().siblings().hide();\n\n });\n /***************评论图片点击事件****************/\n //显示好评列表\n this.$box_comment.find('.assess_tRight .assess_btn').eq(1).click();\n },\n /**\n * 获取要实现评论的code集合\n * @returns {*}\n */\n getShowCodes: function(){\n var self = this;\n try{\n if(self.$button_showthis[0].checked){\n return window.code;\n }\n var gcode = [];\n var _spec = window.specInfo;\n if(_spec && _spec instanceof Array){\n for (var i = 0; i < _spec.length; i++){\n var gsdlist = _spec[i];\n if(gsdlist && gsdlist.gsdlist && gsdlist.gsdlist.length > 0){\n for (var j =0; j < gsdlist.gsdlist.length; j++){\n if(gsdlist.gsdlist[j] && gsdlist.gsdlist[j].gcode) {\n gcode.push(gsdlist.gsdlist[j].gcode);\n }\n }\n }\n }\n }\n return gcode.join(',');\n }catch(e){\n $util.warn('configuration.getShowCodes报错了-------->');\n $util.warn(e);\n return window.code;\n }\n },\n /**\n * 添加产品详情的免责声明\n */\n adddeclaration: function () {\n try{\n var $imageDiv = this.$box_information.find('div.images');\n if($imageDiv.find('img').length > 0){\n $imageDiv.append('

    ');\n }\n }catch (e){\n $util.warn('configuration组件=> adddeclaration方法报错了-------->');\n $util.warn(e);\n }\n },\n /**\n * 显示评论列表\n */\n renderComment: function () {\n var $p = window['$p'];\n var self = this;\n\n self.$commentList.html('
    加载评论...
    ');\n var codes = self.getShowCodes();\n $p.jsonpEvaluateList(codes, self.data.pageIndex, self.data.level, self.data.label, function(data){\n self.callback_commentListSuccess(data);\n }, function () {\n self.$commentList.html(\"

    暂无评价内容.

    \");\n })\n },\n /**\n * 显示评论标签\n */\n renderCommentLables: function () {\n var self = this;\n self.$commentLabels.empty();\n var codes = self.getShowCodes();\n window.$p.jsonpEvaluateLable(codes, function (data) {\n try{\n var html = \"\";\n if (data.data.length>0 && data.code == \"000000\") {\n for (var i = 0; i < data.data.length; i++) {\n html += '
    ' + data.data[i].lable + '(' + data.data[i].num + ')
    ';\n }\n self.$commentLabels.append(html);\n }\n }catch (e){\n $util.warn('configuration.renderCommentLables 中 $p.jsonpEvaluateLable回调函数 错误 --------------->');\n $util.warn(e);\n }\n }, function () {\n\n });\n },\n /**\n * 显示评论数量\n */\n renderCommentNumber: function () {\n var self = this;\n var $all = $('#comment_level_all').html('0');\n var $haoping = $('#comment_level_haoping').html('0');\n var $zhongping = $('#comment_level_zhongping').html('0');\n var $chaping = $('#comment_level_chaping').html('0');\n var $pic = $('#comment_level_pic').html('0');\n var $hpl = $('#comment_haopinglv').html(\"100%\");\n var codes = self.getShowCodes();\n window.$p.jsonpEvaluateNumber(codes, function (data) {\n try{\n if(data.code == \"000000\") {\n var data = data.data;\n $all.html(data.total);\n $haoping.html(data.good);\n $zhongping.html(data.medium);\n $chaping.html(data.bad);\n $pic.html(data.picnum);\n var hpl = Math.floor(data.good / data.total * 100);\n if(data.total !== 0) {\n $hpl.html(hpl + \"%\");\n var $title = self.$container.find('ul.ul-box li:eq(2)');\n $title.text('商品评价('+data.total+')');\n }\n }\n }catch(e){\n $util.warn('configuration.renderCommentNumber 中 $p.jsonpEvaluateNumber回调函数 错误 --------------->');\n $util.warn(e);\n }\n });\n },\n callback_commentListSuccess: function (data) {\n try {\n var self = this;\n self.$commentList.empty();\n if (data.code == \"000000\" && data.data.productcommment.length > 0) {\n var db = this.data.comments = data.data.productcommment;\n /*重新渲染分页组件*/\n if(data.data.totalpagecount <= 1){\n self.data.totalCount = self.pagebar.data.totalCount = db.length;\n }else{\n self.data.totalCount = self.pagebar.data.totalCount = data.data.totalpagecount * 10;\n }\n self.pagebar.render();\n\n /*拼接数据*/\n for (var i = 0; i < db.length; i++) {\n var html = \"\";\n html += '
    ';\n html += ' \t
    ';\n html += ' \t\t
    ' + db[i].euser + '
    ';\n html += '\t\t';\n html += ' \t\t
    ' + db[i].etime + '
    ';\n html += ' \t
    ';\n html += ' \t
    ';\n /*买家印象*/\n html += '\t\t
    ';\n var labels = db[i].lableAndScore.labels;\n if (labels && labels.length > 0) {\n for (var k = 0; k < labels.length; k++) {\n html += '\t\t\t
    ' + labels[k] + '
    ';\n }\n\n }\n html += '\t\t
    ';\n html += ' \t\t
    ' + db[i].edesc + '
    ';\n /*评价图片*/\n if (db[i].eimagelist.length > 0) {\n html += ' \t\t
    ';\n html += ' \t\t\t
    ';\n /*小图*/\n for (var j = 0; j < db[i].eimagelist.length; j++) {\n html += ' \t\t\t\t
    ';\n }\n html += '\t\t\t
    ';\n html += '\t\t\t
    ';\n html += '\t\t\t\t
      ';\n /*大图*/\n for (var k = 0; k < db[i].eimagelist.length; k++) {\n html += '\t\t\t\t\t
    • ';\n }\n html += '\t\t\t\t
    ';\n html += '\t\t\t\t
    ';\n html += '\t\t\t\t\t';\n html += '\t\t\t\t\t';\n html += '\t\t\t\t
    ';\n html += '\t\t\t
    ';\n html += '\t\t
    ';\n }\n /*联想客服*/\n if (db[i].reply.length > 0) {\n html += '\t\t
    ';\n html += '\t\t\t
    ' + db[i].reply[0].retname + db[i].reply[0].rettime + '
    ';\n html += '\t\t\t
    ' + db[i].reply[0].retdesc + '
    ';\n html += '\t\t
    ';\n }\n html += '\t
    ';\n html += '
    ';\n this.$commentList.append(html)\n }\n } else if (data.code == \"000000\" && data.data.productcommment.length == 0) {\n this.$commentList.html('
    没有更多评论了
    ');\n } else {\n this.$box_comment.html(\"

    暂无评价内容.

    \");\n }\n }catch(e){\n $util.warn('configuration.callback_commentListSuccess 错误 --------------->');\n $util.warn(e);\n }\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.Configuration = Configuration;\n})(window.PDUtil);\n\n/**\n * Created by liuyc14 on 2016/10/18.\n * 规格组件,负责规格相关Dom操作和数据逻辑\n */\n(function () {\n var specInfo = window['specInfo'];\n function Guige(needInit){\n /*定义默认数据结构*/\n this.data = {};\n this.$container = $('#container_guige');\n if(needInit)this.init();\n }\n Guige.prototype= {\n constructor: Guige,\n /**\n * 首次渲染时调用\n */\n init: function () {\n this.bindEvent();\n this.__setGuige();\n },\n __setGuige: function () {\n $p.fn_Specifications.SpecificationsRels = specInfo;\n var tlist = [];\n $.each(specInfo, function (i, v) {\n var temp_tlist = {\n typeid: v.typeid,\n gsdlist: []\n };\n $.each(v.gsdlist, function (ii, iv) {\n var isgsd = true;\n $.each(temp_tlist.gsdlist, function (ti, tv) {\n if (tv.gsdId == iv.gsdId) {\n isgsd = false;\n }\n });\n if (isgsd)\n temp_tlist.gsdlist.push({gsdId: iv.gsdId});\n });\n tlist.push(temp_tlist);\n });\n $p.fn_Specifications.SpecificationsRelList = tlist;\n $p.fn_Specifications.valeDefault(code, function (sid) {\n $(\"#\" + sid).addClass(\"checked\").removeClass(\"item-disabled\").css(\"background\", \"\");\n });\n },\n bindEvent: function () {\n var $box = $(\".box\", this.$container); /*所有规格*/\n var _this = this;\n $(\".box > div.item\", this.$container).off(\"click\").on(\"click\", function () {\n var $this = $(this);\n if ($this.hasClass(\"item-disabled\")) {\n return false;\n }\n if($box.find(\"div.checked\").length == $box.length){\n var activeLength = 1;\n }else{\n var activeLength = 0;\n }\n if ($(this).hasClass('checked')) {\n $(this).removeClass('checked');\n } else {\n $(this).siblings('.checked').removeClass('checked');\n if(activeLength == 1){\n _this.$container.find(\".box > div.item\").removeClass('checked');\n }\n $(this).addClass('checked');\n }\n _this.$container.find('div.item-disabled').removeClass('item-disabled').attr('style', '');\n var sflist = [];\n _this.$container.find('div.item.checked').each(function () {\n sflist.push({ typeid: $(this).parent().attr('typeid'), gsdId: $(this).attr(\"id\") });\n });\n $p.fn_Specifications.valeDisabled(sflist, function (sid) {\n $(\"#\" + sid).addClass(\"item-disabled\").removeClass(\"checked\").css(\"background\", \"rgb(153, 153, 153)\");\n });\n if ($p.fn_Specifications.SpecificationsRelList.length == sflist.length) {\n var code = $p.fn_Specifications.getgcode(sflist);\n window.location.href = code + '.html';\n }\n });\n },\n /**\n * 判断是否选中了所有规格\n * @returns {boolean}\n */\n isExist_gg: function () {\n var f = false;\n var specInfo = window['specInfo'];\n if (specInfo instanceof Array) {\n var len = specInfo.length;\n if ($(\"#container_guige div.box > div.checked\").length == len)\n f = true;\n else {\n alert('请选中规格');\n }\n }\n return f;\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.Guige = Guige;\n})();\n/**\n * Created by liuyc14 on 2016/10/18.\n * 热销榜组件,负责相关信息的Dom操作和数据逻辑\n */\n(function () {\n function HotList(needInit){\n /*定义默认数据结构*/\n this.data = {\n all: []\n };\n this.$container = $('#container_hotlist');\n this.$box = $('#div_hotlist');\n if(needInit) this.init();\n }\n HotList.prototype = {\n constructor: HotList,\n /**\n * 首次渲染时调用\n */\n init: function () {\n var _this = this;\n this.getAllData(\n function (data) {\n _this.renderDom();\n _this.bindEvent();\n if(data && data.length > 0){\n _this.$container.show();\n }else{\n _this.$container.hide();\n }\n }\n )\n },\n renderDom:function () {\n var list = this.data.all;\n var html = '';\n if (list.length ==0) return false;\n /*循环所有赠品,判断如果在有效期内就显示*/\n for (var i = 0; i < list.length; i++) {\n if (i == 3) break;\n var noBorder = i == 2 ? ' noborder' : '';\n var o = list[i];\n /*向DOM中追加元素*/\n html += '
    ' +\n '' +\n '
    ' + o.name + '
    ' +\n '
    ' + (o['brief'] || '') + '
    ' +\n '
    RMB ' + o.price + '
    ' +\n '
    ';\n }\n if (html.length > 0) {\n this.$box.append(html);\n this.$container.removeClass('hidden');\n }\n },\n /**\n * 绑定必选赠品的事件\n */\n bindEvent: function () {\n\n },\n /**\n * 获取选件所有的数据\n */\n getAllData: function (callback) {\n var _this = this;\n $p.loadHostList({}, function (data) {\n if (data.status == 200) {\n _this.data.all = data.data;\n }\n callback && callback(data.data);\n })\n }\n };\n if(!window.components){\n window.components = {};\n }\n window.components.HotList = HotList;\n})();\n\n/**\n * Created by liuyc14 on 2016/10/18.\n * 可选赠品组件,负责相关信息的Dom操作和数据逻辑\n */\n(function () {\n var PDUtil = window.PDUtil;\n function KeXuanZengPin(needInit){\n /*定义默认数据结构*/\n this.data = {\n all:[],/*所有可选赠品集合*/\n selectedArray:[]\n };\n this.$box = $('#div_kexuan');\n this.$button_ok = $('#button_checkgifts_ok');\n this.$button_cancel = $('#button_checkgifts_cancel');\n this.$a_close = $('#a_close_chose');\n this.hasChecked = false;\n if(needInit)this.init();\n }\n KeXuanZengPin.prototype= {\n constructor: KeXuanZengPin,\n /**\n * 首次渲染时调用\n */\n init: function () {\n this.getAllData();\n this.renderDom();\n this.bindEvent();\n },\n renderDom:function () {\n var gifts = $p.components.bxzp.data.all;\n /*必选赠品*/\n var giftsSelectable = this.data.all;\n /*可选赠品*/\n var html = '';\n /*先循环必选赠品*/\n for (var i = 0; i < gifts.length; i++) {\n var o = gifts[i];\n /*向DOM中追加元素*/\n html += '';\n }\n /*循环可选赠品*/\n html += '';\n if (html.length > 0) {\n this.$box.find('.box-body').append(html);\n }\n },\n /**\n * 绑定可选赠品的事件\n */\n bindEvent: function () {\n var _this = this;\n _this.$a_close.on('click', function () {\n _this.closeCheckBox();\n });\n _this.$button_cancel.on('click', function () {\n _this.closeCheckBox();\n });\n\n /*点击可选赠品事件*/\n _this.$box.find('.box-body ul.kxzp li').on('click', function () {\n PDUtil.debug('zengpin click-------------->');\n PDUtil.debug('hasChecked:' + _this.hasChecked);\n PDUtil.debug('selectedArray:' + _this.data.selectedArray.length);\n\n var $this = $(this);\n if(!$this.hasClass('checked')){\n var code = $this.attr('data-code');\n var $prev = $this.siblings('.checked').removeClass('checked');\n _this.data.selectedArray = PDUtil.dropSome(_this.data.selectedArray, function (o) {return o.code == $prev.attr('data-code');});\n\n var exists = PDUtil.findFirst(_this.data.selectedArray, function(o){return o.code == code});\n if(!exists){\n var g = PDUtil.findFirst(_this.data.all, function(o){return o.code==code});\n _this.data.selectedArray.push(g);\n $this.parent().find('span.name').text(g && g.goodsName);\n }\n $this.addClass('checked');\n }else{\n /*用户点击已选中的赠品,在已选择的列表中删除*/\n $this.removeClass('checked');\n _this.data.selectedArray = PDUtil.dropSome(_this.data.selectedArray, function (o) {\n return o.code == $this.attr('data-code');\n })\n }\n });\n\n /*选择赠品确定事件*/\n _this.$button_ok.on('click', function () {\n PDUtil.debug('OK click-------------->');\n PDUtil.debug('hasChecked:' + _this.hasChecked);\n PDUtil.debug('selectedArray:' + _this.data.selectedArray.length);\n\n var bxzp = $p.components.bxzp;\n if(_this.data.selectedArray.length > 0){\n _this.hasChecked = true;\n bxzp.emptyBoxDom();\n bxzp.renderDom(bxzp.data.all.concat(_this.data.selectedArray));\n _this.closeCheckBox();\n }else{\n /*alert('请选择一个赠品!');*/\n PDUtil.debug('用户点击确定,但是没有选择可选赠品');\n _this.hasChecked = false;\n bxzp.emptyBoxDom();\n _this.closeCheckBox();\n }\n });\n },\n /**\n * 获取选件所有的数据\n */\n getAllData: function () {\n var _data = $p.processKXZPNeedShowList();\n this.data.all = _data;\n return _data;\n },\n /**\n * 获取用户选择的可选赠品\n * @returns {Array}\n */\n getKXZP: function () {\n var result = [];\n for (var i = 0; i < this.data.selectedArray.length; i++){\n result.push(this.data.selectedArray[i].code);\n }\n return result;\n },\n closeCheckBox: function () {\n var _this = this;\n\n var $box = this.$box;\n if(_this.hasChecked == false){\n _this.data.selectedArray = [];\n _this.$box.find('.box-body ul.kxzp li.checked').removeClass('checked');\n }\n $box.animate({width:10, height:10}, function () {\n $box.removeAttr('style').hide();\n if(_this.data.selectedArray.length == 0) {\n $p.components.bxzp.showCheckButton();\n }else{\n $p.components.bxzp.showEditButton();\n }\n });\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.KeXuanZengPin = KeXuanZengPin; \n})();\n\n/**\n * Created by liuyc14 on 2017/03/01.\n * 分页组件\n */\n(function ($util) {\n function PageBar($container, onPageChange){\n /*定义默认数据结构*/\n this.data = {\n totalCount: 0,\n pageSize: 10,\n pageIndex: 1,\n interval: 3,\n onPageChange: onPageChange\n };\n\n this.$container = $container;\n }\n PageBar.prototype= {\n constructor: PageBar,\n /**\n * 首次渲染时调用\n */\n render: function () {\n try{\n var self = this;\n self.$container.empty();\n /*上一页*/\n if (self.data.pageIndex == 1) {\n self.$container.append(\n '
  • '+\n '上一页'+\n '
  • '\n );\n }\n else {\n var $pre = $(\n '
  • '+\n '上一页'+\n '
  • '\n ).on('click', function () {\n try{\n self.data.onPageChange(self.data.pageIndex - 1);\n }catch(e){\n $util.warn(e);\n }\n return false;\n });\n self.$container.append($pre);\n }\n /*页码*/\n var pagecount = Math.ceil(self.data.totalCount / self.data.pageSize); //总页数\n var start = Math.max(1, self.data.pageIndex - self.data.interval); //设置起始页\n var end = Math.min(self.data.pageIndex + self.data.interval, pagecount); //设置末页\n if (self.data.pageIndex < self.data.interval + 1) {\n end = (2 * self.data.interval + 1) > pagecount ? pagecount : (2 * self.data.interval + 1);\n }\n if ((self.data.pageIndex + self.data.interval) > pagecount) {\n start = (pagecount - 2 * self.data.interval) < 1 ? 1 : (pagecount - 2 * self.data.interval);\n }\n for (var j = start; j < end + 1; j++) {\n if (j == self.data.pageIndex) {\n self.$container.append('
  • '+j+'
  • ');\n } else {\n var $pagebtn = $('
  • '+j+'
  • ').on('click', function () {\n try{\n self.data.onPageChange(parseInt($(this).text()));\n }catch(e){\n $util.warn(e);\n }\n return false;\n });\n self.$container.append($pagebtn);\n }\n }\n /*末页*/\n if (self.data.pageIndex == pagecount || self.data.totalCount == 0) {\n self.$container.append(\n '
  • '+\n '下一页'+\n '
  • '\n );\n }\n else {\n var $next = $(\n '
  • '+\n '下一页'+\n '
  • '\n ).on('click', function () {\n try{\n self.data.onPageChange(parseInt(self.data.pageIndex + 1));\n }catch(e){\n $util.warn(e);\n }\n return false;\n });\n self.$container.append($next);\n }\n self.$container.append(\"
  • 显示\" + ((self.data.pageIndex - 1) * self.data.pageSize + 1) + \"-\" + (self.data.pageIndex * self.data.pageSize > self.data.totalCount ? self.data.totalCount : self.data.pageIndex * self.data.pageSize) + \"条,共\" + pagecount + \"页
  • \");\n var pageNum = $('
  • 到第
  • ');\n var gotoPage = $('
  • ').on('click', function(){\n try{\n var p =parseInt(pageNum.find(\"input\").val());\n if(p > pagecount || p <= 0 || isNaN(p)){\n alert(\"当前一共\"+pagecount+\"页,请输入正确的页码。\");\n return false;\n }\n self.data.onPageChange(p);\n }catch(e){\n $util.warn(e);\n }\n });\n self.$container.append(pageNum).append(gotoPage);\n }catch(e){\n $util.warn('PageBar组件=> render方法错误 ----------->');\n $util.warn(e);\n }\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.PageBar = PageBar;\n})(window.PDUtil);\n\n/**\n * Created by liuyc14 on 2017年4月17日16:01:11.\n * 轮播图组件\n */\n(function () {\n function PlayPicture(needInit){\n /*定义默认数据结构*/\n this.data = {\n initPicList:[]/*橱窗图原始数据*/\n };\n this.$container = $('#detail_playPicture');\n this.$winpic = $('#winpic');\n this.$button_left = $('#play_picture_leftbtn');\n this.$button_right = $('#play_picture_rightbtn');\n this.$div_list = $('#detail_playPicture_list');\n this.$ul = $('#detail_playPicture_list ul');\n this.maxShowNumber = 5;/*缩略图最大展示数量*/\n this.currentIndex = 1;/*当前index 从1开始*/\n this.windowIndex = 1;/*当前展示的缩略图的可视区域位置 从1开始*/\n this.page = 1;\n this.totalPage = 1;\n this.totalCount = 0;/*图片总数*/\n if(needInit) this.init();\n }\n PlayPicture.prototype= {\n constructor: PlayPicture,\n /**\n * 首次渲染时调用\n */\n init: function () {\n try{\n this.__initCount();\n this.__initGoodPicList();\n }catch(e){\n window.PDUtil.debug('轮播图__initCount方法error--------->');\n window.PDUtil.warn(e);\n }\n /*if (this.totalPage == 1) {\n this.$button_down.hide();\n }*/\n this.bindEvent();\n this.$container.show();\n this.showWithIndex(1);\n },\n /**\n * 初始化产品原始橱窗图数据\n * @private\n */\n __initGoodPicList: function(){\n var self = this;\n this.$ul.find(' > li > a > img').each(function () {\n var $this = $(this);\n self.data.initPicList.push({\n 'src': $this.attr('src'),\n 'name': $this.attr('alt')\n });\n });\n },\n __initCount: function () {\n this.currentIndex = 1;\n this.windowIndex = 1;\n this.page = 1;\n this.totalCount = this.$ul.find('>li').length;\n //this.$button_up.hide();\n if (this.totalCount == this.maxShowNumber) {\n this.totalPage = 1;\n } else {\n this.totalPage = parseInt(this.totalCount / this.maxShowNumber) + 1;\n }\n this.setButtonShow();\n },\n /**\n * 判断箭头按钮的显示隐藏\n */\n setButtonShow: function () {\n var self = this;\n /*判断向左按钮显示隐藏*/\n if(self.currentIndex <= 1){\n self.$button_left.css('opacity', '0.3').attr('disable','disable');\n }else{\n self.$button_left.css('opacity', '1.0').removeAttr('disable');\n }\n\n /*判断向右按钮显示隐藏*/\n if(self.currentIndex >= this.totalCount){\n self.$button_right.css('opacity', '0.3').attr('disable','disable');\n }else{\n self.$button_right.css('opacity', '1.0').removeAttr('disable');\n }\n },\n bindEvent: function () {\n var _this = this;\n\n /*单击某一张图片*/\n this.$ul.on('click', 'li', function () {\n var $this = $(this);\n if($this.hasClass('checked')){\n return false;\n }\n var index = parseInt($this.attr('data-index'));\n _this.showWithIndex(index);\n _this.setButtonShow();\n });\n /*上一张图片*/\n this.$button_left.on('click', function () {\n if(_this.currentIndex <= 1) return false;\n\n if(_this.windowIndex == 1){\n _this.gotoPrevPage();\n }else{\n _this.showWithIndex(_this.currentIndex - 1);\n }\n _this.setButtonShow();\n });\n /*下一张图片*/\n this.$button_right.on('click', function () {\n if(_this.currentIndex >= _this.totalCount) return false;\n if(_this.windowIndex == _this.maxShowNumber){\n _this.gotoNextPage();\n }else{\n _this.showWithIndex(_this.currentIndex + 1);\n }\n _this.setButtonShow();\n });\n },\n /**\n * 重新渲染图库\n * @param data\n */\n renderPicture: function (data) {\n if(data && (data instanceof Array)){\n if(data.length == 0){\n data = this.data.initPicList;\n }\n var html = '';\n for(var i = 0; i < data.length; i++){\n html += '
  • '\n + ''\n + '\"'+
  • ';\n }\n this.$ul.empty().append(html);\n\n this.__initCount();\n this.showWithIndex(1);\n }\n },\n showWithIndex: function (index) {\n var $this = this.$ul.find('li').eq(index - 1);\n this.currentIndex = index;\n this.getWindowIndex();\n this.setCheckImage();\n this.showBigImage($this.find('img').first().attr('src'));\n },\n gotoNextPage: function () {\n if (this.page >= this.totalPage) return false;\n this.$ul.css('left', '-=' + (this.maxShowNumber * 96));\n this.page++;\n this.showFirstImage();\n //this.$button_up.show();\n /*\n if(this.page == this.totalPage){\n this.$button_down.hide();\n }else{\n this.$button_down.show();\n }*/\n },\n gotoPrevPage: function () {\n if (this.page <= 1) return false;\n this.$ul.css('left', '+=' + (this.maxShowNumber * 96));\n this.page--;\n this.showMaxImage();\n //this.$button_down.show();\n /*\n if(this.page == 1){\n this.$button_up.hide();\n }else{\n this.$button_up.show();\n }*/\n },\n /*显示缩略图对应的大图*/\n showBigImage: function (src) {\n var showSrc = this.getBigPicSrc(src);\n if(!showSrc){\n return false;\n }\n this.$winpic.attr('src', showSrc);\n },\n /*获取缩略图对应的大图路径*/\n getBigPicSrc: function (src) {\n if(!src) {\n return \"\";\n }\n var width = 520;\n var result = src.replace(/w\\d{2,3}\\.(jpg|png|jpeg)$/gi, 'w' + width + '.$1');\n return result;\n },\n /**\n * 根据当前page和 currentIndex计算出windowIndex\n */\n getWindowIndex: function () {\n return this.windowIndex = this.currentIndex - (this.page - 1) * this.maxShowNumber;\n },\n setCheckImage: function () {\n /*this.$div_checked.css('left', ((this.windowIndex - 1) * 96 + 10));*/\n var self = this;\n self.$ul.find('li.checked').removeClass('checked');\n self.$ul.find('li').eq(self.currentIndex - 1).addClass('checked');\n },\n /**\n * 显示当前可视区域第一张图片\n */\n showFirstImage: function () {\n this.currentIndex = (this.page - 1) * this.maxShowNumber + 1;\n var $this = this.$ul.find('li').eq(this.currentIndex - 1);\n this.getWindowIndex();\n this.setCheckImage();\n this.showBigImage($this.find('img').first().attr('src'));\n },\n /**\n * 显示当前可视区域最后一张图片\n */\n showMaxImage: function () {\n this.currentIndex = this.page * this.maxShowNumber;\n var $this = this.$ul.find('li').eq(this.currentIndex - 1);\n this.getWindowIndex();\n this.setCheckImage();\n this.showBigImage($this.find('img').first().attr('src'));\n }\n };\n if(window.PDUtil.isRunInNode() == true && module && module.exports){\n module.exports = PlayPicture;\n }else{\n if(!window.components){\n window.components = {};\n }\n window.components.PlayPicture = PlayPicture;\n }\n})();\n/**\n * Created by liuyc14 on 2016/10/18.\n * title组件,负责商品title相关Dom操作和数据逻辑\n */\n(function ($util) {\n var needShow = 0;\n function PromotionInfo(needInit){\n /*定义默认数据结构*/\n this.data = {};\n this.$container = $('#container_cuxiao');\n this.$box = $('#div_promotion');\n this.reservationId = 0; /*闪购预约id*/\n if(needInit)this.init();\n }\n\n PromotionInfo.prototype= {\n constructor: PromotionInfo,\n /**\n * 首次渲染时调用\n */\n init: function () {\n this.renderDom();\n },\n renderDom: function () { \n var data = window.$p.baseInfo;\n this.$box.empty();\n var promotion = window.$p.promotion;\n var activity = window.$p.activity;\n var nowNumber = window.$p.nowNumber;\n if(promotion){\n this.setXDLJ(promotion, nowNumber);\n this.setMJ(promotion, nowNumber);\n }\n if(activity){\n this.setXSQG(activity, nowNumber);\n this.setShangou(activity, nowNumber);\n }\n this.setPresell();\n /*促销语*/\n if (data.pcPromotion) {\n this.$box.append('
    ' + data.pcPromotion + '
    ');\n needShow++;\n }\n /*主推语*/\n if (data.extensionTerminal.indexOf(\"pc\")!=-1 && data.extensionContent) {\n this.$box.append('
    ' + data.extensionContent + '
    ');\n needShow++;\n }\n if(needShow) this.$container.removeClass('hidden');\n },\n /**\n * 设置下单立减\n */\n setXDLJ: function (promotion, nowNumber) {\n if(promotion.saleReduction){\n /*下单立减未结束*/\n if(nowNumber < promotion.saleReduction.totime){\n needShow++;\n this.$box.append('
    下单立减
      
    ');\n var $des = $(\"#promotion_xdlj span.des\");\n var $djs = $(\"#promotion_xdlj span.djs\");\n /*下单立减未开始*/\n if(nowNumber < promotion.saleReduction.fromtime){\n $des.html('下单立减' + promotion.saleReduction.discountAmount + '元,活动开始时间:' + promotion.saleReduction.fromtimeStr);\n }\n /*下单立减进行中*/\n else{\n $des.html('下单立减' + promotion.saleReduction.discountAmount + '元');\n $util.timer(\n promotion.saleReduction.totime - nowNumber,\n function (str) {\n $djs.html('距离结束时间还有:'+str);\n }, function () {\n $djs.hide();\n $(\"#promotion_xdlj\").hide();\n });\n }\n }\n /*下单立减结束*/\n else{}\n }\n },\n /**\n * 设置满减\n */\n setMJ: function (promotion, nowNumber) {\n try{\n /*满减*/\n if(promotion.fullReduction){\n /*满减进行中*/\n if(nowNumber > promotion.fullReduction.fromtime && nowNumber < promotion.fullReduction.totime){\n needShow++;\n var html = '
    满      减
    ';\n this.$box.append(html);\n }\n }\n }catch (e){\n $util.warn('促销组件=> setMJ方法错误------------>');\n $util.warn(e);\n }\n },\n /**\n * 设置预售\n */\n setPresell: function () {\n var $p = window['$p'];\n if($p.baseInfo.salesType != 2) return false;\n if($p.baseInfo.marketable == 0) return false;\n needShow++;\n this.$box.append('
    预       售
    定金: 预售规则>>
    ');\n var $div = $('#promotion_presell');\n var $djs = $('#promotion_presell span.djs');\n var $des = $('#promotion_presell span.des');\n\n getPresellInfo();\n function getPresellInfo(){\n $p.loadPresellInfo({}, function (data) {\n if(data && data['success']){\n var sell = data['t'] || {};\n //debug_presell(sell);\n sucessHandler(sell);\n }else{\n $util.warn('获取预售信息失败');\n }\n });\n }\n function sucessHandler(sell){\n if(sell.disabled != 1){\n return false;\n }\n if(sell.terminalname && sell.terminalname.indexOf('PC') < 0){\n $p.components.buygroup && $p.components.buygroup.setBuyButton('商品不在该平台预售', true);\n return false;\n }\n $div.show();\n if(sell.presellway == 1) sell.deposit = $p.baseInfo.price; //如果是全款,定金为商品价格\n $des.html('定金:' + sell.deposit);\n sell.activitystarttime_date = new Date(sell.activitystarttime.replace(/-/g,\"/\"));\n sell.activityendtime_date = new Date(sell.activityendtime.replace(/-/g,\"/\"));\n sell.presellstarttime_date = new Date(sell.presellstarttime.replace(/-/g,\"/\"));\n sell.currentdatetime_date = new Date(sell.currenttime.replace(/-/g,\"/\"));\n\n\n\n /*没到活动支付时间*/\n if(sell.currentdatetime_date < sell.presellstarttime_date){\n sell.process = 1;\n setPreheat(sell); //预热阶段\n }\n /*到了支付时间,但是没到活动结束时间*/\n else if(sell.currentdatetime_date >= sell.presellstarttime_date && sell.currentdatetime_date < sell.activityendtime_date){\n sell.process = 2;\n if($p.baseInfo.stock <= 0) {\n $p.components.buygroup.setBuyButton('已售罄', true);\n return false;\n }\n setPay(sell); //支付定金阶段\n }else{\n sell.process = 3;\n setEnd(sell); //预售结束,显示剩余支付时间\n }\n }\n //预热阶段\n function setPreheat(sell) {\n $p.components.buygroup.setBuyButton('敬请期待', true);\n $util.timer(\n sell.presellstarttime_date - sell.currentdatetime_date,\n function (stime) {\n $djs.html('距离预售正式开始还有:' + stime);\n },\n function () {\n $djs.html('');\n getPresellInfo();\n });\n }\n //支付定金阶段\n function setPay(sell) {\n var text = sell.presellway == 1 ? '支付全款' : '支付定金';\n $p.components.buygroup.setBuyButton(text, false).off('click');/*将立即购买按钮设置为可用并去掉之前绑定的click事件*/\n $p.components.buygroup.setBuyButtonClickHandler();/*购买按钮绑定默认的立即购买事件*/\n $util.timer(\n sell.activityendtime_date - sell.currentdatetime_date,\n function (stime) {\n $djs.html('距离定金支付结束还有:' + stime);\n },\n function () {\n $djs.html('');\n getPresellInfo();\n });\n }\n //预售结束\n function setEnd(){\n $p.components.buygroup.setBuyButton('预售结束', true);\n $des.html('预售结束');\n $djs.html('');\n }\n },\n /**\n * 设置限时抢购\n */\n setXSQG: function (activity, nowNumber) {\n if(window.$p.baseInfo.activityType != '3') return false;\n if(window.$p.activity && window.$p.activity.flushSaleJson && window.$p.activity.flushSaleJson.status == 'AFTER') return false;\n var html = '
    限时抢购
      
    ';\n needShow++;\n this.$box.append(html);\n var $des = $('#promotion_xsqg span.des');\n processStatus(activity.flushSaleJson);\n\n function refreshStatus(){\n window.$p.loadProductInfo(\n function(){\n processStatus(window.$p.activity.flushSaleJson);\n },\n function () {\n alert('暂时无法获取活动信息, 请刷新页面重试');\n }\n );\n }\n\n function processStatus(flushSaleJson){\n if (flushSaleJson.status == 'IN') { // 在时间段内\n $des.html('');\n window.$p.components.buygroup.refreshBuyButton();\n\n $util.timer(\n flushSaleJson.totime - nowNumber,\n function (stime) {\n $des.html('距离结束时间还有: ' + stime);\n },\n function () {\n refreshStatus();\n });\n }\n else if(flushSaleJson.status == 'BEFORE'){\n window.$p.components.buygroup.refreshBuyButton();\n $des.html(flushSaleJson.fromtimeStr + ' 开始进行限时抢购');\n }else{\n /*活动结束*/\n /** ****隐藏抢购提示,恢复购物车按钮********** */\n window.$p.baseInfo.showPrice = window.$p.baseInfo.price;\n window.$p.components.buygroup.updatePrice(window.$p.baseInfo.price);\n $des.html('限时抢购已经结束');\n window.$p.components.buygroup.refreshBuyButton();\n if (window.$p.baseInfo.stock > 0) {\n window.$p.components.buygroup.$button_shoppingcart.off('click');\n window.$p.components.buygroup.setAddCartButtonClickHandler().show();\n }\n }\n }\n },\n /**\n * 设置闪购\n */\n setShangou:function () {\n if(window.$p.isShowShangou() == false) return false;\n if (window.$p.activity && window.$p.activity.ShanGou && window.$p.activity.ShanGou.endNumber\n && (window.$p.nowNumber > window.$p.activity.ShanGou.endNumber)) return false;\n var _this = this;\n initWindow();\n var html = '
    闪      购
      
    ';\n needShow++;\n this.$box.append(html);\n var $shangou = $('#promotion_shangou');\n var $des = $('#promotion_shangou span.des');\n var $djs = $('#promotion_shangou span.djs');\n processShangou();\n\n function refreshShangou(){\n window.$p.loadProductInfo(\n function(){\n processShangou();\n },\n function () {\n alert('暂时无法获取活动信息, 请刷新页面重试!');\n }\n );\n }\n\n function processShangou() {\n var $p = window['$p'];\n var shangou = $p.activity.ShanGou;\n var nowNumber = $p.nowNumber;\n switch (shangou.type) {\n case 0:\n /*非预约闪购*/\n if (nowNumber < shangou.startNumber) {\n $p.components.buygroup.setBuyButton('闪购未开始', true);\n $util.timer(shangou.startNumber - nowNumber,\n function (stime) {\n $des.html('距离闪购开始时间: ' + stime);\n },\n function () {\n $des.html(\"闪购结束时间: \" + shangou.endTimeStr);\n $djs.html('');\n try {\n if ($p.baseInfo.stock > 0) {\n $p.components.buygroup.setBuyButton('立即购买', false, $p.components.buygroup.ljgm);\n } else {\n $p.components.buygroup.setBuyButton('已售罄', true);\n }\n } catch (e) {\n }\n });\n }\n else if (nowNumber > shangou.startNumber && nowNumber < shangou.endNumber) {\n $des.html(\"闪购结束时间: \" + shangou.endTimeStr);\n if ($p.baseInfo.stock > 0) {\n $p.components.buygroup.setBuyButton('立即购买', false, $p.components.buygroup.ljgm);\n }\n $util.timer(shangou.endNumber - nowNumber,\n function (stime) {\n $djs.html('距离闪购结束时间: ' + stime);\n },\n function () {\n $des.html('闪购已结束');\n $djs.html('');\n $p.components.buygroup.setBuyButton('闪购已结束', true);\n });\n }\n else {\n /*else if (nowNumber > shangou.endNumber)*/\n $shangou.hide();\n $p.components.buygroup.setBuyButton('闪购已结束', true);\n }\n break;\n case 1:// 预约闪购\n if (nowNumber < shangou.yystartNumber) {// 未到预约时间\n $des.html('预约开始时间: ' + shangou.yystartTimeStr);\n $djs.html('');\n $p.components.buygroup.setBuyButton('预约未开始', true);\n }\n else if ((nowNumber >= shangou.yystartNumber) && (nowNumber <= shangou.yyendNumber)) {// 在预约时间段内\n $des.html(\"预约结束时间: \" + shangou.yyendTimeStr);\n $djs.html('');\n if (window.passport && passport.isLogin()) {\n $p.jsonpIsBookUser(function (data) {\n if (data.rc == \"0\") {\n // 1 已预约 0 未预约\n if (data.status == \"1\") {\n // 当前用户如果已预约,闪购开始时将显示立即购买按钮\n $p.components.buygroup.setBuyButton('已预约', true);\n } else {\n $p.components.buygroup.setBuyButton('立即预约', false, $p.components.buygroup.ljyy);\n }\n } else {\n $p.components.buygroup.setBuyButton('立即预约', false, $p.components.buygroup.ljyy);\n }\n });\n } else {\n $p.components.buygroup.setBuyButton('立即预约', false, $p.components.buygroup.ljyy);\n }\n }\n else if ((nowNumber > shangou.yyendNumber) && (nowNumber < shangou.startNumber)) {// 在预约结束闪购未开始\n $des.html(\"闪购开始时间: \" + shangou.startTimeStr);\n $djs.html('');\n $p.components.buygroup.setBuyButton('闪购未开始', true);\n $util.timer(shangou.startNumber - nowNumber,\n function (stime) {\n $djs.html('距离闪购开始时间: ' + stime);\n },\n function () {// 距离闪购还剩多少时间\n if ($p.baseInfo.stock > 0) {\n $p.components.buygroup.setBuyButton('立即购买', false, $p.components.buygroup.ljgm_sg);\n } else {\n $p.components.buygroup.setBuyButton('已售罄', true);\n }\n $des.html(\"闪购结束时间: \" + shangou.endTimeStr);\n $djs.html('');\n });\n }\n else if ((nowNumber > shangou.startNumber) && (nowNumber < shangou.endNumber)) {// 闪购时间段内\n $des.html(\"闪购结束时间: \" + shangou.endTimeStr);\n $djs.html('');\n if ($p.baseInfo.stock > 0) {\n $p.components.buygroup.setBuyButton('立即购买', false, $p.components.buygroup.ljgm_sg);// 立即购买效验是否预约\n } else {\n $p.components.buygroup.setBuyButton('已售罄', true);\n }\n }\n else {\n /*else if (nowNumber > shangou.endNumber)*/\n $shangou.hide();\n $p.components.buygroup.setBuyButton('闪购已结束', true);\n }\n break;\n case 2:// 预约提前购买 非预约闪购开始时间(11点)晚于闪购时间(10点)\n if (nowNumber < shangou.yystartNumber) {// 预约未开始前\n $des.html(\"预约开始时间: \" + shangou.yystartTimeStr);\n $djs.html('');\n $p.components.buygroup.setBuyButton('预约未开始', true);\n $util.timer(shangou.yystartNumber - nowNumber, function (stime) {\n $djs.html('距离预约开始时间: ' + stime);\n }, function () {\n refreshShangou();/*reload*/\n });\n }\n else if (nowNumber > shangou.yystartNumber && nowNumber < shangou.yyendNumber) {// 当前时间大于预约开始时间且小于预约结束时间\n $des.html(\"预约结束时间:\" + shangou.yyendTimeStr);\n $djs.html('');\n if (window.passport && passport.isLogin()) {\n $p.jsonpIsBookUser(function (data) {\n if (data.rc == \"0\") {\n // 1 已预约 0 未预约\n if (data.status == \"1\") {\n // 当前用户如果已预约,闪购开始时将显示立即购买按钮\n $p.components.buygroup.setBuyButton('已预约', true);\n } else {\n $p.components.buygroup.setBuyButton('立即预约', false, $p.components.buygroup.ljyy);\n }\n } else {\n alert('抱歉,您没有预约!');\n }\n });\n } else {\n $p.components.buygroup.setBuyButton('立即预约', false, $p.components.buygroup.ljyy);\n }\n\n $util.timer(shangou.yyendNumber - nowNumber, function (stime) {\n $djs.html('距离预约结束时间: ' + stime);\n }, function () {\n refreshShangou();/*reload*/\n });\n }\n else if (nowNumber > shangou.yyendNumber && nowNumber < shangou.startNumber) {// 当前时间大于预约结束时间且小于预约闪购开始时间\n $des.html('预约闪购开始时间: ' + shangou.startTimeStr + '
    非预约闪购开始时间: ' + shangou.fyyStartTimeStr);\n $djs.html('');\n $p.components.buygroup.setBuyButton('闪购未开始', true);\n $util.timer(shangou.startNumber - nowNumber, function (stime) {\n $djs.html('距离闪购开始时间: ' + stime);\n }, function () {\n refreshShangou();/*reload*/\n });\n }\n else if (nowNumber > shangou.startNumber && nowNumber < shangou.fyyStartNumber) {\n // 当前时间大于非预约闪购开始时间且小于闪购结束时间\n // 预约与非预约用户都能买\n if (window.passport && passport.isLogin()) {\n $p.jsonpIsBookUser(function (data) {\n if (data.rc == \"0\") {\n // 1 已预约 0 未预约\n if (data.status == \"1\") {\n $des.html(\"闪购结束时间: \" + shangou.endTimeStr);\n $djs.html('');\n if ($p.baseInfo.stock > 0) {\n $p.components.buygroup.setBuyButton('立即购买', false, $p.components.buygroup.ljgm);\n } else {\n $p.components.buygroup.setBuyButton('已售罄', true);\n }\n } else {\n $des.html('非预约闪购开始时间: ' + shangou.fyyStartTimeStr);\n $djs.html('');\n $p.components.buygroup.setBuyButton('闪购未开始', true);\n $util.debug('用户没有预约');\n }\n } else {\n $des.html('非预约闪购开始时间: ' + shangou.fyyStartTimeStr);\n $djs.html('');\n $p.components.buygroup.setBuyButton('闪购未开始', true);\n $util.debug('用户没有预约');\n }\n });\n } else {\n $des.html(\"闪购结束时间: \" + shangou.endTimeStr + '
    非预约闪购开始时间: ' + shangou.fyyStartTimeStr);\n $djs.html('');\n if ($p.baseInfo.stock > 0) {\n $p.components.buygroup.setBuyButton('立即购买', false, $p.components.buygroup.ljgm);\n } else {\n $p.components.buygroup.setBuyButton('已售罄', true);\n }\n }\n }\n else if (nowNumber > shangou.fyyStartNumber && nowNumber < shangou.endNumber) {// 闪购开始与结束时间段内\n $des.html(\"闪购结束时间:\" + shangou.endTimeStr);\n $djs.html('');\n if ($p.baseInfo.stock > 0) {\n $p.components.buygroup.setBuyButton('立即购买', false, $p.components.buygroup.ljgm);\n } else {\n $p.components.buygroup.setBuyButton('已售罄', true);\n }\n }\n else {\n /*else if (nowNumber > shangou.endNumber)*/\n $shangou.hide();\n $p.components.buygroup.setBuyButton('闪购已结束', true);\n }\n break;\n }\n }\n\n function initWindow(){\n $(\"#wsgyy_close\").on('click', function () {\n $('#layer_zhezhao, #window_shangouyy').fadeOut(500);\n });\n\n $('#wsgyy_ok').on('click', function () {\n var phoneNum = $(\"#wsgyy_tel\").val();\n if ($util.checkTelNo(phoneNum)) {\n window.$p.jsonpSaveBookShangouTel({\n reservationId: _this.reservationId,\n phone: phoneNum\n }, function (data) {\n if (data.rc == 0) {\n alert('保存成功!');\n $(\"#wsgyy_close\").trigger('click');\n }else{\n alert('保存失败,请稍后再试!');\n $(\"#wsgyy_close\").trigger('click');\n }\n });\n }\n else{\n alert('请输入正确的手机号');\n }\n });\n }\n\n }\n };\n if(!window.components){\n window.components = {};\n }\n window.components.PromotionInfo = PromotionInfo;\n\n function debug_presell(sell){\n var now = new Date();\n sell.currenttime = now.getFullYear() + '/' + (now.getMonth() + 1) + '/' + now.getDate()+ ' ' + '14:0'+now.getMinutes()+':' + now.getSeconds();\n sell.activityname = sell.activityname || '测试预售';\n sell.activitystarttime = sell.activitystarttime || '2016-11-21 14:07:00';\n sell.activityendtime = sell.activityendtime || '2016-11-21 14:09:00';\n sell.presellstarttime = sell.presellstarttime || '2016-11-21 14:08:00';\n sell.disabled = 1;\n sell.presellway = sell.presellway || 2;\n sell.deposit = sell.deposit || 200;\n }\n})(window.PDUtil);\n/**\n * Created by liuyc14 on 2016/10/18.\n * 左侧滚动图组件,负责相关Dom操作和数据逻辑\n */\n(function($){\n var passport = window['passport'];\n\n function ScrollPicture(needInit){\n /*定义默认数据结构*/\n this.data = {};\n this.$detail_main = $('#detail_main');\n this.$detail_left = $('#detail_left');\n this.$detail_right = $('#detail_right');\n if(needInit)this.init();\n }\n ScrollPicture.prototype= {\n constructor: ScrollPicture,\n /**\n * 首次渲染时调用\n */\n init: function () {\n if (passport.load) {\n passport.load(function () {\n sc.init();\n });\n } else {\n sc.init();\n }\n this.__initFloat();\n },\n /**\n * 处理左侧橱窗图部分浮动\n * @private\n */\n __initFloat: function () {\n var _this = this;\n var $document = $(document);\n\n var preStatus = 1;\n /*1:正常状态; 2:浮动状态; 3:停留在主信息div最下方位置;*/\n var nowStatus = 0;\n $(window).on('scroll', function () {\n var offset = _this.$detail_main.offset();\n var minY = offset.top;\n /*最小fixed Y值*/\n var maxY = 0;\n /*最大fixed Y值*/\n if (_this.$detail_left.height() + 10 > _this.$detail_main.height()) return false;\n var scrollTop = $document.scrollTop();\n /*当屏幕滚动,可以看到完整的橱窗图时*/\n if (scrollTop <= minY) {\n nowStatus = 1;\n if (preStatus == nowStatus) return false;\n preStatus = nowStatus;\n _this.$detail_left.removeClass('absolute').removeClass('fixed').removeAttr('style');\n }\n else {\n maxY = minY + _this.$detail_main.height();\n /*当屏幕滚动,看不到完整的橱窗图,并且右侧还有很多内容时时*/\n if (scrollTop + _this.$detail_left.height() < maxY) {\n nowStatus = 2;\n if (preStatus == nowStatus) return false;\n preStatus = nowStatus;\n _this.$detail_left.removeClass('absolute').addClass('fixed').css({top: 0});\n }\n else {\n nowStatus = 3;\n if (preStatus == nowStatus) return false;\n preStatus = nowStatus;\n var _top = _this.$detail_main.height() - _this.$detail_left.height();\n _this.$detail_left.removeClass('fixed').addClass('absolute').css({top: _top});\n }\n }\n\n\n });\n }\n };\n\n /**\n * 收藏对象\n * @type {{$sc: (*|HTMLElement), init: sc.init, p_get: sc.p_get, suc: sc.suc, addFavorites: sc.addFavorites, removeFavorites: sc.removeFavorites, doSC: sc.doSC}}\n */\n var sc = {\n $sc: $(\"#a_sc\"),\n init: function(){\n this.$sc = $(\"#a_sc\");\n if (passport && passport.isLogin())\n sc.p_get('findfavorites.do?ss=', sc.suc);\n else {\n sc.$sc.removeClass(\"sc\").off('click').on(\"click\", function () {\n passport.show();\n passport.loginRedirect = window.location.href;\n });\n }\n },\n p_get: function(url,fun){\n if (passport && passport.isLogin()) { \n window.$p.loadMyFavorite({url: url}, fun);\n }else{\n passport.show();\n passport.loginRedirect = window.location.href;\n }\n },\n suc: function(d) {\n if(d.rc == \"0\"){\n sc.removeFavorites();\n }else{\n sc.addFavorites();\n }\n },\n addFavorites: function(){\n sc.$sc.removeClass(\"sc\").off('click').on(\"click\", {\"type\": \"add\"}, sc.doSC);\n },\n removeFavorites: function(){\n sc.$sc.addClass(\"sc\").off('click').on(\"click\", sc.doSC);\n },\n doSC: function(e){\n //type = 'add' || 'remove';\n if(e.data && e.data.type === 'add'){\n sc.p_get('addfavorites.do?ss=',function(d){\n if(d.rc == \"0\") {\n sc.removeFavorites();\n }\n });\n }else{\n sc.p_get('deletefavorites.do?ss=',function(d){\n if(d.rc == \"0\"){\n sc.addFavorites();\n }\n });\n }\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.ScrollPicture = ScrollPicture;\n})(window.jQuery);\n/*此组件依赖jquery*/\n\n\n/**\n * Created by liuyc14 on 2016/10/18.\n * 服务组件,负责服务相关Dom操作和数据逻辑\n */\n(function () {\n function Service(needInit){\n /*定义默认数据结构*/\n this.data = {\n /*格式化后的数据*/\n allService: [],\n /*ajax请求回来的原始数据格式*/\n all: [],\n selectedArray: []\n };\n this.$box = $('#div_service');\n this.$container = $('#container_service');\n if(needInit)this.init();\n }\n Service.prototype= {\n constructor: Service,\n /**\n * 首次渲染时调用\n */\n init: function () {\n try{\n var _this = this;\n this.loadData(function () {\n if (_this.data.allService.length > 0) {\n _this.renderDom();\n _this.bindEvent();\n }\n });\n }catch(e){\n window.PDUtil.warn('service组件=> init方法错误 ---------->');\n window.PDUtil.warn(e);\n }\n },\n\n loadData: function (success) {\n var _this = this;\n window.$p.loadServiceInfo({}, function (db) {\n if (db.status == 200 && db.data && db.data.length > 0) {\n _this.data.all = db.data;\n _this.data.allService = _this.formatServiceData(db.data);\n success && success();\n }\n });\n },\n renderDom: function () {\n try{\n var html = '';\n for (var i = 0; i < this.data.allService.length; i++) {\n var group = this.data.allService[i];\n var _arrows = (group.list.length > 1) ? '': ' ';\n html += '
    ' +\n '
    '\n + '' + group.list[0]['serviceGoodsName'] + ' ¥' + group.list[0].price + ''\n + _arrows + '
    ';\n\n if (group.list.length > 1) {\n html += ''\n }\n html += '
    ';\n\n }\n if (html.length > 0) {\n this.$box.append(html);\n this.$container.removeClass('hidden');\n }\n }catch (e){\n window.PDUtil.warn('service组件=> renderDom方法错误 ---------->');\n window.PDUtil.warn(e);\n }\n },\n /**\n * 绑定事件\n */\n bindEvent: function () {\n var _this = this;\n /*显示更多服务*/\n this.$box.find('.item')\n .on('mouseover', function () {\n $(this).addClass('item-hover');\n })\n .on('mouseleave', function () {\n $(this).removeClass('item-hover');\n });\n\n /*顶级服务点击事件*/\n this.$box.find('.item')\n .on('click', function () {\n var $this = $(this);\n var code = $this.attr('data-code');\n /*如果当前未选中,则使其选中;如果已经选中,则取消*/\n if ($this.hasClass('checked')) {\n $this.removeClass('checked');\n _this.removeSelectedService(code);\n } else {\n $this.addClass('checked');\n _this.addSelectedService(code);\n }\n $this.removeClass('item-hover');\n var newPrice = $p.calcPrice();\n window.$p.components.buygroup.updatePrice(newPrice);\n });\n\n /*更多服务点击事件*/\n this.$box.find('.service-ul > li')\n .on('click', function () {\n /*li标签选中的隐藏,隐藏的显示*/\n var $this = $(this).hide();\n var $top = $this.parent().prev();/*当前显示服务信息的div*/\n\n /*删除原来选中的那个服务*/\n var removeCode = $this.siblings(':hidden').show().attr('data-code');\n _this.removeSelectedService(removeCode);\n\n /*将新选中的服务添加到选中的服务列表中*/\n var addCode = $this.attr('data-code');\n _this.addSelectedService(addCode);\n\n /*更新显示的服务信息*/\n var service = window.PDUtil.findFirst(_this.data.all, function(o){return o.code == addCode});\n $top.find('span.service-name').text(service['serviceGoodsName']);\n $top.find('span.service-price').text(' ¥' + service.price);\n $top.parent()\n .addClass('checked')\n .attr('data-code', addCode)\n .attr('latag', 'latag_pc_detail_chooseservice_' + code + '_' + addCode)\n .removeClass('item-hover');\n\n /*更新价格信息*/\n var newPrice = $p.calcPrice();\n window.$p.components.buygroup.updatePrice(newPrice);\n\n\n return false;\n });\n },\n formatServiceData: function (data) {\n try{\n var result = [{\n \"productCode\": code,\n \"cateCode\": data[0][\"cateCode\"],\n \"categoryName\": data[0][\"categoryName\"],\n \"list\": [data[0]]\n }];\n var has = false;\n for (var i = 1; i < data.length; i++) {\n has = false;\n for (var j = 0; j < result.length; j++) {\n if (data[i]['cateCode'] == result[j]['cateCode']) {\n result[j].list.push(data[i]);\n has = true;\n break;\n }\n }\n if (!has) {\n result.push({\n \"productCode\": code,\n \"cateCode\": data[i][\"cateCode\"],\n \"categoryName\": data[i][\"categoryName\"],\n \"list\": [data[i]]\n });\n }\n }\n return result;\n }catch (e){\n window.PDUtil.warn('service组件=>formatServiceData方法错误 ------------>');\n window.PDUtil.warn(e);\n return [];\n }\n },\n /**\n * 获取用户选中的所有的服务\n * @returns {Array}\n */\n getSelectedService: function () {\n var result = [];\n // this.$box.find('>div.checked').each(function (i, e) {\n // result.push($(e).attr('data-code'));\n // });\n for(var i = 0; i < this.data.selectedArray.length; i++){\n result.push(this.data.selectedArray[i].code);\n }\n return result;\n },\n /**\n * 添加一个选择的服务信息\n * @param code\n */\n addSelectedService: function(code) {\n var exists = window.PDUtil.findFirst(this.data.selectedArray, function (o) {\n return o.code == code\n });\n if (!exists) {\n this.data.selectedArray.push(\n window.PDUtil.findFirst(this.data.all, function (o) {\n return o.code == code\n })\n );\n }\n },\n /**\n * 删除一个选择的服务信息\n * @param code\n */\n removeSelectedService: function (code) {\n this.data.selectedArray = window.PDUtil.dropSome(this.data.selectedArray, function (o) {\n return o.code == code;\n });\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.Service = Service;\n})();\n/**\n * Created by liuyc14 on 2017/4/13.\n * 分享组件\n */\n(function(){\n var __PDUtil = {};\n var __jquery = {};\n var __isNode =false;\n\n if(typeof global != 'undefined' && global && typeof module == 'object' && module.exports){\n __isNode = true;\n __PDUtil = require('../../../../base/pdbase').PDUtil;\n __jquery = require('jquery');\n }else{\n __PDUtil = window.PDUtil;\n __jquery = window.$;\n }\n\n var shareComponents = (function ($util, $) {\n function Share(){\n /*定义默认数据结构*/\n try{\n /*定义默认数据结构*/\n var self = this;\n this.classPrefix = \"jiathis\";\n this.data = {\n buttonList:{\n weibo: {id:'weibo', className: self.classPrefix + \"_button_tsina\", title: \"分享到微博\", icon: 'share-icon-weibo'},\n qzone: {id:'qzone', className: self.classPrefix + \"_button_qzone\", title: \"分享到QQ空间\", icon: 'share-icon-qzone'},\n renren: {id:'renren', className: self.classPrefix + \"_button_renren\", title: \"分享到人人网\", icon: 'share-icon-renren'},\n weixin: {id:'weixin', className: self.classPrefix + \"_button_weixin\", title: \"分享到微信\", icon: 'share-icon-weixin'}\n }\n };\n this.webMapping = {\"weibo\": \"weibo\", \"qzone\": \"qzone\", \"renren\": \"renren\", \"weixin\": \"weixin\"};\n this.classPrefix = \"jiathis\";\n this.$container = null;\n this.before_click = null;\n }catch(e){\n $util.warn('私人订制组件=> init方法错误--------->');\n $util.warn(e);\n }\n }\n Share.prototype = {\n constructor: Share,\n getButtonByKey: function (Key) {\n var self = this;\n var list = self.data.buttonList;\n for(var k in list){\n if(k == Key){\n return list[k];\n }\n }\n return list['qzone'];\n },\n getButtonByClassName: function (className) {\n var self = this;\n var list = self.data.buttonList;\n for(var k in list){\n if(list[k].className == className){\n return list[k];\n }\n }\n return list['qzone'];\n },\n /**\n * 首次渲染时调用\n */\n init: function () {\n window.jiathis_config = null;\n $('body').append('分享');\n this.renderDom();\n this.bindEvent();\n this.__initShare();\n },\n __initShare: function () {\n $(\"#div_share\").on('mouseover', function () {\n $(\".share_box\").show();\n }).on('mouseleave', function () {\n $(\".share_box\").hide();\n });\n\n this.before_click = function () {\n if (!window.passport.isLogin()){\n passport.show();\n $(\".share_box\").hide();\n return false;\n }\n var summary = \"\";\n if(window.$p.baseInfo.pcPromotion){\n summary = $('#pc_promotion').text();\n }\n else{\n summary = $('#div_product_dec').text();\n }\n var __title = window.$p.getShareTitle();\n window.jiathis_config = {\n url: encodeURIComponent(location.protocol + '//' + location.host + location.pathname + \"?sharecode=\" + passport.cookie.lenovoId + \"&promotionType=0\"),\n title: __title,\n summary: summary,\n pic: $(\"#winpic\").attr(\"src\")\n };\n };\n },\n bindEvent: function () {\n var self = this;\n /*分享按钮单击事件*/\n self.$container.on('click', '.share_box .jiathis_style > a',function () {\n if(!window.passport){\n $util.warn('分享时,登录模块没有正确加载');\n return false;\n }\n var $this = $(this);\n /*暴露给其他组件调用click事件*/\n if(self.before_click && typeof self.before_click == 'function'){\n self.before_click.call($this, self);\n }\n var button = self.data.buttonList[$this.attr('data-key')];\n if(button){\n self.share(button.id);\n }\n });\n\n $('#share_wechat_close').on('click', function () {\n $('#share_dialog_box').hide();\n return false;\n });\n },\n renderDom:function () {\n var self = this;\n if(self.$container){\n var $aList = self.$container.find('.jiathis_style a');\n $aList.each(function () {\n var $this = $(this);\n var button = self.getButtonByClassName($this.attr('class'));\n var className = button && button.icon;\n $this.attr('data-key', button.id).append('')\n });\n }\n },\n share: function (web) {\n var self = this;\n var parameter = window.jiathis_config;\n if(!parameter){\n $util.debug('全局config文件没有读取到');\n return false;\n }\n var url = \"\";\n switch (web){\n case self.webMapping.weibo:\n url = 'http://service.weibo.com/share/share.php?title=' + parameter.title\n +'&url=' + parameter.url\n +'&source=bookmark'\n +'&pic=' + parameter.pic;\n break;\n case self.webMapping.qzone:\n url = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=' + parameter.url\n +'&title=' + parameter.title\n +'&summary=' + parameter.summary\n +'&pics=' + parameter.pic;\n break;\n case self.webMapping.renren:\n url = 'http://widget.renren.com/dialog/share?resourceUrl='+ parameter.url\n +'&srcUrl=' + parameter.url\n +'&title=' + parameter.title\n +'&pic=' + parameter.pic\n +'&description=' + parameter.summary;\n break;\n case self.webMapping.weixin:\n $('#share_wechat_image').empty();\n var url = parameter.url;\n var browser=navigator.appName;\n var b_version=navigator.appVersion;\n var version=b_version.split(\";\");\n var trim_Version=version[1].replace(/[ ]/g,\"\");\n\n if(browser==\"Microsoft Internet Explorer\" && trim_Version==\"MSIE6.0\") {\n $('#share_wechat_image').qrcode({render:\"table\",width: 220,height: 220,text: url});\n }\n else if(browser==\"Microsoft Internet Explorer\" && trim_Version==\"MSIE7.0\"){\n $('#share_wechat_image').qrcode({render:\"table\",width: 220,height: 220,text: url});\n }else if(browser==\"Microsoft Internet Explorer\" && trim_Version==\"MSIE8.0\"){\n $('#share_wechat_image').qrcode({render:\"table\",width: 220,height: 220,text: url});\n }else{\n $('#share_wechat_image').qrcode({width: 220,height: 220,text: url});\n }\n $('#share_dialog_box').show();\n\n return false;\n break;\n default:\n url = \"error\";\n break;\n }\n if(url == \"error\"){\n window.PDUtil.debug('url匹配错误');\n alert('分享失败,分享参数错误!');\n return false;\n }\n $('#pd_share_entry_btn').parent().attr('href', url);\n $('#pd_share_entry_btn').trigger('click');\n }\n };\n return Share;\n })(__PDUtil, __jquery);\n\n\n if(__isNode){\n module.exports = shareComponents;\n }else{\n if(!window.components){\n window.components = {};\n }\n window.components.Share = shareComponents;\n }\n})();\n\n/**\n * Created by liuyc14 on 2016/10/18.\n * 私人订制组件,负责私人订制相关Dom操作和数据逻辑\n */\n(function(){\n var __PDUtil = {};\n var __jquery = {};\n var __isNode =false;\n\n if(typeof global != 'undefined' && global && typeof module == 'object' && module.exports){\n __isNode = true;\n __PDUtil = require('../../../../base/pdbase').PDUtil;\n __jquery = require('jquery');\n }else{\n __PDUtil = window.PDUtil;\n __jquery = window.$;\n }\n\n var srdzComponents = (function ($util, $) {\n var modeMapping = {\n \"picture\": {'code': 1, 'des':'私人订制喷图'},\n \"words\": {'code': 2, 'des':'私人订制刻字'}\n };\n\n function Srdz(needInit){\n /*定义默认数据结构*/\n try{\n this.data = {\n price : 0\n };\n this.$container = $('#container_dingzhi');\n this.$box = $('#div_dingzhi');\n this.$dialog = $('#srdz_dialog');\n this.selectedID = '';\n this.postData = {};/*用户选择的私人订制数据*/\n this.$box_content = $('#srdz_box');\n this.$button_left = $('#srdz_style_leftbtn');\n this.$button_right = $('#srdz_style_rightbtn');\n this.page = 1;\n this.totalPage = 1;\n\n if(needInit)this.init();\n }catch(e){\n $util.warn('私人订制组件=> init方法错误--------->');\n $util.warn(e);\n }\n }\n Srdz.prototype= {\n constructor: Srdz,\n /**\n * 首次渲染时调用\n */\n init: function () {\n var self = this;\n var isPP = window.$p.baseInfo.isPersonalPositions;\n if(isPP && isPP.length > 0){\n self.$container.removeClass('hidden');\n self.bindEvent();\n for(var j = 0; j < isPP.length; j++){\n self.getdata(isPP[j]);\n }\n }\n },\n bindEvent: function () {\n var self = this;\n /*关闭私人订制弹框*/\n $('#dz_close').on('click',function(){\n self.$dialog.hide();\n self.$box_content.find('> div').hide();\n });\n\n /*取消私人订制*/\n $('#dz_cancel').on('click',function(){\n $('#' + self.selectedID + ' div.dz-box-images dl.dz-img').removeClass('checked');\n $('#' + self.selectedID + ' div.dz-box-text .dz_text').val('');\n self.removePostData(self.selectedID);\n\n self.$dialog.hide();\n self.$box_content.find('> div').hide();\n });\n\n /*私人订制选择按钮单击事件*/\n self.$box.on('click', '> div.item', function () {\n var $this = $(this);\n var id = $this.attr('data-id');\n self.selectedID = id;\n $('#' + id).show();\n self.$dialog.show();\n });\n\n /*价格切换事件*/\n self.$box_content.on('click', 'div.dz-box-price a.dz-price-switch', function (e) {\n var $this = $(this);\n $('#' + self.selectedID + ' div.dz-box-images dl.checked').removeClass('checked');\n self.page = 1;\n if($this.hasClass('checked')){\n $this.removeClass('checked');\n self.totalPage = 1;\n }else{\n $this.siblings('.checked').removeClass('checked');\n $this.addClass('checked');\n self.showFirstTabStyle(self.selectedID, $this.attr('data-index'));\n }\n $('#srdz_style_scroll .scroll').css('left', '0');\n self.setButtonShowHide();\n e.stopPropagation();\n });\n\n /*私人订制弹框,确定单击事件*/\n $('#dz_OK').on('click', function () {\n self.eventHandlerForOKButton();\n });\n\n self.bindImageEvents();\n },\n /**\n * 私人订制确定按钮单击事件处理方法\n * @returns {boolean}\n */\n eventHandlerForOKButton: function () {\n var self = this;\n var $dzBox = $('#' + self.selectedID);\n var ID = $dzBox.attr('id');\n var side = $dzBox.attr('data-side');\n var ptmode = $dzBox.attr('data-personaltype');/*1:喷图;2:刻字*/\n\n var $price = $dzBox.find('.dz-box-price a.dz-price-switch.checked');\n if(!$price || $price.length != 1){\n if($price.attr('data-personaltype') == modeMapping.picture.code){\n alert('请选择喷绘图片类型!');\n }else{\n alert('请选择价格!');\n }\n return false;\n }\n /*获取价格ID*/\n var priceid = $price.attr('data-priceid');\n if(!priceid){\n alert('私人订制失败,请稍后再试!');\n $util.warn('priceid获取失败');\n return false;\n }\n /*获取价格*/\n var price = $price.attr('data-price');\n if(!price){\n alert('私人订制失败,请稍后再试!');\n $util.warn('price获取失败');\n return false;\n }\n /*保存喷绘数据*/\n if(ptmode == modeMapping.picture.code){\n var $dl = $dzBox.find('.dz-box-images .sdtp_pics dl.dz-img.checked');\n if($dl.length != 1){\n alert('请选择喷绘图片!');\n return false;\n }\n /*获取图片code*/\n var imageCode = $dl.attr('data-code');\n if(!imageCode){\n alert('私人订制失败,请稍后再试!');\n $util.warn('imageCode获取失败');\n return false;\n }\n /*获取图片code*/\n var imageUrl = $dl.attr('data-url');\n if(!imageUrl){\n alert('私人订制失败,请稍后再试!');\n $util.warn('imageUrl获取失败');\n return false;\n }\n /*获取图片code*/\n var imageName = $dl.attr('data-name');\n if(!imageName){\n alert('私人订制失败,请稍后再试!');\n $util.warn('imageName获取失败');\n return false;\n }\n\n var data = {\n price: price,\n priceID: priceid,\n ptmode: modeMapping.picture.code,\n ptside: side.replace('面', ''),\n pttype: 1,\n ptpicCode: imageCode,\n pturl: imageUrl,\n picName: imageName\n };\n self.addPostData(ID, data);\n }\n /*保存刻字数据*/\n else if(ptmode == '2'){\n var $text = $dzBox.find('.dz-box-text textarea.dz_text');\n var word = $text.val();\n if(!word){\n alert('请输入刻字内容');\n return false;\n }\n if(word.length > 20){\n alert('文字长度不能超过20个汉字');\n return false;\n }\n if(/(<|\\/|>)/gi.test(word)){\n alert('内容含有非法字符 \"<\"、\"/\"、\">\",请重新输入');\n return false;\n }\n var data = {price: price, priceID: priceid, ptmode: modeMapping.words.code, ptside: side.replace('面', ''), pttype: 1, ptword: word};\n self.addPostData(ID, data);\n }\n else{\n alert('私人订制参数错误,请重试');\n return false;\n }\n $('#dz_close').trigger('click');\n },\n /**\n * 绑定喷图相关事件\n */\n bindImageEvents: function(){\n var self = this;\n\n /*风格tab单击事件*/\n self.$box_content.on('click', 'div.dz-box-images div.sdtp_top .tab-style', function (e) {\n var $this = $(this);\n if(!$this.hasClass('active')){\n $this.siblings('.active').removeClass('active');\n $this.addClass('active');\n\n self.showImageListWithCateCode($this.parents('div.dz-box-images'), $this.attr('data-tabindex'));\n }\n e.stopPropagation();\n });\n\n /*私定喷图,图片单击事件*/\n self.$box_content.on('click', 'div.dz-box-images div.sdtp_pics dl',function(e) {\n var $this = $(this);\n if ($this.hasClass('checked')) {\n $this.removeClass('checked');\n } else {\n $this.parents('div.dz-box-images').find('dl.checked').removeClass('checked');\n $this.addClass('checked');\n }\n e.stopPropagation();\n });\n\n /*私定喷图显示大图*/\n self.$box_content\n .on('mouseover', '.dz-box-images .sdtp_div dl.dz-img', function (e) {\n var _this = $(this);\n var left = _this.offset().left+78;\n var top = _this.offset().top-$(document).scrollTop();\n var $bigImage = $('#srdz_big_image');\n\n $bigImage.show();\n $bigImage.css({\n 'left':left+\"px\",\n 'top':top+\"px\"\n });\n var src = _this.find('img').attr('src');\n $bigImage.attr('src',src);\n e.stopPropagation();\n })\n .on('mouseout', '', function (e) {\n $('#srdz_big_image').hide();\n e.stopPropagation();\n });\n },\n /**\n * 渲染私定数据\n * @param side\n * @param d\n */\n renderData: function(side, d){\n var self = this;\n try{\n var data = d && d.data && d.data[0] && d.data[0].data;\n if(data){\n if((data instanceof Array) && data.length>0) {\n /*生成时间戳,用于div标识*/\n var now = (new Date() - 0);\n if(data[0] && data[0].personalType == modeMapping.picture.code){\n self.renderImage(side, 'srdz_image_' + now, data);\n }else{\n self.renderText(side, 'srdz_text_' + now, data);\n }\n }\n }\n }catch(e){\n $util.warn('私人订制组件=> renderData方法错误----------------> ');\n $util.warn(e);\n }\n },\n /**\n * 渲染喷绘图数据\n * @param side A面/C面\n * @param id\n * @param data\n */\n renderImage: function(side, id, data){\n /*追加私定选择按钮*/\n this.$box.append('
     选择' + side + '喷图
    ');\n /*渲染喷图弹框*/\n var tmpl = $('#tmpl_srdz_image');\n if(tmpl && tmpl.length == 1){\n tmpl\n .tmpl({datas: data, dataID: id, side: side})\n .appendTo(this.$box_content);\n /*默认选中第一个price*/\n $('#'+id+' div.dz-box-price a.dz-price-switch:eq(0)').addClass('checked');\n this.showFirstTabStyle(id, 0);\n this.scrollButtonEvent();\n this.setButtonShowHide();\n }\n },\n /**\n * 渲染刻字数据\n * @param side A面/C面\n * @param id\n * @param data\n */\n renderText: function (side, id, data) {\n /*追加私定选择按钮*/\n this.$box.append('
     选择' + side + '刻字
    ');\n /*渲染刻字弹框*/\n var tmpl = $('#tmpl_srdz_text');\n if(tmpl && tmpl.length == 1){\n tmpl\n .tmpl({datas: data, dataID: id, side: side})\n .appendTo(this.$box_content);\n /*默认选中第一个price*/\n $('#'+id+' div.dz-box-price a.dz-price-switch:eq(0)').addClass('checked');\n }\n },\n /**\n * 重新渲染橱窗图\n */\n renderPalyPic: function (imageCode) {\n //喷漆\n $.ajax({\n type:\"get\",\n url:\"/cache/query?m=hget&k=personal_window_\" + window.code + \"&f=\" + imageCode,\n dataType: 'json',\n success:function(d){\n var srcArr = [],\n data = d.data[0].printPicArr;\n if(data){\n for (var i = 0; i < data.length; i++) {\n srcArr.push({\"src\":data[i]});\n }\n }\n window.$p.components.playpic.renderPicture(srcArr);\n }\n });\n },\n /**\n * 设置左右按钮的显示隐藏\n */\n setButtonShowHide: function () {\n var self = this;\n if(self.page >= self.totalPage){\n $('#srdz_style_rightbtn').css('opacity', '0.3').attr('disable','disable');\n }else{\n $('#srdz_style_rightbtn').css('opacity', '1.0').removeAttr('disable');\n }\n\n if(self.page <= 1){\n $('#srdz_style_leftbtn').css('opacity', '0.3').attr('disable','disable');\n }else{\n $('#srdz_style_leftbtn').css('opacity', '1.0').removeAttr('disable');\n }\n },\n scrollButtonEvent: function () {\n var self = this;\n var width = $('#srdz_style_scroll').width();\n $('#srdz_style_leftbtn').on('click', function () {\n if(self.page > 1){\n self.page--;\n $('#srdz_style_scroll .scroll').css('left', '+='+width+'px');\n self.setButtonShowHide();\n }\n });\n $('#srdz_style_rightbtn').on('click', function () {\n if(self.page < self.totalPage){\n self.page++;\n $('#srdz_style_scroll .scroll').css('left', '-='+width+'px');\n self.setButtonShowHide();\n }\n });\n },\n /**\n * 根据私定面获取数据\n * @param side A面/C面\n * @param success\n * @returns {boolean}\n */\n getdata:function(side, success){\n if(!side){\n return false;\n }\n var self = this;\n $.ajax({\n url:'/cache/query?m=hget&k=personal_init_' + code + '&f='+encodeURI(side),\n dataType:'json',\n success:function(data){\n try{\n self.renderData(side, data);\n if(typeof success == 'function'){\n success();\n }\n }catch(e){\n $util.warn('私人订制组件=> getdata方法错误 ------------->');\n $util.warn(e);\n }\n },\n error:function(err){\n $util.warn(err);\n }\n });\n },\n /**\n * 显示某个喷图订制的指定 风格tab\n * @param id\n * @param tabIndex\n */\n showFirstTabStyle: function (id, tabIndex) {\n var $boxImages = $('#' + id + ' div.dz-box-images');\n $boxImages.find('.sdtp_top .tab-style').hide();\n var $priceTabs = $boxImages.find('.sdtp_top .tab-price' + tabIndex);\n\n var count = $priceTabs.length;\n if(count == 0){\n this.totalPage = 1;\n }\n else{\n this.totalPage = count % 5 == 0 ? count / 5 : parseInt(count / 5) + 1;\n }\n\n /*默认选中第一个tab-style*/\n $priceTabs.removeClass('active');\n $priceTabs.eq(0).addClass('active');\n $priceTabs.show();\n\n /*默认第一个风格的照片列表显示*/\n this.showImageListWithCateCode($boxImages, $priceTabs.eq(0).attr('data-tabindex'));\n },\n showImageListWithCateCode: function ($boxImages, index) {\n $boxImages.find('div.sdtp_pics').hide();\n $boxImages.find('div.sdtp_pics.' + index).show();\n },\n /**\n * 添加用户选择的私定信息\n * @returns {boolean}\n */\n addPostData: function (id, data) {\n if(!data) {\n return false;\n }\n var oldPrice = 0;\n if(this.postData[id]){\n oldPrice = this.postData[id].price;\n }\n this.postData[id] = data;\n\n var $button = this.$box.find('> div.item[data-id=\"'+id+'\"]');\n var showText = '';\n if(data.ptmode == modeMapping.picture.code){\n showText = data.picName + '(' + data.price + '元)';\n }else{\n showText = data.priceID + '(' + data.price + '元)';\n }\n $button.find('span.guige-name').text(showText);\n $button.addClass('checked');\n this.data.price = this.data.price - oldPrice + parseFloat(data.price);\n var newPrices = window.$p.calcPrice();\n $p.components.buygroup.updatePrice(newPrices);\n /*喷图*/\n if(data.ptmode == modeMapping.picture.code){\n this.renderPalyPic(data.ptpicCode);\n }\n },\n /**\n * 删除用户选择的私定数据\n */\n removePostData: function (id) {\n var oldData = this.postData[id];\n if(!oldData){\n $util.warn('取消私定时没有对象!' + id);\n return false;\n }\n var oldPrice = oldData.price;\n var $button = this.$box.find('> div.item[data-id=\"'+id+'\"]');\n $button.find('span.guige-name').text($button.find('span.guige-name').attr('data-text'));\n $button.removeClass('checked');\n this.data.price = this.data.price - oldPrice;\n var newPrices = window.$p.calcPrice();\n $p.components.buygroup.updatePrice(newPrices);\n /*喷图*/\n if(oldData.ptmode == modeMapping.picture.code){\n window.$p.components.playpic.renderPicture([]);\n }\n\n delete this.postData[id];\n },\n /**\n * 获取用户选中的所有的私人订制信息\n * @returns {string}\n */\n getdz: function () {\n var result = \"\";\n try{\n if(!$.isEmptyObject(this.postData)){\n var arr = [];\n for(var k in this.postData){\n arr.push(this.postData[k]);\n }\n result = JSON.stringify(arr);\n }\n $util.debug('私人订制数据:-------------->');\n $util.debug(result);\n }catch (e){\n $util.warn('私人订制组件=>getdz 方法错误-------------->');\n $util.warn(e);\n }\n return encodeURIComponent(result);\n }\n };\n return Srdz;\n })(__PDUtil, __jquery);\n\n\n if(__isNode){\n module.exports = srdzComponents;\n }else{\n if(!window.components){\n window.components = {};\n }\n window.components.Srdz = srdzComponents;\n }\n})();\n/**\n * Created by liuyc14 on 2016/10/18.\n * 推荐选件组件,负责相关信息的Dom操作和数据逻辑\n */\n(function ($util) {\n function Taocan(needInit){\n /*定义默认数据结构*/\n this.data = {\n all: [],\n selectedItem: -1,\n index: []\n };\n this.$container = $('#container_taocan');\n this.$box = $('#div_taocan');\n if(needInit)this.init();\n }\n Taocan.prototype= {\n constructor: Taocan,\n /**\n * 首次渲染时调用\n */\n init: function () {\n this.getAllData();\n this.renderDom();\n this.bindEvent();\n },\n renderDom: function () {\n try{\n var $p = window['$p'];\n var packs = this.data.all;\n /*循环所有选件,判断如果在有效期内就显示*/\n var html = '';\n var dialog = '';\n for (var i = 0; i < packs.length; i++) {\n var pack = packs[i];\n html += '
    ' +\n '套餐' + (i+1) + '  ¥' + pack.showPrice + '' +\n '
    ';\n dialog += '
    ' +\n '
    ' +\n '套餐' + (i+1) + '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ';\n for(var j = 0; j < pack.data.length; j++){\n var o = pack.data[j];\n var _url = ($p.promotion.goodsDetailUrl && $p.promotion.goodsDetailUrl[o.code]) || ('/product/' + o.code + '.html');\n dialog += '
    '+\n '
    ' + o.goodsName + '
    ';\n if(j < pack.data.length - 1){\n dialog += '
    ';\n }else{\n dialog += '';\n }\n\n }\n dialog += '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '套餐价:' +\n '¥'+pack.showPrice.toFixed(2)+'' +\n '
    ' +\n '节省' +\n '¥'+pack.discount.toFixed(2)+'' +\n '
    ';\n if(pack.canSell){\n dialog +='加入购物车';\n } else{\n dialog +='加入购物车';\n }\n dialog +='
    ';\n }\n if (html.length > 0) {\n this.$box.append(html);\n this.$container.removeClass('hidden');\n if(dialog.length > 0){\n this.$box.append(dialog);\n }\n }\n }catch(e){\n $util.warn('套餐组件=> renderDom方法错误 ------------->');\n $util.warn(e);\n }\n },\n /**\n * 绑定推荐选件的事件\n */\n bindEvent: function () {\n var _this = this;\n /*选件单击事件*/\n this.$box.find('div.item')\n .on('click', function () {\n var $this = $(this);\n var index = $this.attr('data-index');\n /*如果当前未选中,则使其选中;如果已经选中,则取消*/\n if ($this.hasClass('checked')) {\n $this.removeClass('checked');\n _this.$box.find('.detail-taocan').eq(_this.data.selectedItem).hide();\n _this.data.selectedItem = -1;\n } else {\n $this.addClass('checked');\n $this.siblings('.checked').removeClass('checked');\n _this.$box.find('.detail-taocan').eq(_this.data.selectedItem).hide();\n _this.data.selectedItem = index;\n _this.$box.find('.detail-taocan').eq(_this.data.selectedItem).show();\n }\n });\n this.$box.find('.detail-taocan .tc_close').on('click', function () {\n _this.$box.find('div.item[data-index=' + _this.data.selectedItem + ']').removeClass('checked');;\n _this.$box.find('.detail-taocan').eq(_this.data.selectedItem).hide();\n _this.data.selectedItem = -1;\n });\n /*向左滚动*/\n this.$box.find('.detail-taocan .tc_left').on('click', function () {\n var $pic = _this.$box.find('.tc_pics');\n var width = $pic.width();\n\n var _index = _this.data.index[_this.data.selectedItem];\n if(_index.current > 1){\n $pic.css({'left': \"-=\" + width + \"px\"});\n _index.current++;\n }\n });\n\n /*向右滚动*/\n this.$box.find('.detail-taocan .tc_right').on('click', function () {\n var $pic = _this.$box.find('.tc_pics');\n var width = $pic.width();\n\n var _index = _this.data.index[_this.data.selectedItem];\n\n if(_index.current < _index.max){\n $pic.css({'left': \"+=\" + width + \"px\"});\n _index.current++;\n }\n });\n },\n /**\n * 获取选件所有的数据\n */\n getAllData: function () {\n var self = this;\n try{\n var _data = window.$p.processTaocanNeedShowList();\n self.data.all = _data;\n /*计算每个套餐页数*/\n if(_data.length > 0){\n for(var i = 0; i < _data.length; i++){\n var totalCount = (_data[i].data && _data[i].data.length) || 0;\n var pages = parseInt((totalCount / 4) + 1);\n self.data.index.push({current:1, max:pages});\n }\n }\n return _data;\n }catch(e){\n $util.warn('套餐组件=> getAllData方法错误 ------------->');\n $util.warn(e);\n self.data.all = [];\n return self.data.all;\n }\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.Taocan = Taocan;\n})(window.PDUtil);\n\n/**\n * Created by liuyc14 on 2017/4/5.\n */\n/**\n * Created by liuyc14 on 2016/10/18.\n * 推荐选件组件,负责相关信息的Dom操作和数据逻辑\n */\n(function () {\n var PDUtil = window['PDUtil'];\n function ThinkO2OCityList(needInit){\n /*定义默认数据结构*/\n this.data = {\n all: []\n };\n this.$container = $('#container_o2ocity');\n this.$box = $('#div_cities');\n this.$box_city = $('#city_wrap');\n if(needInit)this.init();\n }\n ThinkO2OCityList.prototype= {\n constructor: ThinkO2OCityList,\n /**\n * 首次渲染时调用\n */\n init: function () {\n this.getAllData();\n this.renderDom();\n this.bindEvent();\n },\n renderDom: function () {\n if(this.data.all && this.data.all.length > 0){\n $(\"#thinko2oCityTemplate\").tmpl({data: this.data.all}).appendTo(this.$box_city);\n this.$container.removeClass('hidden');\n }\n },\n /**\n * 绑定推荐选件的事件\n */\n bindEvent: function () {\n var self = this;\n function closeCheckBox (){\n self.$box_city.hide();\n self.$box.removeClass(\"open\");\n return false;\n }\n function openCheckBox(){\n self.$box_city.show();\n self.$box.addClass(\"open\");\n }\n\n $(document).on('click', function(){\n if(self.$box.hasClass(\"open\")){\n closeCheckBox();\n }\n });\n //停止冒泡,避免关闭\n $(\"#city_wrap\").on('click',function(){\n openCheckBox();\n return false;\n });\n //鼠标滑过效果\n self.$box.on(\"mouseenter\",function(){\n openCheckBox();\n return false;\n });\n self.$box.find('.city_close').on(\"click\", closeCheckBox);\n //标签点击\n self.$box_city.find('dd.city_tab_title_province').on(\"click\", function(){\n self.$box_city.find(\".city_tab_province\").show();\n self.$box_city.find(\".city_tab_city\").hide();\n $(this).addClass(\"active\").siblings(\"dd\").removeClass(\"active\");\n });\n self.$box_city.find('dd.city_tab_title_city').on(\"click\", function(){\n var p = self.$box_city.find(\".city_tab_title_province\").attr(\"data-province\");\n self.$box_city.find(\".city_tab_province\").hide();\n self.$box_city.find(\".city_tab_city[data-province='\"+p+\"']\").show().siblings(\".city_tab_body\").hide();\n $(this).addClass(\"active\").siblings(\"dd\").removeClass(\"active\");\n });\n //选择省\n self.$box_city.on(\"click\", \".city_tab_province dd\", function(){\n var $this = $(this);\n var $provinceTitle = $(\".city_tab_title_province\");\n var $cityTitle = $(\".city_tab_title_city\");\n\n var text = $this.find(\"span:first\").text();\n var province = $this.attr(\"data-province\");\n\n $this.addClass(\"o2o-now\").siblings(\"dd\").removeClass(\"o2o-now\");\n $provinceTitle.find(\"span\").text(text);\n $provinceTitle.attr(\"data-province\",province);\n $provinceTitle.removeClass(\"active\");\n $cityTitle.addClass(\"active\");\n\n var _text = \"请选择\"; //$(\" dl.city_tab_city[data-province = '\"+ province +\"']\").find(\"dd\").eq(0).text()\n var _city = 0; //$(\" dl.city_tab_city[data-province = '\"+ province +\"']\").find(\"dd\").eq(0).attr(\"data-city\")\n\n $cityTitle.show().attr(\"data-city\",_city);\n $cityTitle.find(\"span\").text(_text);\n self.$box_city.find(\".city_tab_province\").hide();\n var $cityBox = $(\" dl.city_tab_city[data-province = '\"+ province +\"']\");\n $cityBox.find(\"dd.o2o-now\").removeClass(\"o2o-now\").end().show();\n });\n //选择城市\n self.$box_city.on(\"click\", \".city_tab_city dd\", function(){\n var $this = $(this);\n if($this.find(\"span:first\").hasClass(\"gray\")) {return false;}\n var _city = $this.attr(\"data-city\");\n var _text = $this.find(\"span:first\").text();\n var $cityTitle = $(\".city_tab_title_city\");\n $this.addClass(\"o2o-now\").siblings(\"dd.o2o-now\").removeClass(\"o2o-now\");\n $cityTitle.find(\"span\").text(_text);\n $cityTitle.attr(\"data-city\",_city);\n\n var text = $(\".city_tab_title_province span\").text();\n var province = $(\".city_tab_title_province\").attr(\"data-province\");\n\n\n self.$box.find('.item .guige-name').text(text+(_text == \"请选择\" ? \"\" : _text));\n self.$box.attr(\"data-province\",province);\n self.$box.attr(\"data-city\",_city);\n closeCheckBox();\n return false;\n });\n },\n /**\n * 获取选件所有的数据\n */\n getAllData: function () {\n this.data.all = $p.baseInfo.thinko2oCities || [];\n return this.data.all;\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.ThinkO2OCityList = ThinkO2OCityList;\n})();\n\n/**\n * Created by liuyc14 on 2016/10/18.\n * 推荐选件组件,负责相关信息的Dom操作和数据逻辑\n */\n(function () {\n function TuiJianXuanJian(needInit){\n /*定义默认数据结构*/\n this.data = {\n all: [],\n selectedArray: []\n };\n this.$container = $('#container_option');\n this.$box = $('#div_tjxj');\n if(needInit)this.init();\n }\n TuiJianXuanJian.prototype= {\n constructor: TuiJianXuanJian,\n /**\n * 首次渲染时调用\n */\n init: function () {\n this.getAllData();\n this.renderDom();\n this.bindEvent();\n },\n renderDom: function () {\n var $p = window['$p'];\n var options = this.data.all;\n /*循环所有选件,判断如果在有效期内就显示*/\n var html = '';\n for (var i = 0; i < options.length; i++) {\n var o = options[i];\n var url = ($p.promotion.goodsDetailUrl && $p.promotion.goodsDetailUrl[o.code]) || ('/product/' + o.code + '.html');\n /*向DOM中追加元素*/\n html += '
    ' +\n '' +\n '
    ' +\n '
    ' + o.goodsName + '
    ' +\n '
    ¥' + o.showPrice.toFixed(2) + '节省'+o.discountAmount+'元了解详情>
    ' +\n '
    ' +\n '
    ';\n\n }\n if (html.length > 0) {\n this.$box.append(html);\n this.$container.removeClass('hidden');\n }\n },\n /**\n * 绑定推荐选件的事件\n */\n bindEvent: function () {\n var _this = this;\n /*选件单击事件*/\n this.$box.find('div.item')\n .on('click', function () {\n var $this = $(this);\n var code = $this.attr('data-code');\n /*如果当前未选中,则使其选中;如果已经选中,则取消*/\n if ($this.hasClass('checked')) {\n $this.removeClass('checked');\n _this.data.selectedArray = PDUtil.dropSome(_this.data.selectedArray, function (o) {\n return o.code == code;\n });\n } else {\n $this.addClass('checked');\n var exists = PDUtil.findFirst(_this.data.selectedArray, function(o){return o.code == code});\n if(!exists){\n _this.data.selectedArray.push(\n PDUtil.findFirst(_this.data.all, function(o){return o.code==code})\n );\n }\n }\n var newPrice = $p.calcPrice();\n $p.components.buygroup.updatePrice(newPrice);\n });\n },\n /**\n * 获取选件所有的数据\n */\n getAllData: function () {\n var _data = $p.processXJNeedShowList();\n this.data.all = _data;\n return _data;\n },\n /**\n * 获取所选选件的code的数组\n * @returns {Array}\n */\n getSelectedCodeArray: function () {\n var result = [];\n for (var i = 0; i < this.data.selectedArray.length; i++){\n result.push(this.data.selectedArray[i].code);\n }\n return result;\n }\n };\n\n if(!window.components){\n window.components = {};\n }\n window.components.TuiJianXuanJian = TuiJianXuanJian;\n})();\n"]}