var app = getApp(); var util = require('../../utils/util.js') var WXAPI = require('../../utils/server.js'); Page({ data: { page: 1, minusStatuses: ['disabled', 'disabled', 'normal', 'normal', 'disabled'], total: 0.0, carts: [], data: {}, skuBeanList: [], cont: 1, upstatus: false, remind: '加载中', productData: '', shop: '', shop_logo: '', showModalStatus: false, animationData: '', buynum: 1, attrList: [], sizeid: '', currentIndex: 0, itemData: {} }, //页面加载完成函数 remind: '加载中', onReady: function () { var that = this; }, //下拉刷新 onPullDownRefresh: function () { wx.showNavigationBarLoading() //在标题栏中显示加载 this.loadProductData(); this.sum(); wx.hideNavigationBarLoading() //完成停止加载 wx.stopPullDownRefresh() //停止下拉刷新 }, bindMinus: function (e) { var that = this; var index = parseInt(e.currentTarget.dataset.index); var num = that.data.carts[index].num; var cart_id = e.currentTarget.dataset.cartid; // 如果只有1件了,就不允许再减了 if (num > 1) { num--; } if (num < 1) { wx.showToast({ title: '数量不能小于1!', icon: 'none', duration: 2000 }); } else { //编辑商品信息 var productArr = [{num: num,cart_id: cart_id}] let jsonstr = JSON.stringify(productArr) WXAPI.productUpNum({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, goods: jsonstr }).then(res => { if (res.code == 200) { // util.getUesrBgplus(that, app, false) // 只有大于一件的时候,才能normal状态,否则disable状态 var minusStatus = num <= 1 ? 'disabled' : 'normal'; // 购物车数据 var carts = that.data.carts; carts[index].num = num; // 按钮可用状态 var minusStatuses = that.data.minusStatuses; minusStatuses[index] = minusStatus; // 将数值与状态写回 that.setData({ minusStatuses: minusStatuses }); that.sum(); } }); } }, //跳转首页 go_index: function () { wx.switchTab({ url: '../index/index' }) }, //清空购物车 delall: function () { var that = this; wx.showModal({ title: '提示', content: '你确认清空全部吗?', success: function (res) { if (res.confirm) { WXAPI.productDelAllCart({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, }).then(res => { if (res.code == 200) { wx.showToast({ title: '操作成功!', duration: 2500 }); that.loadProductData(); // util.getUesrBgplus(that, app, false) } else { wx.showToast({ title: '操作失败!', duration: 2000 }); } }); } }, fail: function () { // fail wx.showToast({ title: '网络异常!', duration: 2000 }); } }); }, //编辑完成 ok: function () { var that = this; that.setData({ upstatus: false }); }, //编辑购物车 updata: function () { var that = this; that.setData({ upstatus: true }); }, //删除 delarr: function () { var that = this; var selectArr = [] // 遍历取出已勾选的cid for (var i = 0; i < this.data.carts.length; i++) { if (this.data.carts[i].selected) { selectArr.push(this.data.carts[i].id) } } if (selectArr.length == 0) { wx.showToast({ title: '请选择要删除的商品!', duration: 2000 }); return false; } var selectStr = selectArr.join(','); //将数组转换成string串 that.removeShopCard(selectStr); }, //移至收藏 shouc: function () { var that = this; var selectArr = [] // 遍历取出已勾选的cid for (var i = 0; i < this.data.carts.length; i++) { if (this.data.carts[i].selected) { selectArr.push(this.data.carts[i].id) } } if (selectArr.length == 0) { wx.showToast({ title: '请选择要收藏的商品!', duration: 2000 }); return false; } var selectStr = selectArr.join(','); //将数组转换成string串 WXAPI.productToCollection({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, carts: selectStr, }).then(res => { // util.getUesrBgplus(that, app, false) if (res.code == 200) { wx.showToast({ title: '操作成功!', duration: 2000 }); that.loadProductData(); } else { wx.showToast({ title: '操作失败!', duration: 2000 }); } }); }, bindPlus: function (e) { var that = this; var index = parseInt(e.currentTarget.dataset.index); var num = that.data.carts[index].num; // 自增 num++; var stock = that.data.carts[index].stock; var cart_id = e.currentTarget.dataset.cartid; //编辑商品信息 var productArr = [{num: num,cart_id: cart_id}] let jsonstr = JSON.stringify(productArr) if (stock > num) { WXAPI.productUpNum({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, goods: jsonstr }).then(res => { if (res.code == 200) { // util.getUesrBgplus(that, app, false) // 只有大于一件的时候,才能normal状态,否则disable状态 var minusStatus = num <= 1 ? 'disabled' : 'normal'; // 购物车数据 var carts = that.data.carts; carts[index].num = num; // 按钮可用状态 var minusStatuses = that.data.minusStatuses; minusStatuses[index] = minusStatus; // 将数值与状态写回 that.setData({ minusStatuses: minusStatuses }); that.sum(); } }); } else { wx.showToast({ title: '库存不足!', icon: 'none', duration: 2000 }); } }, bindCheckbox: function (e) { /*绑定点击事件,将checkbox样式改变为选中与非选中*/ //拿到下标值,以在carts作遍历指示用 var index = parseInt(e.currentTarget.dataset.index); //原始的icon状态 var selected = this.data.carts[index].selected; var carts = this.data.carts; // 对勾选状态取反 carts[index].selected = !selected; // 写回经点击修改后的数组 this.setData({ carts: carts }); this.sum(); }, bindSelectAll: function () { // 环境中目前已选状态 var selectedAllStatus = this.data.selectedAllStatus; // 取反操作 selectedAllStatus = !selectedAllStatus; // 购物车数据,关键是处理selected值 var carts = this.data.carts; // 遍历 for (var i = 0; i < carts.length; i++) { carts[i].selected = selectedAllStatus; } this.setData({ selectedAllStatus: selectedAllStatus, carts: carts }); this.sum() }, bindCheckout: function () { var selectArr = [] // 遍历取出已勾选的cid for (var i = 0; i < this.data.carts.length; i++) { if (this.data.carts[i].selected) { selectArr.push(this.data.carts[i].id) } } if (selectArr.length == 0) { wx.showToast({ title: '请选择要结算的商品!', duration: 2000 }); return false; } var selectStr = selectArr.join(','); //将数组转换成string串 //存回data wx.navigateTo({ url: '../order/pay?cartId=' + selectStr + '&product=', }) }, bindToastChange: function () { this.setData({ toastHidden: true }); }, sum: function () { var that = this; var carts = that.data.carts; // 计算总金额 var total = 0; var selected = 0; for (var i = 0; i < carts.length; i++) { if (carts[i].selected) { total += carts[i].num * carts[i].price; selected = ++selected; } } //判断全选 if (carts.length == selected && selected != 0) { that.setData({ selectedAllStatus: true, }); } else { that.setData({ selectedAllStatus: false, }); } // 写回经点击修改后的数组 .toFixed(2)取小数点2位 this.setData({ carts: carts, total: '¥ ' + total.toFixed(2) }); }, onLoad: function (options) { // this.loadProductData(); // this.sum(); }, onShow: function () { this.loadProductData(); this.sum(); // var cont = this.data.cont; // var carts = this.data.carts; // var purchase = app.d.purchase; // var that = this; // if (cont > 1 && purchase == 1) { // that.loadProductData(); // } else { // that.setData({ // carts: carts, // cont: cont + 1 // }); // } }, removeShopCard: function (carts) { var that = this; wx.showModal({ title: '提示', content: '你确认要删除选中的商品吗', success: function (res) { res.confirm && WXAPI.productDelcart({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, cart_id: carts, }).then(res => { // util.getUesrBgplus(that, app, false) if (res.code == 200) { that.loadProductData(); } else { wx.showToast({ title: '操作失败!', duration: 2000 }); } }); }, fail: function () { // fail wx.showToast({ title: '网络异常!', duration: 2000 }); } }); }, // 数据加载 loadProductData: function () { var that = this; WXAPI.cartIndex({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, page: 1 }).then(res => { if (res.code == 200) { var data = res.data; // if (data.data == 0) { // return // } that.setData({ carts: data.data, selectedAllStatus: false, total: '¥0.00', remind: '', shop: data.mch_list[0], shop_logo: data.mch_list.length>0?'https://cz-hl-shop.oss-cn-shanghai.aliyuncs.com/239/1/20230227/'+data.mch_list[0].logo:'' }); } else { wx.showToast({ title: res.message, duration: 2000 }); } }); }, bindManual: function (e) { var num = e.detail.value; var carid = e.target.dataset.cartid; var carts = this.data.carts; var that = this; var index = parseInt(e.currentTarget.dataset.index); var cat_num = that.data.carts[index].num; var cart_id = e.currentTarget.dataset.cartid; var stock = that.data.carts[index].stock; // console.log(num, cat_num, stock) if (Number(num) > 0) { if (Number(num) <= Number(stock)) { //编辑商品信息 var productArr = [{num: num,cart_id: cart_id}] let jsonstr = JSON.stringify(productArr) WXAPI.productUpNum({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, goods: jsonstr }).then(res => { if (res.code == 200) { // 只有大于一件的时候,才能normal状态,否则disable状态 var minusStatus = num <= 1 ? 'disabled' : 'normal'; // 购物车数据 var carts = that.data.carts; carts[index].num = num; // 按钮可用状态 var minusStatuses = that.data.minusStatuses; minusStatuses[index] = minusStatus; // 将数值与状态写回 that.setData({ minusStatuses: minusStatuses }); that.sum(); } }); } else { wx.showToast({ title: '库存不足,请重新输入!', icon: 'none', duration: 2000 }); var carts = that.data.carts; that.setData({ carts: carts }); that.sum(); } } else { wx.showToast({ title: '数量不能小于1,请重新输入!', icon: 'none', duration: 2000 }); var carts = that.data.carts; that.setData({ carts: carts }); that.sum(); }; }, showAttribute: function(e) { var productId = e.currentTarget.dataset.id; var index = e.currentTarget.dataset.index; var that = this; that.loadProductDetail(productId); var animation = wx.createAnimation({ duration: 200, timingFunction: "linear", delay: 0 }); this.animation = animation animation.translateY(300).step(); this.setData({ // paytype: type, animationData: animation.export(), currentIndex: index }) if (e.currentTarget.dataset.status == 1) { this.setData({ showModalStatus: true }); } setTimeout(function () { animation.translateY(0).step() this.setData({ animationData: animation }) if (e.currentTarget.dataset.status == 0) { this.setData({ showModalStatus: false }); } }.bind(this), 200); }, // 商品详情数据获取 loadProductDetail: function (productId) { var that = this; WXAPI.productIndex({ // productAttribute accessId: app.globalData.accessId, storeId: 239, storeType: 1, pro_id: productId, // cart_id: productId }).then(res => { if (res.code == 200) { var data = res.data; var pro = data.pro; that.setData({ skuBeanList: data.skuBeanList, // itemData: pro, attrList: data.attrList, sizeid: data.attrList[0].attr[0].attrId, }); //默认选中 that.one(); } }); }, //首次进去选中 one: function () { var attrListIn = this.data.attrList; var skuBeanListIn = this.data.skuBeanList; var select_list = skuBeanListIn[0]; for (var i = 0; i < attrListIn.length; i++) { for (var j = 0; j < attrListIn[i].attr.length; j++) { for (var b = 0; b < select_list.attributes.length; b++) { if (select_list.attributes[b].attributeId == attrListIn[i].attr[j].attributeId && select_list.attributes[b].attributeValId == attrListIn[i].attr[j].id) { attrListIn[i].attr[j].select = true; } } } } var itemData = this.data.itemData; itemData.photo_x = select_list.imgurl; itemData.price_yh = select_list.price; itemData.num = select_list.count; var sizeid = select_list.cid; // 重新赋值 this.setData({ attrList: attrListIn, skuBeanList: skuBeanListIn, itemData: itemData, sizeid: sizeid, value: select_list.name }) this.onData(); }, // 弹窗 setModalStatus: function (e) { var animation = wx.createAnimation({ duration: 200, timingFunction: "linear", delay: 0 }); //定义点击的类型 var type = e.target.dataset.type ? e.target.dataset.type : false; //控制两种不同显示方式 if (type) { this.setData({ xefl: false, }) } else { this.setData({ xefl: true, }) type = this.data.paytype; } this.animation = animation animation.translateY(300).step(); this.setData({ paytype: type, animationData: animation.export() }) if (e.currentTarget.dataset.status == 1) { this.setData({ showModalStatus: true }); } setTimeout(function () { animation.translateY(0).step() this.setData({ animationData: animation }) if (e.currentTarget.dataset.status == 0) { this.setData({ showModalStatus: false }); } }.bind(this), 200) }, /** * 规格属性点击事件 */ onChangeShowState: function (event) { var that = this; var listItem = this.data.attrList; var items = listItem[event.currentTarget.dataset.idx]; var item = items.attr[event.currentTarget.dataset.index]; if (!item.enable) { return; } var select = !item.select; for (var i = 0; i < items.attr.length; i++) { items.attr[i].select = false; } item.select = select; // 获取点击属性列表 var canGetInfo = []; for (var skuIndex = 0; skuIndex < listItem.length; skuIndex++) { for (var skuIndexIn = 0; skuIndexIn < listItem[skuIndex].attr.length; skuIndexIn++) { if (listItem[skuIndex].attr[skuIndexIn].enable && listItem[skuIndex].attr[skuIndexIn].select) { canGetInfo.push(listItem[skuIndex].attr[skuIndexIn]); } } } var canGetInfoLog = ""; var skuBeanList = this.data.skuBeanList; var haveSkuBean = []; // 对应库存清单扫描 for (var skuBeanIndex = 0; skuBeanIndex < skuBeanList.length; skuBeanIndex++) { var iListCount = 0; for (var skuBeanIndexIn = 0; skuBeanIndexIn < skuBeanList[skuBeanIndex].attributes.length; skuBeanIndexIn++) { if (canGetInfo.length == skuBeanList[skuBeanIndex].attributes.length) { if (skuBeanList[skuBeanIndex].attributes[skuBeanIndexIn].attributeValId == canGetInfo[skuBeanIndexIn].id) { iListCount++; } } else { canGetInfoLog = "库存清单不存在此属性" + " "; } } if (iListCount == skuBeanList[skuBeanIndex].attributes.length) { haveSkuBean.push(skuBeanList[skuBeanIndex]); } } for (var iox = 0; iox < canGetInfo.length; iox++) { canGetInfoLog += canGetInfo[iox].attributeValue + " "; } if (haveSkuBean.length != 0) { //选中设置 var itemData = that.data.itemData; itemData.photo_x = haveSkuBean[0].imgurl; itemData.price_yh = haveSkuBean[0].price; itemData.num = haveSkuBean[0].count; var choujiangid = that.data.choujiangid; var sizeid = haveSkuBean[0].cid; that.setData({ itemData: itemData, sizeid: sizeid, choujiangid: choujiangid, value: canGetInfoLog }); } else { that.setData({ sizeid: '', value: '' }); } // 重新赋值 this.setData({ attrList: listItem, infoText: canGetInfoLog, }) // 重新sku运算 this.onData(); }, /** * Sku核心算法 * 根据所有出当前类别之外的选择 判断按钮的enable ? false or true */ onData: function () { var attrListIn = this.data.attrList; for (var i = 0; i < attrListIn.length; i++) { var attrListBig = attrListIn[i]; //当前类别之外的选择列表 var attrsOtherSelect = []; for (var j = 0; j < attrListIn.length; j++) { var attrListSmall = attrListIn[j]; if (attrListSmall.id != attrListBig.id) { for (var k = 0; k < attrListSmall.attr.length; k++) { var attrListSmallAttr = attrListSmall.attr[k]; if (attrListSmallAttr.enable && attrListSmallAttr.select) { attrsOtherSelect.push(attrListSmallAttr); } } } } var enableIds = []; var skuBeanListIn = this.data.skuBeanList; for (var z = 0; z < skuBeanListIn.length; z++) { var ism = true; var skuBean = skuBeanListIn[z]; for (var j = 0; j < attrsOtherSelect.length; j++) { var enable = false; for (var k = 0; k < skuBean.attributes.length; k++) { var goodAttrBean = skuBean.attributes[k]; if (attrsOtherSelect[j].attributeId == goodAttrBean.attributeId && attrsOtherSelect[j].id == goodAttrBean.attributeValId) { enable = true; break; } } ism = enable && ism; } if (ism) { for (var o = 0; o < skuBean.attributes.length; o++) { var goodAttrBean = skuBean.attributes[o]; if (attrListBig.id == goodAttrBean.attributeId) { enableIds.push(goodAttrBean.attributeValId); } } } } var integers = enableIds; for (var s = 0; s < attrListBig.attr.length; s++) { var attrItem = attrListBig.attr[s]; attrItem.enable = integers.indexOf(attrItem.id) != -1; } } // 重新赋值 this.setData({ attrList: attrListIn, skuBeanList: skuBeanListIn }) }, confirmAct: function (e) { var that = this; var carts = that.data.carts; var index = that.data.currentIndex; var cartId = carts[index].id; WXAPI.modifyAttribute({ accessId: app.globalData.accessId, storeId: 239, storeType: 1, cart_id: cartId, attribute_id: that.data.sizeid }).then(res => { if (res.code == 200) { that.setData({ showModalStatus: false }); that.loadProductData(); } }); }, })