123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658 |
- 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: {
- 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, //用户是否获取了保存相册的权限
- },
- // 页面分享
- onShareAppMessage: function() {
- let that = this;
- return {
- title: that.data.goods.name,
- desc: '唯爱与美食不可辜负',
- path: '/pages/index/index?goodId=' + this.data.id
- }
- },
- shareFriendOrCircle: function() {
- //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.downloadFile({
- url: that.data.shareImage,
- success: function(res) {
- console.log(res)
- wx.saveImageToPhotosAlbum({
- filePath: res.tempFilePath,
- success: function(res) {
- wx.showModal({
- title: '生成海报成功',
- content: '海报已成功保存到相册,可以分享到朋友圈了',
- showCancel: false,
- confirmText: '好的',
- confirmColor: '#a78845',
- success: function(res) {
- if (res.confirm) {
- console.log('用户点击确定');
- }
- }
- })
- },
- fail: function(res) {
- console.log('fail')
- }
- })
- },
- fail: function() {
- console.log('fail')
- }
- })
- },
- //从分享的团购进入
- 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();
- }
- });
- },
- // 获取商品信息
- getGoodsInfo: function() {
- let that = this;
- util.request(api.GoodsDetail, {
- id: that.data.id
- }).then(function(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
- // 如果仅仅存在一种货品,那么商品价格应该和货品价格一致
- // 这里检测一下
- 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,
- });
- }
- }
- 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,
- userHasCollect: res.data.userHasCollect,
- shareImage: res.data.shareImage,
- checkedSpecPrice: res.data.info.retailPrice,
- groupon: res.data.groupon,
- canShare: res.data.share,
- });
- //如果是通过分享的团购参加团购,则团购项目应该与分享的一致并且不可更改
- 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
- }).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) {
- // 页面初始化 options为页面跳转所带来的参数
- if (options.id) {
- this.setData({
- id: parseInt(options.id)
- });
- this.getGoodsInfo();
- }
- if (options.grouponId) {
- this.setData({
- isGroupon: true,
- });
- this.getGrouponInfo(options.grouponId);
- }
- 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() {
- // 页面显示
- var that = this;
- util.request(api.CartGoodsCount).then(function(res) {
- if (res.errno === 0) {
- that.setData({
- cartGoodsCount: res.data
- });
- }
- });
- },
- //添加或是取消收藏
- 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;
- 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
- }, "POST")
- .then(function(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);
- wx.navigateTo({
- url: '/pages/checkout/checkout'
- })
- } catch (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
- });
- 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() {
- 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/cart/cart'
- });
- },
- onReady: function() {
- // 页面渲染完成
- }
- })
|