// 商品详情业务 import htmlParser from '@/common/js/html-parser'; export default { data() { return { skuId: 0, goodsId: 0, // 商品详情 goodsSkuDetail: { goods_id: 0, goods_service: [] }, preview: 0, //是否开启预览,0:不开启,1:开启 token: "", //评价 contactData: { title: '', path: '', img: '' }, shareQuery: '', // 分享参数 shareUrl: '', // 分享链接 source_member: 0, //分享人的id chatRoomParams: {}, // 联系客服参数 isIphoneX: false, //判断手机是否是iphoneX以上 // cartCount: 0, // 购物车商品数量 whetherCollection: 0, memberId: 0, posterParams: {}, //海报所需参数 shareImg: '', globalS: { title: '', topNavColor: "#ffffff", topNavBg: false, navBarSwitch: true, // 导航栏是否显示 textNavColor: "#333333", moreLink: { name: "" }, navStyle: 1, bgUrl: '', }, } }, onLoad(data) { this.preview = data.preview || 0; this.token = uni.getStorageSync('token'); this.isIphoneX = this.$util.uniappIsIPhoneX(); if (data.source_member) { uni.setStorageSync('source_member', data.source_member); this.source_member = data.source_member; } //记录分享关系 if (this.token && uni.getStorageSync('source_member')) { this.$util.onSourceMember(uni.getStorageSync('source_member')); } // 小程序扫码进入 if (data.scene) { var sceneParams = decodeURIComponent(data.scene); sceneParams = sceneParams.split('&'); if (sceneParams.length) { sceneParams.forEach(item => { if (item.indexOf('m') != -1) uni.setStorageSync('source_member', item.split('-')[1]); if (item.indexOf('is_test') != -1) uni.setStorageSync('is_test', 1); }); } } }, computed: { cartCount() { return this.$store.state.cartNumber; }, }, onShow() { if (this.token) { this.getCartCount(); this.$util.getMemberId().then(resolve => { this.memberId = resolve; }); } }, watch: { memberId: function() { if (this.goodsSkuDetail.goods_id) this.setPublicShare(); } }, methods: { // 处理商品详情数据 handleGoodsSkuData() { this.$langConfig.title(this.goodsSkuDetail.goods_name); this.globalS.title = this.goodsSkuDetail.goods_name; if (this.goodsSkuDetail.config) { this.globalS.navBarSwitch = this.goodsSkuDetail.config.nav_bar_switch; } this.modifyGoodsInfo(); this.getWhetherCollection(); // 初始化商品详情视图数据 this.$refs.goodsDetailView.init({ sku_id: this.skuId, goods_id: this.goodsSkuDetail.goods_id, preview: this.preview, source_member: this.source_member, posterParams: this.posterParams, posterApi: this.posterApi, shareUrl: this.shareUrl, memberId: this.memberId, goodsRoute: this.goodsRoute, isVirtual:this.goodsSkuDetail.is_virtual }); //媒体 if (this.goodsSkuDetail.video_url) this.switchMedia = "video"; if (!Array.isArray(this.goodsSkuDetail.sku_images)) { if (this.goodsSkuDetail.sku_images) this.goodsSkuDetail.sku_images = this.goodsSkuDetail.sku_images .split(","); else this.goodsSkuDetail.sku_images = []; } // 多规格时合并主图 if (this.goodsSkuDetail.goods_spec_format && this.goodsSkuDetail.goods_image) { if (!Array.isArray(this.goodsSkuDetail.goods_image)) this.goodsSkuDetail.goods_image = this .goodsSkuDetail.goods_image.split(","); this.goodsSkuDetail.sku_images = this.goodsSkuDetail .goods_image.concat(this.goodsSkuDetail.sku_images); } let maxHeight = ''; this.goodsSkuDetail.goods_image_list.forEach((item, index) => { if (typeof item.pic_spec == "string") item.pic_spec = item.pic_spec.split('*'); uni.getSystemInfo({ success: (res) => { let ratio = item.pic_spec[0] / res.windowWidth; item.pic_spec[0] = item.pic_spec[0] / ratio; item.pic_spec[1] = item.pic_spec[1] / ratio; } }); if (!maxHeight || maxHeight < item.pic_spec[1]) { maxHeight = item.pic_spec[1]; } }) this.goodsSkuDetail.swiperHeight = maxHeight + 'px'; this.goodsSkuDetail.unit = this.goodsSkuDetail.unit || "件"; // 当前商品SKU规格 if (this.goodsSkuDetail.sku_spec_format) this.goodsSkuDetail.sku_spec_format = JSON.parse(this .goodsSkuDetail.sku_spec_format); // 商品属性 if (this.goodsSkuDetail.goods_attr_format) { let goods_attr_format = JSON.parse(this.goodsSkuDetail.goods_attr_format); this.goodsSkuDetail.goods_attr_format = this.$util.unique(goods_attr_format, "attr_id"); for (var i = 0; i < this.goodsSkuDetail.goods_attr_format.length; i++) { for (var j = 0; j < goods_attr_format.length; j++) { if (this.goodsSkuDetail.goods_attr_format[i].attr_id == goods_attr_format[j].attr_id && this.goodsSkuDetail.goods_attr_format[ i].attr_value_id != goods_attr_format[j].attr_value_id) { this.goodsSkuDetail.goods_attr_format[i].attr_value_name += "、" + goods_attr_format[ j].attr_value_name; } } } } // 商品SKU格式 if (this.goodsSkuDetail.goods_spec_format) this.goodsSkuDetail.goods_spec_format = JSON.parse(this .goodsSkuDetail.goods_spec_format); // 商品详情 if (this.goodsSkuDetail.goods_content) this.goodsSkuDetail.goods_content = htmlParser(this .goodsSkuDetail.goods_content); //商品服务 if (this.goodsSkuDetail.goods_service) { for (let i in this.goodsSkuDetail.goods_service) { this.goodsSkuDetail.goods_service[i]['icon'] = this.goodsSkuDetail.goods_service[i]['icon'] ? JSON .parse(this.goodsSkuDetail.goods_service[i]['icon']) : ''; } } this.contactData = { title: this.goodsSkuDetail.sku_name, path: this.shareUrl, img: this.$util.img(this.goodsSkuDetail.sku_image, { size: 'big' }) } if (this.$refs.goodsPromotion) this.$refs.goodsPromotion.refresh(this.goodsSkuDetail .goods_promotion); if (this.goodsRoute != '/pages/goods/detail') this.setPublicShare(); this.getBarrageData(); this.getGoodsForm(); }, /** * 刷新商品详情数据 * @param {Object} goodsSkuDetail */ refreshGoodsSkuDetail(data) { this.goodsSkuDetail = Object.assign({}, this.goodsSkuDetail, data); if (this.$refs.goodsPromotion) this.$refs.goodsPromotion.refresh(this.goodsSkuDetail.goods_promotion); if (this.$refs.goodsDetailView) { // 初始化商品详情视图数据 this.goodsSkuDetail.unit = this.goodsSkuDetail.unit || "件"; // 解决轮播图数量不一致时,切换到第一个 if (this.swiperCurrent > this.goodsSkuDetail.sku_images.length) { this.swiperAutoplay = true; this.swiperCurrent = 1; setTimeout(() => { this.swiperAutoplay = false; }, 40); } } this.$langConfig.title(this.goodsSkuDetail.sku_name); if (typeof this.getMemberCardInfo == 'function') this.getMemberCardInfo(); }, goodsDetailViewInit() { // 初始化商品详情视图数据 this.$refs.goodsDetailView.init({ sku_id: this.skuId, goods_id: this.goodsSkuDetail.goods_id, preview: this.preview, source_member: this.source_member, posterParams: this.posterParams, posterApi: this.posterApi, shareUrl: this.shareUrl, memberId: this.memberId, goodsRoute: this.goodsRoute }); }, goHome() { if (this.preview) return; // 开启预览,禁止任何操作和跳转 this.$util.redirectTo('/pages/index/index'); }, goCart() { if (this.preview) return; // 开启预览,禁止任何操作和跳转 this.$util.redirectTo('/pages/goods/cart'); }, //获取购物车数量 getCartCount() { this.$store.dispatch('getCartNumber'); }, //-------------------------------------关注------------------------------------- //更新商品信息 modifyGoodsInfo() { if (this.preview) return; // 开启预览,禁止任何操作和跳转 //更新商品点击量 this.$api.sendRequest({ url: "/api/goods/modifyclicks", data: { sku_id: this.skuId }, success: res => {} }); //添加足迹 this.$api.sendRequest({ url: "/api/goodsbrowse/add", data: { goods_id: this.goodsSkuDetail.goods_id, sku_id: this.skuId }, success: res => {} }); }, //-------------------------------------关注------------------------------------- //获取用户是否关注 getWhetherCollection() { this.$api.sendRequest({ url: "/api/goodscollect/iscollect", data: { goods_id: this.goodsSkuDetail.goods_id }, success: res => { this.whetherCollection = res.data; } }); }, editCollection() { if (this.$refs.goodsDetailView) { this.whetherCollection = this.$refs.goodsDetailView.collection(); } }, openSharePopup() { if (this.$refs.goodsDetailView) { this.$refs.goodsDetailView.openSharePopup(); } }, getMemberId() { this.$api.sendRequest({ url: "/api/member/id", success: res => { if (res.code >= 0) { this.memberId = res.data; } } }); }, //弹幕 getBarrageData() { this.$api.sendRequest({ url: '/api/goods/goodsbarrage', data: { goods_id: this.goodsSkuDetail.goods_id }, success: res => { if (res.code == 0 && res.data) { let barrageData = []; for (let i in res.data.list) { if (res.data.list[i]['title']) { let title = res.data.list[i]['title'].substr(0, 1) + '*' + res.data.list[i][ 'title' ].substr(res.data.list[i]['title'].length - 1, 1) barrageData.push({ 'img': res.data.list[i]['img'] ? res.data.list[i]['img'] : this .$util.getDefaultImage().head, 'title': title + '已下单' }); } } this.goodsSkuDetail.barrageData = barrageData; } } }); }, /** * 设置公众号分享 */ setPublicShare() { let shareUrl = this.$config.h5Domain + this.shareUrl; if (this.memberId) shareUrl += '&source_member=' + this.memberId; this.$util.setPublicShare({ title: this.goodsSkuDetail.goods_name, desc: '', link: shareUrl, imgUrl: typeof this.goodsSkuDetail.goods_image == 'object' ? this.goodsSkuDetail.goods_image[ 0] : this.goodsSkuDetail.goods_image.split(',')[0] }) }, /** * 获取商品表单 */ getGoodsForm() { this.$api.sendRequest({ url: "/form/api/form/goodsform", data: { goods_id: this.goodsSkuDetail.goods_id }, success: res => { if (res.code == 0 && res.data) this.$set(this.goodsSkuDetail, 'goods_form', res.data); } }); } }, /** * 自定义分享内容 * @param {Object} res */ onShareAppMessage(res) { var path = this.shareUrl; if (this.memberId) path += '&source_member=' + this.memberId; return { title: this.goodsSkuDetail.sku_name, imageUrl: this.shareImg ? this.$util.img(this.shareImg) : this.$util.img(this.goodsSkuDetail.sku_image, { size: 'big' }), path: path, success: res => {}, fail: res => {} }; }, // 分享到微信朋友圈 // #ifdef MP-WEIXIN onShareTimeline() { let query = this.shareQuery; if (this.memberId) query += '&source_member=' + this.memberId; return { title: this.goodsSkuDetail.sku_name, query: query, imageUrl: this.$util.img(this.goodsSkuDetail.sku_image, { size: 'big' }) }; } // #endif }