js 架构参考

/**
 *  update : 2016-04-18 6.16
 *  update : 2016-05-25 6.17  修复进入填写页后返回丢失引流参数问题
 *
 */

define(['cUtilCommon', 'cMemberService', 'DetailSdpHighSpot', 'DetailOtherTickets', 'cGuiderService', 'UITab', 'cHybridShell', 'Page', 'DiyshxModel', 'DiyshxStore', 'Slider', 'cGuider', 'UIAlert', 'UICalendarCommon', 'cPublic'],
    function (UtilCommon, Member, DetailSdpHighSpot, DetailOtherTickets, cGuiderService, UITab, cHybridShell, Page, DiyshxModel, DiyshxStore, Slider, Guider, UIAlert, UICalendarCommon, cPublic) {
        var collect;
        // var orderConfirmResourceStore = DiyshxStore.OrderConfirmResourceStore.getInstance();
        var isInApp = Lizard.isHybrid || Lizard.isInCtripApp;
        var View = Page.extend({
            pageid: 249130,
            hpageid: 251130,
            //电话直落
            // businessCode: 'Vacation_FlightAndHotel_ SelfDriving',
            favorited: false,
            isPopShowed: false,
            isCreated: false,
            isShowed: false,
            commonStore: DiyshxStore.DIYSHXCommonStore.getInstance(),
            // priceCheckModel: DiyshxModel.PriceCallendar.getInstance(),
            // priceCheckStore: DiyshxStore.PriceCallendarStore.getInstance(),
            //点击日历后的优惠信息
            promotionInfoModel: DiyshxModel.PromotionInfoModel.getInstance(),
            model: DiyshxModel.SdpDetailNearbySearchModel.getInstance(),
            events: {
                'click #order-knowledge-a': 'onOrderKnowledgeClick',
                'click .detail-hotel-comment': 'goToHotelCommentPage',
                'click .detail-booking-btn,.js_datelink': 'goToBookingPage',
                'click .detail-collect-icon': 'onFooterCollectClick',
                'click .zby_detailpro_dayschoose a': 'onSelectedDayClick',  //延住详情页
                'click .js_gift_link': 'showGiftMask',
                'click .js_detail_single_modules>.zby_htlplaybox': 'goToSinglePages',
                'click .js_yhq_cell': 'drawCoupons',
                'click .js_showCouponInfo': 'showCouponInfo',
                'click .js_price_link': 'showPriceInfo'
            },
            onCreate: function () {
                window.VV = this;
                this.viewTpl = Lizard.T('viewportTpl');
                this.FluxEntrance = this.getQuery('FluxEntrance');
                window.__bfi = window.__bfi || [];
                var pageid;
                if (isInApp) {
                    pageid = this.hpageid;
                    !this.FluxEntrance && (this.FluxEntrance = 20131);
                } else {
                    pageid = this.pageid;
                    !this.FluxEntrance && (this.FluxEntrance = 30131);

                }
                window.__bfi.push(['_tracklog', 'Zhoumoyou_City', 'page_id=' + pageid + '&CITY=' + (this.getQuery('cityid') || 0)]);
            },
            //增加历史记录
            addToHistoryList: function () {
                var data = {
                    "id": this.getQuery('sdpid'),
                    "productname": this.data.SDPInfo.SdpName,
                    "price": this.data.SDPInfo.Price.OriginalPrice.Price,
                    "sightscore": this.data.ScienceInfoList[0].ScineceInfo[0] && this.data.ScienceInfoList[0].ScineceInfo[0].Score,
                    "thumb": this.data.SDPInfo.PictureUrls.length && this.data.SDPInfo.PictureUrls[0].LargeUrl,
                    "hotelid": this.data.JourneysInfo.SHXJourneyInfoV6_5[0].SHXHotelInfos.HotelId,
                    "hotelprice": this.data.singleHotelPrice && this.data.singleHotelPrice.Price,
                    "sightid": this.data.ScienceInfoList[0].ScineceInfo[0] && this.data.ScienceInfoList[0].ScineceInfo[0].ScineceId,
                    "sightprice": this.data.singleSightPrice && this.data.singleSightPrice.Price,
                    "city": this.data.SDPInfo.CityId,
                    "cityname": this.data.SDPInfo.CityName,
                    "page_id": isInApp ? this.hpageid : this.pageid,
                    "starttime": UtilCommon.Date.format(new Date(this.data.SDPInfo.SdpDate.match(/\d+/)[0] - 0), 'Y-m-d'),
                };
                console.log(data);
                this.setTrackLog(data, 'Zhoumoyou_Trace_Combo');
            },
            //延住日期选择
            onSelectedDayClick: function (evt) {
                var result = "";
                var $cur = $(evt.currentTarget);
                var $parent = $cur.parent();
                var newSpdid = $cur.data('id');
                if (newSpdid == Lizard.P("sdpid")) { return; }
                //var str = decodeURIComponent(location.href).toLowerCase().split('?');
                //if (str.length > 1) {
                //    result = str[1];
                //    if (/issub=true/i.test(result)) {
                //        result = result.replace(/issub=true/i, '');

                //    }
                //}
                //if (/^\w/.test(result) && result) {
                //    result = result;
                //} else if (result) {
                //    result = result.slice(1);
                //}
                // if (this.getQuery('nights')) {
                //     var night = _.find(this.data.SDPInfo.ExtendSdps,function(item){return item.SdpId == newSpdid}).Nights.match(/(\d).*(\d)/)[2];
                //     result = result.replace(/nights=\d+/, 'nights'+ night);
                // }
                //if ($parent.hasClass('js_sdp_days')) {
                //set store

                this.sdpTypeStore.set({ 'SdpType': this.data.SDPInfo.SdpType, 'switchTab': true });
                //var url = location.pathname.replace(/(\/detailnearby\/)(\d+)(.html)/ig, '$1' + newSpdid + '$3');
                this.forward('detailnearby/' + newSpdid + '.html' + location.search);
                this.destroyView(true);
            },
            //浏览历史,只支持Hybrid
            setHistory: function (){
                //不支持H5
                if(Lizard.isHybrid){
                    var bizType = "Weekend",
                        productId = this.getQuery("sdpid") || 0,
                        params = {
                            "bizType" : bizType,
                            "productId" : productId,
                        };
                    CtripBusiness.app_do_business_job(1, "setupHistoryWidget", params, 1111111); 
                    // app.callback = function(obj) {
                    //     if(obj.tagname == "do_business_job"){
                    //         if(obj.param.historyInfo){
                    //             var datas = JSON.parse(obj.param.historyInfo);
                    //             window.location.href = datas.detailURL;
                    //         }
                    //     }
                    // }
                }
            },
            onShow: function () {
                //加入浏览历史
                this.setHistory();
                this.isShow = true;
                if (this.fromView == 'warning404') {
                    this.isShow = false;
                }
                this.setHeader();
                if (!this.isCreated || !this.$el.html()) {
                    if (this.isCreated && !this.$el.html()) {
                        this.destroyView(true);
                    }
                    //设置参数,用于页面点击后退
                    this.setFromPageParam();
                    this.requestData();
                    this.isCreated = false;
                }
                this.validFromView();
            },
            goToHotelCommentPage: function () {
                var self = this;
                var hotels = [],
                    ticket = [],
                    ttd = [];
                //hotels
                _.each(this.data.JourneysInfo.SHXJourneyInfoV6_5, function (data) {
                    if (!data.SHXHotelInfos.NoVoters) { return; }
                    hotels.push({
                        id: data.SHXHotelInfos.HotelId,
                        score: data.SHXHotelInfos.HotelRatingOverall,
                        count: data.SHXHotelInfos.NoVoters,
                        name: data.SHXHotelInfos.HotelName,
                    });
                });
                //tickets
                if (this.data.ScienceInfoList[0].ScineceInfo.length) {
                    if (this.data.ScienceInfoList[0].ScineceInfo.length < 2) {
                        ticket = [{
                            id: this.data.ScienceInfoList[0].ScineceInfo[0].ScineceId,
                            score: this.data.ScienceInfoList[0].ScineceInfo[0].Score,
                            count: this.data.ScienceInfoList[0].ScineceInfo[0].CommentCount,
                            name: this.data.ScienceInfoList[0].ScineceInfo[0].ScenicSpotName,
                            poiid: this.data.ScienceInfoList[0].ScineceInfo[0].Poi.PoiId//this.getQuery('fromtype') == 2 ? this.data.SDPInfo.PoiId : this.data.ScienceInfoList[0].ScineceInfo[0].Poi.PoiId
                        }];
                    }
                    else {
                        _.each(this.data.ScienceInfoList[0].ScineceInfo, function (item) {
                            if (!item.IsMaster) {
                                ticket.push({
                                    id: item.ScineceId,
                                    score: item.Score,
                                    count: item.CommentCount,
                                    name: item.ScenicSpotName,
                                    poiid: item.Poi.PoiId//this.getQuery('fromtype') == 2 ? this.data.SDPInfo.PoiId : item.Poi.PoiId
                                });
                            }
                        });
                    }
                } else {
                    ticket = [{
                        id: 0,
                        score: 0,
                        count: 0,
                    }];
                }
                //ttd
                if (this.data.TTDInfoList && this.data.TTDInfoList.length) {
                    ttd = this.data.TTDInfoList;
                    _.each(ttd, function (ttd) {
                        ttd.score = ttd.Score;
                        ttd.name = ttd.ProductName;
                        ttd.id = ttd.ProductID;
                        ttd.count = 0;//暂不显示ttd
                    })
                }
                this.commonStore.setDetailCommentInfo({ hotels: hotels, tickets: ticket, ttds: ttd });
                this.forward('detailcomment');
            },
            requestData: function (getCached) {
                this.showLoading();
                this.model.excute(
                    _.bind(this.successForData, this),
                    _.bind(this.errorForData, this)
                );
            },
            successForData: function (data) {
                this.data = data;
                /*
                var self = this;
                setTimeout(function () {
                    self.hideLoading();
                }, 10);
                */
                //下架产品
                //if (this.data.SDPInfo.Invalid) {
                //    this.showInvalidError();
                //    return;
                //}

                this.checkDate = UtilCommon.Date.format(new Date(this.data.SDPInfo.SdpDate.match(/\d+/)[0] - 0), 'Y-m-d');

                // this.$bookBtn = this.$el.find('.btn_next');
                // this.$bookBtnLabel = this.$el.find('.btn_next');
                //this.$footerFavIcon = this.$el.find('.detail-collect-icon');
                //this.$imageslider = this.$el.find('.slider-container-div');
                /*
                   this.isShow = true;
                this.$el.html(_.template(this.viewTpl, data));
                this.$tab1 = this.$el.find('.detail-sdp-highlight-tab');
                this.$tab3 = this.$el.find('.detail-orderknowledge-tab');
                */
                this.getDetailSingleModel();
                //this.addToHistoryList();
            },
            errorForData: function (data) {
                this.hideLoading();
                this.isShow = false;
                var self = this;
                this.showWarning404(
                   function () {
                       this.$el.hide();
                       self.requestData();
                   }
                );
            },
            afterShow: function () {
                this.isShow = true;
                if (this.sdpTypeStore.getAttr('switchTab') && this.matchSdpType(Lizard.P('sdpid'))) {
                    this.data.SDPInfo.SdpType = this.sdpTypeStore.getAttr('SdpType');
                }
                this.data.JourneysInfo.SHXJourneyInfoV6_5[0].SHXHotelInfos._Star = 'star_' + this.formatDataStar(this.data.JourneysInfo.SHXJourneyInfoV6_5[0].SHXHotelInfos.HotelRatingOverall);
                this.$el.html(_.template(this.viewTpl, this.data));
                if (!this.$el.find('.js_sdp_type > a.cur').length && this.getMasterSdp()) {
                    this.$el.find('.js_sdp_type > a[data-id="' + this.getMasterSdp().SdpId + '"]').addClass('cur');
                }
                // this.$bookBtn = this.$el.find('.btn_next');
                // this.$bookBtnLabel = this.$el.find('.btn_next');
                this.$footerFavIcon = this.$el.find('.detail-collect-icon');
                this.$imageslider = this.$el.find('.slider-container-div');
                this.$tab1 = this.$el.find('.detail-sdp-highlight-tab');
                this.$tab3 = this.$el.find('.detail-orderknowledge-tab');

                this.setHeader();
                ////特惠信息设置2行,超过显示更多按钮
                //this.limitSaleInfoHeight();
                if (this.commonStore.getLoginFlag() && this.data.IsLogin) {
                    this.addToCollection();
                }
                ////设置特卖会信息
                // this.setDealData();

                this.setDetailBookingInfoForOrderconfirm(true);
                this.setDetailInfoForPriceCalender();
                this.setSpotInfoForOrderconfirm();

                this.createImageSlider();
                this.createTabs();
                //this.setFromPageParam();
                //用于h5 登录页面刷新后收藏按钮没选中的bug
                if (this.data.IsLogin) {
                    this.isInCollection();
                }
                this.setSeoInfo();
                this.isCreated = true;
                this.addProductIcons();
                //this.setDetailHistory();
            },
            onHide: function (aa) {
                this.isShow = false;
                this.hideWarning404();
                this.footerPopup && this.footerPopup.hide();
                this.priceCalendar && this.priceCalendar == null;
                this.giftMask && this.giftMask == null;
                //关闭浏览历史插件
                if (Lizard.isHybrid) {
                    var params = {
                        "close" : true,
                    }
                    CtripBusiness.app_do_business_job(1, "setupHistoryWidget", params, 1111111);
                }
                return;
            },
            destroyView: function (type) {
                this._commentInfos = null;
                this.isCreated = false;
                this.footerPriceDetail = null;
                this.detailpricedetailtab = null;
                this.footerPopup && this.footerPopup.hide();
                this.footerPopup = null;
                this.otherTickets = null;
                this.favorited = false;
                this.data = null;
                this.checkDate = null;
                if (this.imageSlider) {
                    this.imageSlider.destroy();
                    this.imageSlider = null;
                }
            },
            //为订单填写页设置预订信息
            setDetailBookingInfoForOrderconfirm: function (type) {
                var varDate;
                var obj = this.commonStore.getBookingInfoForOrderconfirm();
                if (type && obj) {
                    varDate = obj.checkinDate;
                }
                var daysMatch = this.data.SDPInfo.Nights.match(/(\d).*(\d)/);
                var science = this.data.ScienceInfoList[0].ScineceInfo[0];
                var isSegment = this.getQuery('ismultiplesegment');
                this.commonStore.setBookingInfoForOrderconfirm({
                    isOversea: this.getQuery('isoversea') == 'true' ? true : false,
                    checkinDate: varDate || (this.checkDate ? this.checkDate : ""),
                    nights: daysMatch[2],
                    black: this.data.SDPInfo.Black,
                    sdpId: this.getSdpid() || this.data.SDPID,
                    sdpName: this.data.SDPInfo.SdpName,
                    Districts: _.pluck(this.data.ScienceInfoList, 'DistrictId'),
                    isHKAndMC: this.data.SDPInfo.IsHkMacIcon,
                    nightsList: this.getSegmentNightsList(varDate || this.checkDate).night || [],
                    isFromHotel: Lizard.P("fromtype") == 1 ? true : false,
                    detailFromHotelHref: Lizard.isHybrid ? "" : Lizard.P("from"),
                    roomId: Lizard.P("roomid") ? Lizard.P("roomid") : "",
                    saleChannel: Lizard.P("fromtype") == 2 ? true : false, //是否团购产品
                    groupid: Lizard.P("groupid") || 0,    //团购id
                    cityId: this.data.SDPInfo.CityId,
                    scenicSpot: {
                        scenicSpotId: science && this.data.ScienceInfoList[0].ScineceInfo[0].ScineceId,
                        scenicSpotName: science && this.data.ScienceInfoList[0].ScineceInfo[0].ScenicSpotName,
                        commentInfo: {
                            CommentScore: science && this.data.ScienceInfoList[0].ScineceInfo[0].Score,
                            CommentVote: science && this.data.ScienceInfoList[0].ScineceInfo[0].CommentCount
                        },
                        scenicSpotPoi: science && this.data.ScienceInfoList[0].ScineceInfo[0].Poi,

                        poiId: science && this.data.ScienceInfoList[0].ScineceInfo[0].Poi.PoiId,
                        poiType: science && this.data.ScienceInfoList[0].ScineceInfo[0].Poi.PoiType
                    }

                });
            },
            //为订单填写页设置主景点名字
            setSpotInfoForOrderconfirm: function () {
                if (this.data.ScienceInfoList[0].ScineceInfo[0]) {
                    this.commonStore.setMainSpotnameForOrderconfirm(this.data.ScienceInfoList[0].ScineceInfo[0].ScenicSpotName);
                }
            },
            setDetailInfoForPriceCalender: function () {
                var daysMatch = this.data.SDPInfo.Nights.match(/(\d).*(\d)/);
                this.commonStore.setDetailInfoForPriceCalender({ ttdList: this.data.TTDInfoList, sdpid: this.getSdpid(), days: daysMatch[1], nights: daysMatch[2], priceIntroduce: this.data.SDPInfo.PriceDetailIntroduceInfo });
            },
            //为图片缩略图页面格式化数据
            getBrowsePic: function () {
                var imgs;

                imgs = this.data.SDPInfo.PictureUrls;
                _.each(imgs, function (room) {
                    room.category = '';
                    room.imageDescription = '';
                    room.imageThumbnailUrl = room.SmallUrl;
                    room.imageTitle = '';//room.ImageTitle;
                    room.imageUrl = room.MiddleUrl || room.LargeUrl;
                    // room.smallsrc = room.SmallUrl;
                    // room['data-src'] = room.MiddleUrl || room.LargeUrl;
                    // room.title = room.ImageTitle;
                });
                this.browseImgs = imgs;
                return this.browseImgs;
            },
            resetTabList: function () {
                if (!this.tablist) { return; }
                if (this.tabIndex == 3) {
                    this.tablist.setVal(1);
                }
            },
            createTabs: function () {
                this.highspottab = false;
                this.commenttab = false;
                this._tab3Showed = false;

                this._hasPicAndText = false;
                this._hasHighspot = false;

                var tabIndex = 0;
                var tabConfig = [];

                if (this.data.SDPInfo.ProductManagerRecInfo.RecContent.length || this.data.SDPInfo.SDPHighLight.ScienceHighLight.length || this.data.SDPInfo.SDPHighLight.HotelHighLight.length || this.data.SDPInfo.SDPHighLight.NoTabHighLight.length) {
                    this._hasHighspot = true;
                    tabConfig.unshift({ id: tabIndex++, name: "套餐亮点" });
                }

                tabConfig.push({ id: tabIndex++, name: "预订须知" })

                if (this.data.beautyPicAndText) {
                    this._hasPicAndText = true;
                    tabConfig.push({ id: tabIndex++, name: "<span class='zby_picarrow'>美图美文</span>" });
                }
                var tag = 0;
                this._tag = tag;
                this.tablist = new UITab({
                    wrapper: this.$el.find('.detail-tab-container'),
                    datamodel: {
                        data: tabConfig,
                        index: 0,
                        curClass: 'cui-tab-current'
                    },
                    onChange: _.bind(this.onSwitchTab, this)
                });

                this.tablist.$el.find('.cui-tab-mod').addClass('package_tab_num').addClass('zby_tab');
                //美图美文 click
                var fn = this.tablist.clickAction;
                var self = this;
                this._isClickTab = false;
                this.tablist.clickAction = function (t) {
                    var index = $(t.currentTarget).attr("data-index");
                    if (self._hasPicAndText) {
                        if (self._hasHighspot && index == 2 || !self._hasHighspot && index == 1) {
                            self.showPicAndTextPage();
                            return;
                        }
                    }
                    fn.call(self.tablist, t);
                }
                this.tablist.show();
                if (this._hasHighspot) {
                    this.$preTab = this.showDetailHighSpotTab();
                } else {
                    this.$preTab = this.showDetailOrderknowledgeTab();
                }
                return;
            },
            onSwitchTab: function (data) {
                this.$preTab.hide();
                if (this._hasHighspot && data.id == 0) {
                    //TODO:detail-sdp-hightlight-tab
                    this.tabIndex = data.id;
                    this.$preTab = this.showDetailHighSpotTab();
                } else if (data.id == 0) {
                    this.$preTab = this.showDetailOrderknowledgeTab();
                }
                if (this._hasHighspot && data.id == 1) {
                    this.$preTab = this.showDetailOrderknowledgeTab();
                } else if (this.id == 1 || data.id == 2) {
                    this.showPicAndTextPage();
                }
            },
            //美文美图
            showPicAndTextPage: function () {
                var isApp = Lizard.isInCtripApp || Lizard.isHybrid
                if (this.data.beautyPicAndText) {
                    if (!isApp) {
                        location.href = this.data.beautyPicAndText.H5Url + '?from=' + location.href;
                    } else {
                        Lizard.jump(this.data.beautyPicAndText.HybirdUrl, { targetModel: 4 })
                    }
                }
                return;
            },
            showDetailHighSpotTab: function () {
                var container;
                if (!this.highspottab) {
                    container = this.$el.find('.detail-sdp-highlight-tab');
                    this.highspottab = new DetailSdpHighSpot({ container: container, root: this, data: this.data.SDPInfo });
                } else {
                    container = this.highspottab.show();
                }
                return container;
            },
            showDetailOrderknowledgeTab: function () {
                this.$tab3.show();
                if (this._tab3Showed) { return this.$tab3; }
                //this.$tab3.show();
                var model = DiyshxModel.BookingPolicyModel1.getInstance();
                model.param.SdpId = this.getSdpid();
                if (this.data.SDPInfo.HasSubSdps && this.subTickets) {
                    model.param.TicketIds = this.subTickets.length > 0 ? this.subTickets[0] : 0;
                } else {
                    model.param.TicketIds = _.pluck(this.data.TicketInfoList, 'TicketId');
                }

                var loading = this.showBeginLoading(this.$tab3);
                model.excute(function (data) {
                    loading.hide();
                    data.BookingPolicy.isHKAndMC = (this.data.SDPInfo.IsHkMacIcon && this.data.SDPInfo.IsHkMacIcon == 2);
                    data.BookingPolicy.isOversea = this.getQuery('isoversea') == 'true' ? true: false;
                    data.priceInfo = this.data.SDPInfo.PriceDetailIntroduceInfo;
                    this.$tab3.html(_.template(Lizard.T('detail-booking-policy'), data));
                    this.$tab3.find('.hotelname').html(this.data.JourneysInfo.SHXJourneyInfoV6_5.length == 1 ? this.data.JourneysInfo.SHXJourneyInfoV6_5[0].SHXHotelInfos.HotelName : '酒店预订说明');

                }, function () {
                    loading.hide();
                    this.showNetworkError(this.$tab3, _.bind(this.showDetailOrderknowledgeTab, this));

                }, true, this);

                this._tab3Showed = true;
                return this.$tab3;
            },
            //格式化图片数据
            getSliderImages: function () {
                var pics = this.data.SDPInfo.PictureUrls;
                if (!pics) { return false; }
                var result = [], img;
                _.each(pics, function (pic, index) {
                    pic.smallsrc = pic.SmallUrl;
                    pic.tag = index;
                    pic['data-src'] = pic.LargeUrl;
                    pic.title = pic.ImageTitle;
                });
                return pics;
            },
            createImageSlider: function () {
                var that = this, result, el,
                    images = this.getSliderImages();
                //如果没图片
                if (!images || !images.length) { return false; }
                this.imageSlider = new Slider({
                    images: images,
                    root: this.$imageslider,
                    showNav: false,
                    px: 1 / 2,
                    onClick: function (evt) {
                        result = that.getBrowsePic();
                        that.commonStore.setAllPic(result);
                        if (isInApp) {
                            require("cHybridShell").Fn('show_photo_broswer').run(result);
                        } else {
                            setTimeout(function () {
                                that.forward('pichoteldetail');
                            }, 100);
                        }
                    },
                    onShow: function (evt) {
                        var el1 = $('<div class="zby_product_id"><span>产品编号:' + that.data.SDPInfo.SDPID + '</span></div>');
                        that.imageSlider._root.append(el1);
                        if (images.length) {
                            el = $('<div class="zby_img_num"><span>1/' + images.length + '</span></div>');
                            that.imageSlider._root.append(el);
                        }
                    },
                    onMoved: function (evt) {
                        el.find('span').html(evt.attr('tag') - 0 + 1 + '/' + images.length);
                    },
                    onBeforeShow: function (evt) {

                    }
                });
                return;
            },
            //设置fromPge,用于回退时的判断
            setFromPageParam: function () {
                var url;
                if (this.getQuery('from') == 'groupmessage' || this.getQuery('fromshare')) {
                    //分享出去的
                    this.commonStore.setDetailFromPage1({ type: 4, url: 'index' });
                    return;
                }
                //设置详情页入住日期
                //this.commonStore.setDetailBookingTime(this.getQuery('date'));
                if (decodeURIComponent(location.href).split('?').length > 2) {
                    //app bug 
                    this.commonStore.setDetailPage('detailnearby/' + Lizard.P.lizParam.sdpid + '.html?' + decodeURIComponent(location.href).split('?')[1] + '&' + decodeURIComponent(location.href).split('?')[2]);
                } else {
                    this.commonStore.setDetailPage('detailnearby/' + Lizard.P.lizParam.sdpid + '.html' + (decodeURIComponent(location.href).split('?').length > 1 ? '?' + decodeURIComponent(location.href).split('?')[1] : ''));
                }
                //从订单填写页过来
                if (this.fromView == 'orderdetails') {
                    this.commonStore.setDetailFromPage1({ type: 5, url: this.commonStore.getOrderDetailFromPage() });
                    return;
                }
                if (this.getQuery('from_native_page')) {
                    this.commonStore.setDetailFromPage1({ type: 0 });
                } else if (this.getQuery('from')) {
                    if (/^\/webapp/i.test(this.getQuery('from'))) {
                        url = location.origin + this.getQuery('from');
                    } else {
                        url = this.getQuery('from');
                    }
                    this.commonStore.setDetailFromPage1({ type: 1, url: url });
                }
                this.setPageParam();
            },
            //点击后退按钮
            onReturnBtnClick: function (isFromCalenderTrigger) {
                var self = this;
                if (this.isPopShowed) { return false; }
                //更新sdpTypeStore
                this.sdpTypeStore.set(null);
                setTimeout(function () {
                    if (!isFromCalenderTrigger) {

                        if (self.fromView == 'oversea' || self.fromView == 'espage' || self.fromView == 'zhoubian' || self.fromView == "list" || self.fromView == "index" || self.fromView == 'tourlist') {
                            self.back();
                            self.destroyView();
                            return false;
                        }
                    }
                    try {
                        fromInfo = self.commonStore.getDetailFromPage1();
                        if (fromInfo.type == 0) {
                            Guider.backToLastPage();
                            return;
                        }
                        if (fromInfo.type == 1) {
                            location.href = fromInfo.url;
                            return;
                        }
                        if (fromInfo.type == 3) {
                            self.back();
                            self.destroyView();
                            return;
                        }
                        if (fromInfo.type == 4) {
                            self.back('index' || 'zhoubian');
                            return;
                        }
                        if (fromInfo.type == 5) {
                            self.back(fromInfo.url);
                            return;
                        }
                        if (!self.fromView) {
                            self.back('index' || 'zhoubian');
                            return;
                        }
                    } catch (e) {
                        self.back();
                        self.destroyView();
                        self.back('index' || 'zhoubian');
                    }
                }, 0);

                return false;
            },
            setHeader: function () {
                var self = this, fromInfo, obj = {};

                obj = {
                    title: '套餐详情',
                    view: this,
                    back: true,
                    right: (function () {
                        if (!self.data || !self.data.SDPInfo.SdpName) { return; }
                        var tag = [],
                            tagShare = {
                                // tagname: 'more',
                                // imagePath: '/diyshx/pic/h5/scenic_htl/icon_single_comment.png',
                                tagname: 'home',
                                iconname: 'home',
                                callback: function (evt) {
                                    Guider.apply({
                                        hybridCallback: function () {
                                            Guider.home();
                                        },
                                        callback: function () {
                                            window.location = "/html5"
                                        }
                                    });
                                }
                            },
                            tagLove = {
                                tagname: (isInApp) ? 'favorite' : 'love',
                                imagePath: 'car/res/logo.png',
                                callback: function (evt) {
                                    self._loveIcon = evt;
                                    self.onLoveTagClick();
                                }
                            },
                            tagLoved = {
                                tagname: (isInApp) ? 'favorited' : 'loved',
                                imagePath: 'car/res/logo.png',
                                callback: function (evt) {
                                    self._loveIcon = evt;
                                    self.onLovedTagClick();
                                }
                            };

                        tag.push(self.favorited ? tagLoved : tagLove);

                        if (!isInApp) {
                            tag.push(tagShare);
                            obj.home = true;
                        }
                        return tag;
                    })(),
                    events: {
                        returnHandler: function () {
                            self.onReturnBtnClick();
                        }
                    }
                };
                if (isInApp) {
                    obj.moreMenus = [
                        {
                            tagname: 'share',
                            iconname: 'share',
                            value: '转发',
                            callback: function () {
                                self.shareOut()
                            }
                        },
                       {
                           tagname: 'more_message_center',
                           iconname: 'comment',
                           value: '在线咨询',
                           callback: function () {
                               self.onChatIconClick();
                           }

                       },
                        {
                            tagname: 'more_home',
                            iconname: 'home',
                            value: '携程首页',
                            callback: function () {
                                Guider.apply({
                                    hybridCallback: function () {
                                        Guider.home();
                                    },
                                    callback: function () {
                                        window.location = "/html5"
                                    }
                                });
                            }
                        }
                    ]
                };
                this.headerview.set(obj);
            },
            getSdpid: function () {
                var sdpid;
                if (this.selectSdp && this.selectSdp.SdpId) {
                    sdpid = this.selectSdp.SdpId;
                }
                if (!sdpid) {
                    sdpid = this.data.SDPInfo.SDPID;
                }
                return sdpid;
            },
            //重置展开按钮
            resetExpandBtn: function () {
                this.$saleInfo.addClass('tips_fold');
                this.$saleInfo.css('height', '');
                this.$moreBtn.html("更多");
                this.$moreBtn.removeClass("a_server").addClass("a_server_on");
                this.isBtnClose = true;
            },
            //收藏图标状态改变后重新更新状态
            refreshHead: function () {
                if (this.$el.css('display') == 'none') { return; }
                this.setHeader();
            },
            onFooterCollectClick: function () {
                if (!this.favorited) {
                    this.onLoveTagClick();
                } else {
                    this.onLovedTagClick();
                }
            },
            //收藏功能
            addToCollection: function () {
                var self = this;
                collect = this.collect = collect || new cPublic.collect();;
                this.collect.save({
                    "Version": "6700",
                    "Channel": Lizard.isHybrid ? 3 : 2,
                    FavoriteList: [{
                        "BizType": "WEEKEND", //bu模块名
                        "ProductID": this.getMainSdpId(),
                        "ProductType": 'WEEKEND_VIEWHOTEL',
                        "FromCityID": this.getQuery('cityid') || 0
                    }]
                }, function (err, data) {
                    if (data && data.FavoriteIDs.length) {
                        self._favouriteId = data.FavoriteIDs;
                        self.favorited = true;
                        self.refreshHead();
                        self.updateFooterFavIcon();
                    }
                });
            },
            updateFooterFavIcon: function () {
                if (this.favorited) {
                    this.$footerFavIcon.addClass('cur');
                } else {
                    this.$footerFavIcon.removeClass('cur');
                }
            },
            getMainSdpId: function () {
                var data, self = this;
                if (this.data.SDPInfo.IsExtend) {//延住产品
                    data = this.data.SDPInfo.SDPID;
                } else if (this.data.SDPInfo.HasSubSdps) {//多票种,已废除,挪至SdpType
                    data = _.find(this.data.SDPInfo.SubSdps, function (data) { return data.IsMasterSdp == true }).SdpId;
                } else if (this.data.SDPInfo.SdpType) {//套餐类型
                    data = _.find(this.data.SDPInfo.SdpType, function (data) { return data.SdpId == self.data.SDPInfo.SDPID });
                    if (!data) { return this.data.SDPInfo.SDPID; }
                    else if (data.Relation == 3) {
                        data = _.find(this.data.SDPInfo.SdpType, function (data) {
                            return data.Relation == 1;
                        });
                    }
                    data = data.SdpId;
                } else {
                    data = this.data.SDPInfo.SDPID;
                }
                return data;

            },
            //是否已经收藏
            isInCollection: function (el) {
                var model = DiyshxModel.Fav.isFavModel.getInstance();
                var that = this;
                var obj = {
                    "BizType": "WEEKEND", //bu模块名
                    "ProductID": this.getMainSdpId(),
                    "ProductType": 'WEEKEND_VIEWHOTEL',
                    "FromCityID": this.getQuery('cityid') || 0
                };

                model.param = {
                    "QueryList": [obj]
                };

                model.excute(function (json) {
                    if (json && json.ResultList && json.ResultList.length) {
                        that.favorited = true;
                        that._favouriteId = json.ResultList[0].FavoriteID;
                        that.refreshHead();
                        that.updateFooterFavIcon();
                    } else {
                        //that.showToast('添加收藏失败,稍后再试');
                        console.log('判断是否收藏失败');
                    }
                });
            },
            //取消收藏
            removeCollection: function (el) {
                var self = this;
                var model = DiyshxModel.Fav.cancleFavModel.getInstance();
                model.param = {
                    "FavoriteIdList": self._favouriteId
                };
                model.excute(function (json) {
                    if (json && json.DeletedList && json.DeletedList.length > 0) {
                        self.favorited = false;
                        self.refreshHead();
                        self.updateFooterFavIcon();
                    } else {
                        self.showToast('取消收藏失败,稍后再试');
                    }
                }, function () {
                    self.showToast('取消收藏失败,稍后再试');
                });
            },
            //收藏按钮点击,取消收藏
            onLovedTagClick: function () {
                var self = this;
                if (!this.collectAlert) {
                    this.collectAlert = new UIAlert({
                        datamodel: {
                            content: '确定取消收藏?',
                            btns: [
                            { name: '取消', className: 'cui-btns-cancel' },
                            { name: '确定', className: 'cui-btns-ok' }
                            ]
                        },
                        cancelAction: function () {
                            self.isPopShowed = false;
                            this.hide();
                        },
                        okAction: function () {
                            self.removeCollection();
                            self.isPopShowed = false;
                            this.hide();
                        }
                    });
                }
                this.collectAlert.show();
                self.isPopShowed = true;
            },
            //点击收藏按钮
            onLoveTagClick: function (evt) {
                var self = this;
                if (this.data.IsLogin) {
                    this.addToCollection();
                } else {
                    this.commonStore.setLoginFlag();
                    this.onLogin(window.decodeURIComponent(location.href).match(/\/webapp\/diyshx.*/i)[0], function () {
                        self.addToCollection();
                    });
                }
            },
            //设置seo信息
            setSeoInfo: function () {
                var name;
                if (this.data && this.data.SDPInfo.SdpName) {
                    name = this.data.SDPInfo.SdpName;
                    $('title').html(name + '-【携程自由行景酒套餐】');
                    $('meta[name="description"]').attr('content', name + ',最便宜的酒店有哪些?携程自由行套餐频道为您提供最省钱的景点门票与酒店套餐。手机订酒店、景点门票,请访问m.ctrip.com。');
                    $('meta[name="keywords"]').attr('content', name + ',携程旅行,订酒店,订门票');
                }
                //seo head添加标记
                var $el = $('<a href="//m.ctrip.com/html5/"></a>');
                $('#headerview').find('.icon_home').append($el);
            },
            onLogin: function (url, callbackFn) {
                var FluxEntrance = this.getFluxEntrance(); //引流渠道号
                var cityid = this.getDiyCid();//售卖站埋参数
                var self = this;
                Member.memberLogin({
                    param: 'from=' + encodeURIComponent(url) + (FluxEntrance != "0" ? '?FluxEntrance=' + FluxEntrance + '&DiyCid=' + cityid : ""),
                    callback: function (data) {
                        if (data) {
                            self.data.IsLogin = true;
                            callbackFn.call(self);
                        }
                    }
                });
            },
            //电话直落接口
            callService: function () {
                if (this.hpageid) {
                    cGuiderService.callService();
                }
            },
            //右上角聊天窗口
            onChatIconClick: function () {
                window.location.href = "//m.ctrip.com/webapp/LivechatH5/chat?GroupCode=taocanhotel&AsFrom=0|orderdetail&version=2.0&origin=1&productid=" + this.getSdpid();
            },
            //分享功能
            shareOut: function () {
                if (isInApp) {
                    var url = '//m.ctrip.com/webapp/diyshx/detailnearby/' + this.getMainSdpId() + '.html?fromshare=1';
                    //var url = "http://w-diy-m.fat19.qa.nt.ctripcorp.com/webapp/diyshx/detail/" + this.data.SDPID + '.html';
                    var obj = {
                        imgUrl: this.data.SDPInfo.PictureUrls && this.data.SDPInfo.PictureUrls[0].MiddleUrl,
                        shareUrl: url,
                        title: this.data.SDPInfo.SdpName,
                        text: this.data.SDPInfo.SdpName

                    };
                    var ctripShare = CtripBusiness.app_call_system_share || CtripUtil.app_call_system_share;//必须
                    Guider.downloadData({
                        callback: function (data) {
                            ctripShare(data.savedPath, obj.text, obj.title, obj.shareUrl, false);
                        },
                        url: obj.imgUrl,
                        suffix: 'jpg'
                    });
                }
            },

            //add by zhuhaizhang
            getPriceCalendarData: function () {
                var self = this;
                var callendarModel = DiyshxModel.PriceCallendar.getInstance();
                callendarModel.param.SdpID = Lizard.P('sdpid');//this.getSdpid()
                callendarModel.param.SaleChannel = 0;
                callendarModel.param.StartDate = this.getSdpDate().checkIn;
                callendarModel.param.DayCount = this.data.SDPInfo.CalenderDaysNum || 60;
                callendarModel.excute(function (data) {
                    _.each(data.list, function (date) {
                        date.date = new Date(date.date);
                    });
                    self.renderPirceCalendarTpl(data, callendarModel.param.DayCount);
                    console.log(data, '价格日历服务请求成功');
                }, function (error) {
                    console.log(error, '价格日历服务请求失败');
                }, true, this);
            },
            Map_SingleData: {
                1: { 'class': 'st_blue', 'text': '单订酒店', 'unit': '晚', 'h5': '/webapp/hotel/hoteldetail/{ 酒店id }.html?days=1&atime={入住日期}', 'hybird': '/InlandHotel?checkInDate={入住日期}&checkOutDate={离店日期}&hotelId={ hotelId }&hotelDataType=1' },
                2: { 'class': 'st_yellow', 'text': '单订门票', 'unit': '份', 'h5': '/webapp/ticket/dest/t{ 景点id }.html', 'hybird': 'ticket/index.html#/dest/t{ 景点id }.html?name={景点名称}' },
                3: { 'class': 'st_pink', 'text': '单订玩乐', 'unit': '份', 'h5': '/webapp/activity/dest/t{ 玩乐id }.html', 'hybird': 'activity/index.html#dest/t{ 玩乐id }.html' }
            },
            getDetailSingleModel: function () {
                var self = this, date = new Date();
                var singleModel = DiyshxModel.DetailSingleModel.getInstance();
                singleModel.param.SdpID = Lizard.P('sdpid');//this.getSdpid()
                singleModel.param.SdpDate = this.getSdpDate().checkIn;//date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();//this.getSdpid()
                singleModel.excute(function (data) {
                    self.data.beautyPicAndText = data.BeautyWords;
                    self.data.singleHotelPrice = self.getSingleModelPrice(data.SingleProductsInfo, 1);
                    self.data.singleSightPrice = self.getSingleModelPrice(data.SingleProductsInfo, 2);
                    self.hideLoading();
                    self.afterShow();
                    data.map_data = self.Map_SingleData;
                    self.renderDetailSingleTpl(data);
                    self.getPromotionInfo();
                    self.getPriceCalendarData();
                    self.addToHistoryList();
                }, function (error) {
                    self.data.beautyPicAndText = null;
                    self.data.singleHotelPrice = '';
                    self.data.singleSightPrice = '';
                    self.hideLoading();
                    self.afterShow();
                    self.getPromotionInfo();
                    self.getPriceCalendarData();
                    self.addToHistoryList();
                    //self.errorForData();
                }, true, this);
            },
            getSingleModelPrice: function (data, type) {
                return _.find(data, function (item) { return item.ResourceType == type; })
            },
            renderPirceCalendarTpl: function (DATA, CalenderDaysNum) {
                var data = {
                    startDate: new Date(DATA.startDate) || new Date(),
                    displayMonthNum: DATA.months,
                    showRestIcon: false,
                    list: DATA.list,
                    endDate: new Date(DATA.endDate)
                };
                //初始化
                data = getTwoWeeks(data);
                //售卖第一天月份
                data._month = _.dateUtil.format(data.startDate, 'Y年m月');
                //可售日期的第一天
                data._firstValidDay = _.find(data.list, function (item) { return item.PriceStatus != '-1'; });
                //data._firstValidDay = data._firstValidDay && _.dateUtil.format(data._firstValidDay.date, 'Y/m/d');
                data._firstday = _.dateUtil.format(data.startDate, 'Y-m-d');
                data._lastDay = _.dateUtil.format(data.endDate, 'Y-m-d');
                //售罄天数判断
                if (DATA.soldOut < DATA.list.length) {
                    //更新14天的逻辑
                    if (data._firstValidDay && data._firstValidDay.key >= data.diffDay) {
                        data.startDate = new Date(data._firstValidDay.date);
                        data = getTwoWeeks(data);
                        data._month = _.dateUtil.format(data.startDate, 'Y年m月');
                    }
                }
                //格式化日期
                data._start = _.dateUtil.format(data.startShowTime, 'Y-m-d');
                data._end = _.dateUtil.format(data.endShowTime, 'Y-m-d');
                //data._month = _.dateUtil.format(data.startShowTime, 'Y年m月');//DIY03DDWX-2081
                this.$el.find('#js_zby_calendar_month').html('(' + data._month + ')');
                //获取14天日期信息
                function getTwoWeeks(data) {
                    //日历第一天星期几
                    data.diffDay = 13 - data.startDate.getDay();
                    //14天第一天
                    data.startShowTime = new Date(data.startDate).setDate(data.startDate.getDate() - data.startDate.getDay());
                    data.startShowTime = new Date(data.startShowTime);
                    data._startMonth = data.startShowTime.getMonth();
                    data.startTime = data.startShowTime;
                    //14天最后一天
                    data.endShowTime = new Date(data.startDate).setDate(data.startDate.getDate() + data.diffDay);
                    data.endShowTime = new Date(data.endShowTime);
                    data._endMonth = data.endShowTime.getMonth();
                    //计算是否需要跨月
                    data.displayMonthNum = data._startMonth != data._endMonth ? data.displayMonthNum + 1 : data.displayMonthNum;
                    data._month = _.dateUtil.format(data.startShowTime, 'Y年m月');
                    return data;
                }
                //创建价格日历
                this.createCalendar(data);
            },
            priceCalendar: null,
            toBJDate: function (value) {
                if (typeof (value) == "string") {
                    if (value.indexOf("Date") > -1) {
                        //if (value.indexOf('Date(-') > -1) return 0;
                        value = value.match(/(\d+)/)[0];
                    }
                    if (!isNaN(value)) {
                        value = parseInt(value);
                    }
                }
                var date = new Date(value);
                var timezoneOffset = date.getTimezoneOffset();
                date.setTime(date.getTime() + timezoneOffset * 60000 + 28800000);
                return date.getTime();
            },
            createCalendar: function (data) {
                var self = this;
                //if (!this.priceCalendar) {
                this.priceCalendar = new UICalendarCommon({
                    wrapper: self.$el.find('.js_zby_dp_calendar').html(''),
                    template: Lizard.T('detail_CalendarTpl'),
                    datamodel: data,
                    onItemClick: _.bind(function (date, el, target) {
                        var soldout = el.find('span.soldout').length;
                        var iVan = el.find('.days').length;
                        if (soldout) {
                            this.createAlertTips();
                            this.getPriceCalendarData();
                            return;
                        }
                        //this.isCreated = false;
                        if (iVan) {
                            this.orderSearch(_.dateUtil.format(date, 'Y/M/D'), function () {
                                var url = self.getQueryParam('detail', '.html', _.dateUtil.format(date, 'Y-M-D'));
                                self.forward(url);
                            }, function () {
                                self.createAlertTips();
                                self.getPriceCalendarData();
                            });
                            return;
                        }
                        var url = this.getQueryParam('detail', '.html', _.dateUtil.format(date, 'Y-M-D'));
                        this.forward(url);
                    }, this),
                    dayItemAction: function (dayObj, year, month, day, dateObj, difftime) {
                        dateObj.setHours(0, 0, 0, 0);
                        var _time = dateObj.getTime();
                        var _dayPrice = _.find(data.list, function (item) {
                            var local = self.toBJDate(item['Date']);
                            return local == _time;
                        });
                        var dateStr = dayObj.day1 || dayObj.day;
                        if (_dayPrice) {
                            if (_dayPrice.price == "0") {
                                return '<span class="soldout">' + dateStr + '</span><br /><span class="soldout">售罄</span>';
                            }
                            else if (_dayPrice.price == "00") {
                                return '<span class="days">' + dateStr + '</span><br /><span style="color:#FF9900;">实时价</span>';
                            }
                            else {
                                return '<span class="days">' + dateStr + '</span><br /><dfn>¥' + _dayPrice.price + '</dfn>';
                            }
                        }
                        else {
                            return '<span class="soldout">' + dateStr + '</span>';
                        }
                    },
                    onShow: function () {
                        //起始日期计算
                        //前14天都售罄时,往后移动,即第一个可售有价格开始
                        this.onRemoveNodes(data);
                    },
                    onHide: function () { },
                    onRemoveNodes: function (data) {
                        var start = this.$el.find('a[data-cndate="' + data._start + '"]').data('curtime');//14天的第一天
                        var firstDay = this.$el.find('a[data-cndate="' + data._firstday + '"]').data('curtime');//价格日历第一天
                        var end = this.$el.find('a[data-cndate="' + data._end + '"]').data('curtime');//14天的最后一天
                        //var firstValidDay = this.$el.find('a[data-cndate="' + data._firstValidDay + '"]').data('curtime');//价格日历的有价格的第一天
                        //var lastDay = this.$el.find('a[data-cndate="' + data._lastDay + '"]').data('curtime');
                        var curtimes = this.$el.find('a');
                        curtimes.each(function (index) {
                            var $this = $(this), curtime = $this.data('curtime');
                            //删除价格日历外的日期
                            if (curtime > start || curtime < end) {
                                $this.remove();
                            }
                            //14天过期日期
                            if (curtime > firstDay) {
                                $this.addClass('js_overdue cm-item--disabled');
                            }
                        });
                    }
                });
                //}
                this.priceCalendar.show();
            },
            renderDetailSingleTpl: function (data) {
                var tpl = Lizard.T('detail_singlemodules');
                var $dom = $($.trim(_.template(tpl, data)));
                this.$el.find('.js_detail_single_modules').html($dom).show();
            },
            //promotionInfoModel 礼包信息
            giftstore: DiyshxStore.GiftStore.getInstance(),
            getPromotionInfo: function () {
                var self = this;
                var promotionModel = DiyshxModel.PromotionInfoModel.getInstance();
                promotionModel.param = {
                    SdpId: this.getQuery('sdpid'),
                    SdpDate: this.getSdpDate().checkIn,
                    Nights: this.getSdpNights()
                };
                promotionModel.excute(function (data) {
                    self.renderPromotionTpl({ PromotionInfo: data.PromotionInfo, HasRoomGift: self.data.JourneysInfo.HasRoomGift, RoomGift: self.data.JourneysInfo.RoomGift || [], CouponInfo: data.CouponInfo });
                    self.giftstore.set({
                        'Gift': { PromotionInfo: data.PromotionInfo, HasRoomGift: self.data.JourneysInfo.HasRoomGift, RoomGift: self.data.JourneysInfo.RoomGift || [] }
                    });
                }, function (data) {
                    self.renderPromotionTpl({ PromotionInfo: data.PromotionInfo, HasRoomGift: self.data.JourneysInfo.HasRoomGift, RoomGift: self.data.JourneysInfo.RoomGift || [], CouponInfo: [] });
                    self.giftstore.set({
                        'Gift': { PromotionInfo: data.PromotionInfo, HasRoomGift: self.data.JourneysInfo.HasRoomGift, RoomGift: self.data.JourneysInfo.RoomGift || [] }
                    });
                }, true, this);
            },
            renderPromotionTpl: function (data) {
                var tpl = Lizard.T('detail_GiftTpl');
                var giftbox = this.$el.find('.js_gift_box');
                data._Date = this.toBJDate;
                tpl = $($.trim(_.template(tpl, data)));
                tpl.find('li.gift_infor').eq(0).addClass('zby_top_giftlink').append('<a href="javascript:" class="gift_link js_gift_link color_blue"><span class="ico_i">礼包详情</span></a>');
                giftbox.html(tpl);
            },
            drawCoupons: function (e) {
                var self = this;
                var $cur = $(e.currentTarget);
                var $id = $cur.data('id');
                //是否领券
                if ($cur.hasClass('clicked')) { return; }
                if (this.data.IsLogin && !this.drawCouponsClicked) {
                    this.drawCouponsClicked = true;
                    this.getDrawCouponModel({ SdpId: self.getSdpid(), PromotionCode: $id }, $cur);
                } else {
                    this.onLogin(window.decodeURIComponent(location.href).match(/\/webapp\/diyshx.*/i)[0], function () {
                        self.getDrawCouponModel({ SdpId: self.getSdpid(), PromotionCode: $id }, $cur)
                    });
                }
            },
            getDrawCouponModel: function (params, doms) {
                var self = this;
                var drawcouponmodel = DiyshxModel.DrawCouponModel.getInstance();
                drawcouponmodel.param = params;
                drawcouponmodel.excute(function (data) {
                    if (data.Result && data.Result.ResultCode == 1) {
                        self.showToast('领券成功');
                        doms.addClass('clicked');
                        doms.find('.q_name').html('已领取优惠券');
                    } else {
                        self.showToast('该优惠券已领取完');
                    }
                    self.drawCouponsClicked = false;
                }, function (error) {
                    self.showToast('领券失败,稍后再试');
                    self.drawCouponsClicked = false;
                }, true, this);
            },
            giftMask: null,
            showGiftMask: function () {
                // if need
                var self = this;
                //if (!this.giftMask) {
                require(['ZbyGiftMask'], function (Mask) {
                    self.giftMask = new Mask({
                        wrapper: $('.js_giftlist_box').html(''),
                        datamodel: self.giftstore.getAttr('Gift'),
                        _toBJDate: self.toBJDate,
                    });
                    self.giftMask.show();
                });

            },
            alertTips: null,
            createAlertTips: function () {
                var self = this;
                if (!this.alertTips) {
                    this.alertTips = new UIAlert({
                        datamodel: {
                            content: "抱歉,当天房型已售罄",
                        }
                    });
                }
                this.alertTips.show();
                this.alertTips = null;
            },
            getQueryParam: function (page, suffix, date) {
                var flux = 'FluxEntrance=' + this.FluxEntrance;//引流参数
                var sdpid = Lizard.P('sdpid');//sdpid
                var IsMultipleSegment = this.data.JourneysInfo.IsMultipleSegment || false;//多行程段
                var from = window.location.protocol + "//" + window.location.hostname + window.location.pathname + window.location.search;//兼容
                var url = '', callendarStore = null;
                page = page || 'pricecalendar';
                suffix = suffix || '';
                url = page + '/' + sdpid + suffix + '?' + 'iszhoumoyou=1' + "&nights=" + this.getSdpNights() + '&IsMultipleSegment=' + IsMultipleSegment + '&FluxEntrance=' + this.FluxEntrance;
                if (page == 'detail') {
                    url += '&date=' + date;
                } else if (this.data.SDPInfo.CalenderDaysNum) {
                    url += '&days=' + this.data.SDPInfo.CalenderDaysNum;
                }
                return url;
            },
            goToBookingPage: function () {

                //var obj = {
                //    "from": { "cityname": this.getQuery('city'), "cityid": this.getQuery('cityid') },
                //    "to": { "cityname": this.data.SDPInfo.CityName, "cityid": this.data.SDPInfo.CityId },
                //    "productid": this.getQuery('sdpid'),
                //    "starttime": UtilCommon.Date.format(new Date(this.data.SDPInfo.SdpDate.match(/\d+/)[0] - 0), 'Y-m-d') || '',
                //    "star": this.data.JourneysInfo.SHXJourneyInfoV6_5[0].SHXHotelInfos.Star,
                //    "keywords": "",
                //    "page_id": isInApp ? this.hpageid : this.pageid,
                //};
                //var trackLogKey = isInApp ? 'diyshx_detail_app_basic' : 'diyshx_detail_h5_basic';
                //this.setTrackLog(obj, trackLogKey);

                //this.addToHistoryList();
                var url = this.getQueryParam();
                this.forward(url);
            },
            getSdpDate: function () {
                var sdpdate = this.data.SDPInfo.SdpDate;
                sdpdate = this.toBJDate(sdpdate);
                sdpdate = new Date(sdpdate);
                var checkoutdate = new Date(sdpdate).setDate(sdpdate.getDate() + 1);
                checkoutdate = new Date(checkoutdate);
                return {
                    checkIn: _.dateUtil.format(sdpdate, 'Y-M-D'),
                    checkOut: _.dateUtil.format(checkoutdate, 'Y-M-D')
                }
            },
            goToSinglePages: function (e) {
                e.preventDefault();
                var $cur = $(e.currentTarget);
                var $siblings = '';
                var $url = {
                    h5: $cur.data('h5'),
                    hybird: $cur.data('hybird')
                };
                var from = window.location.protocol + "//" + window.location.hostname + window.location.pathname + window.location.search;//兼容
                if ($cur.data('type') == 1) {//单订酒店的开关
                    $siblings = $cur.siblings('.zby_dptitle');
                    if ($siblings.data('hotelcalendar') == true) {
                        this.forward(this.getQueryParam()); return;
                    }
                    //else { this.forward(this.getQueryParam('detail', '.html')); return; }
                    $url.h5 = $url.h5.indexOf('?') > -1 ? $url.h5 + '&' : $url.h5 + '?';//days=1
                    $url.hybird = $url.hybird.indexOf('?') > -1 ? $url.hybird + '&' : $url.hybird + '?';

                    if ($siblings.data('hoteldetail') == true) {
                        //客栈,h5url暂无
                    } else {
                        //酒店
                        $url.h5 += 'atime=' + this.getSdpDate().checkIn.replace(/\-/g, '');
                    }
                    $url.hybird += 'checkInDate=' + this.getSdpDate().checkIn.replace(/\-/g, '') + '&checkOutDate=' + this.getSdpDate().checkOut.replace(/\-/g, '');
                    $url.hybird = 'ctrip://wireless' + $url.hybird;
                }
                $url.h5 += ($url.h5.indexOf('?') > -1 ? '&' : '?') + 'from=' + from;
                !isInApp ? ($url.h5 && Lizard.jump($url.h5)) : ($url.hybird && Lizard.jump($url.hybird, { targetModel: 4 }));
            },
            callendarStore: DiyshxStore.PriceCallendarStore.getInstance(),
            validFromView: function () {
                var refer = {
                    "fromUrl": this.getQuery("from"),
                    "fromView": this.fromView,
                    "fromApp": this.getQuery("from_native_page")
                };
                //this.sdpTypeStore.setAttr('switchTab', false);
                if (!refer.fromUrl && !refer.fromView) return;
                this.callendarStore.setAttr("refer", refer);
            },
            //套餐类型
            sdpTypeStore: DiyshxStore.DetailSdpTypeStore.getInstance(),
            matchSdpType: function (sdpid) {
                //先sdpid是不是mastersdpid
                var mastersdp = this.getMasterSdp();
                if (mastersdp) {
                    sdpid = mastersdp.SdpId;
                    this.sdpTypeStore.setAttr('MasterSdp', mastersdp);
                }
                var SdpType = this.sdpTypeStore.getAttr('SdpType');
                var matchItem = _.find(SdpType, function (item) { return item.SdpId == sdpid });
                return matchItem ? true : false;
            },
            getMasterSdp: function () {
                var sdp = _.find(this.data.SDPInfo.ExtendSdps, function (item) { return item.IsMasterSdp == true; });
                if (!sdp) {
                    sdp = this.sdpTypeStore.getAttr('MasterSdp');
                }
                return sdp;
            },
            //哈哈,产品新加的需求
            orderSearch: function (date, successfn, errorfn) {
                var ordersearch = DiyshxModel.NecessaryOrderSearch.getInstance();
                var opts = {
                    sdpId: this.getQuery('sdpid'),
                    saleChannel: 0,//1团购,0非团购
                    checkinDate: date,//入住日期
                    isMultipleSegment: this.data.JourneysInfo.IsMultipleSegment || false,
                    AutomaticDateType: 0,
                    ServerVersion: 6915
                }
                opts.SelectedTripTimeList = (this.getSegmentNightsList(opts.checkinDate)).dates;
                ordersearch.param = opts;
                ordersearch.excute(function (data) {
                    if (data.SHXHotelInfo && data.SHXHotelInfo.length) {
                        successfn();
                    } else {
                        errorfn();
                    }
                }, function (data) {
                    errorfn();
                }, true, this);
            },
            getSdpNights: function () {
                return this.data.SDPInfo.Nights.match(/天(\d)/)[1] || 1;
            },
            getSegmentNightsList: function (checkindate) {
                var nightslist = this.data.JourneysInfo.SHXJourneyInfoV6_5;
                var list = {}, checkin, checkout;
                list.dates = []; list.night = [];
                _.each(nightslist, function (item) {
                    console.log(checkin, checkout);
                    checkin = item.SegmentNo == 1 ? checkindate : checkout;
                    checkout = new Date(checkin);
                    checkout = new Date(checkout).setDate(checkout.getDate() + item.SegmentNights);
                    checkout = new Date(checkout);
                    checkout = _.dateUtil.format(checkout, 'Y/M/D');
                    list.dates.push({
                        StartDate: checkin.replace(/\//g, '-'),
                        EndDate: checkout.replace(/\//g, '-')
                    });
                    list.night.push(item.SegmentNights);
                });
                return list;
            },
            _couponStatus: false,
            showCouponInfo: function (e) {
                //var _status = false;
                var $cur = $(e.currentTarget);
                if (!this._couponStatus) {
                    $cur.removeClass('arrow_downward').addClass('arrow_upward');
                    this.$el.find('.js_zby_yhqbox').show();
                    this._couponStatus = true;
                } else {
                    this._couponStatus = false;
                    $cur.removeClass('arrow_upward').addClass('arrow_downward');
                    this.$el.find('.js_zby_yhqbox').hide();
                }
            },
            getSdpTypeName: function (sdpid) {
                var sdptype = _.find(this.data.SDPInfo.SdpType, function (item) { return item.SdpId == sdpid });
                return sdptype ? sdptype.TypeName : '';
            },
            addProductIcons: function () {
                if (!this.imageSlider) { return; }
                var root = this.imageSlider.root;
                root.after('<div class="product_label"><dl id="sale_deals_tag"></dl></div>');
                var iconContainer = this.$el.find('#sale_deals_tag');
                if ((this.data.SDPInfo.Icons & 128) == 128) {
                    this.$imageslider.append('<i class="detail_wrzj" style="z-index:200"></i>');
                }
                if ((this.data.SDPInfo.Icons & 256) == 256) {
                    this.$imageslider.append('<i class="detail_crazythr" style="z-index: 200"></i>');
                }
                if ((this.data.SDPInfo.Icons & 32) == 32) {
                    iconContainer.append('<dd class="s_label sale_deals_yellow">11.11</dd>');
                }
                if ((this.data.SDPInfo.Icons & 64) == 64) {
                    iconContainer.append('<dd class="s_label sale_deals_chinared">12.12</dd>');
                }
                if ((this.data.SDPInfo.Icons & 8) == 8) {
                    iconContainer.append('<dd class="s_label sale_deals_chinared">春节特卖</dd>');
                }
                if ((this.data.SDPInfo.Icons & 4) == 4) {
                    // iconContainer.append('<li class="sale_deals_icon_big">爱在杭州</li>');
                }
                if ((this.data.SDPInfo.Icons & 16) == 16) {
                    iconContainer.append('<dd class="s_label sale_deals_lightgreen">送100</dd>');
                }
                if ((this.data.SDPInfo.Icons & 512) == 512) {
                    iconContainer.append('<dd class="s_label sale_deals_lightgreen">超低价</dd>');
                }
                if (this.data.SDPInfo.IsDealsSinks == 1 && ((this.data.SDPInfo.Icons & 2) == 2)) {
                    iconContainer.append('<dd class="s_label sale_deals_deepred">特卖汇</dd>');
                    this.$el.find('.js_countdown_hidden').hide();
                    this.countDownProducts();
                }
            },
            countDownProducts: function () {
                var _time = this.data.SDPInfo.PromotionTime;
                _time.StartTime = _time.StartTime && this.toBJDate(_time.StartTime);
                _time.EndTime = _time.EndTime && this.toBJDate(_time.EndTime);
                _time.node = this.$el.find('.js_zby_Countdown');
                _time.Invalid = this.data.SDPInfo.Invalid;
                _time.node.data('start', _time.StartTime).data('end', _time.EndTime);
                require(['CountDown'], function (CountDown) {
                    var t = new CountDown(_time);
                });
            },
            showPriceInfo: function () {
                var htmls = '<p style="text-align:left;">1.本起价是在最近24小时内,30天内双人出行共用一间房+包含游玩项目所测算的套餐价格。</p>'
                    + '<p style="text-align:left;">2.产品价格会根据您所选择的出发日期、出行人数及套餐内容不同而有所差别,此价格不含附加服务的费用(如单人房差、保险费等)。</p>';
                this.showMessage({
                    datamodel: {
                        title: '起价说明',
                        content: htmls
                    }
                });
            },
            formatDataStar: function (val) {
                var score, star, match;
                score = val.toFixed(2);
                //重新计算分数:4.1-4.4分显示 4星半,4.5-5.0分显示 5星,如小数部分有第二位,则向前进1,如:4.51 取4.6
                var regExp = /(\d+)\.(\d)(\d*)/;
                var match = score.match(regExp);
                if (match[3] > 0) {
                    match[2]++;
                }
                if (match[2] != 0) {
                    score = match[1] + '.' + match[2];
                } else {
                    score = match[1];
                }
                if (match[2] > 4) {
                    match[1]++;
                } else if (match[2] > 0) {
                    match[1] += '.5';
                }
                return match[1] / 10 * 100;
            },
            //fix bug miss fluxentrance when back from detail
            setPageParam: function () {
                var param = '';
                if (!isInApp) {
                    param = window.location.search;
                } else {
                    param = window.location.hash;
                    param = decodeURIComponent(param);
                    if (param.indexOf('?') > -1) {
                        param = '?' + param.split('?')[1];
                    } else {
                        param = '';
                    }
                }
                this.commonStore.setDetailnearbyPageParam('detailnearby/'+Lizard.P('sdpid')+'.html'+param);
            },
            setDetailHistory: function () {
                if (Lizard.isHybrid) {
                    var bizType = "Weekend",
                        productId = Lizard.P('sdpid') || 0,
                        params = {
                            "bizType": bizType,
                            "productId": productId,
                        };
                    CtripBusiness.app_do_business_job(1, "setupHistoryWidget", params, 1111111);
                    // app.callback = function (obj) {
                    //     if (obj.tagname == "do_business_job") {
                    //         if (obj.param.historyInfo) {
                    //             var datas = JSON.parse(obj.param.historyInfo);
                    //             window.location.href = datas.detailURL;
                    //         }
                    //     }
                    // }
                }
            },
        });

        return View;
    });

  

posted on 2016-09-23 09:55  西湖浪子  阅读(277)  评论(0)    收藏  举报