var app = getApp(); var WxParse = require('../../lib/wxParse/wxParse.js'); var util = require('../../utils/util.js'); var api = require('../../config/api.js'); var user = require('../../utils/user.js'); Page({ data: { selfPayShow: false, selfPayCheck: false, spreadPayShow: false, spreadPayChecked: false, canShare: false, id: 0, goods: {}, groupon: [], //该商品支持的团购规格 grouponLink: {}, //参与的团购 attribute: [], issueList: [], comment: [], //brand: {}, specificationList: [], productList: [], relatedGoods: [], cartGoodsCount: 0, userHasCollect: 0, number: 1, checkedSpecText: '规格数量选择', tmpSpecText: '请选择规格数量', checkedSpecPrice: 0, openAttr: false, openShare: false, collect: false, shareImage: '', isGroupon: false, //标识是否是一个参团购买 soldout: false, canWrite: false, //用户是否获取了保存相册的权限 name_height: 58, //根据名称长度 设置高度 userInfo: {}, hasLogin: false, shareId: 0, //options传递过来的参数 表示是打开哪个分享 wxShareId: 0, //如果要分享此商品的分享id addressInfo: {}, rId: 0, //分享人id, selfDiscount: 0, spreadDiscount: 0, referee: { self: 0, share: 0, }, myqr_show: false, //我的分享二维码 myqr_url: null, //分享海报及推广语言 myqr_ads: '', myqr_blur: 100, //背景模糊值 myqr_bottom_btn: 'fixed' //底部功能按钮 }, // 页面分享 onShareAppMessage: function () { let that = this; if (!app.globalData.hasLogin) { wx.navigateTo({ url: "/pages/auth/login/login" }); return; } //获取分享id 用来追踪链接 //引荐人和非引荐人的 链接不同 let imgUrl = that.data.goods.shareWxUrl ? that.data.goods.shareWxUrl : that.data.goods.gallery[0]; var path = '/pages/goods/goods?id=' + that.data.id + '&rId=' + that.data.userInfo.id; if (that.data.userInfo.isDis) { //是引荐人 path = '/pages/goods/goods?id=' + that.data.id + '&shareId=' + that.data.wxShareId; } this.hidePoster(); return { title: that.data.goods.name + "\n" + that.data.myqr_ads, path: path, imageUrl: imgUrl } }, shareFriendOrCircle: function () { if (!app.globalData.hasLogin) { wx.navigateTo({ url: "/pages/auth/login/login" }); return; } //分享 弹出图片 let that = this; wx.removeStorageSync(String(that.data.goods.id)); //取出本地缓存中的分享图 // let sUrl=wx.getStorageSync(String(that.data.goods.id)); // if(sUrl!=null&&sUrl!=""){//获取过的分享图 不需要再次获取 // that.setData({ // myqr_url:sUrl, // myqr_show:true, // myqr_blur:5 // }); // return; // } wx.showLoading({ title: '生成中', }); util.request(api.QrGoodsCodeCreate, { goodsId: that.data.goods.id }).then(function (res) { wx.hideLoading(); if (res.errno == 0) { that.setData({ myqr_url: res.data.imgUrl, myqr_show: true, myqr_blur: 5 }); //保存分享图url到本地缓存 // wx.setStorageSync(String(that.data.goods.id),res.data.imgUrl); } else if (res.errno == 501) { wx.navigateTo({ url: "/pages/auth/login/login" }); } else { wx.showToast({ title: res.errmsg, duration: 5000 }) } }); //var that = this; /*if (this.data.openShare === false) { this.setData({ openShare: !this.data.openShare }); } else { return false; }*/ }, handleSetting: function (e) { var that = this; // console.log(e) if (!e.detail.authSetting['scope.writePhotosAlbum']) { wx.showModal({ title: '警告', content: '不授权无法保存', showCancel: false }) that.setData({ canWrite: false }) } else { wx.showToast({ title: '保存成功' }) that.setData({ canWrite: true }) } }, // 保存分享图 saveShare: function () { let that = this; wx.showLoading({ title: '图片保存中', }); console.log(that.data); wx.downloadFile({ url: that.data.myqr_url, success: function (res) { console.log(res) wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function (res) { wx.hideLoading(); wx.showModal({ title: '存图成功', content: '图片成功保存到相册了,可以分享到朋友圈了', showCancel: false, confirmText: '好的', confirmColor: '#a78845', success: function (res) { if (res.confirm) { console.log('用户点击确定'); that.setData({ myqr_show: false, myqr_blur: 0 }); } } }) }, fail: function (res) { wx.hideLoading(); wx.showModal({ title: '警告', content: '不授权无法保存', showCancel: false }) that.setData({ myqr_show: false, myqr_blur: 0 }); } }) }, fail: function (res) { wx.hideLoading(); console.log(res); } }) }, //从分享的团购进入 getGrouponInfo: function (grouponId) { let that = this; util.request(api.GroupOnJoin, { grouponId: grouponId }).then(function (res) { if (res.errno === 0) { that.setData({ grouponLink: res.data.groupon, id: res.data.goods.id }); //获取商品详情 that.getGoodsInfo(); } }); }, getReferee: function () { let that = this; util.request(api.GoodsDetail, { id: that.data.id, rId: that.data.rId }).then(res => { if (res.errno === 0) { if (res.data.referee.self != null && res.data.referee.self > 0) { res.data.referee.self = res.data.referee.self.toFixed(2); res.data.referee.share = res.data.referee.share.toFixed(2); } that.setData({ referee: res.data.referee }); console.info(res.data.referee) if (JSON.stringify(res.data.referee) == "{}") { that.setData({ referee: { self: 0, share: 0, isReferee: false } }); } //是引荐人 更新userinfo数据(因为如果后台将客户标记为引荐人 此userinfo是取缓存数据 不会更新状态) if (that.data.referee != null && that.data.referee.isReferee) { let userInfo = that.data.userInfo; userInfo.isDis = true; that.setData({ userInfo: userInfo }) wx.setStorageSync('userInfo', userInfo); } } }); }, // 获取商品信息 getGoodsInfo: function () { console.info('1-》getGoodsInfo start'); let that = this; util.request(api.GoodsDetail, { id: that.data.id, rId: that.data.rId }).then(function (res) { console.info('2-》getGoodsInfo end'); console.info(res); if (res.errno === 0) { let _specificationList = res.data.specificationList // 如果仅仅存在一种货品,那么商品页面初始化时默认checked if (_specificationList.length == 1) { if (_specificationList[0].valueList.length == 1) { _specificationList[0].valueList[0].checked = true console.info(res.data.info); // 如果仅仅存在一种货品,那么商品价格应该和货品价格一致 // 这里检测一下 let _productPrice = res.data.productList[0].price; let _goodsPrice = res.data.info.retailPrice; if (_productPrice != _goodsPrice) { console.error('商品数量价格和货品不一致'); } that.setData({ checkedSpecText: _specificationList[0].valueList[0].value, tmpSpecText: '已选择:' + _specificationList[0].valueList[0].value, }); } } console.info('3-》getGoodsInfo count end'); //设置显示名称的控件高度 let height = 56; if (res.data.info.name.length > 17 & res.data.info.name.length < 36) height = 76; else if (res.data.info.name.length >= 36) height = 116; // console.info(res.data.share); that.setData({ goods: res.data.info, attribute: res.data.attribute, issueList: res.data.issue, comment: res.data.comment, //brand: res.data.brand, specificationList: res.data.specificationList, productList: res.data.productList, //productList: res.data.info.products, userHasCollect: res.data.userHasCollect, shareImage: res.data.shareImage, checkedSpecPrice: res.data.info.retailPrice, canShare: res.data.share, name_height: height, wxShareId: res.data.shareId }); //如果是通过分享的团购参加团购,则团购项目应该与分享的一致并且不可更改 /* if (that.data.isGroupon) { let groupons = that.data.groupon; for (var i = 0; i < groupons.length; i++) { if (groupons[i].id != that.data.grouponLink.rulesId) { groupons.splice(i, 1); } } groupons[0].checked = true; //重设团购规格 that.setData({ groupon: groupons }); }*/ if (res.data.userHasCollect == 1) { that.setData({ collect: true }); } else { that.setData({ collect: false }); } WxParse.wxParse('goodsDetail', 'html', res.data.info.detail, that); //获取推荐商品 that.getGoodsRelated(); } }); }, // 获取推荐商品 getGoodsRelated: function () { let that = this; util.request(api.GoodsRelated, { id: that.data.id, shopId: this.data.addressInfo.shopId }).then(function (res) { if (res.errno === 0) { that.setData({ relatedGoods: res.data.list, }); } }); }, // 团购选择 clickGroupon: function (event) { let that = this; //参与团购,不可更改选择 if (that.data.isGroupon) { return; } let specName = event.currentTarget.dataset.name; let specValueId = event.currentTarget.dataset.valueId; let _grouponList = this.data.groupon; for (let i = 0; i < _grouponList.length; i++) { if (_grouponList[i].id == specValueId) { if (_grouponList[i].checked) { _grouponList[i].checked = false; } else { _grouponList[i].checked = true; } } else { _grouponList[i].checked = false; } } this.setData({ groupon: _grouponList, }); }, // 规格选择 clickSkuValue: function (event) { let that = this; let specName = event.currentTarget.dataset.name; let specValueId = event.currentTarget.dataset.valueId; //判断是否可以点击 //TODO 性能优化,可在wx:for中添加index,可以直接获取点击的属性名和属性值,不用循环 let _specificationList = this.data.specificationList; for (let i = 0; i < _specificationList.length; i++) { if (_specificationList[i].name === specName) { for (let j = 0; j < _specificationList[i].valueList.length; j++) { if (_specificationList[i].valueList[j].id == specValueId) { //如果已经选中,则反选 if (_specificationList[i].valueList[j].checked) { _specificationList[i].valueList[j].checked = false; } else { _specificationList[i].valueList[j].checked = true; } } else { _specificationList[i].valueList[j].checked = false; } } } } this.setData({ specificationList: _specificationList, }); //重新计算spec改变后的信息 this.changeSpecInfo(); //重新计算哪些值不可以点击 }, //获取选中的团购信息 getCheckedGrouponValue: function () { let checkedValues = {}; let _grouponList = this.data.groupon; for (let i = 0; i < _grouponList.length; i++) { if (_grouponList[i].checked) { checkedValues = _grouponList[i]; } } return checkedValues; }, //获取选中的规格信息 getCheckedSpecValue: function () { let checkedValues = []; let _specificationList = this.data.specificationList; for (let i = 0; i < _specificationList.length; i++) { let _checkedObj = { name: _specificationList[i].name, valueId: 0, valueText: '' }; for (let j = 0; j < _specificationList[i].valueList.length; j++) { if (_specificationList[i].valueList[j].checked) { _checkedObj.valueId = _specificationList[i].valueList[j].id; _checkedObj.valueText = _specificationList[i].valueList[j].value; } } checkedValues.push(_checkedObj); } return checkedValues; }, //判断规格是否选择完整 isCheckedAllSpec: function () { return !this.getCheckedSpecValue().some(function (v) { if (v.valueId == 0) { return true; } }); }, getCheckedSpecKey: function () { let checkedValue = this.getCheckedSpecValue().map(function (v) { return v.valueText; }); return checkedValue; }, // 规格改变时,重新计算价格及显示信息 changeSpecInfo: function () { let checkedNameValue = this.getCheckedSpecValue(); //设置选择的信息 let checkedValue = checkedNameValue.filter(function (v) { if (v.valueId != 0) { return true; } else { return false; } }).map(function (v) { return v.valueText; }); if (checkedValue.length > 0) { this.setData({ tmpSpecText: checkedValue.join(' ') }); } else { this.setData({ tmpSpecText: '请选择规格数量' }); } if (this.isCheckedAllSpec()) { this.setData({ checkedSpecText: this.data.tmpSpecText }); // 规格所对应的货品选择以后 let checkedProductArray = this.getCheckedProductItem(this.getCheckedSpecKey()); if (!checkedProductArray || checkedProductArray.length <= 0) { this.setData({ soldout: true }); console.error('规格所对应货品不存在'); return; } let checkedProduct = checkedProductArray[0]; if (checkedProduct.number > 0) { this.setData({ checkedSpecPrice: checkedProduct.price, soldout: false }); } else { this.setData({ checkedSpecPrice: this.data.goods.retailPrice, soldout: true }); } } else { this.setData({ checkedSpecText: '规格数量选择', checkedSpecPrice: this.data.goods.retailPrice, soldout: false }); } }, // 获取选中的产品(根据规格) getCheckedProductItem: function (key) { return this.data.productList.filter(function (v) { if (v.specifications.toString() == key.toString()) { return true; } else { return false; } }); }, onLoad: function (options) { // if (app.globalData.hasLogin) { // let userInfo = wx.getStorageSync('userInfo'); // app.globalData.userInfo=userInfo; // this.setData({ // userInfo: userInfo, // hasLogin: true // }); // } // 页面初始化 options为页面跳转所带来的参数 var addressInfo = wx.getStorageSync('addressInfo'); if (addressInfo) { this.setData({ addressInfo: addressInfo }) } if (options.rId) { this.setData({ rId: parseInt(options.rId) }) } if (options.grouponId) { this.setData({ isGroupon: true, }); this.getGrouponInfo(options.grouponId); } if (options.shareId) { this.setData({ shareId: parseInt(options.shareId) }) } console.info(this.data.shareId) if (options.id) { this.setData({ id: parseInt(options.id) }); this.getGoodsInfo(); } // let that = this; // wx.getSetting({ // success: function (res) { // console.log(res) // //不存在相册授权 // if (!res.authSetting['scope.writePhotosAlbum']) { // wx.authorize({ // scope: 'scope.writePhotosAlbum', // success: function () { // that.setData({ // canWrite: true // }) // }, // fail: function (err) { // that.setData({ // canWrite: false // }) // } // }) // } else { // that.setData({ // canWrite: true // }); // } // } // }) }, onShow: function () { // 页面显示 if (app.globalData.hasLogin) { let userInfo = wx.getStorageSync('userInfo'); app.globalData.userInfo = userInfo; this.setData({ userInfo: userInfo, hasLogin: true }); } this.getReferee(); // 已登陆并且是引荐人展示自购推广 if (this.data.hasLogin && this.data.userInfo.isDis) { // this.setData({ // selfDiscount:0, // spreadDiscount:0, // }) } }, //添加或是取消收藏 addCollectOrNot: function () { let that = this; util.request(api.CollectAddOrDelete, { type: 0, valueId: this.data.id }, "POST") .then(function (res) { if (that.data.userHasCollect == 1) { that.setData({ collect: false, userHasCollect: 0 }); } else { that.setData({ collect: true, userHasCollect: 1 }); } }); }, //立即购买(先自动加入购物车) addFast: function () { var that = this; // 如果是安心包只能购买一个 console.log(this.data.goods); // 如果是中介类,跳转到信息收集页面 if (this.data.goods.type == 2) { app.globalData.infoGoods = { name: this.data.goods.name, brief: this.data.goods.brief, picUrl: this.data.goods.picUrl, type: this.data.goods.type }; wx.navigateTo({ url: '/pages/goods/infoCollect/infoCollect' }); return false; } // if (this.data.openAttr == false) { // //打开规格选择窗口 // this.setData({ // openAttr: !this.data.openAttr // }); // } else { //提示选择完整规格 if (!this.isCheckedAllSpec()) { util.showErrorToast('请选择完整规格'); return false; } //根据选中的规格,判断是否有对应的sku信息 let checkedProductArray = this.getCheckedProductItem(this.getCheckedSpecKey()); if (!checkedProductArray || checkedProductArray.length <= 0) { //找不到对应的product信息,提示没有库存 util.showErrorToast('没有库存'); return false; } let checkedProduct = checkedProductArray[0]; //验证库存 if (checkedProduct.number <= 0) { util.showErrorToast('没有库存'); return false; } //验证团购是否有效 let checkedGroupon = this.getCheckedGrouponValue(); //立即购买 util.request(api.CartFastAdd, { goodsId: this.data.goods.id, number: this.data.number, productId: checkedProduct.id, shareId: this.data.shareId }, "POST") .then(res => { if (res.errno == 0) { // 如果storage中设置了cartId,则是立即购买,否则是购物车购买 try { wx.setStorageSync('cartId', res.data); wx.setStorageSync('grouponRulesId', checkedGroupon.id); wx.setStorageSync('grouponLinkId', that.data.grouponLink.id); // 支付结果页面展示图片用 app.globalData.infoGoods = { name: this.data.goods.name, brief: this.data.goods.brief, picUrl: this.data.goods.picUrl, type: this.data.goods.type }; console.info(that.data.shareId) if (that.data.shareId > 0) wx.navigateTo({ url: '/pages/checkout/checkout?shareId=' + that.data.shareId }) else wx.navigateTo({ url: '/pages/checkout/checkout' }) } catch (e) { console.info(e) } } else { util.showErrorToast(res.errmsg); } }); //} }, //添加到购物车 addToCart: function () { var that = this; if (this.data.openAttr == false) { //打开规格选择窗口 this.setData({ openAttr: !this.data.openAttr }); } else { //提示选择完整规格 if (!this.isCheckedAllSpec()) { util.showErrorToast('请选择完整规格'); return false; } //根据选中的规格,判断是否有对应的sku信息 let checkedProductArray = this.getCheckedProductItem(this.getCheckedSpecKey()); if (!checkedProductArray || checkedProductArray.length <= 0) { //找不到对应的product信息,提示没有库存 util.showErrorToast('没有库存'); return false; } let checkedProduct = checkedProductArray[0]; //验证库存 if (checkedProduct.number <= 0) { util.showErrorToast('没有库存'); return false; } //添加到购物车 util.request(api.CartAdd, { goodsId: this.data.goods.id, number: this.data.number, productId: checkedProduct.id }, "POST") .then(function (res) { let _res = res; if (_res.errno == 0) { wx.showToast({ title: '添加成功' }); that.setData({ openAttr: !that.data.openAttr, cartGoodsCount: _res.data }); //显示tab购物车缓存 //user.cartadd(that.data.number); if (that.data.userHasCollect == 1) { that.setData({ collect: true }); } else { that.setData({ collect: false }); } } else { util.showErrorToast(_res.errmsg); } }); } }, cutNumber: function () { this.setData({ number: (this.data.number - 1 > 1) ? this.data.number - 1 : 1 }); }, addNumber: function () { // 如果是安心包只能购买一个 console.log(this.data.goods); if (this.data.goods.goodsSn == '1036016') { wx.showToast({ title: '此款商品只能购买一个', icon: 'none', duration: 2000 }); } else { this.setData({ number: this.data.number + 1 }); } }, onHide: function () { // 页面隐藏 }, onUnload: function () { // 页面关闭 }, switchAttrPop: function () { if (this.data.openAttr == false) { this.setData({ openAttr: !this.data.openAttr }); } }, closeAttr: function () { this.setData({ openAttr: false, }); }, closeShare: function () { this.setData({ openShare: false, }); }, openCartPage: function () { wx.switchTab({ url: '/pages/tabBar/cart/cart' }); }, onReady: function () { // 页面渲染完成 }, qrtouchstart: function () { this.setData({ myqr_blur: 100, myqr_show: false }); }, copyToHM() { let copyLink = this.data.goods.copyLink; console.log(copyLink); if (copyLink != undefined && copyLink != '') { wx.setClipboardData({ data: copyLink, success(res) { wx.getClipboardData({ success(res) { console.log(res.data) // data } }) } }); } else { wx.showToast({ title: '该商品暂未配置盒马链接', icon: 'none' }) } }, onSelfPayChange(e) { console.log(e); this.setData({ selfPayChecked: e.detail, }); }, onSpreadPayChange(e) { console.log(e); this.setData({ spreadPayChecked: e.detail, }); }, cancelSelfPay() { let selfPayChecked = this.data.selfPayChecked; if (selfPayChecked == true) { wx.setStorageSync('selfPayChecked', true); } this.setData({ selfPayShow: false, }); }, cancelSpreadPay() { let spreadPayChecked = this.data.spreadPayChecked; if (spreadPayChecked == true) { wx.setStorageSync('spreadPayChecked', true); } this.setData({ spreadPayShow: false, }); }, goSelfPay() { let selfPayChecked = wx.getStorageSync('selfPayChecked'); if (selfPayChecked != true) { this.setData({ selfPayShow: true, }); } else { this.addFast(); } }, goSpread() { let spreadPayChecked = wx.getStorageSync('spreadPayChecked'); console.log(spreadPayChecked); if (spreadPayChecked != true) { this.setData({ spreadPayShow: true, }); } else { // wx.navigateTo({ // url: '/pages/goods/goodsPoster/goodsPoster?goodsId='+this.data.goods.id, // }) this.createPoster(); } }, posterCopy() { let that = this wx.setClipboardData({ data: that.data.myqr_ads, success: function (res) { wx.getClipboardData({ success: function (res) { wx.showToast({ title: '文案复制成功', icon: 'success', duration: 2000 }); // that.hidePoster(); } }) } }) }, hidePoster() { this.setData({ myqr_show: false, myqr_blur: 100, myqr_bottom_btn: 'fixed' }) }, createPoster() { wx.showLoading({ title: '生成中', }) wx.pageScrollTo({ scrollTop: 0 }) if (this.data.myqr_url != null) { wx.hideLoading(); this.setData({ myqr_show: true, myqr_blur: 25, myqr_bottom_btn: 'unset' }) return; } util.request(api.QrGoodsCodeCreate, { goodsId: this.data.goods.id }).then(res => { wx.hideLoading(); if (res.errno == 0) { this.setData({ myqr_url: res.data.imgUrl, myqr_ads: res.data.ads, myqr_show: true, myqr_blur: 25, myqr_bottom_btn: 'unset' }) } else { util.showErrorToast("未设置分享图") } }); }, goSaveQrcode: function () { //保存二维码图片 let that = this; console.info(that.data.myqr_url); wx.downloadFile({ url: that.data.myqr_url, success: function (res) { if (res.statusCode === 200) { let img = res.tempFilePath; wx.saveImageToPhotosAlbum({ filePath: img, success(res) { that.goCloseMyqr('个人专属二维码图片已保存到您的相册'); }, fail(res) { that.goCloseMyqr('网络或授权问题 图片保存失败 请重试'); } }) } else that.goCloseMyqr('网络或授权问题 图片保存失败 请重试'); }, fail(res) { that.goCloseMyqr('网络或授权问题 图片保存失败 请重试'); } }) }, goCloseMyqr: function (msg) { //关闭分享图片的弹层 this.hidePoster(); if (msg) { wx.showToast({ title: msg, icon: 'none', duration: 3000 }) } }, reSelfPay() { let selfPayChecked = this.data.selfPayChecked; if (selfPayChecked == true) { wx.setStorageSync('selfPayChecked', true); } this.setData({ selfPayShow: false, }); this.addFast(); }, reSpread() { let spreadPayChecked = this.data.spreadPayChecked; if (spreadPayChecked == true) { wx.setStorageSync('spreadPayChecked', true); } this.setData({ spreadPayShow: false, }); this.createPoster(); // wx.navigateTo({ // url: '/pages/goods/goodsPoster/goodsPoster?goodsId='+this.data.goods.id, // }) }, goMemberCenter() { if (!app.globalData.hasLogin) { wx.navigateTo({ url: "/pages/auth/login/login" }); return; } else { wx.navigateTo({ url: "/pages/member/memberCenter/memberCenter" }); } }, })