// pages/user/cartlist/list.js const device = wx.getSystemInfoSync(), rect = wx.getMenuButtonBoundingClientRect(); // 获取设备信息 const ratio = 750 / device.windowWidth; console.log(rect) const width = device.windowWidth // 示例为一个与屏幕等宽的正方形裁剪框 let height = device.windowHeight; import commonApi from "../../utils/https/common" import util from '../../utils/util' let app = getApp() Page({ /** * 页面的初始数据 */ data: { menuWidth: width - rect.right + rect.width + 6, list: [], allChecked: false, allPrice: 0, productType: '', manageFlag: false, flag: false, //判断订单是否同时有商品和票 isCar: 'single', //判断是否购物车 showQrCode: false, wxqrcode: null, showModel:false }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { wx.removeStorageSync('linkMan') this.getList(); }, manage: function () { let list = this.data.list; list.map(item => { item.checked = 0; }) this.setData({ manageFlag: !this.data.manageFlag, allChecked: 0, list: list, allPrice: 0 }) }, gotoDetail: function (e) { console.log(e) let item = e.currentTarget.dataset.item.product; util.gotoDetail(item, 1); }, getList: function () { commonApi.user_post("cart/get_list", { // type: '1' }).then(res => { this.setData({ list: res.data }) }) }, minus: function (e) { let index = e.currentTarget.dataset.index, list = this.data.list; let num = list[index].num; if (num <= 1) return; num = num - 1; list[index].num = num; this.setData({ list: list }) this.changeNumber(list[index]) this.updatePrice() }, add: function (e) { let index = e.currentTarget.dataset.index, list = this.data.list; let num = list[index].num + 1; list[index].num = num; this.setData({ list: list }) this.changeNumber(list[index]) this.updatePrice() }, select: function (e) { let index = e.currentTarget.dataset.index, list = this.data.list; if (list[index].product.flag != 1 || list[index].sku.flag != 'on') { if (!this.data.manageFlag) { wx.showToast({ title: '产品已下架', icon: 'none' }) return; } } list[index].checked = list[index].checked ? false : true; this.setData({ list: list }) let flag = true list.forEach(item => { if (!item.checked) { flag = false return } }); this.setData({ allChecked: flag }) this.updatePrice() }, selectAll: function () { let list = this.data.list, allChecked = this.data.allChecked ? false : true; list.map(item => { if (item.sku.flag == 'on' && item.product.flag == 1) { item.checked = allChecked; } }) this.setData({ allChecked: allChecked, list: list }) this.updatePrice() }, changeNumber(item) { commonApi.user_post("cart/update_sku", { sku_id: item.sku.id, num: item.num }).then(res => { }) }, updatePrice: function () { let list = this.data.list, price = 0; list.map(item => { if (item.checked) { price = price + item.sku.price * item.num; } }) this.setData({ allPrice: price }) }, order: function () { commonApi.user_post('wx/get_user_keep', { jumpurl: '/pages/user/cartlist/list', title: '购物车', type: 'mini' }).then(res => { if (res.data.subscribe == 0) { this.setData({ wxqrcode: res.data.qrcode, showQrCode: true }) } else { app.globalData.couponInfo = null; util.pagePoint({ event: 'cart_order' }, 1) let list = this.data.list, price = 0, product = [], product1 = [] list.map(item => { if (item.checked) { // item.product.type="post"; if (item.product.type == 'post') { product.push({ product: item.product, sku: item.sku, productNum: item.num }) } else { product1.push(item) app.globalData.list = product1 } if (item.product.type.includes('post')) { this.data.productType = 'post' } } }) if (product.length == 0 && product1.length == 0) { wx.showToast({ title: '请先选择产品', icon: 'none' }) return; } if (product.length > 0 && product1.length > 0) { this.setData({ flag: 'mix', isCar: 'multiple' }) } if (product1.length > 1) { this.setData({ isCar: 'multiple' }) } else { this.setData({ isCar: 'single' }) } console.log(product1); app.globalData.postProduct = product; if (app.globalData.list) { app.globalData.product = app.globalData.list[app.globalData.index] } if (this.data.productType == 'post') { console.log(this.data.flag); wx.navigateTo({ url: '/pages/order/postOrder/index?from=cart&flag=' + this.data.flag, }) } else { wx.navigateTo({ url: '/pages/order/scene/index?isCar=' + this.data.isCar, }) } } }) }, checkOrder(){ console.log(this.data.list); let list = this.data.list,product = [] list.map(item => { if (item.checked) { product.push(item) } }) if (product.length>1) { this.setData({ showModel:true }) }else{ this.order() } }, closeModel(){ this.setData({ showModel:false }) }, touchStart(e) { //移动前点击的位置 console.log(e) // 在开始触摸时将所有startTouchMove设置为flase,对当前的为true this.data.list.forEach(cart => { if (cart.isTouchMove) //当istouchMove为true cart.isTouchMove = false; //其它的对象都为false }) this.setData({ startX: e.changedTouches[0].clientX, startY: e.changedTouches[0].clientY, list: this.data.list }) }, touchmove(e) { //移动的位置,用于计算用户滑动的弧度向左还是向右,移动了多少,可以确定删除功能的显示和隐藏 let index = e.currentTarget.dataset.index; // 获取开始的x,y坐标 let startX = this.data.startX, startY = this.data.startY; // 获取移动的x,x坐标 let touchMoveX = e.changedTouches[0].clientX, touchMoveY = e.changedTouches[0].clientY; // 调用计算角度的方法,获取角度 var angel = this.angel({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY }) // 遍历cartArray this.data.list.forEach((cart, i) => { cart.isTouchMove = false; // 滑动角度大于30,直接return 视为非滑动意思 if (Math.abs(angel) > 30) return; // 匹配当前所点击的list和滑动的list if (i == index) { // 匹配上后判断滑动方向 if (touchMoveX > startX) { //左滑动隐藏删除 cart.isTouchMove = false; } else { cart.isTouchMove = true; } } }) // 更新数据 this.setData({ list: this.data.list }) }, angel(start, end) { //计算滑动的角度 // console.log(start,end) // 移动坐标减去对应的开始坐标 var _X = end.X - start.X, _Y = end.Y - start.Y; // 返回角度 Math.atan() 返回数字的正切值 return 360 * Math.atan(_Y / _X) / (2 * Math.PI) }, del: function (e) { let index = e.currentTarget.dataset.index, list = this.data.list; commonApi.user_post("cart/del_sku", { sku_id: list[index].sku_id }).then(res => { if (res.code == 1) { wx.showToast({ title: '删除成功', icon: "success" }) list.splice(index, 1); this.setData({ list: list }) } }) }, delM() { let that = this let arr = this.data.list let suid = [] arr.forEach(item => { if (item.checked) { suid.push(item.sku_id) } }); let skuids = suid.join(',') wx.showModal({ title: '提示', content: '确定要删除选定的产品?', success: function (res) { if (res.confirm) { commonApi.user_post("cart/del_sku", { sku_id: skuids }).then(res => { if (res.code == 1) { wx.showToast({ title: '删除成功', icon: "success" }) that.getList(); } }) } else { console.log('取消') } } }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { util.pagePoint({ event: 'cart_view' }, 1) app.globalData.list = null app.globalData.createDate = null app.globalData.index = 0 app.globalData.productPrice = 0 app.globalData.ticketPrice = 0 this.data.productType = '' app.globalData.isCartBuy = false }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { } })